ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

电机控制算法原理详解

电机控制算法原理详解 一、S 曲线加减速运动规划层为什么需要步进电机启动瞬间若速度突变需要的加速力矩可能超过电机牵入力矩 → **失步**。所以运动前先规划速度轨迹。梯形 vs S 曲线速度│ ┌───────┐ │ ╭───────╮│ ╱ ╲ │ ╱ ╲│ ╱ ╲ │ ╱ ╲│─────╱ ╲──── │────╱ ╲────└──────────────────────→ └──────────────────────→梯形(加速度突变) S形(加速度连续)| | 梯形 | S 曲线 ||---|---|---|| 加速度 | 阶跃突变冲击 | 连续变化柔顺 || 失步风险 | 高起步冲击大 | 低 || 机械冲击 | 大 | 小 || 计算量 | 小 | 大需要曲线表 |sigmoid 数学deno 1/(1e^(−flexible×(2i/len−1))) /* flexible3, i第几步, len加速段步数 */fre(i) fre_min (fre_max−fre_min)×deno归一化period[i] 32MHz / fre(i) /* 每步的定时器周期 */- **flexible**S 的陡峭程度越大越接近梯形- 每步周期存表Motor_ACC_time[3000]运行时 TIM6 查表变速本项目实现要点SCurve_Start(total): 生成表 → 距离保护(总步数2×len时压缩加速段) → 启动TIM6SCurve_Tick(): 加速查表插值 → 匀速锁哨兵 → 减速倒查 → 到位停表二、PID 位置环闭环纠偏层### 三项作用| 项 | 公式 | 作用 | 调大后果 ||----|---------|----------------------------------------|---------------------|| P | kp×e | 误差→修正量立竿见影 | 响应快但抖振 || I | Σki×e | 消除稳态误差持续偏差 | 积分饱和过冲 || D | kd×Δe | 阻尼、抑振预测趋势 | 放大噪声 |本项目实现Motor_StepPulse 闭环分支e expect - yw; /* 期望 - 编码器实际 */if (e 1638) e 1638; /* 限幅±20整步 */iterm ki*e/32; if (itermUMAXSUM) itermUMAXSUM; /* 积分饱和 */dterm LPFA*dterm/128 - LPFB*kd*(yw-yw_1)/8; /* 微分低通 */corr (kp*e iterm dterm)/128; /* 输出角度修正 */if (corr corr_limit) corr corr_limit; /* 修正角限幅±1整步 */**三层保护**e 限幅 → 积分饱和 → 修正角限幅详见《PID微分项低通滤波说明》《步进电机控制原理》。三、前馈速度补偿advance (yw - yw_1) × 3 /* 用编码器位移估算速度 */theta expect corr advance**作用**高速时转子磁场滞后矩角减小→掉力矩让电流矢量角超前一个与速度成正比的量把滞后的矩角补回来→ 高速保持力矩、不易失步。**注意**前馈是开环补偿不加反馈超前过大90° 电角度反而力矩反向。四、定点运算嵌入式实现技巧MCU 无硬件浮点Cortex-M0全程定点| 技巧 | 本项目例子 ||-------------------------|----------------------------------------------------------------------------------------------|| **查表代替计算** | 正弦表 sin_1[4096]×1024 定点S 曲线表 Motor_ACC_time[] || **定点缩放** | 正弦表 ×1024 存、÷1024 还原PID ÷128 || **限幅** | e/iterm/corr 三层限幅防溢出和失控 || **int64 中间量** | (int64_t)stepnumber×8192/micro_step/100 防乘法溢出 |五、总结**控制算法四件套 S 曲线防失步的轨迹规划 PID失步后的闭环纠偏 前馈高速掉力矩补偿 定点无浮点 MCU 的实现技巧**——本项目把它们全部落在了 s_curve.c规划和 motor_ctrl.c执行/纠偏里。
返回列表