直接减速电机就是在直流电机上加上霍尔编码器,霍尔编码器可用于电机转动的测速,A、B相会产生相位相差90°的方波信号。stm32可以使用硬件资源或者软件模拟来捕获编码器信号。这里我介绍的是stm32自带的编码器模式来使用直流减速电机。
1.模块介绍
1.1直流减速编码电机
以下是直流减速电机的商品图
同时我使用的是转速为620的直流电机,此直流电机的电流在0.07A(空载)到1.8A(堵转)之间。
直流电机和编码盘互相独立供电,红色和白色需要连接到电机驱动模块的输出。黑色和绿色是编码器电源,3.3V供电。黄色和绿色就是编码器的AB相,硬件资源会占用定时器的ch1和ch2通道。
1.2电机驱动模块
直流电机没有办法直接接在单片机上面使用,大部分的单片机引脚通过的电流在100mA左右,没有办驱动直流电机,同时单片机也无法承受直流电机的反馈脉冲电流强度,会导致单片机烧毁。所以单片机驱动电机时添加驱动电路来控制电机的转动。也就是由外部电源来提供电流,驱动电机转动。
这里使用的是L298N驱动模块来驱动电机转动。
驱动模块的5V连接到单片机的5V接口,L298N模块在连接外部电源时会给单片机5V供电,L298N模块的GND连接电池的负极以及单片机板载GND,输出A和输出B连接电机的正负极。
在测试模块是否正常使用时,使能端(ENA和ENB)的跳线帽可以不拔(这样相当于ENA、ENB接高电平,),IN1,IN2设置高低电平来让电机转动。当使用PWM信号控制电机转速时,使能端的跳线帽要拔下来,同时PWM信号要输入在使能端。
以下是L298N驱动模块的引脚使用方法
ENA IN1 IN2 转动
1 1 0 是
1 0 1 是
1 1 1 否
0 - - 否
ENB IN3 IN4 转动
1 1 0 是
1 0 1 是
1 1 1 否
0 - - 否
接线如下
ENA–>PA8
ENB–>PA9
IN1–>PB12
IN2–>PB13
IN3–>PB14
IN4–>PB15
编码器1–>PA0 PA1
编码器2–>PA6 PA7
之后的代码只举例一个编码电机,也就是编码器2。
#include <STM32F10X.H>
#include <string.h>
#include "systick.h"
#include "bsp_uart.h"
#include "bsp_motor.h"
#include "key.h"
#include "oled.h"
char str[20];
char str1[20];
int main(void)
{
SysTick_Configration();
Uart1_Configuration();
Uart1_NVIC_Init();
OLED_Init();
DC_Brush_Motor_Configuration();
TIM3_Base_Configuration();
Encoder_Init_TIM4();
while(1)
{
sprintf(str,"rxData = %d ",rxData);
OLED_ShowString(16,0,(uint8_t *)str,16);
sprintf(str1,"rpm = %d ",enval);
OLED_ShowString(16,16,(uint8_t *)str1,16);
OLED_Refresh();
memset(str, ' ', sizeof(str));
memset(str1, ' ', sizeof(str1));
}
}