标题:TMS320F28377D使用sysconfig配置ADC的PPB中断
现在在做永磁同步电机的项目,使用在机械臂上,因为使用的是一个恒压源供电,在负载工作时可能会有堵转的风险,所以应该检测三项逆变桥的母线电流,当电流达到一定值时(堵转)需要立刻停止电机工作,在查询资料后发现DSP的芯片设计的有该功能,即ADC的PPB(Post Processing Blocks Configurations,后处理模块)模块。
第一章:关于PPB的介绍
可以参考博客:TMS320F28388D 学习笔记3 ADC后处理块(Post-Processing Blocks)
简单的说就时,PPB模块支持以下功能
1:在减小软件开销的情况下对ADC的误差进行校正,(后面会介绍在哪里配置)
2:在ADC大于某一值或者小于某一值的时候触发中断,同时可以改变PWM的值,(这是本博客重点关注的配置)
第二章:使用Sysconfig配置多路ADC,(EPWM触发)
本章节配置主要参考博客:10DSP学习-利用syscfg配置ADC,并使用EPWM触发转换
ADC的触发源有软件触发,EPWM触发,定时器触发,之所以选择EPWM触发,是因为在FOC算法里,在每次EPWM设置完成后,我们都应该检测电流,从而通过PID计算下次EPWM的值
2.1:sysconfig的配置
2.1.1ADC部分的配置
我的ADC配置如下
SOC1通道配置为
其他路也是如此,引脚ADCINx对应通道SOCx,均为EPWM1A配置
注:值得注意的是采样窗时间应该与你的RC滤波电路的时间常数相对应,因为28377没有在每次采样自动泄放采样电容的功能,所以采样窗太小,与外部RC滤波电路时间常数不匹配时,会引入混叠。并且这个混叠不能通过PPB给误差去掉,因为我实测混叠只在ADC采样值较大时产生,并对其他路ADC结果有不确定的影响。
2.1.2:PPB的配置
2.2:EPWM的配置
因为ADC是EPWM触发,所以EPWM需要做以下配置
2.3:ADC中断函数
__interrupt void INT_MyADC_EVT_ISR(void)
{
OLED_ShowString(3,1,"ADC ERR");
EPWM_setCounterCompareValue(MyEPWM1_BASE, EPWM_COUNTER_COMPARE_A,0);
EPWM_setCounterCompareValue(MyEPWM2_BASE, EPWM_COUNTER_COMPARE_A,0);
EPWM_setCounterCompareValue(MyEPWM4_BASE, EPWM_COUNTER_COMPARE_A,0);
Interrupt_clearACKGroup(INT_MyADC_EVT_INTERRUPT_ACK_GROUP);
}
在识别到母线电流值大于一定的值时,设置三路EPWM为0,将逆变桥的上桥臂关闭,此时下桥臂为开启状态,但是不会形成电流回路,后面还会更新将两个桥臂都关闭的代码。