天天看點

直流電機+L298N電機驅動子產品

本次來寫一下關于驅動直流電機的知識,今天目的是驅動它,下次寫使用PWM精準的對直流電機進行控速。下面是我使用的直流電機圖:

直流電機+L298N電機驅動子產品

由于STM32單片機不能直接的輸出較大電壓和電流,是以得借助驅動子產品來控制電機,我們使用的L298N電機驅動子產品來驅動電機,當然也可以使用TB6612,L293D,ULN2003等電機驅動子產品,他們原理都是一樣的,會一個其他的都可以信手拈來。下面是L298N的圖:

直流電機+L298N電機驅動子產品
直流電機+L298N電機驅動子產品

一個L298N電機驅動子產品可以控制兩個直流電機或者一個兩相步進電機。支援兩個電壓的供電模式,5V或者12V。由于沒有5V,12V的電源,是以我們用了15V的電源進行降壓處理後為5V給其供電。使用5V的電壓也是因為可以直接給單片機直接供電,可以将單片機與電腦分離開來。如果沒有電源的話,也可以直接使用單片機5V電壓給電機驅動子產品提供電壓。降壓子產品如下圖,使用DC-DC子產品焊的一個電路闆。(其實電源就是12V的隻是為了多加一個子產品)DC-DC子產品用時一定厘清正負,要不然電容會炸的。黃色的紐扣扭動可以調節輸出電壓。

直流電機+L298N電機驅動子產品
直流電機+L298N電機驅動子產品

接下來是我驅動直流電機的整體圖:

直流電機+L298N電機驅動子產品

驅動電機的代碼如下(我直接用的我們剛做完項目的代碼,沒有改,隻需要使用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();
	};
}
           

有什麼問題下面留言,一起讨論解決。

繼續閱讀