L293D驅動模塊的使用詳解

 

  該L293D驅動模塊是專門爲arduino設計的,網上使用arduino驅動該模塊的資料很多,但是關於使用其他單片機驅動該模塊是資料比較少,本人在學習中也是花了很多時間查找資料和摸索,該模塊直接整塊插入arduino,然後安裝專門的庫文件,就可以直接使用,而51單片機則需要自己進行接線和了解模塊的原理,所以在此爲該模塊做個比較詳細的介紹。

  模塊功能:

  *2個5V伺服電機(舵機)端口聯接到的高解析高精度的定時器無抖動!
  *多達4個雙向直流電機及4路PMM調速(大約0.5%的解析度)
  *多達2個步進電機正反轉控制,單/雙步控制,交錯或微步及旋轉角度控制。
  *4路H-橋:L293D芯片每路橋提供0.6A (峯值1.2A)電流並且帶有熱斷電保護, 4. 5Vto36V。
  *下拉電阻保證在上電時電機保持停止狀態。
  *大終端接線端子使接線更容易(10-22AWG)和電源。
  *帶有復位按鈕。
  *2個大終端外部電源接線端子保證邏輯和電機驅動電源分離
下載方便使用的軟件庫快速進行項目開發
適用範圍:初學者,實驗器材平臺,互動電子,機器人等。
特點:功能多,操作方便,有強大的驅動庫支持及功能更新。
缺點:I/0佔用較多在同時驅動四路電機的情況下(相對Arduino1/0少的版本而言),小功率。
可驅動4路直流電機或者2路步進電機的同時還能驅動2路舵機
支持Arduino UNO. Arduino Mega2560
您可以這樣搭配
驅動四路直流電機和兩路舵機
驅動兩路直流電機和一路步進電機和兩路舵機
驅動兩路步進電機和兩路舵機
可以同時控制4個直流電機和2個步進電機和兩個伺服電機(舵
機)。有專門的代碼庫。導入庫後,簡單使用。

模塊接線圖:

注意,使用步進電機會佔用2個直流電機接口,電機驅動電源需要單獨供電給電機,電路驅動電源需要使用51單片機提供的電源,也可以單獨供電,但是必須要跟單片機共地,否則會無法將數據寫入模塊。

模塊引腳說明(該模塊是爲arduino設計的,所以使用51單片機驅動該模塊有些引腳是沒用的,如:0,1,2,13,ARef):

3:直流電機M2的PWM信號端,與左邊的L293D芯片(IC1)的9號腳相連

4:74HC595芯片的數據輸入時鐘端(上升沿有效),與中間的74HC595芯片(IC3)的11號腳相連

5:直流電機M4的PWM信號端,與右邊的L293D芯片(IC2)的1號腳相連

6:直流電機M3的PWM信號端,與右邊的L293D芯片(IC2)的9號腳相連

7:74HC595芯片的輸出使能端(低電平有效),與中間的74HC595芯片(IC3)的13號腳相連

8:74HC595芯片的串行數據輸入端,與中間的74HC595芯片(IC3)的14號腳相連

9:舵機2的PWM信號端

10:舵機1的PWM信號端

11:直流電機M1的PWM信號端,與左邊的L293D芯片(IC2)的1號腳相連

12:74HC595芯片的並行數據輸出時鐘端(上升沿有效),與中間的74HC595芯片(IC3)的12號腳相連

A0~A5可以自行焊接排針作爲擴展,可以提供給舵機也可以提供給測速模塊,接線柱的電機驅動電源是提供給4個直流電機的,引腳的5V電路驅動電源是提供給芯片和舵機的,以及右下腳的5V電源,黃色的跳線帽將電機驅動電源和9V引腳相連,電機驅動電源提供多少伏的電壓,9V接腳就是多少伏的,並不是固定9V,所以請注意,關於電機驅動電源資料上說的是4.5V到36V,建議在12V之內,L293D的芯片是4.5V到36V的,但是該模塊上的其他元件不一定能承受,本人就弄壞一個板子,起初是74HC595芯片莫名其妙的燒壞,然後更換芯片後,在20V電壓下調壓時擰錯了反向,導致一個電容爆炸了,但是肯定是沒有超過36V的,該模塊的電容的擊穿電壓是16V,20V以下是沒有問題的,還要注意的是電流,不能過大,一般12V的電壓絕對夠用了。

模塊上還有一些被焊死的接口,是和直流電機接線柱相鄰的(藍色區域其他引腳是GND),可以自行焊上排針,這樣就可以使用杜邦線連接電機了或者串上電阻接上LED做指示燈,我的板子是自己把引腳都焊上來了。

模塊原理:

改模塊是使用L293D來驅動電機的,中間有一個74HC595芯片,是將串行信號轉爲並行信號的,因爲該模塊是爲arduino設計的,arduino的I/O口較少,控制4個直流電機需要12個引腳,使用74HC595可以減少4個引腳的使用,也可以取掉74HC595芯片,焊接接線,直接使用51單片機並行控制2個L293D芯片從而控制電機。

  74HC595芯片:

簡單的說,先將模塊的引腳7置0,然後模塊的引腳4(74HC595芯片的數據輸入時鐘端)接受到一個上升沿,就將芯片中的8位數據左移一位,空出低位將引腳8(74HC595芯片的串行數據輸入端)的0或1信號寫入低位,寫入八次就將控制4個電機的8位信

號寫入74HC595的芯片中了(M3M4M3M2M1M1M2M4),然後在給引腳12一個上升沿,就將芯片中的數據輸出在芯片的引腳上(Q0~Q7)。74HC595芯片詳解

  L293D芯片:

 

1號和9號都是使能端,可以輸入PWM信號來控制電機,當1腳置1時,2腳置1,則3腳輸出高電壓,7腳置0,則6腳輸出低電壓,而3腳和6腳接電機,產生電壓帶動電機轉動,如果2腳置0,7腳置1,則電機反轉,右半邊也是一樣的原理。而2,7,10,15腳接的是74HC595的輸出端,所以使用74HC595就控制了2個L293D芯片,然後就可以控制電機的轉動。L293D芯片詳解

驅動代碼:

#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit SER=P1^0;   //串行數據輸入,腳8 
sbit SCK=P1^1;   //數據輸入時鐘線,腳4 
sbit RCK=P1^2;  //數據輸出時鐘線,腳12 
sbit EN=P1^3;  //  74hc595的使能輸出 要爲0,腳7 
sbit PWM_M1=P1^4;  // L293d的MA1使能,電機M1的pwm ,腳11 
sbit PWM_M2=P1^5;	//腳3 
sbit PWM_M3=P1^6;	//腳6 
sbit PWM_M4=P1^7;	//腳5 

void HC595SendData(unsigned char SendVal)//發送一個字節
{  
	unsigned char i;
	for(i=0;i<8;i++)
	{
		if((SendVal<<i)&0x80) SER=1;
		else SER=0;
		SCK=0;//產生上升沿發送數據
		_nop_();
		_nop_();
		SCK=1;
   }
}
void HC595ShowData()//產生上升沿輸出數據
{
	RCK=0;
	_nop_();
	_nop_();
	RCK=1;
}
void delay(uint z)
{
	uint  x,y;
	for(x=z;x>0;x--)
        for (y=123;y>0;y--);
}
void main()
{
    PWM_M1=1;
    PWM_M2=1;
    PWM_M3=1;
    PWM_M4=1;
    EN=0;
    HC595SendData(0x95);//M3M4M3M2M1M1M2M4:10010101 
    delay(10);
    HC595ShowData();
    while(1);
}

原理圖(該圖是網上找的,不太清晰,還有M3和M4它弄錯了,我用黑色文字標明瞭一下):

PS:先給電路驅動電源,寫入串行數據信號,再給電機驅動電源驅動電機,也是可以的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章