一、首先确保接线和硬件没问题,并确定控制逻辑
测试单片机-驱动板(L298N)-电机连线是否接通:控制板IN1,IN2一个接3.3V一个接GND,ENA默认使能;控制板IN3,IN4一个接3.3V一个接GND,ENB默认使能。
在电机已经安装完毕的情况下,分别记录小车前进时驱动器IN1、IN2、IN3、IN4的逻辑电平;本车:IN1、IN2控右电机且1高2低正转,IN3、IN4控左电机且4高3低正转;
二、简单的介绍下定时器吧,无论是电机调速所需的PWM还是编码器(码盘)解码都需要定时器
STM32F1 系列中,除了互联型的产品,共有 8 个定时器,分为基本定时器,通用定时器和高级定时器。基本定时器 TIM6 和 TIM7 是一个 16 位的只能向上计数的定时器,只能定时,没有外部 IO。通用定时器 TIM2/3/4/5 是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,每个定时器有四个外部 IO。高级定时器 TIM1/8是一个 16 位的可以向上/下计数的定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,每个定时器有 8 个外部 IO。
划重点,为什么使用定时器?因为定时器的运行不占用CPU计算资源!
三、用单片机控制电机
1.1先用 TIM3的两个(因为有两个电机)通道CH1(PA6)、CH2(PA7)输出PWM 参考我的另一篇文章;分别接ENA和ENB
使用的电机驱动板控制逻辑:
1.2 另外使用4个引脚(PG0、1、2、4)进行输出控制,分别接IN1、IN2、IN3、IN4,小车向前行走配置如下:
生成代码后需要在main.c开启PWM,下载代码后理想情况下差速底盘会向前行进。
四、轮速里程计数学模型(两轮差速)
4.1 AB相编码器波形输出原理图 参考
4.2 结合我使用的硬件参数:基础脉冲11,减速比34,175rpm(转/s)。并且程序用4倍频解码(一个脉冲周期能捕获4个信号)
假设t时间内输出了y个信号,求电机转的圈数x: (1),则速率x':(2);左右轮子的转速: ,(3)
4.3 小车的速度及航迹推演:
将(2)(3)代入v和w的计算式,可消除t,得,
补充:y为利用滴答定时器(毫秒级)每隔一段时间t进行读取定时器的捕获值。
至于为啥用滴答而不使用TIM定时器,可参考chatGPT给出的回答
五、STM32工程源码
(待上传到gitee,后续更新链接)