接上篇
链接:基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----上篇(第123点)
其实上篇就是一些基础的东西,本篇讲一下如何让小车循迹
四,如何通过pwm调整电机的转速(调节小车的快慢)
1,为何pwm能调速度?
我的理解是,对于直流电机来讲,一上高平电机就会转动,如果改变了高电平占有的比例,就是让电机在单位时间内接到的高电平时间减少,它的速度就会减小。
注意这里的pwm是由单片机输出到电机驱动的IN1-IN4端的,所以我们要进行软件设置,以输出想要的高电平,这里主要就是软件方面的事啦。
2,如何连接stm32和电机驱动?
stm32没有单独的pwm模块,它是利用定时器来输出pwm的,每个定时器有4个通道,我们需要找到定时器这4个通道所接的引脚,再将这4个引脚接到电机驱动的输入端上就好了。先简单回顾一下stm32定时器的相关知识。首先我查看了stm3210x系列的技术手册
可以看到的是,我们手上的这块STM32F103C8T6有3个通用定时器(我的工程中把这三个定时器都用完了),再往下,每个定时器有4个通道,我们需要找到这4个通道分别对应的引脚。比如我给电机所使用的定时器为TIM3,查看数据手册对引脚的定义后发现如下:
所以定时器3的通道1-4分别对应的是PA6,PA7,PB0,PB1,我将这4个引脚分别接到电机驱动的IN1-IN4,如此一来,关于电机调速的硬件电路我们已经搭好了。
3,如何设置定时器输出4路可调pwm?
这是最关键的地方了,先贴一下我的电机设置的代码吧,下面是moter.c程序
#include "moter.h"
void CarGo(void)
{
TIM_SetCompare1(TIM3 , 400); //数值越大速度越慢
TIM_SetCompare2(TIM3 , 900);
TIM_SetCompare3(TIM3 , 400);
TIM_SetCompare4(TIM3 , 900);
}
void CarStop(void)
{
TIM_SetCompare1(TIM3 , 900);
TIM_SetCompare2(TIM3 , 900);
TIM_SetCompare3(TIM3 , 900);
TIM_SetCompare4(TIM3 , 900);
}
void CarBack(void)
{
TIM_SetCompare1(TIM3 , 900);
TIM_SetCompare2(TIM3 , 300);
TIM_SetCompare3(TIM3 , 900);
TIM_SetCompare4(TIM3 , 300);
}
void CarLeft(void)
{
TIM_SetCompare1(TIM3 , 900);
TIM_SetCompare2(TIM3 , 300);
TIM_SetCompare3(TIM3 , 300);
TIM_SetCompare4(TIM3 , 900);
}
void CarBigLeft(void)
{
TIM_SetCompare1(TIM3 , 900);
TIM_SetCompare2(TIM3 , 100);
TIM_SetCompare3(TIM3 , 100);
TIM_SetCompare4(TIM3 ,