学前小基础——全H桥
关于MOS管:元器件学习(2):MOS管
关于PWM:学习笔记11-PWM
原理图
以全NMOS管为例
从上图可看出,此电机驱动电路由4个NMOS管构成,形如H型,故名全H桥电路。通过控制4个MOS管的导通与截止达到对中间电机的不同控制效果。NMOS管的栅极为高电平时导通,低电平时截止。
H桥工作模式
正转模式:Q1、Q4的栅极为高电平,Q2、Q3为低电平,Q1,Q4导通,如左图所示,电机正向旋转。
反转模式:Q2、Q3的栅极为高电平,Q1、Q4为低电平,Q2,Q3导通,如右图所示,电机反向旋转。
电流衰减模式:如何让旋转的电机停下来?电机是感性负载,电流不能突变。在断开电机两端所加的电压时,电机产生的反向电动势很有可能损坏FET。光断电还不够,还要形成一个续流的回路来释放掉电机上的能量。
以左侧正转模式为例
- 如果此时采取快衰减模式(滑动):四个MOSFET关断,电机上的电流会通过Q2和Q3的寄生二极管继续流动,如②线所示。可发现,此时电流的流向是与电源电压相反的,因此电流衰减很快,当电流衰减为0时,由于FET是关断的,电源电压不会加在电机上,电机会逐渐停下。
- 如果采取制动/慢衰减模式(制动):Q2、Q4导通,Q1、Q3关断。电机上的电流通过Q2和Q4继续流动,如③线所示,电机上的能量会逐渐消耗在电机本身和Q2、Q3上,这样的电流衰减相对较慢。
补充
1、衰减的快慢是形容电流的,不是电机转动速度!
2、快衰减模式下,由于电流迅速下降,电感电机上储存的能量释放很慢,电机会逐渐停止。
慢衰减模式下,电机的两端类似于短接,电流很大且衰减慢,储存的能量被瞬间释放,此时电机会瞬间停止。
一、L298N初认识
L298是L293电机驱动芯片的高功率、大电流版本, 由Multiwatt 15封装,N是L298的封装标识符。
L298N是一款可接受高电压、大电流双路全桥式电机驱动芯片,采用Multiwatt 15脚封装,接受标准TTL逻辑电平信号;内置稳压芯片78MO5,使内部逻辑电路部分在低电压下工作,也可以对外输出逻辑电压5V。(为了避免稳压芯片损坏,当使用大于12V驱动电压时,务必使用外置的5V接口独立供电。)
L298N通过控制主控芯片上的I/O输入端,直接通过电源来调节输出电压,即可实现电机的正转、反转、停止,由于电路简单,使用方便,通常情况下L298N可直接驱动继电器(四路)、螺线管、电磁阀、直流电机(两台)以及步进电机(一台两相或四相)。
由于芯片在H桥上的损耗严重发热较明显(饱和压降大),需要加装散热片,因此体积也相对较大。
参数
特点
- 发热量低
- 抗干扰能力强
- 驱动能力强 (高电压、大电流)
- 可靠性高 (使用大容量滤波电容,续流保护二极管可过热自断和反馈检测)
- 工作电压高 (最高至46V)
- 输出电流大 (瞬间峰值电流可达3A,持续工作电流为2A)
- 额定功率25W
功能框图
可以看到于L298N的H桥采用了BJT,没有寄生二极管,无法实现续流,因此外接了8个续流二极管。
电路图
引脚
实物图展示:
说明:
- ENA、ENB:此接口高电平电机运行,默认跳线帽短接到高电平(一直使能);可拔掉接主控板PWM端口实现调速。
- 输出A、B(OUT1、OUT2、OUT3、OUT4):接两个电机,不分正负.
- 逻辑输入(IN1、IN2、IN3、IN4):控制电机正反转和速度,IN1和IN2控制电机M1,IN3和IN4控制电机M2.
- GND:电源地,需要与主控板的GND连接(使控制时所用的逻辑电平均是以同一个地做参考)。
- 12V供电:给电机供电的接口,此处要独立供电!!
- 5V供电:电压输出口,可以使用这个口给主控板供5V电源(不推荐)。
- 板载5V使能:跳线帽接起来“5V供电”口才有5V电压输出。
真值表
二、接线
1、板内电压驱动
2、外接电源驱动
电源地记得与主控板的GND共地!! 十分重要!
三、代码段
关于转动方向
- 当两个电机转动速度相同时,小车直行;
- 当左电机比右电机转动快时,小车右转;
- 当右电机比左电机转动快时,小车左转.
关于电机不会转动原因排查
- 有响声但不转,可能是电压不够,尝试加大电压
- 接线错误,电源地没有与单片机共地…
- 逻辑端没有正确的使能
motor.c
#include "motor.h"
//刹车
void MOTOR_CarBrakeAll(void){
MOTOR1_BRAKE;
MOTOR2_BRAKE;
}
//后退
void MOTOR_CarBack(void){
MOTOR1_01;
MOTOR2_10;
}
//前进
void MOTOR_CarForward(void){
MOTOR1_10;
MOTOR2_01;
}
void MOTOR_GPIOInit(void){
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(MOTOR1_GPIO_CLK|MOTOR2_GPIO_CLK,ENABLE);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//电机1
GPIO_InitStructure.GPIO_Pin = MOTOR1_GPIO_PIN;
GPIO_Init(MOTOR1_GPIO_PORT, &GPIO_InitStructure);
//电机2
GPIO_InitStructure.GPIO_Pin = MOTOR2_GPIO_PIN;
GPIO_Init(MOTOR2_GPIO_PORT, &GPIO_InitStructure);
}
motor.h
#ifndef __MOTOR_H
#define __MOTOR_H
#include "stm32f10x.h"
#define IN1_PIN GPIO_Pin_12
#define IN2_PIN GPIO_Pin_13
#define IN3_PIN GPIO_Pin_14
#define IN4_PIN GPIO_Pin_15
//10:IN1:1、IN2:0 01:IN1:0、IN2:1
#define MOTOR1_GPIO_PORT GPIOB
#define MOTOR1_GPIO_CLK RCC_APB2Periph_GPIOB
#define MOTOR1_GPIO_PIN IN1_PIN|IN2_PIN
#define MOTOR1_10 {GPIO_SetBits(MOTOR1_GPIO_PORT,IN1_PIN);GPIO_ResetBits(MOTOR1_GPIO_PORT,IN2_PIN);}
#define MOTOR1_01 {GPIO_ResetBits(MOTOR1_GPIO_PORT,IN1_PIN);GPIO_SetBits(MOTOR1_GPIO_PORT,IN2_PIN);}
#define MOTOR1_BRAKE GPIO_ResetBits(MOTOR1_GPIO_PORT,MOTOR1_GPIO_PIN);
//10:IN3:1、IN4:0 01:IN3:0、IN4:1
#define MOTOR2_GPIO_PORT GPIOB
#define MOTOR2_GPIO_CLK RCC_APB2Periph_GPIOB
#define MOTOR2_GPIO_PIN IN3_PIN|IN4_PIN
#define MOTOR2_10 {GPIO_SetBits(MOTOR2_GPIO_PORT,IN3_PIN);GPIO_ResetBits(MOTOR2_GPIO_PORT,IN4_PIN);}
#define MOTOR2_01 {GPIO_ResetBits(MOTOR2_GPIO_PORT,IN3_PIN);GPIO_SetBits(MOTOR2_GPIO_PORT,IN4_PIN);}
#define MOTOR2_BRAKE GPIO_ResetBits(MOTOR2_GPIO_PORT,MOTOR2_GPIO_PIN);
void MOTOR_CarBrakeAll(void);
void MOTOR_CarBack(void);
void MOTOR_CarForward(void);
void MOTOR_GPIOInit(void);
#endif /* __MOTOR_H */
参考自:
1、[教程]【Mind+】(超详细)如何使用L298N电机驱动图形编程控制电机
2、【电机驱动芯片(H桥、直流电机驱动方式)——DRV8833、TB6612、A4950、L298N的详解与比较】
3、L298N 电机驱动板 - 详细介绍