大家好,本人小白一个,利用一些课外时间制作32平衡小车,博客的主要内容是记录自己在制作过程中遇到的鸡毛蒜皮的困难,以及搭配自己的制作思路。
话不多说,开始今天上午的任务。
本章节主要是想要实现小车 PID保持平衡的趋势,具体精确参数下午再调试。
第一步:让小车先动起来。
(1)先检验小车电机是否有问题,直接给电机的两个12V线供上12V和GND(没有顺序,大不了正反转,切记不要超过12V哦,烧了电机,小编可不负责任)
经过检验,电机没问题。然后通过TB6612FNG电机驱动模块驱动小车。参考连线图:
很明白,我先尝试用A电机(自己给电机命名了),IO口配置,没问题,高低电平输出正常;可是,电机就是不转。花了2个多小时查找,才发现PWMA引脚我给的低电平,也就是说PWMA控制小车转速为0,老铁,真的坑我啊。(细节决定成败)
(2)调整两个轮子按照正方向转动。
注意:PWMA的高低电平,决定AO1和AO2输出的占空比的多少;如果PWMA悬空,那么在AO1和AO2引脚测得的电压为0。
调整方法很多:基本就是先连线再对应设置引脚、先预定好引脚,再连线(小编就用的这种哦)
(3)进行PWM调速
这里我用的是PA1-->PWMA,PA2-->PWMB,对应分别是T2C2和T2C3.
这里注意定时器的内容就行了,没有其他问题(除非你没有学好定时器)。
花了快1个小时才配置好,因为好久都没用过了,快忘了。小结一下,关键点在于:arr,psc的计算公式、以及配置细节。
第二步:查看编码器模式的配置。只有配置好了编码器,才能读取电机转动的方向,为PID调节准备物质基础。
/刚才发生一起重大事故,希望各位同学引以为戒:两分钟之内烧了两个C8T6,没错,是烧了两个。为什么呢?第一次是由于自己的粗心,降压模块被烧了(12V供电降成5V),当然,12V电压足够干翻几个C8T6了,导致烧了第一个。经过检查,再次上了一个C8T6,结果又烧了,因为没有将那个坏了的降压模块换下来,又烧了一个(细节决定成败,必须改掉这个毛病)
算了,今天运气不好,明天晚上再做吧*—*,难受,香菇。
好了,今天继续,先是花了一个小时修复了昨天被烧坏的东西,从新接线,一切恢复到昨天的状态。
//
编码器模式只能由定时器 1 2 3 4的通道1,2来实现。(具体资料自行百度更好)
小纠结,开始查各种资料。
第三步:读取编码器数值。
先确定使用板子的TIM2作为小车的PWM控速,然后使用TIM3,TIM4的通道1和2 设置为编码器模式。代码比较简单,不过电机就是不转,为什么呢?有点迷。
还有,为什么不用对编码器的硬件引脚进行初始化呢?
stm32编码器会直接占用整个TIMx定时器通道,而引脚也是固定的TIMx_Ch1和TIM_Ch2,所以不需要配置通道,因为通道已经被硬件固化了。
今天有点晚了,明天满课,明天晚上再继续更新。
现在接着继续,原因是设置了PWM输出的值,
TIM_SetCompare2(TIM2,4999);//PWMA
TIM_SetCompare3(TIM2,4999);//PWMB,却并没有设置车轮的方向,就是默认的停止状态,好比你把一辆车的油门轰到了指定位置,但是挂的空挡一样,车子肯定不会动啦。
然后愉快的加上:
AIN1=0,AIN2=1;
BIN1=0,BIN2=1;//默认小车向前行驶
然后小车就转起来了。通过不断地调试,终于通过串口显示了编码器地数据:0
1
1
4
5
7
7
8
9
10
14
14
16
16
18
16
19
18
19
19
19
19
19
20
20
19
20
19
20
19
20
20
20
19
20
210
1
1
4
5
7
7
8
9
10
14
14
16
16
18
16
19
18
19
19
19
19
19
20
20
19
20
19
20
19
20
20
20
19
20
210
1
1
4
5
7
7
8
9
10
14
14
16
16
18
16
19
18
19
19
19
19
19
20
20
19
20
19
20
19
20
20
20
19
20
21
这一串数字是什么意思呢?这就留给小伙伴们自己猜吧,下一节揭晓答案^-^(但是这么说也不全对,随着进程的深入,我会一步一步的解释它的意思)
我曾许下十年,只为最美的遇见。我是西伯利亚小强,咱们有缘再见。