? 本文將簡單介紹如何通過L298N電機驅動模塊實作直流減速電機(電動推桿)的正反轉控制,后續會更新含PWM調速的教程,如有需要可關注后續博客,希望對大家的學習有所幫助,
1.所需硬體
正點原子戰艦V3開發板 X1
L298N電機驅動模塊 X1
微型電動推桿 X1
杜邦線 若干
2.L298N電機驅動模塊介紹

? 上圖為L298N電機驅動模塊的實物圖,關于L298N電機驅動模塊的原理這里不做過多的介紹,感興趣的同學可以自行百度,下面將直接介紹L298N的使用方法,
輸出A(OUT1和OUT2):從電機上可以看到兩個正負金屬片,我們可以聯想到這是接電機的正負金屬片,至于哪個是正哪個是負無所謂,若未達到預期效果可通過代碼或相反接線來改變,
12V供電、供電GND:12V電源介面接12V電池正極,負極接地,同時一定要和單片機共地,至于為什么這里不做詳細介紹,同學可百度查閱,至于這個12V的電源,電壓盡量不要高于16V也不要低于8V,過高過低都會啥訓芯片,
5V供電:由于L298N電機驅動模塊自帶了穩壓功能,可以供出5v電壓,在以后的智能小車專案中,單片機的供電選擇可以選這個,對于初學者這個很少用到,
通道A使能(EN1):這里的使能可以類比STM32的GPIO口和時鐘配置,這是使能的意思就是讓它開啟作業狀態,這個使能介面是用來控制PWM輸入的,也就是說,如果單純只想讓電機轉動起來,可以不用管EN1,把那個帽子給它蓋上,它就和5v接上了,也就是它不使能了,以后如果想用PWM來控制,那就把帽子拔了,把EN腳接到單片機的PWM輸出口,
單片機IO口控制輸入(IN1、IN2):這兩個腳是接到STM32的某兩個GPIO口上,通過給予高低電平,就可以實作電機的正反轉,

所以,剩下的IN3、IN4、EN2、OUT3和OUT4都同理,
3.硬體接線

接線描述:12V供電接DC電源正極
? 供電GND接DC電源負極及單片機GND(共地)
? IN1、IN2分別接PA5、PA4
? OUT1、OUT2分別接電機正負極
4.程式代碼
? 在學習點燈實驗后,相信大家已經知道如何配置引腳,也知道怎么給引腳高低電平了,這里只示例部分主要代碼,注意工程的創建,
motor.c檔案
#include "stm32f10x.h"
#include "motor.h"
#include "sys.h"
#include "delay.h"
void MOTOR_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIO外設
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; //LED0-->PB.4 埠配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根據設定引數初始化GPIOB.4
GPIO_ResetBits(GPIOA,GPIO_Pin_4); //Pa.4 輸出低
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //LED0-->PB.5 埠配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根據設定引數初始化GPIOB.5
GPIO_ResetBits(GPIOA,GPIO_Pin_5); //Pa.5 輸出低
}
main.c檔案
#include "delay.h"
#include "sys.h"
#include "motor.h"
#include "key.h"
#include "led.h"
int main()
{
delay_init(); //延時函式初始化
MOTOR_Init();
KEY_Init();
LED_Init();
GPIO_ResetBits(GPIOE,GPIO_Pin_5);
delay_ms(1000);
GPIO_SetBits(GPIOE,GPIO_Pin_5);
delay_ms(1000);
while(1)
{
if(KEY0==0) //按鍵KEY0
{
delay_ms(10);//消抖
if(KEY0==0)
{
GPIO_SetBits(GPIOA,GPIO_Pin_4);
GPIO_ResetBits(GPIOA,GPIO_Pin_5); //推進
}
}
if(KEY1==0) //按鍵KEY1
{
delay_ms(10);//消抖
if(KEY1==0)
{
GPIO_SetBits(GPIOA,GPIO_Pin_5);
GPIO_ResetBits(GPIOA,GPIO_Pin_4); //碩訓
}
}
if(KEY2==0) //按鍵KEY2
{
delay_ms(10);//消抖
if(KEY2==0)
{
GPIO_ResetBits(GPIOA,GPIO_Pin_4);
GPIO_ResetBits(GPIOA,GPIO_Pin_5); //停止
}
}
}
}
演示效果:
? 按下KEY0,電機正轉
? 按下KEY1,電機反轉
? 按下KEY2,電機停止
5.總結
? 通過本次的專案,我們對GPIO口的應用有一定了解,在學習STM32單片機的程序中自己可以邊學邊做專案,這樣會提高自己的動手能力,也會鞏固理論知識,本篇博客簡單介紹了L298N模塊的使用,如需進一步了解可自行求助度娘,希望對大家的學習有所幫助!
程式原始碼已上傳,如有需要請自行下載
如有錯誤,歡迎指正!
部分內容來源于網路,如有侵權請告知!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/277401.html
標籤:其他
上一篇:博文閱讀目錄
