基于STM32F103C8T6的循迹避障小车完整制作过程(详细)----中篇(第456点)

接上篇

链接:基于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 , 
  • 231
    点赞
  • 1660
    收藏
    觉得还不错? 一键收藏
  • 79
    评论
评论 79
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值