主题中讨论的其他器件:UCD3138、 UCD3138064
工具/软件:Code Composer Studio
早上好。
我想驱动 LLC。 在此应用程序中,我想使用 CPU 样本改变滤波器的输入, 因此 我在 频率可变的谐振模式下生成两个 DPWM。
在这里我的代码。
不管用
请帮助!!!
谢谢你
//######################################################################################################################
//
//文件:main.c
//
//标题:main
//
//注释:
// 1)
//######################################################################################################################
//
// Ver| dd mmm yyyy | WER |更改说明
//=== =================== =========== ================================================================================================
// 1.00 | 2015年5月5日| CH |
//
// Texas Instruments、Inc
//版权所有德州仪器2008。 保留所有权利。
//######################################################################################################################
#define main 1.
#include "system_defines.h"
#include "Cyclon_Device.h"
#include "PMBus_commands.h"
#include "PMBus_common.h"
#include "PMBus_topology.h"
#include "variables.h"
#include "functions.h"
#include "software_interrupts.h"
#include "cyclone_defination.h"
#include "stdio.h"
#define PCLK_PERIOD 4.0e-9 //时基以秒为单位
#define PERIOD_seconds 2.22e-6 // fmax = 450kHz
#define retard_seconds 100e-9 //配置模板 mort
#define 周期((int)(period_seconds/PCLK_period)<<4)//(从位4开始)
#define 延迟((int)(retard_seconds/PCLK_PERIOD)<<4)//(从位4开始)
#define EVENT1 (int)(周期*0.00)
#define EVENT2 (int)(周期*0.50)
#define EVENT3 (int)(周期*0.50)
#define EVENT4 (int)(周期*0.00)
int input_filene;// HyperKnob 的注释[min=0、max=1200、step=100]
/***** 配置 DPWM ******** /
void init_dpwm0 (void)
{
Dpwm0Regs.DPWMCTRL0.bit.PWM_EN = 1;// PWM_EN–PWM 处理使能
//0 =禁用 PWM 模块、输出为零(默认值)
// 1 =启用 PWM 操作
Dpwm0Regs.DPWMCTRL0.bit.CLA_EN = 1;// CLA 处理使能
//0 =从 PWM 寄存器值生成 PWM 波形(默认)
//1 =启用 CLA 输入
Dpwm0Regs.DPWMSAMPTRIG1.ALL =周期;//3/4周期
Dpwm0Regs.DPWMCTRL2.bit.sample_trig_1_EN = 1;//启用1个采样触发器
//谐振模式
Dpwm0Regs.DPWMCTRL0.bit.PWM_MODE = 1;//DPWM 模式
// 0 =正常模式
// 1 =谐振模式
// 2 =多输出模式
// 3 =三角模式
// 4 =前导模式
Dpwm0Regs.DPWMCTRL0.bit.reson_mode_fixed_Duty_EN =0;//配置在谐振模式下如何控制占空比
//0 =由滤波器占空比设置的谐振模式占空比(默认)
// 1 =由自动切换高电平寄存器设置的谐振模式占空比
Dpwm0Regs.DPWMCTRL0.bit.CBC_ADV_CNT_EN =0;//选择逐周期运行
//正常模式
// 0 = CBC 被禁用(默认)
// 1 = CBC 被启用
//多谐振模式和谐振模式
// 0 = PWM-A 和 PWM-B 独立运行(默认)
// 1 =启用 PWM-A 和 PWM-B 脉冲匹配
Dpwm0Regs.DPWMCTRL1.bit.HiRes_DIS = 0;//0 =启用高分辨率逻辑
Dpwm0Regs.DPWMCTRL1.bit.check_override = 1;//禁用数学检查,硬件中存在错误
Dpwm0Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1;//更新结束周期模式
// 0 =事件随时更新(默认)
// 1 =周期结束时更新的事件
Dpwm0Regs.DPWMCTRL2.bit.filter_Duty_SEL = 2;//–设置在中用于最大占空比计算的寄存器
//在重新开启和网格模式中进行过滤。
// 0 = PWM 周期寄存器(默认值)
// 1 =事件2
// 2 = PWM 周期调整寄存器(位13:0)
Dpwm0Regs.DPWMPHASETRIG.bit.PHASE_TRIGGER = 2;//相位触发=相位触发寄存器值或滤波器占空比
Dpwm0Regs.DPWMCTRL1.bit.global_Period_EN = 1;
Dpwm0Regs.DPWMCTRL0.bit.MSYNC_SLAVE_EN = 0;//0 = PWM 不同步到另一个 PWM 通道
LoopMuxRegs.DPWMMUX.bit.DPWM0_SYNC_SEL = 0;//0 = DPWM0与 DPWM0同步
Dpwm0Regs.DPWMPHASETRIG.ALL = 32;//128ns 相位延迟
Dpwm0Regs.DPWMEV1.ALL = EVENT1;//将事件1设置为周期的0%(开始)
Dpwm0Regs.DPWMEV2.all = EVENT2;//将事件2设置为周期的25%
Dpwm0Regs.DPWMEV3.ALL = EVENT3;//将事件3设置为周期的50%
Dpwm0Regs.DPWMEV4.ALL = EVENT4;//将事件4设置为周期的75%
Dpwm0Regs.DPWMPRD.All =周期;//对所有值使用.all,以便缩放匹配
Dpwm0Regs.DPWMRESDUTY.bit.谐 振占空比=(周期+1)>1;//控制 DPWM 占空比。 使用16位有符号数
//作为谐振模式下的滤波器输出乘法器。
Dpwm0Regs.DPWMCTRL0.bit.min_Duty_mode = 0;
// Dpwm0Regs.DPWMCTRL0.bit.CBC_PWM_AB_EN =1;//设置故障 CBC 是否改变 PWM-A 和 PWMB 的输出波形
//0 = PWM-A 和 PWM-B 不受故障 CBC 的影响(默认)
//1 = PWM-A 和 PWM-B 受故障 CBC 影响
//Dpwm0Regs.DPWMCTRL1.bit.CBC_BSIDE_ACTIVE_EN =1;//设置当 PWM-B 处于活动状态时 CBC 是否响应故障 CBC,
//仅在多模式和重新开启模式下可用
// 0 = PWM-A 激活时对故障 CBC 的响应(默认)
// 1 = PWM-A 或 PWM-B 激活时对故障 CBC 的响应
}
void init_filter0 (void)
{
// CPU 样本的特殊设置-除 P 以外的所有系数均为零
Filter0Regs.FILTERCTRL.bit.USE_CPU_SAMPLE = 1;//启用 CPU 样本
Filter0Regs.CPUXN.bit.CPU_SAMPLE = 64;//设置为1/4
Filter0Regs.FILTERKPCOEF0.bit.KP_COEF_0=1;// XN 值完全通过。
Filter0Regs.FILTERKICOEF0.bit.KI_COEF_0=1;
Filter0Regs.FILTERKDCOEF0.bit.KD_COEF_0=0;
Filter0Regs.FILTERKDALPHA.bit.KD_alpha_0=1;
Filter0Regs.FILTERKICLPHI.bit.KI_CLAMP 高电平= 0x7FFFFF;
Filter0Regs.FILTERKICLPLOL.bit.KI_CLAMP 低电平= 0;
Filter0Regs.FILTEROCLPHI.bit.output_CLAMP 高电平= 0x7FFFFF;
Filter0Regs.FILTEROCLPLO。bit.output_clamp 低电平= 0;
Filter0Regs.FILTERCTRL.bit.output_MULT_SEL = 3;//选择输出多路复用器并用于乘法
//过滤输出以计算 DPWM 占空比值
// 0 =从环路多路复用器模块接收到 KComp (默认)
// 1 =从环路多路复用器模块接收到的开关周期
// 2 =从环路多路复用器模块接收到的前馈值
// 3 =从 DPWM 模块接收到的谐振占空比值
Filter0Regs.FILTERCTRL.bit.PERIOD_MULT_SEL = 1;//选择输出多路复用器,用于与滤波器输出相乘
//计算谐振模式下的 DPWM 周期值
// 0 =从环路多路复用器模块接收到的开关周期(默认)
// 1 =从环路多路复用器模块接收到 KComp
Filter0Regs.FILTERCTRL.bit.output_scale = 0;//无移位
Filter0Regs.FILTERCTRL.bit.FILTER_EN = 1;
}
void init_loop_mux (void)
{
LoopMuxRegs.SAMPTRIGCTRL.bit.FE0_TRIG_DPWM0_EN = 1;//使用 DPWM0进行滤波器0采样触发
//DPWM-0连接到滤波器以实现谐振占空比
LoopMuxRegs.FILTERMUX.bit.FILTER0_PER_SEL = 0;//为滤波器0选择开关周期周期源
//模块
//0 = DPWM 0开关周期(默认)
//1 = DPWM 1开关周期
//2 = DPWM 2开关周期
LoopMuxRegs.FILTERKCOMPA.bit.KCOMP0 =周期;//3 = DPWM 3开关周期
//Use value in KCOMP-0 register (使用 KCOMP-0寄存器中的值)
LoopMuxRegs.FILTERMUX.BILTER0_KCOMP_SEL = 0;
//Connect filter-0至 DPWM-0
LoopMuxRegs.DPWMMUX.bit.DPWM0_FILTER_SEL = 0;//为选择占空比源/谐振周期
//DPWM 模块0
//0 =选择滤波器0输出(默认)
//1 =选择滤波器1输出
//2 =选择滤波器2输出
//3 =选择恒定功率模块
//4 =来自轻负载控制寄存器的 DPWM_ON_TIME 值
LoopMuxRegs.LLENTHRESH.bit.cycle_CNT_THRESH = 0;//
}
void global_enable (void)
{
UNION GLBEN_REG glben_store;//收集全局使能位以供同步使用
glben_store.all = 0;
glben_store.bit.DPWM0_EN = 1;
glben_store.bit.FE_CTRL0_EN = 1;
LoopMuxRegs.GLBEN = glben_store;
}
void main()
{
//启用 JTAG
杂项 AnalogRegs.IOMUX.ALL = 0;
///-------------------------------------------------------
//重要:阅读下面的内容,否则代码可能无法正确执行
///-------------------------------------------------------
//将引脚 FAULT3接地以实现正常运行
//将引脚 FAULT3连接到3.3V 以清除校验和
if (GioRegs.FAULTIN.bit.FLT3_IN = 0)
{
clear_integration_word_();
}
#IF (UCD3138|UCD3138064)
杂项 AnalogRegs.CLKTRIM.bit.HFO_LN_FILTER_EN = 0;
杂散 AnalogRegs.CSTRIM.bit.ITARM_TRIM =23;//28;
#endif
input_filtere= Filter0Regs.CPUXN.bit.cpu_sample;//初始化 HyperKnob
init_dpwm0();
init_filter0();
init_loop_mux();
INIT_PMBus (0x58);
global_enable();
for (;;)
{
PMBus_handler ();
Filter0Regs.CPUXN.bit.cpu_sample = input_filtere;//将 HyperKnob 值放入寄存器中
}
}
//#pragma 中断(c_int00、复位)
void c_int00 (void)
{
main();
}