目錄
目的/效果
1:電機轉速同步LED呼吸燈
2 通過獨立按鍵 控制直流電機轉速。
一,STC單片機模塊
二,直流電機?
2.1 簡介
2.2 驅動電路
2.2.1 大功率器件直接驅動
2.2.2 H橋驅動
正轉
反轉
2.2.3 ULN2003D 引腳、電路
2.3 PWM(脈沖寬度調制)
?2.3.1 什么是PWM
2.3.2 PWM的頻率
2.3.3 PWM的周期
2.3.4 占空比
2.3.5 PWM的主要用途?
2.4 控制流程
2.4.1 模擬LED呼吸燈控制電機轉速
2.4.2 獨立按鍵控制電機轉速(類似于電風扇檔位切換)
三,創建Keil項目
四,代碼?
4.1 電機轉速同步LED呼吸燈
4.2 獨立按鍵對電機調速?
五,代碼編譯、下載到51單片機
?
目的/效果
1:電機轉速同步LED呼吸燈
2 通過獨立按鍵 控制直流電機轉速。
K1:降低速度
K2:增大速度
一,STC單片機模塊
二,直流電機?
2.1 簡介
直流電機是指能將直流電能轉換成機械能(直流電動機)或將機械能轉換成直流電能(直流發電機)的旋轉電機。一般的直流電機有兩個電極,當電極正接時,電機正轉,當電極反接時,電機反轉 。直流電機主要由永磁體(定子)、線圈(轉子)和換向器組成 。除直流電機外,常見的電機還有步進電機、舵機、無刷電機、空心杯電機等。
2.2 驅動電路
2.2.1 大功率器件直接驅動
電路圖
這種只能朝一個方向轉。
電路導通圖
這里為什么有個續流二極管,因為電機、繼電器 都是電感(物理慣性導致電路電壓超過電源電壓)元件 。
在斷開電路瞬間,會產生很高的電壓。對晶體管有擊穿損傷。我們來看斷開瞬間的電流方向。
有了這個續流二極管,可以形成回路,降低對晶體管的擊穿損害
2.2.2 H橋驅動
形狀像“H”所以稱為H橋,可以實現程序控制電機正傳和反轉
正轉
反轉
2.2.3 ULN2003D 引腳、電路
這里我們將VCC接電機一個引腳,P10引腳對應OUT1,
將P10引腳輸出0? (高電平)電機轉動
將P10引腳輸出1? (低電平)電機停止轉動
斷開瞬間電流方向
其內部基本電路是達林頓管?
?
2.3 PWM(脈沖寬度調制)
?本節與《51單片機STC89C52RC——10.1 LED呼吸燈-CSDN博客》保持一致。
?2.3.1 什么是PWM
?脈沖寬度調制(PWM),是英文“Pulse Width Modulation”的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中。 ?
2.3.2 PWM的頻率
是指1秒鐘內信號從高電平到低電平再回到高電平的次數(一個周期);
也就是說一秒鐘PWM有多少個周期
單位: Hz
表示方式: 50Hz 100Hz
2.3.3 PWM的周期
T=1/f
周期=1/頻率
50Hz = 20ms 一個周期
如果頻率為50Hz ,也就是說一個周期是20ms 那么一秒鐘就有 50次PWM周期
2.3.4 占空比
是一個脈沖周期內,高電平的時間與整個周期時間的比例
單位:?%?(0%-100%)
表示方式:20%?
周期為T
T1為高電平時間
T2 為低電平時間
假設周期T為 1s 那么頻率就是 1Hz 那么高電平時間0.5s ,低電平時間0.5s 總的占空比就是 0.5 /1 =50%
?控制LED的通斷時間比例,占空比。如下圖
2.3.5 PWM的主要用途?
PWM對電機轉速的控制
占空比可以實現對電機轉速的調節,我們知道,占空比是高電平在一個周期之中的比值,高電平的所占的比值越大,占空比就越大,對于直流電機來講,電機輸出端引腳是高電平電機就可以轉動,當輸出端高電平時,電機會轉動,但是是一點一點的提速,在高電平突然轉向低電平時,電機由于電感有防止電流突變的作用是不會停止的,會保持這原有的轉速,以此往復,電機的轉速就是周期內輸出的平均電壓值,所以實質上我們調速是將電機處于一種,似停非停,似全速轉動又非全速轉動的狀態,那么在一個周期的平均速度就是我們占空比調出來的速度了,
在電機控制中,電壓越大,電機轉速越快,而通過PWM輸出不同的模擬電壓,便可以使電機達到不同的輸出轉速
當然,在電機控制中,不同的電機都有其適應的頻率 頻率太低會導致運動不穩定,如果頻率剛好在人耳聽覺范圍,有時還會聽到呼嘯聲。頻率太高的電機可能反應不過來
正常的電機頻率在 6-16kHZ之間為好
PWM對舵機的控制
舵機的控制就是通過一個固定的頻率,給其不同的占空比的,來控制舵機不同的轉角
舵機的頻率一般為頻率為50HZ,也就是一個20ms左右的時基脈沖,而脈沖的高電平部分一般為0.5ms-2.5ms范圍。來控制舵機不同的轉角
?
500-2500us的PWM高電平部分對應控制180度舵機的0-180度
以180度角度伺服為例,那么對應的控制關系是這樣的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
2.4 控制流程
2.4.1 模擬LED呼吸燈控制電機轉速
與LED呼吸燈控制方式相同,分為兩個階段:
第一階段:由暗到亮。就是輸出占空比由0%到100%以1%為間隔遞增,共100個周期。
第二階段:由亮到暗。就是輸出占空比由100%到0%以1%為間隔遞減,共100個周期。
這里我們直接復用LED呼吸燈的代碼。加一個電機供電引腳的輸出。
for(Time=0;Time<100;Time++) //改變亮滅時間,由暗到亮{for(i=0;i<20;i++) //計次延時{LED=0; //LED亮Motor=1; //電機轉Delay(Time); //延時TimeLED=1; //LED滅Motor=0; //電機停Delay(100-Time); //延時100-Time}}for(Time=100;Time>0;Time--) //改變亮滅時間,由亮到暗{for(i=0;i<20;i++) //計次延時{LED=0; //LED亮Motor=1; //電機轉Delay(Time); //延時TimeLED=1; //LED滅Motor=0; //電機停Delay(100-Time); //延時100-Time}}
2.4.2 獨立按鍵控制電機轉速(類似于電風扇檔位切換)
通過獨立按鍵調整占空比,每個檔位固定一個占空比,實現電風扇檔位切換。
三,創建Keil項目
詳細參考:51單片機STC89C52RC——創建Keil項目-CSDN博客
四,代碼?
代碼詳情 請參考?STC89C52RC: 51單片機學習資料、代碼
4.1 電機轉速同步LED呼吸燈
#include <REGX52.H>sbit LED=P2^0; //LED 呼吸燈
sbit Motor=P1^0; //電機供電
/*** 函 數:延時函數* 參 數:無* 返 回 值:無*/
void Delay(unsigned int t)
{while(t--);
}
/*** 函 數:主函數* 參 數:無* 返 回 值:無*/
void main()
{unsigned char Time,i;while(1){for(Time=0;Time<100;Time++) //改變亮滅時間,由暗到亮{for(i=0;i<20;i++) //計次延時{LED=0; //LED亮Motor=1; //電機轉Delay(Time); //延時TimeLED=1; //LED滅Motor=0; //電機停Delay(100-Time); //延時100-Time}}for(Time=100;Time>0;Time--) //改變亮滅時間,由亮到暗{for(i=0;i<20;i++) //計次延時{LED=0; //LED亮Motor=1; //電機轉Delay(Time); //延時TimeLED=1; //LED滅Motor=0; //電機停Delay(100-Time); //延時100-Time}}}
}
4.2 獨立按鍵對電機調速?
#include <REGX52.H>
#include "Timer0.h"
#include "key.h"
#include "LCD1602.h"
#include "Delay.h"
unsigned char Counter,//計數器KeyNum,//按鍵值Speed=1,//檔位Compare=35;//占空比
/*** 函 數:主函數* 參 數:無* 返 回 值:無*/
void main()
{ Timer0_Init(); //初始化定時器 LCD_Init(); while(1){LCD_ShowNum(1,1,Speed,3);KeyNum=GetKey();if(KeyNum==1){Speed--;}else if(KeyNum==2){Speed++;}Speed=Speed%5;if(Speed==0)Compare=0;if(Speed==1)Compare=35;if(Speed==2)Compare=50;if(Speed==3)Compare=75;if(Speed==4)Compare=100; }
}
/*** 函 數:定時器0中斷函數* 參 數:無* 返 回 值:無*/
void Timer0_Routine() interrupt 1
{TL0 = 0x91; //設置定時初值TH0 = 0xFF; //設置定時初值Counter++;Counter%=100;if(Counter>=Compare){P2_0=1;//led 熄滅P1_0=0;//電機斷電}else {P2_0=0;//led 亮起P1_0=1;//電機通電}
}
五,代碼編譯、下載到51單片機
代碼編譯請參考
《51單片機STC89C52RC——代碼編譯-CSDN博客》
代碼下載請參考
《51單片機STC89C52RC——STCAI-ISP代碼下載-CSDN博客》