本次來寫一下關于驅動直流電機的知識,今天目的是驅動它,下次寫使用PWM精準的對直流電機進行控速。下面是我使用的直流電機圖:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPR90MRR1T1UkaOBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzkjM5EDMyQTM5ITNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
由于STM32單片機不能直接的輸出較大電壓和電流,是以得借助驅動子產品來控制電機,我們使用的L298N電機驅動子產品來驅動電機,當然也可以使用TB6612,L293D,ULN2003等電機驅動子產品,他們原理都是一樣的,會一個其他的都可以信手拈來。下面是L298N的圖:
一個L298N電機驅動子產品可以控制兩個直流電機或者一個兩相步進電機。支援兩個電壓的供電模式,5V或者12V。由于沒有5V,12V的電源,是以我們用了15V的電源進行降壓處理後為5V給其供電。使用5V的電壓也是因為可以直接給單片機直接供電,可以将單片機與電腦分離開來。如果沒有電源的話,也可以直接使用單片機5V電壓給電機驅動子產品提供電壓。降壓子產品如下圖,使用DC-DC子產品焊的一個電路闆。(其實電源就是12V的隻是為了多加一個子產品)DC-DC子產品用時一定厘清正負,要不然電容會炸的。黃色的紐扣扭動可以調節輸出電壓。
接下來是我驅動直流電機的整體圖:
驅動電機的代碼如下(我直接用的我們剛做完項目的代碼,沒有改,隻需要使用PB5、PB6就好):
power.h
#ifndef __POWER_H
#define __POWER_H
#include "sys.h"
#define PB5 PBout(5)
#define PB6 PBout(6)
#define PB7 PBout(7)
#define PB8 PBout(8)
#define PB9 PBout(9)
#define PB10 PBout(10)
#define PB11 PBout(11)
#define PB12 PBout(12)
#define PB13 PBout(13)
#define PB14 PBout(14)
#define PB15 PBout(15)
void POWER_Init(void);
void goon(void);
void back(void);
void right(void);
void left(void);
#endif
power.c
#include "power.h"
void POWER_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_ResetBits(GPIOB,GPIO_Pin_6|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);
}
void goon(void)
{
PB5 =1;
PB6 =0;
}
完了直接在主函數裡面調用就好:
int main(void)
{
delay_init();
POWER_Init();
while(1)
{
goon();
};
}
有什麼問題下面留言,一起讨論解決。