STM32野火开源平衡小车(五)之外设搭建之PID与MPU6050初始化

野火开源平衡车官网板块

https://www.firebbs.cn/forum.php?mod=forumdisplay&fid=129&page=1

参考资料

暂无

参考视频(这个群主讲的不错)

https://www.bilibili.com/video/BV1j7411z7uX

硬件平台

开发平台

KEIL5, STM32F103X主控,程序用的SWD下载(啥下载器都行,能下载进去就好,用串口下载也是可以的)

开发(一) 

P 比例: 提高响应速度,减小静态误差(因为EP值比EI,ED都要大,值大贡献的值就大,太大直接跑扑街,太小会一直达不到设定点)

(静态误差指 理想值 与真实值 之差, 比例过大,会导致系统振荡,但你想达到目标值,必须围绕这目标值振荡,然后通过其他I,D来逐渐减小振荡幅度, 但你太大他直接振没了(不受ID控制了))

 

I 积分: 消除稳态误差 (积分是累加, 求面积, 主要是积累误差)

有一丁点误差,都会因为累加,变得很大, 直到你的误差消除为0

 

D 微分:减小振荡,以及超调(微分就是求导, 导数就是变化率)

微分越大,阻力就越大, 就越削弱之前的EP比例(也可能含有EI积分值)的幅度值

 

有网友总结到

比例是考虑当前,积分是回顾历史(累计误差),微分是预测未来

 

 

直立环 让小车角度趋近0,小车正立住(PD:比例微分控制)

直立环: 输入(1.给定的角度.2角度的反馈), 输出(PWM直接控制车车)

 

速度环, 让电机速度趋近0,电机不转(PI:比例积分控制)

速度环: 输入(1.给定的速度. 2速度的反馈) ,  输出(角度值,直立环的期望速度输入)

 

先搞MPU6050

用到了PB8和9

 

\

MPU6050这边设置中断的频率为50HZ,(10ms中断一次 更新电机PWM)

 

处理下 MPU6050  10ms来一次的中断(我们用的是PD2)

直立环PD控制

速度环 PI控制

转向环 在直立的时候 约束车车的转向

继续编写10ms的MPU6050中断内容

 

下面改以下OLED引脚  PB10和PB11

 

编写主函数

 

 

前言: 开始之前先要说为什么要采用PID的算法来控制小车。玩过小车的DIY爱好者们都会碰到这样一种情况:为什么本该直线行驶的小车走着走着轨迹就会发生偏移,即所谓的“走不直”。 小车走不直的原因有:两个电机本身的驱动特性不可能完全相同,两个电机外形大小不可能是完全一致,组装时精度也会出现差异,另外轮胎在滚动时打滑、遇到细小的障碍物等因素都会造成左右轮的速度出现差异,从而走不直。开环控制是无法消除左右轮的速度误差的,因为上述的扰动是随机的。 要想小车走一条直线,唯有实现闭环控制,当小车受到扰动时能对左右轮及时给予反馈,修正两轮的速度偏差,从而可以走出一条直线。PID算法就是一种闭环控制算法,实现PID算法需得从硬件上实现闭环控制,即存在反馈,所以我采用的是带测速装置的电机。 项目简介: 本项目采用的是PID控制算法来修正小车行走时两轮的速度偏差,实现小车可以走直线。小车是使用一个安卓App来控制小车的行走路径,App通过App Inventor2来进行编写。 完成作品图: 需要用到的材料: 1. Arduino Uno 2. Arduino Uno的扩展板 3. DFRobot L298 双路2A直流电机驱动板 4. HC-05或HC-06的蓝牙模块 5. 坦克小车底盘 6. 两个带霍尔传感器的电机 7. 锂电池 8. 杜邦线若干 软件部分: 1. Arduino IDE 2. App Invent 附件内容截图:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值