摘要:本文设计并实现了一套基于STM32F103C8T6微控制器的直流电机串级PID伺服控制系统。该系统采用TB6612FNG驱动芯片控制带霍尔编码器的直流减速电机,通过位置-速度双闭环串级控制架构,实现了对电机位置和速度的高精度、快速响应控制。
项目简介
本项目基于STM32F103C8T6微控制器实现了一套高性能直流电机伺服控制系统,采用TB6612FNG驱动芯片和带霍尔编码器的直流减速电机,通过位置-速度双闭环串级PID控制架构,实现了对电机位置和速度的精确控制。系统软件采用分层模块化设计,控制核心在10ms定时器中断中执行,外环位置控制器(PD)输出目标速度,内环速度控制器(PI)快速跟踪并抑制扰动,配合VOFA+上位机实现实时数据可视化和参数整定,最终实现了快速响应、无超调的精确定位控制,为移动机器人和机械臂等应用提供了可靠的底层伺服驱动方案。

图1 系统架构图
核心技术
串级PID双闭环控制架构
系统采用位置-速度串级PID控制架构,外环位置控制器采用PD控制(Kp=0.5, Kd=0.1),根据位置误差计算目标速度,微分项的引入有 效抑制了系统惯性导致的过冲问题,实现无超调精确定位。内环速度控制器采用PI控制(Kp=8.5, Ki=0.75, Kd=0.012),快速跟踪外环给定的目标速度并消除稳态误差,同时有效抑制负载扰动。算法实现了独立的积分限幅机制,防止积分饱和 ,并对输出进行限幅保护,保证系统稳定运行。
高精度编码器反馈与实时控制
编码器反馈采用STM32硬件正交解码模式,利用定时器的编码器接口自动计数,经4倍频和30倍减速比放大后,分辨率达到1320脉冲/圈。软件层面实现了16位计数器的溢出检测与处理,通过判断计数差值并进行补偿,确保位置累计的准确性。速度测量采用M法测速,在10ms采样周期内计算脉冲增量,并通过一阶低通滤波器(α=0.8)对速度信号进行滤波,有效抑制测量噪声。整个控制闭环在TIM4定时器中断中以10ms固定周期执行,保证了控制的高实时性和确定性。
分层模块化软件架构
系统软件采用分层模块化设计思想,自底向上划分为板级支持包(BSP)、驱动层(motor)、算法层(PID)、控制层(controller)和应用层(main)五个层次。BSP层负责硬件外设初始化,驱动层封装电机的PWM控制、方向设置和速度反馈,算法层实现通用PID控制器,控制层整合串级控制逻辑,应用层仅负责高层调度。各模块职责清晰、接口明确,硬件抽象与算法实现解耦,提高了代码的可读性、可维护性和可移植性。通信层(vofa)实现FireWater协议,支持VOFA+上位机实时数据可视化和参数在线整定。
硬件配置
主控芯片
微控制器(MCU):STM32F103C8T6主控制器,负责所有运算和控制逻辑
电机驱动
TB6612FNG:H桥驱动,为电机提供动力
直流减速电机
MD520Z30_12V:执行器,带增量式霍尔编码器。
编码器
11线霍尔编码器:经减速和4倍频后,1320脉冲/圈。
接线说明
电源系统:系统采用双电源供电方案,12V直流电源通过TB6612的VM引脚为电机提供驱动电源,STM32的3.3V输出为TB6612的VCC和STBY引脚供电,提供逻辑控制电平和芯片使能信号。STM32与TB6612必须共地连接,确保逻辑电平参考一致,避免控制信号异常。这种电源隔离设计既保证了电机驱动的大功率需求,又保护了微控制器免受电机噪声干扰。
电机控制与反馈:STM32通过PA0引脚(TIM2_CH1)输出PWM信号连接TB6612的PWMA引脚,实现电机速度调节,PWM频率为1kHz,占空比范围0-100%。PB0和PB1引脚分别连接TB6612的AIN1和AIN2,通过高低电平组合控制电机正反转和制动状态。电机编码器的A、B两相信号接入STM32的PA6和PA7引脚(TIM3_CH1/CH2),利用定时器硬件正交解码功能实现4倍频计数,配合30倍减速比,最终达到1320脉冲/圈的高分辨率位置反馈。
系统通信:STM32的PA9和PA10引脚配置为USART1的TX和RX,通过USB转TTL模块与PC端建立串口通信,波特率设置为115200bps。该通信链路用于实现VOFA+上位机的实时数据可视化,采用FireWater协议传输电机的速度、位置、目标值等控制参数,支持PID参数在线整定和系统性能监测。通信模块在控制中断中每50ms发送一次数据包,包含5个浮点数据,确保上位机能够实时观察系统的动态响应过程。

图2 电机控制系统接线示意图
软件架构
系统架构图

图3 软件架构图
编译与运行
开发环境
本项目使用Keil MDK-ARM v5集成开发环境,采用ARM Compiler v5/v6编译器进行代码编译,通过ST-Link V2调试器实现程序下载与在线调试,并配合VOFA+上位机软件(https://www.vofa.plus/)实现实时数据可视化和PID参数在线整定。
编译步骤
打开MDK-ARM目录下的.uvprojx工程文件,选择目标芯片STM32F103C8T6并设置优化等级为-O1或-O2,按F7键执行完整编译后,在MDK-ARM\Objects目录下自动生成可用于下载的.hex固件文件。

图3 编译成功
下载程序
使用ST-Link连接STM32开发板的SWDIO、SWCLK、GND和3.3V引脚,在Keil中配置Flash Tools选择ST-Link Debugger并确认检测到芯片后,按F8键即可将编译好的程序下载到STM32F103C8T6微控制器中
运行调试
硬件连接与系统启动:按照接线说明完成所有硬件连接,特别注意TB6612的STBY引脚必须接3.3V高电平以使能驱动芯片,确保12V电源为电机供电、5V电源为编码器供电、所有模块共地连接。系统上电后程序自动运行,电机将按照预设目标位置(6600脉冲,即5圈)开始运动,通过编码器实时反馈位置和速度信息。
上位机数据监控:下载并安装VOFA+软件,打开后选择对应串口并配置波特率为115200、协议为FireWater、通道数为5。在VOFA+实时曲线窗口中可观察5个通道数据:通道1为滤波后速度、通道2为当前速度、通道3为目标速度、通道4为当前位置、通道5为目标位置,通过曲线变化可直观评估系统的动态响应性能和控制精度。
PID参数整定:根据VOFA+显示的响应曲线,通过修改controller.c中的PID参数(位置环Kp、Kd和速度环Kp、Ki、Kd)进行在线整定。每次修改参数后重新编译下载程序,观察系统响应曲线的变化,采用”先内环后外环”的整定策略,先调整速度环使其快速稳定,再调整位置环消除过冲,反复迭代直到获得满意的控制效果。
配套资源
包括完整的项目源代码、演示视频、运行截图,开箱即用。

项目文档
有偿提供开题材料、系统设计说明书和成果汇报PPT,完整呈现项目的研究依据、设计过程与最终成果。

使用授权
本项目采用AGPL-3.0开源协议,允许个人和组织自由使用、修改和分发代码,但基于本项目的衍生作品必须同样开源,且用于提供网络服务时需向用户提供完整源代码。本项目仅供学习研究使用,作者不对使用本项目产生的任何后果承担责任,使用者应遵守当地法律法规,合理合法使用本项目。如本项目对您的研究或工作有所帮助,欢迎引用并注明出处。
作者联系
作者信息
改进作者:Steven(可提供二次开发有偿技术服务)
项目编号:STM32-5
改进声明:本项目为改进作品
联系方式


评论(0)