128、运动控制中的软件架构:状态机设计
128、运动控制中的软件架构:状态机设计
从一次电机“鬼畜”说起
去年调试一个六轴机械臂的轨迹规划,上位机发来一条“MoveL”指令,电机本该平滑走直线,结果在某个中间点突然抽搐——速度跳变、电流飙升,像被电击了一样。我盯着逻辑分析仪的波形看了三个小时,最后发现是状态机里一个“空闲态”到“运动态”的转换条件写错了:位置误差阈值设得太小,导致状态在“到位”和“运动中”之间来回震荡,每震荡一次就重新触发一次速度规划。
那次之后我彻底明白:运动控制软件的核心骨架,就是状态机。算法再漂亮,状态机写成一坨屎,电机照样给你表演“抽搐舞”。
状态机不是if-else堆砌
很多新手写运动控制,上来就是:
if(cmd==MOVE){// 执行运动}else