基于stm32的两轮平衡小车

仅直立环的平衡小车(我在学习过程中遇到的问题与心得分享)(以及自己组车成本详细)(代码,PCB文件)

因为我也是刚进入大学校园的一名大一学生,才开始接触嵌入式,这是我的第一篇博客,我发这篇文章就是想记录我的成长,同时跟一些志同道合的朋友交流嵌入式经验,所以我讲的有不对的地方大佬请一定要帮我指正出来,平衡小车是我看B站上的up主小黑发的视频,根据他的视频一步步做出来的,在此非常感谢小黑,希望大家能去看看他的视频,对电赛打比赛,做一些自己的小项目很有帮助。

材料准备:

首先,我采用了STM32F103C8T6最小系统板(相信很多人第一次接触嵌入式的第一块板子就是它吧)

电机:JGB37-520编码器电机 35一个X2=70元(最好自带脚架否则很后面单买比较麻烦)

TB6612电机驱动模:7元一个(最好买两个,因为后续很可能会因为一些“不可抗因素“导致烧坏)

MPU6050陀螺仪:10元一个

亚克力板一块(文末会有亚克力和PCB板的文件)当时我18元打了两块,但只用一块就差不多,上面那层可以用PCB板代替

DC-DC SY8205的降压模块:6元(根据PCB板来焊接上去,IN接12V,OUT接5V)

供电电压在11.1V到12.6V之间的一块航模电池(我用的是这种):不清楚多少钱是在学校实验室里拿的用的。

一块四引脚的0.96英寸oled屏幕:5元可能。

其他材料:50v 10uf的电解电容 1  , 1K电阻,贴片led,2.54端子,6p胶壳2.54, SS-12D06L5开关一个,STlink一个。(具体焊接会在后面讲到。)

代码讲解:(这里进行一些必要的代码讲解,具体可以看文末代码。)


这是用到的一些模块

思路就是用PWM驱动电机,并使用编码器测速(脉冲值大小),得到的数据反馈,再利用数据对PWM大小进行调节(调节部分需要用到PID算法)这样控制下的电机正反转大小变换从而达到使小车不摔倒的效果。

main.c

在main.c中我们主要进行初始化操作,在While循环中我们写一个保护措施(当翻滚角达到30度的的情况下基本上车是就不会来了,所我们为了保护车这时就要关闭电机)创建一个标志位,当标志位为0的时候就关闭电机,为1保持电机输出(在Motor.c中我们可以看到)这里有一点做不好,我把数据显示(有oled)做在循环里,,循环里最好不要放oled(里面有delay的函数)和delay的函数,不仅容易死机,还容易花屏。

Encoder.c

编码器的思路是定时器TIM4定时中断中psc为1000-1,arr为7200-1,这样定时中断计数出来是10ms触发一次更新中断,在更新事件中我们读出两个编码器不断计数自增的cnt的值(脉冲数)这样的效果就是在10ms的时间内读cnt的值,得出来的就相当于电机的速度(也可以进行计算转化成真正的速度,米每秒之类的)(还有还有千万别买错板子,我之前错买了C6T6的板子我以为是C8T6导致我TIM4一直进不了中断,因为C6T6没有tim4外设,笑死。)(之所以用定时器测速是因为我的队友陈b他当时画板子的时候没有接MPU6050的INT引脚,这个引脚是数中断引脚,,也么有画外部中断引脚,这就很伤,但也还能用)

Timer.c

 

中断这里一定要记得,数据的读取和pid的计算一定要放一块,很简单的原因,假如你数据的接受和数据处理速度都不够快,等接收完数据再处理完的时候,姿态已经发生改变,这时处理出来的结果已经不适用现在的姿态了,放在一起数据一到就能处理,直接作用在PWM上才够快,中断优先级也得给高点,MPU6050给的数据只是六个加速度,需要使用DMP库进行转换,由MPU6050摆放位置不一样,所以用到的角不一样,我用到的是pitch。

Pid.c

这段代码注释已经很清晰了,关于pid的基础可以去B站上找小黑的视频(小黑的B站名字是:_WNNN)

给大家挂一下链接:https://www.bilibili.com/video/BV1iP411x71X/?spm_id_from=333.999.0.0、

通过网盘分享的文件:phc820.zip等3个文件
链接: https://pan.baidu.com/s/1qll4irGGa2mR57QQo3_Bnw?pwd=mert 提取码: mert 
--来自百度网盘超级会员v2的分享

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值