l298n电机驱动模块驱动直流电机(佛科院——深夜学习)
生活随笔
收集整理的這篇文章主要介紹了
l298n电机驱动模块驱动直流电机(佛科院——深夜学习)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
一、為什么不能直接用單片機IO口驅(qū)動電機,要用電機驅(qū)動模塊?
二、使用步驟:
1.L298n各引腳作用:
2.推薦的供電方式:
3.推薦的控制方式:
一、為什么不能直接用單片機IO口驅(qū)動電機,要用電機驅(qū)動模塊?
由于單片機內(nèi)部結(jié)構(gòu)原因,其等效內(nèi)阻極大, 導致輸出電流極小,盡管I0口輸出高電平為5V,但輸出功率極小,無法滿足直接電機的額定功率,所以我們一般只把單片機當控制器,而不是驅(qū)動器。
二、使用步驟:
1.L298n各引腳作用:
重點解釋:
2.推薦的供電方式:
用7-12V電源給L298n供電,GND連接電源負級和單片機的GND,5V給單片機供電(也可以不接)
3.推薦的控制方式:
不使用通道A/B使能口,不去掉跳帽,向兩個邏輯輸入口輸入PWM信號來控制電機:
?用按鍵控制的代碼:(STC89C52RC)
#include <reg52.h> sbit left_wheel_1 = P2^0; sbit left_wheel_2 = P2^1; sbit right_wheel_1 = P2^2; sbit right_wheel_2 = P2^3; sbit key1 = P0^1; sbit key2 = P0^2; sbit key3 = P0^3; sbit key4 = P0^4; sbit key5 = P0^5; sbit key6 = P0^6; unsigned char count = 0; unsigned char timer1 = 100; unsigned char turn_sign; #define forword_left 1; #define forword_rignt 2; #define back_left 3; #define back_rignt 4; /*定時器T0初始化*/ void Timer0_Init() { unsigned char time;TMOD = 0x02; //定時器T0設(shè)置成8位自動重裝載time = 92;TH0 = 256-time; //定時常數(shù) 0.1ms 晶振為11.0592MHzTL0 = TH0;ET0 = 1; TR0 = 1; EA=1; }/*T0中斷初始化*/ void Time0_Init() interrupt 1 {if(count <= timer1 && count > 0) //高電平時間{ switch(turn_sign){case 1:left_wheel_1 = 1;break;case 2:right_wheel_1 = 1;break;case 3:left_wheel_2 = 1;break;case 4:right_wheel_2 = 1;break; }}else { switch(turn_sign){case 1:left_wheel_1 = 0;break;case 2:right_wheel_1 = 0;break;case 3:left_wheel_2 = 0;break;case 4:right_wheel_2 = 0;break; }}count++;if(count >= 200) //脈沖周期T = 20ms{ count = 0; } } void delay_ms(unsigned int time_out)//12HZ STC89C52RC {unsigned int i,j;for(i=time_out;i>0;i--)for(j=95;j>0;j--); }void Forword(); void Stop(); void Forword_left(); void Forword_right(); void Back(); void Back_left(); void Back_right(); void main() {Timer0_Init();//定時器初始化while(1){/*6個按鍵控制*/if(!key1){delay_ms(10);if(!key1){Forword_left();while(!key1);Stop();}}if(!key2){delay_ms(10);if(!key2){Forword();while(!key2);Stop();}}if(!key3){delay_ms(10);if(!key3){Forword_right();while(!key3);Stop();}}if(!key4){delay_ms(10);if(!key4){Back_left();while(!key4);Stop();}}if(!key5){delay_ms(10);if(!key5){Back();while(!key5);Stop();}}if(!key6){delay_ms(10);if(!key6){Back_right();while(!key6);Stop();}}} } //全速前進 void Forword() {left_wheel_1 = 1;left_wheel_2 = 0;right_wheel_1 = 1;right_wheel_2 =0; } //停止 void Stop() {ET0 = 0; //關(guān)閉定時器TR0 = 0;left_wheel_1 = 0;left_wheel_2 = 0;right_wheel_1 = 0;right_wheel_2 =0; } void Forword_left() {ET0 = 1; //開啟定時器TR0 = 1;count = 0;//重新計數(shù)turn_sign = forword_left;//確定標志,詳情看中斷函數(shù)left_wheel_2 = 0;right_wheel_1 = 1;right_wheel_2 =0; } /***************其他函數(shù)和Forword_left函數(shù)同理*********************/ void Forword_right() {ET0 = 1; TR0 = 1;count = 0;turn_sign = forword_rignt;left_wheel_1 = 1;left_wheel_2 = 0;right_wheel_2 =0; }void Back() {left_wheel_1 = 0;left_wheel_2 = 1;right_wheel_1 = 0;right_wheel_2 =1; } void Back_right() {ET0 = 1; TR0 = 1;count = 0;turn_sign = back_left;left_wheel_1 = 0;right_wheel_1 = 0;right_wheel_2 =1; } void Back_left() {ET0 = 1; TR0 = 1;count = 0;turn_sign = back_rignt;left_wheel_1 = 0;left_wheel_2 = 1;right_wheel_1 =0; }總結(jié)
以上是生活随笔為你收集整理的l298n电机驱动模块驱动直流电机(佛科院——深夜学习)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 菌子导航系统(持续开发中)
- 下一篇: 想知道怎么修复老照片?来试试这几款修复软