今天開始著手做智能小車的項目了
在智能小車或機器人項目中,我們經常會聽到一個詞叫?“H 橋電機驅動”,尤其是常見的?L298N?模塊,就是基于“雙 H 橋”原理設計的。那么,“H 橋”到底是什么?為什么要用“雙 H 橋”來驅動電機?。今天,我們就來深入講解一種應用極為廣泛的電機驅動模塊——L298N,了解它的工作原理、引腳功能、接線方式及實際應用。
一、什么是 L298N?
L298N 是一款?雙 H 橋電機驅動芯片,內部集成了兩個全橋驅動器,能同時控制兩個直流電機或一個步進電機。由于其穩定性好、價格低、接線方便,成為 Arduino、STM32、51 單片機等平臺中最常見的電機驅動解決方案之一。
二.模塊引腳與結構詳解
L298N 模塊通常包括如下接口:
1. 電源接口
引腳 | 功能描述 |
---|---|
VCC | 給電機供電(5~35V) |
GND | 地線(邏輯地與電源地共用) |
5V | 給控制邏輯供電,或供外部單片機使用(視跳帽而定) |
注意:VCC 是電機電源輸入,不是控制電壓!
2. 控制引腳
引腳 | 功能 |
---|---|
IN1/IN2 | 控制電機 A 正反轉 |
IN3/IN4 | 控制電機 B 正反轉 |
ENA | 使能電機 A,同時用于 PWM 調速 |
ENB | 使能電機 B,同時用于 PWM 調速 |
3. 輸出接口
引腳 | 功能說明 |
---|---|
OUT1/OUT2 | 電機 A 輸出 |
OUT3/OUT4 | 電機 B 輸出 |
三, H 橋原理簡要回顧
H 橋是一種電路結構,用于改變電流方向以實現直流電機的正轉、反轉、剎車、停止等控制。
一個 H 橋控制一個電機的兩個方向,兩組 H 橋可控制兩個電機,因此稱為“雙 H 橋”。
IN1 | IN2 | 電機狀態 |
---|---|---|
高 | 低 | 正轉 |
低 | 高 | 反轉 |
高 | 高 | 剎車 |
低 | 低 | 停止(斷電) |
ENA 和 ENB 輸入 PWM 信號可以調節電機轉速。
四,接線實例:L298N + STM32F103
一、硬件連接說明(以 STM32F103 為例)
L298N 引腳 | 功能 | STM32 引腳 | 說明 |
---|---|---|---|
IN1 | 電機A控制 | PA0 | GPIO 輸出 |
IN2 | 電機A控制 | PA1 | GPIO 輸出 |
ENA | 電機A調速 | PA2 (TIM2_CH3) | PWM 輸出 |
IN3 | 電機B控制 | PA3 | GPIO 輸出 |
IN4 | 電機B控制 | PA4 | GPIO 輸出 |
ENB | 電機B調速 | PA5 (TIM2_CH1) | PWM 輸出 |
GND | 地 | GND | 必須共地 |
二、GPIO 初始化代碼
void?L298N_GPIO_Init(void)
{
? ??RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,?ENABLE);
? ? GPIO_InitTypeDef GPIO_InitStructure;
? ? GPIO_InitStructure.GPIO_Pin?= GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3 | GPIO_Pin_4;
? ? GPIO_InitStructure.GPIO_Mode?= GPIO_Mode_Out_PP;
? ? GPIO_InitStructure.GPIO_Speed?= GPIO_Speed_50MHz;
? ??GPIO_Init(GPIOA, &GPIO_InitStructure);
}
?
三、PWM 初始化(使用 TIM2)
void?PWM_Init(void)
{
? ??RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,?ENABLE);
? ??RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,?ENABLE);
? ? GPIO_InitTypeDef GPIO_InitStructure;
? ? GPIO_InitStructure.GPIO_Pin?= GPIO_Pin_2 | GPIO_Pin_5;?// PA2 - CH3, PA5 - CH1
? ? GPIO_InitStructure.GPIO_Mode?= GPIO_Mode_AF_PP;
? ? GPIO_InitStructure.GPIO_Speed?= GPIO_Speed_50MHz;
? ??GPIO_Init(GPIOA, &GPIO_InitStructure);
? ? TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
? ? TIM_OCInitTypeDef TIM_OCInitStructure;// 設置計數頻率為 1MHz,PWM頻率為1KHz
? ? TIM_TimeBaseStructure.TIM_Period?=?1000?-?1; ? ? ? ? ??// ARR
? ? TIM_TimeBaseStructure.TIM_Prescaler?=?72?-?1; ? ? ? ? ?// PSC (72MHz/72=1MHz)
? ? TIM_TimeBaseStructure.TIM_ClockDivision?=?TIM_CKD_DIV1;
? ? TIM_TimeBaseStructure.TIM_CounterMode?= TIM_CounterMode_Up;
? ??TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
? ? TIM_OCInitStructure.TIM_OCMode?= TIM_OCMode_PWM1;
? ? TIM_OCInitStructure.TIM_OutputState?= TIM_OutputState_Enable;
? ? TIM_OCInitStructure.TIM_OCPolarity?= TIM_OCPolarity_High;// CH1 -> PA5 -> ENB
? ??TIM_OC1Init(TIM2, &TIM_OCInitStructure);
? ??TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);// CH3 -> PA2 -> ENA
? ??TIM_OC3Init(TIM2, &TIM_OCInitStructure);
? ??TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
? ??TIM_Cmd(TIM2,?ENABLE);
}
?
四、電機控制函數
// 電機A方向控制
void?MotorA_Dir(uint8_t?dir)
{if?(dir)
? ? {
? ? ? ??GPIO_SetBits(GPIOA, GPIO_Pin_0);
? ? ? ??GPIO_ResetBits(GPIOA, GPIO_Pin_1);
? ? }
else
? ? {
? ? ? ??GPIO_ResetBits(GPIOA, GPIO_Pin_0);
? ? ? ??GPIO_SetBits(GPIOA, GPIO_Pin_1);
? ? }
}
// 電機B方向控制
void?MotorB_Dir(uint8_t?dir)
{
if?(dir)
? ? {
? ? ? ??GPIO_SetBits(GPIOA, GPIO_Pin_3);
? ? ? ??GPIO_ResetBits(GPIOA, GPIO_Pin_4);
? ? }
else
? ? {
? ? ? ??GPIO_ResetBits(GPIOA, GPIO_Pin_3);
? ? ? ??GPIO_SetBits(GPIOA, GPIO_Pin_4);
? ? }
}
// 電機A設置速度(0~1000)
void?MotorA_SetSpeed(uint16_t?speed)
{
? ??TIM_SetCompare3(TIM2, speed);?// TIM2_CH3 -> ENA
}
// 電機B設置速度(0~1000)
void?MotorB_SetSpeed(uint16_t?speed)
{
? ??TIM_SetCompare1(TIM2, speed);?// TIM2_CH1 -> ENB
}
?
五、主函數調用示例
int?main(void)
{
? ??L298N_GPIO_Init();
? ??PWM_Init();
? ??while?(1)
? ? {
? ? ? ??// 電機A正轉,速度800
? ? ? ??MotorA_Dir(1);
? ? ? ??MotorA_SetSpeed(800);
? ? ? ??// 電機B反轉,速度500
? ? ? ??MotorB_Dir(0);
? ? ? ??MotorB_SetSpeed(500);
? ? ? ??Delay_ms(2000);
? ? ? ??// 停止
? ? ? ??MotorA_SetSpeed(0);
? ? ? ??MotorB_SetSpeed(0);
? ? ? ??Delay_ms(1000);
? ? }
}
?
五、總結
L298N 電機驅動模塊是嵌入式開發中最經典的驅動方案之一,尤其適用于智能小車、遙控車、迷你機械臂等項目。雖然存在一定局限,但其穩定性、易用性和教學價值依舊使它成為初學者和高校課程中的首選模塊。
如果你正在使用 STM32、Arduino、51 單片機等平臺進行小車開發,掌握 L298N 模塊的使用,將為你打下堅實的控制基礎。