
电赛PID
简介
基于 立创·天猛星 MSPM0G3507 开发板制作的简易 PID 入门项目。对带编码器的电机,使用 PID 控制算法,实现 定速功能 和 定距功能,再通过屏幕显示出 PID 参数以及当前值与目标值的
简介:基于 立创·天猛星 MSPM0G3507 开发板制作的简易 PID 入门项目。对带编码器的电机,使用 PID 控制算法,实现 定速功能 和 定距功能,再通过屏幕显示出 PID 参数以及当前值与目标值的开源协议
:GPL 3.0
描述
基于 MSPM0G3507 开发板的简易 PID 控制入门项目
一、项目背景与目标
二、硬件设计
1. 主控选型:MSPM0G3507 开发板
- 核心优势:
- 低功耗架构,支持休眠模式下 μA 级电流消耗,适配电池供电场景
- 集成高精度 ADC(12 位,1MSPS)与多路定时器,满足编码器采样与 PWM 输出需求
- 宽工作电压(1.8V~3.6V),兼容 3.3V 逻辑电平
- 内置 FPU 浮点运算单元,提升 PID 算法计算效率
2. 电机驱动电路:BDR6126D
- 芯片特性:
- 双通道 H 桥驱动,支持最大 1.2A 连续电流,适配中小功率编码器电机
- 逻辑电平兼容 2.7V~5.5V,可直接与 MSPM0G3507 的 3.3V IO 口连接
- 内置过流、过热保护,支持待机模式降低功耗
- 电路设计:
- PWM 输入接口(IN1/IN2)连接主控定时器输出,实现转速调节
- 使能端(EN)控制驱动电源通断,保障安全调试
3. 编码器电机接口
- 适配类型:AB 相增量式编码器电机(推荐 100~500 线 / 圈)
- 信号处理:
- AB 相正交信号接入主控定时器,利用正交解码功能计算转速与位置
- 独立 GND 与 5V 电源引脚,通过 LC 滤波减少电机干扰
4. 显示单元:0.96 寸 IIC 彩屏
- 技术参数:
- 分辨率 128×64,支持 RGB 色彩显示,实时绘制 PID 曲线
- IIC 通信接口,仅需 2 个 IO 口(SDA/SCL),节省硬件资源
- 背光亮度可调,适应不同环境光照条件
- 显示内容:
- 实时速度 / 位置值、目标值、PID 参数(P/I/D)
- 动态曲线展示当前值与目标值的偏差趋势
- 工作模式(定速 / 定距)与故障状态指示
5. 按键控制电路
- 按键配置:3 个功能键(模式切换、参数调节、确认)
- 电路设计:
- 按键一端接 IO 口,另一端接地,利用内部上拉电阻简化电路
- 软件防抖处理(延时 10ms),避免误触发
6. 电源模块:USB 5V 输入
- 供电方案:
- 通过 Micro-USB 接口输入 5V,经板载 LDO(如 AMS1117-3.3)转为 3.3V 给主控供电
- 电机驱动独立供电接口(5V~12V),支持外接电源适配器,避免主控与电机电源互相干扰
- 电源管理:
- 电源指示灯(红色 LED)与工作状态灯(绿色 LED)
- 防反接保护电路(肖特基二极管)
三、功能实现
1. 定速控制
- 原理:
通过编码器实时采集电机转速(rpm),与设定目标值比较,经 PID 算法计算 PWM 占空比,调节电机转速至目标值。 - 关键参数:
- 采样周期:100ms(可通过代码配置)
- 速度范围:0~3000rpm,精度 ±1%
- 动态响应:启动超调≤5%,负载突变时转速波动≤2%
2. 定距控制
- 原理:
根据编码器脉冲数计算电机旋转圈数或位移,通过 PID 控制实现精准定位(如 “旋转 10 圈” 或 “移动 50mm”)。 - 关键参数:
- 脉冲分辨率:支持自定义编码器线数(如 100 线 / 圈对应 100 脉冲 / 圈)
- 定位范围:0~65535 脉冲,精度 ±1 脉冲
- 应用场景:传送带定长输送、机械臂关节定位
3. 人机交互系统
- 显示界面:
- 一级界面:实时速度 / 位置值、目标值、模式图标(定速 / 定距)
- 二级界面:PID 参数调节(P/I/D 值分步显示)、参数保存提示
- 按键操作逻辑:
- 短按 “模式键”:切换定速 / 定距模式
- 长按 “调节键”:进入 PID 参数修改状态(P→I→D 循环切换)
- 短按 “确认键”:保存参数并返回主界面
四、软件设计
1. 系统架构
- 运行模式:裸机编程(无操作系统),采用 “中断 + 状态机” 架构
- 核心模块:
- 主循环:界面刷新、按键扫描、模式判断
- 定时器中断:PID 算法计算(100ms 周期)、编码器采样
- IIC 中断:彩屏数据更新
- 状态机:区分 “运行”“调参”“故障” 等状态
2. PID 算法实现(简化版)
typedef struct
{
float kp, ki, kd; // 三个静态系数
float change_p, change_i, change_d; // 三个动态参数
float error, last_error; // 误差、之前误差
float max_change_i; // 积分限幅
float output, max_output; // 输出、输出限幅
int target; // 目标
}PID;
/****************************************************
功能:PID计算
参数:pid = pid的参数输入
target = 目标值
current = 当前值
返回:PID计算后的结果
****************************************************/
float pid_calc(PID *pid, float target, float current)
{
//用上一次的误差值更新 之前误差last_error
pid->last_error = pid->error;
//获取新的误差 = 目标值 - 当前值
pid->error = target - current;
//计算比例P = 目标值与实际值之间的误差e
float pout = pid->error;
//计算积分I = 误差e的累加
pid->change_i += pid->error;
//计算微分D = 当前误差e - 之前的误差last_e
float dout = pid->error - pid->last_error;
//积分I 限制不能超过正负最大值
if(pid->change_i > pid->max_change_i)
{
pid->change_i = pid->max_change_i;
}
else if(pid->change_i < -pid->max_change_i)
{
pid->change_i = -pid->max_change_i;
}
//计算输出PID_OUT = (Kp x P)+ (Ki x I)+(Kd x D)
pid->output = (pid->kp * pout) + (pid->ki * pid->change_i) + (pid->kd * dout);
//输出 限制不能超过正负最大值
if(pid->output > pid->max_output) pid->output = pid->max_output;
else if(pid->output < -pid->max_output) pid->output = -pid->max_output;
//返回PID计算的结果
return pid->output;
}
五、项目亮点与学习价值
1. 硬件亮点
- 低功耗设计:MSPM0G3507 休眠电流 < 1μA,适配电池供电场景(如移动机器人)
- 集成度高:IIC 彩屏仅需 2 个 IO 口,BDR6126D 驱动无需额外逻辑电路
- 全插件封装:所有器件支持手工焊接,适合新手练习硬件调试
2. 学习价值
- PID 控制:通过实际调参理解 P/I/D 参数对响应速度、超调量的影响
- 电机驱动:掌握编码器测速、PWM 调速的硬件连接与代码实现
- 嵌入式系统:学习裸机编程中中断、状态机、实时控制的设计方法
- 工程实践:从硬件焊接到软件调参的全流程体验,培养故障排查能力
3. 扩展方向
- 多电机协同:扩展至 2 轴差速驱动(如小车底盘)
- 无线通信:增加蓝牙模块,通过手机 APP 远程调节 PID 参数
- 自适应控制:实现参数自整定算法(如 Ziegler-Nichols 法)
- 传感器融合:加入陀螺仪实现姿态控制(如平衡车)
六、适合人群
- 单片机入门者:掌握 MSPM0G3507 定时器、ADC、IIC 等外设应用
- 自动化爱好者:理解闭环控制原理,学习 PID 算法工程化应用
- 学生 / 创客:完成课程设计、科创比赛的基础控制模块
- 硬件开发者:练习低功耗电路设计与传感器接口调试
七、项目资源
- 硬件资料:原理图、PCB 文件、BOM 清单(含立创商城采购链接)
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程工程成员
知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。


评论