恭喜你们,碰到了问题

卓老师,我们直立出现了差角稍微一大电机转速一块就不转了,此时单片机pwm输出不对,没有压差,互补滤波计算的角度就变成了NAN。陀螺仪采值以及积分后的角度都是对的。

(1)如果关掉电机不管角度多大,计算的角度都对,单片机输出pwm也对;(2)如果不进行计算,只在while循环里给电机pwm,不管多高,都可以正常转。


想问一下这可能是什么问题?



回复:这种情况可能包括但不限于以下原因:


首先你们需要分清这种现象是硬件引起的程序复位(走飞),还是软件计算出现异常; 


其次,如果已经定位互补滤波器输出NAN,那么就需要清楚为何产生的?本质上讲没有出现除以0,或者复数开根号是不会出现NAN。


如果逻辑上无法判断,则需要检查程序代码的安全性,包括指针,数组,堆栈的安全性是否造成数据的损毁; 


对于这方面还需要检测中断服务过程是否会出现竞争现象以及时间负载饱和; 




程序很简单,只有5ms中断采值及角度计算,函数很简单,不可能超过5ms。计算没有除0情况。电机不转后while循环里的显示屏显示函数也是对的,软件逻辑没有问题,不知道为什么会出现NAN。硬件不知道该找什么问题,也用过磁珠隔离,磁珠换了还是没解决。


首先进入以下但不限于以下这些情况的确认和检查:

  1. 你们在什么情况下探测到的NAN,是单精度还是双精度?

  2. 是否确认NAN与电机停转之间是因果关系还是相关关系还是偶然概率关系?

  3. 在调解中是否所有的PID环节都做了饱和处理和饱和分离?

  4. 建议先将直立控制参数的P,D从0 开始慢慢调上去,看现象是否与参数有关系;

  5. 确认你们理解了程序的原理和每一行代码,并进行梳理一下下。



变量是float型。只要电机停转就会变成NAN,在线调试的时候看到的。


我还是不是很理解,在什么情况下变量会变成NAN,我们除法运算,除数是一个定值,不可能出现除数为零的时候。


float变成NAN表明浮点数格式不满足IEEE32单精度格式。通常是由错误的运算结果,或者被异常的指针访问了。也有可能是由于调试,干扰影响等使得MCU内部的寄存器或者RAM出现异常。




不打开电机变量一直正常,电机停转后,即使关掉电机也不对。因为只要不开电机无论车什么姿态变量都正常,所以我觉得不是算法问题。但不知道硬件该找什么问题。


对于硬件查找,如果在当前情况下没有思路的时候,就采用还原方法:即将硬件和软件还原到最初的调试状态,从最初的模块开始挑起,看在什么阶段出现了现在的问题,进而去判断问题来源。



虽然这个方法比二分错误定位法慢一些,但是是最可靠有效的方法。



如果打开电机才出现这个问题,因此可以猜想这个问题可能来自于电机运行所带来的:

1)电池电压波动引起的MCU复位或者内部干扰;

 2)电机转动的电磁干扰引入调试结构所产生硬件问题;

 3)电机转动使得速度传感器所产速度脉冲引起内部软件紊乱;

 4)电机转动引起车体摆动所带来的姿态传感器波动; 


建议将直立PID参数从0开始调整,这样可以有效降低上面所说的波动对于硬件和软件的影响,看是否可以逐步发现问题。这个称之为还原调试方法




除了软件调整降低波动,硬件上有没有什么方法可以降低干扰呢?


降低干扰的方法很多,你网络上一搜寻到处都是。你先捡你能够理解的,能够实现的试试吧。


比如先对于能够产生干扰比较大的电机功率电源进行单点接地;电机引脚对机壳之间去火花电容;对于电源增加高频去耦合滤波器;对于单片机所有输入输出关键增加去耦合和阻抗匹配的RC网络等等。


好的,谢谢您。




工程问题中的BUG,与理论分析不同就在于,同样的一个结果所对应的可能性非常多,而不像理论上那么简单。因此学会从BUG的现象通过分析、实验、对比等进行软硬件调试,逐步培养起在此过程一些正确的方法,编写 一些使用的调试工具,总结出一些经验正是这在工程竞赛活动的本质。


如果从别人已经DEBUG好了的程序出发,没有碰到困难,犯过任何错,实际上是没有得到提高的。只是虚幻,仿佛掌握了某个技术,说到底,工程实践能力没有提高。


因此祝贺你们现在所碰到的问题,它给出了一个挑战,在此基础的完成这些问题的分析和解决正式你们重新审视自己是否对车模中的软件件真正掌握了的一个机会。我无法猜到现在你们车模具体的情况,但也很好奇想知道最终你们解决的方法。


参加智能汽车竞赛的同学们,你们是否在调试中也遇到过类似的场景?如果遇到了,就请将你们找到的与原因和解决的办法在推文的“留言”给出吧。




“教育一直无法回避的矛盾是:用过去的知识教现在的人去解决未来的问题,那么是什么值得我托付去让它陪伴我的学生拥有勇气去面对未来?我想是洞察事物根源,知行合一的品质和开满鲜花的情怀

            空军航空大学教师  高凌


注:文中的插图来自海军工程大学陈少昌教授在美篇中的插图