使用lab05b想将电机转速通过CAN总线发出去,发送频率不用太大。
第一种方式,在while循环中实现,
while(enablesys)
{.............................
................................
ECanaMboxes.MBOX5.MDH.all = (uint16_t)(gMotorVars.Speed_krpm/16777.216);//发出电机转速(rpm)
ECanaRegs.CANTRS.bit.TRS5 = 1;
while(ECanaRegs.CANTA.bit.TA5 != 1);
ECanaRegs.CANTA.bit.TA5 = 1;
while(ECanaRegs.CANTA.bit.TA5 != 0);
for(delay=0;delay<500000;delay++);
.....................................................
}
CAN在发送一段时间后故障,故将发送程序移到中断函数中,如下。
2.将CAN发送的转速程序,放在lab05b的中断中,
interrupt void mainISR(void)
{
isr_cnt++;
//mailbox 5 transmit the message
if(isr_cnt%500 == 0)
{
ECanaMboxes.MBOX5.MDL.byte.BYTE0 = 0xff;
ECanaMboxes.MBOX5.MDL.byte.BYTE1 = gMotorVars.Flag_Run_Identify;
ECanaMboxes.MBOX5.MDL.byte.BYTE2 = 0x00
ECanaMboxes.MBOX5.MDL.byte.BYTE3 = 0x00;
ECanaMboxes.MBOX5.MDH.all = 0x00;
ECanaRegs.CANTRS.bit.TRS5 = 1;
while(ECanaRegs.CANTA.bit.TA5 != 1);
ECanaRegs.CANTA.bit.TA5 = 1;
while(ECanaRegs.CANTA.bit.TA5 != 0);
isr_cnt= 0;
}
这样写的程序,电机在高速运行下,中断为ADC触发,估计CAN发送程序影响到FOC算法执行。导致系统故障,自己做的板子上的MOSFET烧毁一个。
是否是CAN发送程序影响到FOC算法执行,导致程序出问题?
我是否应该自己写个定时器中断,专门用来CAN发送电机转速数据?
是否还有更好的方法?
希望得到TI工程师的回复,谢谢~