站内搜索
发作品签到
简易PID入门项目(RZ7899 + N20电机方案)
专业版

简易PID入门项目(RZ7899 + N20电机方案)

简介

简易PID入门项目旨在提供一个简单易用的PID控制器实现,帮助初学者理解和应用PID控制算法。通过该项目,用户可以学习如何初始化PID控制器、如何根据系统反馈调整控制输出。

简介:简易PID入门项目旨在提供一个简单易用的PID控制器实现,帮助初学者理解和应用PID控制算法。通过该项目,用户可以学习如何初始化PID控制器、如何根据系统反馈调整控制输出。
电赛TI训练营-简易PID项目

开源协议

GPL 3.0

(未经作者授权,禁止转载)
创建时间:2025-05-06 16:21:45更新时间:2025-05-30 15:04:56

描述

基于MSPM0G3507的PID控制入门项目设计(1.9寸TFT屏 + RZ7899 + N20电机)
一、项目概述
本项目基于TI MSPM0G3507微控制器,结合1.9寸TFT显示屏、RZ7899电机驱动芯片和N20直流减速电机,构建一个可视化PID控制系统。通过实时显示控制曲线与参数调节界面,帮助初学者掌握PID算法原理、嵌入式实现和调参技巧。系统支持电机转速闭环控制,可应用于智能车底盘调速、温控风扇等场景。

二、硬件架构
​​电源模块​​
采用TYPEC-6P结合开关进行供电,后续负载全部为5V兼容,可以很方便的使用电脑或者充电器供电,方便学习和调试。
​​主控模块​​
芯片:MSPM0G3507(Cortex-M0+内核,48MHz,支持Keil/IAR开发)
外设配置:
​​PWM输出​​:配置定时器输出两路PWM信号至RZ7899驱动芯片(IN1/IN2),支持占空比0-100%调节
​​SPI接口​​:驱动1.9寸TFT屏(ST7735S控制器),显示PID曲线、目标值、实时转速等参数
​​ADC采集​​:通过霍尔编码器或电流检测模块获取电机转速反馈信号
​​电机驱动模块​​
​​RZ7899芯片​​:SOP-8封装,支持3-25V输入、4A驱动电流,通过IN1/IN2引脚电平组合实现电机正反转和刹车控制
​​N20减速电机​​:额定电压6V,配套霍尔编码器(100脉冲/转)提供转速反馈
​​显示模块​​
​​1.9寸TFT屏​​:128x160分辨率,SPI通信协议,显示内容:
实时曲线:目标转速(红色) vs 实际转速(蓝色)
参数界面:Kp/Ki/Kd值、超调量、稳态误差
交互提示:按键操作说明(参数增减、模式切换)
三、PID算法实现
​​位置式PID结构体​​
定义包含比例、积分、微分项及误差累计的结构体:
typedef struct {
float Kp, Ki, Kd;
float integral; // 积分累计值
float prev_error; // 前次误差
float output_limit; // 输出限幅(对应PWM占空比范围)
} PID_Controller;
​​控制量计算​​
每10ms执行一次PID计算(定时器中断触发):
float PID_Compute(PID_Controller *pid, float setpoint, float feedback) {
float error = setpoint - feedback;
pid->integral += error * 0.01; // Δt=10ms
float derivative = (error - pid->prev_error) / 0.01;
float output = pid->Kp * error + pid->Ki * pid->integral + pid->Kd * derivative;
// 输出限幅
output = (output > pid->output_limit) ? pid->output_limit :
(output < -pid->output_limit) ? -pid->output_limit : output;
pid->prev_error = error;
return output;
}
​​电机驱动逻辑​​
根据PID输出值调整PWM占空比,通过RZ7899控制电机方向:
void Motor_Control(float pid_output) {
if (pid_output > 0) { // 正转
DL_GPIO_clearPins(GPIO_PORT_MOTOR, GPIO_PIN_IN2);
DL_TimerA_setCaptureCompareValue(TIMER_PWM_INST, (uint16_t)abs(pid_output), DL_TIMER_CC_0_INDEX);
} else { // 反转
DL_GPIO_setPins(GPIO_PORT_MOTOR, GPIO_PIN_IN2);
DL_TimerA_setCaptureCompareValue(TIMER_PWM_INST, (uint16_t)abs(pid_output), DL_TIMER_CC_0_INDEX);
}
}
四、软件设计亮点
​​可视化调参界面​​
通过TFT屏显示实时响应曲线,按键操作可动态调整PID参数:
​​短按​​:切换Kp/Ki/Kd选择
​​长按​​:数值增减(步进值0.1-1.0可调)
屏幕刷新率30Hz,采用局部刷新算法降低SPI通信负载
​​电机控制优化​​
死区补偿:在PWM占空比低于5%时强制归零,消除电机启动静摩擦力影响
积分抗饱和:当输出达到限幅值时暂停积分累计,防止超调
​​调试辅助功能​​
内置"调参秘籍"模式:
​​震荡过大​​:提示增加Kd(如Kd+=0.5)
​​响应迟缓​​:提示增加Kp(如Kp+=1.0)
​​稳态误差​​:提示增加Ki(如Ki+=0.2)
五、开发流程
​​硬件搭建​​
连接MSPM0G3507与RZ7899:
PA12 -> IN1(PWM输出)
PA11 -> IN2(方向控制)
VCC -> 6V电源输入
GND -> 共地
焊接TFT屏接口(SPI模式):
PB15 -> SCLK
PB14 -> MOSI
PB13 -> CS
PB12 -> DC
PB11 -> RST
​​软件开发​​
使用SysConfig工具初始化外设:
配置TIMERA0为PWM输出(频率10kHz)
配置SPI0接口(速率20Mbps)
启用ADC0通道(编码器反馈采样)
​​调试验证​​
初始参数建议:Kp=1.0, Ki=0.1, Kd=0.05
测试用例:
目标转速500RPM,观察稳态时间与超调量
突加负载(手捏电机轴),验证抗干扰能力
六、总结
通过本次复刻,学习了TI芯片MSPM0G3507基本配置方法和图形化开发的工具使用途径,结合控制电机最基本的PID控制项目,完整的实现了基于MSPM0G3507开发项目的基本流程,为后续的电赛做了充足的储备。过程中的元件使用了手头现有的贴片元件,然后屏幕只要是接口相同大家可以放心大胆的采购,代码绝对没有问题。再次感谢嘉立创提供的学习机会和元件券让学生们可以几乎可以降低学习成本,结合电赛大礼包更是人人手上有TI,对比去年需要在某平台加价购买的情况,真正是不以卖板赚钱的嘉立创,再次点赞给你们。

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
VID20250509115245.mp4
0
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航