此篇文章免費分享給大家,這篇文章結(jié)合筆者所學以及在往上參考大神的講解,通過自己的理解整理成文檔,在此免費分享給大家,由于筆者是一名在讀學生,文中難免有不當之處,如有錯誤,望大家指正!! | 實現(xiàn)的主要功能:
1.控制正反轉(zhuǎn)
2.加減速
3.停止
視頻鏈接:后續(xù)再補吧,還要審核好麻煩的
PWM控制直流電機額,,,,由于筆者是一名學生(主要還是經(jīng)驗不豐富),所以,當然,此次,又掉進坑里了。
此次所用的芯片,主要是L298N、直流電機、51單片機;程序非常簡單,在此,我也會貼出來的,工程文件放在附件中,需要的直接下載!
話不多說,看圖講坑:
第一個坑:首先,講一下L298N使能端,L298N的使能端買回來的時候是被一個跳線帽給連接著的呢,那么此時,該如何連接呢?
對于連接有倆種情況:1.如果你只需要控制正反轉(zhuǎn),對速度沒有要求的話,跳線帽需要插上去。只需要控制控制端就可以控制正反轉(zhuǎn)了。2.如果你需要PWM調(diào)速,那么此時就要格外小心了,因為筆者就是跳進這個坑了。看圖~~,使能端拔掉跳線帽有個插頭,紅色箭頭的是1,綠色箭頭的是2,特別注意,如果調(diào)速的話,一定要使輸出PWM波的那段連接在1處,如果連接在2處,則會毫無作用。切記,切記,切記
第二個坑:我是通過外接電源盒來給直流電機供電的,這個時候,記得外接電源盒的地端一定要和單片機地端共地、共地、共地。否則。不轉(zhuǎn)······
圖2.電池盒和單片機共地
之前寫過一篇詳細介紹L298N的用法的文章,如果有需要的可以直接去下載,
此次主要講這倆個容易忽略的坑,鏈接:http://www.zg4o1577.cn/bbs/dpj-83045-1.html
程序代碼如下:
1.按鍵程序
#ifndef key_h
#define key_h
sbit key_1=P1^0; //順時針轉(zhuǎn)動
sbit key_2=P1^1; //逆時針轉(zhuǎn)動
sbit key_3=P1^2; // 加速轉(zhuǎn)動
sbit key_4=P1^3; //減速轉(zhuǎn)動
sbit key_5=P1^4; //停止轉(zhuǎn)動
unsigned char PWM_Count=20; //占空比控制字
unsigned char n=5; //速度增減量5
sbit in1=P3^0;
sbit in2=P3^1;
sbit ena=P3^2;
void delays()
{
unsigned char i;
for(i=80;i>0;i--);
}
void key()
{
P1=0XFF;
if(key_1==0)
{
delays();
if(key_1==0)
{
in1=0;
in2=1;
} //順時針轉(zhuǎn)動
while(!key_1);
}
if(key_2==0)
{
delays();
if(key_2==0)
{
in1=1;
in2=0;
}
while(!key_2);
} //逆時針轉(zhuǎn)動
if(key_3==0)
{
delays();
if(key_3==0)
{
PWM_Count=PWM_Count+n;
if(PWM_Count>=100)
PWM_Count=100;
}
while(!key_3);
} //加速轉(zhuǎn)動 ,如果大于等于100就全速轉(zhuǎn)動
if(key_4==0)
{
delays();
if(key_4==0)
{
if(PWM_Count>10)
{
PWM_Count=PWM_Count-n;
}
else
PWM_Count=5; //減速轉(zhuǎn)動,最低轉(zhuǎn)速為5
}
while(!key_4);
}
if(key_5==0)
{
delays();
if(key_5==0)
{
in1=0;
in2=0;
}
while(!key_5);
} //電機停止轉(zhuǎn)動
}
#endif
2.主程序
#include<reg51.h>
#include "key.h"
unsigned char count=0;
void Timer_Init()
{
TMOD=0X01; //T0定時方式1
TH0=0Xfc;
TL0=0X66; //計數(shù)初值設(shè)置為1ms
ET0=1; //打開定時器0的中斷
TR0=1; //打開定時器0
EA=1; //開總中斷
}
void main()
{
in1=0;
in2=1;
ena=1;
Timer_Init();
while(1)
{
key();
}
}
void Timer() interrupt 1 //特別注意此處,0--外部中斷0,1--定時器中斷0,2--外部中斷1,3--定時器中斷1,4--串行口中斷1
{
TR0=0;
TH0=0Xfc;
TL0=0X66; //重新賦計數(shù)初值為1ms
if(count<=PWM_Count)
{
ena=1;
}
else
{
ena=0;
}
count++;
if(count>=100)
{
count=0;
}
TR0=1;
}
全部資料51hei下載地址:
淺談PWM控制直流電機.docx
(407.24 KB, 下載次數(shù): 75)
2019-4-20 14:51 上傳
點擊文件名下載附件
PWM直流電機調(diào)速程序.zip
(19.22 KB, 下載次數(shù): 142)
2019-4-20 14:51 上傳
點擊文件名下載附件
|