❶ 單片機pwm控制電機轉速
單片機控制電機轉速:
如果只有一個轉向的話就比較容易了,如果要有正反兩個轉向,就需要一個H橋,並且兩個I/O口輸出高低電頻控制。
比如用P1口的P1.0,P1.1,P1.2三個I/O口接按鍵,P3.4口接電頻輸出,編個定時程序及按鍵程序,如果是快(全速運行),那就P3.4口直接輸出高電頻「1」;中(50%),那就讓P3.4口0—50ms輸出高電頻「1」,50ms—100ms輸出低電頻「0」,後面就一直以50ms進行一次取反;慢(就用10%吧),0—40ns輸出高電頻「1」,41ns—400ns輸出低電頻「0」,這樣為一個周期,後面就一直循環吧。
如果按鍵P1.0按下,執行方式1,全速運行,否則以默認方式運行;按鍵P1.1按下,執行方式2,改變占空比,以50%的速度運行,否則,不作改變;按鍵P1.2按下,執行方式3,改變占空比,以10%的速度運行,否則,不作改變。
❷ 51單片機實現pwm對電機調速
可以用一個定時器實現,也可以用兩個定時器實現
一個定時器實現辦法,如定時器定時50US中斷一次,中斷100次是5ms,即PWM的周期
每次中斷,變數a加1,並且a與另一變數b比較,如果a<b,讓某一管腳輸出高電平,如果a>=b,則讓其輸出低電平,a等於100時清0,這樣占空比是b/100,改變b的值,就可以改變占空比 缺點定時器定時時間不能太短,例如10us中斷程序根本執行不完,若占空比調節精度要求較高,如要求百分之一,則a需大於100,這樣PWM波的周期就比較大,頻率比較低
兩個定時器,如一個定時器0定時100us,另外一個定時器1定時小於100us,如b us
定時器0中斷時輸出高電平,並打開定時器1,定時器1負責置低電平
這樣,就可以產生周期100us,占空比是b/100的方波
頻率可以比用一個定時器高一些
❸ 基於單片機的直流電機PWM調速控制(要單片機的代碼)快啊
; PWM 控制 LED 燈漸亮漸滅程序 *
; 利用定時器控制產生占空比可變的 PWM 波 *
; 按K1,PWM值增加,則占空比減小,LED 燈漸暗。 *
; 按K2,PWM值減小,則占空比增加,LED 燈漸亮。 *
;當PWM值增加到最大值或減小到最小值時,蜂鳴器將報警 *
;資源:p0口,8路指示燈。p1.4,p1.5亮度控制按鍵(埠按鍵)p3.7小喇叭報警 *
;----
PWM EQU 7FH ;PWM賦初始值
OUT EQU P0 ;8個LED燈的介面
INCKEY EQU P1.4 ;K1,PWM值增加鍵。
DECKEY EQU P1.5 ;K2,PWM值減小鍵。
BEEP EQU P3.7
;----
ORG 0000H
SJMP START
ORG 000BH
SJMP INTT0
ORG 001BH
SJMP INTT1
ORG 0030H
;----
;主程序
;定時器0工作在模式1,定時器1工作在模式2。
;----
START:
MOV SP,#30H
MOV TMOD,#21H
MOV TH1,PWM ;脈寬調節
MOV TL1,#00H
MOV TH0,#0FCH ;1ms延時常數
MOV TL0,#066H ;頻率調節
SETB EA
SETB ET0
SETB ET1
SETB TR0
LOOP: MOV A,PWM ;
JB INCKEY,LOOP1 ;增加鍵是否按下?
CALL DELAY ;延時去抖動
JB INCKEY,LOOP1
CJNE A,#0FFH,PWMINC ;是否到最大值?
CALL BEEP_BL ;是,蜂鳴器報警。
SJMP LOOP
PWMINC:
INC PWM ;調節脈寬(脈寬減小)
SJMP LOOP
LOOP1: JB DECKEY,LOOP2 ;減小鍵是否按下?
CALL DELAY ;延時去抖動
JB DECKEY,LOOP2
CJNE A,#02H,PWMDEC ;是否到最小值?
CALL BEEP_BL ;是,蜂鳴器報警。
SJMP LOOP
PWMDEC:
DEC PWM ;調節脈寬(脈寬增加)
LOOP2: SJMP LOOP
;----
;T0中斷服務子程序 (頻率)
;控制定時器1中斷
;----
INTT0:
CLR TR1
MOV TH0,#0FCH ;1ms延時常數
MOV TL0,#066H ;頻率調節
MOV TH1,PWM
SETB TR1
MOV OUT,#00H ;啟動輸出
RETI
;----
;T1中斷服務子程序 (脈寬)
;控制PWM脈沖寬度
;----
INTT1:
CLR TR1 ;脈寬調節結束
MOV OUT,#0FFH ;結束輸出
RETI
;----
;10ms延時子程序
;----
DELAY:
MOV R6,#50
DELAY1:
MOV R7,#100
DJNZ R7,$
DJNZ R6,DELAY1
RET
;----
;蜂鳴器響一聲子程序
;---
BEEP_BL:
MOV R6,#100
BL1: CALL BL2
CPL BEEP
DJNZ R6,BL1
MOV R5,#25
CALL DELAY2
RET
BL2: MOV R7,#180
BL3: NOP
DJNZ R7,BL3
RET
DELAY2: ;延時R5×10MS
MOV R6,#50
BL4: MOV R7,#100
BL5: DJNZ R7,BL5
DJNZ R6,BL4
DJNZ R5,DELAY2
RET
;---
END
❹ 51單片機pwm直流電機怎麼實現調速和正反轉
如果要正反轉控制,驅動電路做個全橋的,控制占空比。50%的話就停止了!
❺ 基於單片機的pwm小功率直流電機調速
直流調速器就是調節直流電動機速度的設備,上端和交流電源連接,下端和直流電動機連接,直流調速器將交流電轉化成兩路輸出直流電源,一路輸入給直流電機礪磁(定子),一路輸入給直流電機電樞(轉子),直流調速器通過控制電樞直流電壓來調節直流電動機轉速。同時直流電動機給調速器一個反饋電流,調速器根據反饋電流來判斷直流電機的轉速情況,必要時修正電樞電壓輸出,以此來再次調節電機的轉速。
直流電機的調速方案一般有下列3種方式:
1、改變電樞電壓;
2、改變激磁繞組電壓;
3、改變電樞迴路電阻。
使用單片機來控制直流電機的變速,一般採用調節電樞電壓的方式,通過單片機控制PWM1,PWM2,產生可變的脈沖,這樣電機上的電壓也為寬度可變的脈沖電壓。根據公式
U=aVCC
其中:U為電樞電壓;a為脈沖的占空比(0<a<1);VCC直流電壓源,這里為5V。
電動機的電樞電壓受單片機輸出脈沖控制,實現了利用脈沖寬度調制技術(PWM)進行直流電機的變速。
因為在H橋電路中,只有PWM1與PWM2電平互為相反時電機才能驅動,也就是PWM1與PWM2同為高電平或同為低電平時,都不能工作,所以上圖中的實際脈沖寬度為B,
我們把PWM波的周期定為1ms,占空比分100級可調(每級級差為10%),這樣定時器T0每0.01ms產生一次定時中斷,每100次後進入下一個PWM波的周期。上圖中,占空比是60%,即輸出脈沖的為0.6ms,斷開脈沖為0.4ms,這樣電樞電壓為5*60%=3V。
我們討論的是可以正轉反轉的,如果只按一個方向轉,我們就只要把PWM1置為高電平或低電平,只改變另一個PWM2電平的脈沖變化即可,,如下圖(Q4導通,Q3閉合,電機只能順時針調整轉動速度)
C語言代碼:
#include<AT89X52.h>
#define uchar unsigned char
#define uint unsigned int
sbit K5=P1^4;
sbit K6=P1^5;
sbit PWM1=P1^0;
sbit PWM2=P1^1;
sbit FMQ=P3^6;
uchar ZKB1,ZKB2;
void delaynms(uint aa)
{
uchar bb;
while(aa--)
{
for(bb=0;bb<115;bb++) //1ms基準延時程序
{
;
}
}
}
void delay500us(void)
{
int j;
for(j=0;j<57;j++)
{
;
}
}
void beep(void)
{
uchar t;
for(t=0;t<100;t++)
{
delay500us();
FMQ=!FMQ; //產生脈沖
}
FMQ=1; //關閉蜂鳴器
delaynms(300);
}
void main(void)
{
TR0=0; //關閉定時器0
TMOD=0x01; //定時器0,工作方式1
TH0=(65526-100)/256;
TL0=(65526-100)%256; //100us即0.01ms中斷一次
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器T0
ZKB1=50; //占空比初值設定
ZKB2=50; //占空比初值設定
while(1)
{
if(!K5)
{
delaynms(15); //消抖
if(!K5) //確定按鍵按下
{
beep();
ZKB1++; //增加ZKB1
ZKB2=100-ZKB1; //相應的ZKB2就減少
}
}
if(!K6)
{
delaynms(15); //消抖
if(!K6) //確定按鍵按下
{
beep();
ZKB1--; //減少ZKB1
ZKB2=100-ZKB1; //相應的ZKB2增加
}
}
if(ZKB1>99)
ZKB1=1;
if(ZKB1<1)
ZKB1=99;
}
}
void time0(void) interrupt 1
{
static uchar N=0;
TH0=(65526-100)/256;
TL0=(65526-100)%256;
N++;
if(N>100)
N=0;
if(N<=ZKB1)
PWM1=0;
else
PWM1=1;
if(N<=ZKB2)
PWM2=0;
else
PWM2=1;
}
//顯現:電機轉速到最高後,也就是N為1或99時,再按一下,就變到99或1,
//電機反方向旋轉以最高速度
❻ 51單片機實現直流電機PWM調速,為什麼要用定時器
直流電機的PWM調速,就是改變在一個周期里的通電時間,通電時間和斷電時間就是一個周期,這都是用時間來決定的,所以必須要用定時器。
51單片機是對所有兼容Intel
8031指令系統的單片機的統稱。該系列單片機的始祖是Intel的8031單片機,後來隨著Flash
rom技術的發展,8031單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列。
❼ 51單片機實現直流電機PWM調速,為什麼要用定時器
直流電機的PWM調速,就是改變在一個周期里的通電時間,和斷電時間的比,即占空比,而通電時間+斷電時間=一個周期,這都是用時間來決定的,當然要用定時器。