背景:
这一年在做开关磁阻电机项目,采用TMS320F28069芯片;近期开始启用看门狗模块。
分析:
程序跑飞后电机相绕组很可能无法正常关断、并持续导通,继而造成该导通相的功率开关管烧毁。为避免该现象的发生,需要及时复位已经跑飞的程序并且确保整个过程中开关管不被烧毁。而看门狗模块就可以起到复位程序的作用。
看门狗的原理是:其模块计数器WDCNTR不停地在自增,当自增到最大值溢出时就会复位DSP(程序自然就会重启),如果为了避免DSP复位,需要定期清零WDCNTR,清零的方式就是向WDKEY寄存器写入正确的数值;程序一旦跑飞而无法执行到WDKEY赋值语句,DSP就会在WDCNTR溢出时自动复位。这一过程就可以保证程序跑飞时可以被复位。
上一段中说的“定期”清零WDCNTR,比较理想的是在定时器中断函数中,以固定周期清零WDCNTR;但该方式存在缺陷,因为如果程序跑飞,主循环跑飞的可能性较大,中断函数跑飞的可能性很小;如果在中断函数中清零WDCNTR,很可能出现一种情况:程序主循环已经跑飞,中断函数却一直在正常执行并且定期清零WDCNTR,即主循环跑飞而无法及时复位。因此,主循环中必须插入WDCNTR清零的语句。
从主循环跑飞至看门狗复位DSP存在时间差,很可能程序跑飞后功率开关管因为长时间大电流导通而烧毁。而如果ADC中断函数中存在电流最大值限制功能,就可以较大程度保证功率开关管的安全。
为了保证ADC中断函数的正常执行,则需要在其跑飞后立即复位DSP。可以采用的方式有:启用PWM模块,在PWM中断函数函数中向看门狗的WDCR寄存器的WDCHK写入错误数值,即可立即复位DSP;而ADC中断函数中可以不断清零PWM模块的TBCTR寄存器以避免PWM中断函数的到来。
拙文抛砖引玉,欢迎交流。文中如有错误,也欢迎大家批评指正。
本文原创,转载请注明出处。
知乎、新浪微博、新浪博客同名。