This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F280049C: CMPSS用作CBC功能时相关配置的疑问

Part Number: TMS320F280049C
Other Parts Discussed in Thread: C2000WARE

最近正在调试CBC功能,写完相关代码后发现CMPSS第一步输出CTRIPH/L就有问题。

重新理了一下相关思路:

电感电流采样为A9,根据Datasheet表,A9是连到CMPSS6的,且HPMXSEL = 3,LPMXSEL = 3(采用内部DAC,HN/LN不配置)

最后使用CTRIPH/L 传递到EPWM X-BAR的TRIP5去触发CBC。

但是现在先不管后面X-BAR 还有TZ模块的cbc配置是否正确,当A9的电压超过设定的DACVALUE时 CTRIPH和CTRIPL电平似乎都没有发生变化。

下面是我相关CMPSS的相关代码,想请TI的工程师看看是否是哪里配置错误了。

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#define PFC_CBC_VALUE 7.0f
#define CMPSS_CBC_DACVALUE (PFC_CBC_VALUE / HDL_ADC_DtoReal_IAC)
#define CMPSS_FILTER_PRESCALE 1
#define CMPSS_FILTER_SAMPLE_WINDOW 9
#define CMPSS_FILTER_THRESH 5
#define CMPHP6_MUX CMPX_HP3 // IPFC1
#define CMPLP6_MUX CMPX_LP3 // IPFC1
void HAL_CMPSS_Configure(void)
{
AnalogIO_Init();
CMPSS_HCFG_CBC(CMPSS6_BASE, CMPSS_CBC_DACVALUE + 2048u);
CMPSS_LCFG_CBC(CMPSS6_BASE, 2048u - CMPSS_CBC_DACVALUE);
}
void AnalogIO_Init(void)
{
ASysCtl_selectCMPHPMux(ASYSCTL_CMPHPMUX_SELECT_6, CMPHP6_MUX);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

对应驱动是EPWM5,所以用RAMP 寄存器那里用的EPWM5SYNCPER,其他几个参数不知道有什么用,看cmpss的工作逻辑图,如果是读取DACxVALS的值,应该和RAMP的大部分值没关系,还有那个迟滞寄存器,暂时好像也没用到。

按照上面的配置,应该可以实现,当A9的AD值大于DACxVALS的值时,输出的CTRIPH/L变为高电平吧。

我在adc中断(20k)里去判断(pwm频率也为20k),相关输出是否有置位,实际DebugVar5变量并未变化(我设的峰值电流7A触发,到快15A了也没看到变化)。

Fullscreen
1
2
3
4
if (CMPSS_getStatus(CMPSS6_BASE) != 0)
{
SvcOBC.SwDebug.DebugVar5++;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

是我的验证方法不对么?还是配置哪里有问题?

顺便再贴一下X-BAR模块和TZ模块的配置代码

Fullscreen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
static void HAL_PWM_Configure_XBAR(void)
{
// XBAR_lockEPWM();
// link cmpss CTRIPH/L to EPWM-XBAR TRIP5, then config EPWM TZ module to link trip5 to EPWM
XBAR_setEPWMMuxConfig(XBAR_TRIP5, XBAR_EPWM_MUX10_CMPSS6_CTRIPH);
XBAR_setEPWMMuxConfig(XBAR_TRIP5, XBAR_EPWM_MUX11_CMPSS6_CTRIPL);
// not inverted
XBAR_invertEPWMSignal(XBAR_TRIP5,0);
// enable cbc mux
XBAR_enableEPWMMux(XBAR_TRIP5,XBAR_MUX10|XBAR_MUX11|XBAR_MUX12|XBAR_MUX13);
// need to clear all xbarflags
XBAR_clearInputFlag(XBAR_INPUT_FLG_CMPSS6_CTRIPL);
XBAR_clearInputFlag(XBAR_INPUT_FLG_CMPSS6_CTRIPH);
}
static void HAL_PWM_Configure_DC(void)
{
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX