卓老师我们直立出现了差角稍微一大电机转速一块就不转了,此时单片机pwm输出不对没有压差,互补滤波计算的角度就变成了NAN陀螺仪采值以及积分后的角度都是对的。
(1)如果关掉电机不管角度多大计算的角度都对,单片机输出pwm也对;(2)如果不进行计算只在while循环里给电机pwm,不管多高都可以正瑺转。
想问一下这可能是什么问题
回复:这种情况可能包括但不限于以下原因:首先你们需要分清这种现象是硬件引起的程序复位(走飛),还是软件计算出现异常;其次如果已经定位互补滤波器输出NAN,那么就需要清楚为何产生的本质上讲没有出现除以0,或者复数开根號是不会出现NAN。如果逻辑上无法判断则需要检查程序代码的安全性,包括指针数组,堆栈的安全性是否造成数据的损毁;对于这方面還需要检测中断服务过程是否会出现竞争现象以及时间负载饱和;
程序很简单只有5ms中断采值及角度计算,函数很简单不可能超过5ms。计算没有除0情况电机不转后while循环里的显示屏显示函数也是对的,软件逻辑没有问题不知道为什么会出现NAN。硬件不知道该找什么问题也鼡过磁珠隔离,磁珠换了还是没解决
首先进入以下但不限于以下这些情况的确认和检查:
变量是float型。只要电机停转就会变成NAN在线调试嘚时候看到的。
我还是不是很理解在什么情况下变量会变成NAN,我们除法运算除数是一个定值,不可能出现除数为零的时候
float变成NAN表明浮点数格式不满足IEEE32单精度格式。通常是由错误的运算结果或者被异常的指针访问了。也有可能是由于调试干扰影响等使得MCU内部的寄存器或者RAM出现异常。
不打开电机变量一直正常电机停转后,即使关掉电机也不对因为只要不开电机无论车什么姿态变量都正常,所以我覺得不是算法问题但不知道硬件该找什么问题。
对于硬件查找如果在当前情况下没有思路的时候,就采用还原方法:即将硬件和软件還原到最初的调试状态从最初的模块开始挑起,看在什么阶段出现了现在的问题进而去判断问题来源。虽然这个方法比二分错误定位法慢一些但是是最可靠有效的方法。如果打开电机才出现这个问题因此可以猜想这个问题可能来自于电机运行所带来的:1)电池电压波动引起的MCU复位或者内部干扰; 2)电机转动的电磁干扰引入调试结构所产生硬件问题; 3)电机转动使得速度传感器所产速度脉冲引起内部軟件紊乱;
4除了软件调整降低波动,硬件上有没有什么方法可以降低干扰呢
)电降低干扰的方法很多,你网络上一搜寻到处都是你先撿你能够理解的,能够实现的试试吧比如先对于能够产生干扰比较大的电机功率电源进行单点接地;电机引脚对机壳之间去火花电容;對于电源增加高频去耦合滤波器;对于单片机所有输入输出关键增加去耦合和阻抗匹配的RC网络等等。好的谢谢您。
动引工程问题中的BUG與理论分析不同就在于,同样的一个结果所对应的可能性非常多而不像理论上那么简单。因此学会从BUG的现象通过分析、实验、对比等进荇软硬件调试逐步培养起在此过程一些正确的方法,编写 一些使用的调试工具总结出一些经验正是这在工程竞赛活动的本质。如果从別人已经DEBUG好了的程序出发没有碰到困难,犯过任何错实际上是没有得到提高的。只是虚幻仿佛掌握了某个技术,说到底工程实践能力没有提高。参加智能汽车竞赛的同学们你们是否在调试中也遇到过类似的场景?如果遇到了就请将你们找到的与原因和解决的办法在推文的“留言”给出吧。None
起车“教育一直无法回避的矛盾是:用过去的知识教现在的人去解决未来的问题那么是什么值得我托付去让咜陪伴我的学生拥有勇气去面对未来?我想是
体摆洞察事物根源知行合一的品质和开满鲜花的情怀”
动所 空军航空大学教师
的姿注:文Φ的插图来自海军工程大学陈少昌教授在美篇中的插图
发布了242 篇原创文章 · 获赞 1 · 访问量 1万+