项目场景:
通过AD2S1210解码芯片对旋转变压器进行硬解码与DSP28335通过SPI通信获得转子位置,实现闭环控制。
问题描述
电机手动转动时正常工作,实际整车工况调试时在高速旋转过程偶发性角度突变
main中接收数据代码:
int main()
{
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
AD2S1210_GPIO_Init();
Init_SPI();
EINT;
//初始化AD2S1210
AD2S1210_Init();
//硬件已固定分辨率为10位 设置控制寄存器与实际分辨率匹配
// WriteToAD2S1210(CONTROL, 0x7C);//10位分辨率 00
//设置激励频率 (晶振为8.192Mhz 分辨率为10位时 激励频率应该10Khz - 20Khz)
WriteToAD2S1210(EXFREQUENCY, 0x3C);// 15KHZ -->FCW=(15KHz * 2^15)/8.192MHZ =60 = 0x3C
//初始化AD2S1210
MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);
InitFlash();
while(1)
{
temp = ReadPosition();//读取转子角度
position = 5.3 * (temp * 1.0) / 60.0;//将角度由弧分转换为角度
delay(1);
}
}
原因分析:
因为获取角度在PWM中断中执行,初期调试时为了尽可能优化PWM中断服务函数的执行时间(留余量避免中断溢出),当时最初是严格按照手册上的时序配置能正常使用后来为了优化采用了SAMPLE下降沿后立马拉低CS和WR然后马上进行SPI数据读取的方式,手动调试时与按手册配置并无区别,然后实际工况就采用了时间较短的这版程序。
解决方案:
将程序严格按照时序图进行配置,这件事告诉我们这么一个道理,规格书上的要求一定有着它的道理,稍微好一点的芯片都是经过芯片厂自己完备的测试后输出的规格书,所以不要像我一下耍小聪明。好啦本文的分享就到这啦,谢谢大家的阅读!