STM32闭环控制直流电机和LCD界面方案

1. 项目功能介绍

最近写了一个STM32项目,里面很多有用的功能,所以把它开源了,点击观看演示视频

复制代码
通过网盘分享的文件:我发布的开源代码
链接: https://pan.baidu.com/s/1fcRFMMbF-y5lJBO6UsUvPg?pwd=jjxx 提取码: jjxx

我开源的资源都在这个里面,使用的时候记得删掉中文路径,不然cube会歇菜。

实拍图:

包含以下功能:

(1)直流电机闭环控制 :一个定时器读取正交编码器,一个定时器输出两路PWM给DRV8870DDRAR芯片,用两路PWM的占空比驱动电机正反转和调速。软件实现了读取电机位置、电机速度卡尔曼滤波、PID速度环、位置环,可以控制电机到达指定位置或速度。

(2)遥控器和LCD界面交互 :用微雪电子的1.8寸SPI屏幕和红外接收器,实现用户交互。屏幕界面如下:

左上角显示页码,页码右边一排显示布尔量,用不同的背景颜色表示变量值,下面是变量显示区。

可以在全局变量里自定义变量名和显示的小数位数,程序会自动计算需要的页数,可以用遥控器翻页。

黄色变量表示实时变量,比如电机速度位置等信息,白色变量表示记忆变量,可以用遥控器设置变量值并且保存在单片机的内置Flash。

交互系统大致是这样,本身逻辑并不复杂,就不详细介绍了,程序里也有注释。这个交互方案可以移植到任何嵌入式项目,比串口+上位机程序的方案简便很多,不需要在板子旁边架个笔记本了。

(3)其他设备 :NRF无线通信(作为发送方),舵机,LED,有源蜂鸣器。

(4)FreeRTOS:程序是在FreeRTOS里面组织的,每个线程负责一个任务,分工明确。

2.电机调试经验

实现电机闭环控制需要一些技巧,经过调试,一个合适的控制结构图是:

各个功能模块介绍:

(1)两个PID :除了基本算法,还加了积分限幅和死区。积分限幅就是积分值超过限制值就不再继续累加,死区就是当误差很小就输出为0,这样可以避免电机在那不停的微调。

最终采用的pid参数如下,第2~4个参数分别代表P,I,D系数,最后两个参数代表死区和积分限幅:

c 复制代码
	init_pid_type(&VLoop,2,1,0.1,MOT_TIM_S,0.5,50); // 4 1.6
	init_pid_type(&PLoop,1,0.2,0.0,MOT_TIM_S,0.5,20);

调试速度环,可以先调P和I,实现有超调和衰减震荡的阶跃响应:

这时候再增加一点D系数可以减小超调:

(2)速度跟踪器 :位置环输出的目标速度可能变化很大,会导致电机抖动,速度跟踪器就是限制目标速度的变化速度和变化加速度,可以让电机运行更平稳。

(3)电机驱动 :当目标速度为0时可以关闭速度PID,直接把两路PWM都设为高电平(100%占空比),DRV8870直接让电机刹车。经过测试,把PWM周期设置成和PID的一样是效果最好的(都是10ms),用高频率PWM反而会让电机走走停停,抖的很厉害。

(4)编码器 :最好是用和电机同轴的编码器。之前试过用齿轮啮合的编码器,齿轮间隙会导致编码器读取有误差,导致控制效果很差。

(5)卡尔曼滤波 :用GPT生成了一个一维的滤波器,滤波器参数主要是过程噪声和测量噪声,过程噪声越小、测量噪声越大,得到的信号越平稳,相对原始信号的滞后也会越大。可以用串口把原始数据和滤波后数据打印出来,用serialplot观察波形,选择合适的滤波参数。给个滤波效果示例,红色是原始速度,紫色是滤波后速度:

最终控制效果,位置控制:(红色目标值,紫色实际值)

速度控制:

相关推荐
hai315247543几秒前
# FiveOS V5.0 交付(终极合成器版 · 物理合规修正)
人工智能·stm32·单片机·嵌入式硬件·神经网络
搁浅小泽9 分钟前
外部导线用接线端子&正常工作&非正常工作
嵌入式硬件
嵌入式ZYXC14 分钟前
第6章:通信接口的硬件特性——为什么你的UART乱码、I2C死锁、SPI干扰大?
stm32·单片机·嵌入式硬件·物联网·智能硬件
天天爱吃肉821834 分钟前
【汽车研发测试工程师|Python自动化实测全套脚本(CAN解析+数据处理+自动出报告)】
大数据·python·功能测试·嵌入式硬件·汽车
三佛科技-1341638421241 分钟前
AIP8P005B 与FT60E112A(8位I/O型单片机)对比分析,FT60E112A能否兼容替代AIP8P005B?
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
fffzd1 小时前
STM32:串口--轮询模式
stm32·单片机·嵌入式硬件·串口·hal库·轮询模式
municornm1 小时前
单片机IO不够?ULN2003A救急方案
单片机·嵌入式硬件
m0_618526201 小时前
矩阵RGB三色LED驱动芯片CH466(SPI模式)
单片机·嵌入式硬件
染予1 小时前
实现功能:给stm32F427zgt6开发板配置网络,电脑可以ping通开发板
stm32·单片机·嵌入式硬件
Hotchip_MEMS1 小时前
单节锂电池充电管理:如何平衡充电速度与电池寿命
人工智能·单片机·嵌入式硬件·物联网