基于STM32与双路驱动模块的PID电机控制系统设计与实现

一、系统架构与核心组件选型

本方案采用分层架构设计,由控制核心、驱动模块、反馈单元和交互接口四部分构成。控制核心选用32位ARM Cortex-M3内核的STM32F103系列微控制器,其优势在于:

  • 72MHz主频满足实时控制需求
  • 集成多个高级定时器(TIM1/TIM2/TIM4)
  • 丰富的外设接口支持多路编码器接入

驱动模块选用双路H桥驱动芯片,具备以下特性:

  • 支持最高15V/3A持续输出
  • 内置死区时间控制防止直通
  • 独立的使能控制引脚
  • 低导通电阻(0.3Ω典型值)

反馈系统采用增量式光电编码器,提供AB相正交编码信号,每转可输出1000个脉冲,配合定时器的四倍频功能可实现4000PPR的分辨率。

二、硬件连接与电气设计

2.1 驱动模块接口配置

驱动模块与微控制器的连接需特别注意电源隔离和信号完整性:

  1. STM32引脚 驱动模块引脚 功能说明
  2. PA8(TIM1_CH1) PWMA 速度控制PWM输出
  3. PA9 AIN1 方向控制信号1
  4. PA10 AIN2 方向控制信号2
  5. PB0 STBY 使能控制(高有效)

电源设计采用双电源方案:

  • 逻辑电源:5V(与MCU共用)
  • 驱动电源:7.4V锂电池直接供电
  • 关键设计:在VM与GND之间并联1000μF电解电容和0.1μF陶瓷电容

2.2 编码器接口实现

编码器信号接入需配置定时器的编码器接口模式:

  1. STM32引脚 编码器信号 配置参数
  2. PA0(TIM2_CH1) A 输入捕获模式
  3. PA1(TIM2_CH2) B 输入捕获模式
  4. PB6(TIM4_CH1) 主电机A 输入捕获模式
  5. PB7(TIM4_CH2) 主电机B 输入捕获模式

硬件电路需添加RC滤波网络(10kΩ+10nF)抑制高频噪声,同时确保信号上升时间小于1μs。

2.3 用户交互接口设计

系统提供三组按键控制:

  1. STM32引脚 外设 功能
  2. PC13 模式按键 下拉输入,切换控制模式
  3. PC14 正转按键 下拉输入,设置正转方向
  4. PC15 反转按键 下拉输入,设置反转方向

按键消抖采用硬件RC滤波(10kΩ+0.1μF)结合软件延时(20ms)的复合方案。

三、软件架构与PID实现

3.1 系统软件框架

采用RTOS架构实现多任务管理:

  • 任务1:PWM生成(周期1ms)
  • 任务2:编码器数据采集(周期5ms)
  • 任务3:PID计算(周期10ms)
  • 任务4:串口通信(事件触发)

3.2 PID算法实现

位置式PID算法核心代码:

  1. typedef struct {
  2. float Kp, Ki, Kd;
  3. float integral;
  4. float prev_error;
  5. } PID_Controller;
  6. float PID_Calculate(PID_Controller* pid, float setpoint, float feedback) {
  7. float error = setpoint - feedback;
  8. pid->integral += error;
  9. float derivative = error - pid->prev_error;
  10. pid->prev_error = error;
  11. // 抗积分饱和处理
  12. if(pid->integral > MAX_INTEGRAL) pid->integral = MAX_INTEGRAL;
  13. if(pid->integral < MIN_INTEGRAL) pid->integral = MIN_INTEGRAL;
  14. return pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative;
  15. }

参数整定采用临界比例度法:

  1. 仅投入P环节,逐渐增大Kp直至系统等幅振荡
  2. 记录临界增益Ku和振荡周期Tu
  3. 按Ziegler-Nichols规则设置初始参数:
    • Kp = 0.6Ku
    • Ki = 2Kp/Tu
    • Kd = Kp*Tu/8

3.3 串级控制实现

针对需要精确位置控制的场景,采用速度-位置双环控制:

  1. 外环(位置环)输出 内环(速度环)设定值
  2. 内环输出 PWM占空比
  3. 采样周期:位置环50ms,速度环10ms

关键实现要点:

  • 内环采用增量式PID减少积分饱和影响
  • 外环输出限幅防止速度环超调
  • 动态调整内环参数适应不同负载

四、调试技巧与优化方法

4.1 硬件调试要点

  1. 电源完整性检查:

    • 使用示波器观察VM引脚纹波(应小于50mV)
    • 测量逻辑电源与驱动电源的隔离电阻(应大于1MΩ)
  2. 信号完整性验证:

    • 检查PWM信号边沿陡度(上升/下降时间<500ns)
    • 验证编码器信号相位差(严格90°±5°)

4.2 软件调试策略

  1. 分模块验证:

    • 先验证PWM输出功能
    • 单独测试编码器计数
    • 最后进行闭环控制测试
  2. 监控工具配置:

    • 使用逻辑分析仪捕获PWM和编码器信号
    • 通过串口输出实时数据到上位机
    • 示例数据格式:$POS,1234,SPD,456,PWM,789*

4.3 性能优化方向

  1. 计算效率提升:

    • 采用Q格式定点数运算替代浮点运算
    • 使用DMA进行编码器数据采集
  2. 动态响应优化:

    • 实现前馈补偿减少滞后
    • 添加加速度前馈改善轨迹跟踪
  3. 故障处理机制:

    • 过流保护(通过驱动模块FAULT引脚检测)
    • 堵转检测(编码器计数异常判断)
    • 看门狗定时器防止系统死锁

五、扩展应用场景

本方案可扩展应用于:

  1. 双轮差速驱动机器人:

    • 增加第二个驱动通道
    • 实现里程计计算
    • 添加PID参数在线调整接口
  2. 3D打印机挤出机控制:

    • 增加温度监测模块
    • 实现压力闭环控制
    • 添加挤出量补偿算法
  3. 自动化生产线输送系统:

    • 增加光电传感器接口
    • 实现多电机同步控制
    • 添加故障诊断与报警功能

通过合理的参数配置和系统优化,该方案在典型应用中可达到:

  • 位置控制精度:±0.1°
  • 速度响应带宽:20Hz
  • 稳态误差:<0.5%
  • 最大转速:3000RPM

实际部署时建议根据具体负载特性进行参数微调,并建立完善的测试用例库确保系统可靠性。