Chat
Danh mục
PWM động cơ sử dụng 89C51

PWM động cơ sử dụng 89C51

Số lượng:
Thêm vào giỏ
PWM động cơ sử dụng 89C51 đã được thêm vào giỏ hàng

PWM là cái gì mà sao nó được ứng dụng nhiều trong điều khiển. Lấy điển hình nhất mà chúng ta thường hay gặp là điều khiển động cơ và các bộ băm xung áp, điều áp… Sử dụng PWM điều khiển nhanh chậm của động cơ hay cao hơn nữa nó còn được dùng để điều khiển ổn định tốc độ động cơ.
Ngoài lĩnh vực điều khiển hay ổn định tải thì PWM nó còn tham gia và điều chế các mạch nguồn như là : boot, buck, nghịch lưu 1 pha và 3 pha…PWM chúng ta còn gặp nhiều trong thực tế và các mạch điện điều khiển. Điều đặc biệt là PWM chuyên dùng để điều khiển các phần tử điện tử công suất có đường đặc tính là tuyến tính khi có sẵn 1 nguồn 1 chiều cố định . Như vậy PWM nó được ứng dụng rất nhiều trong các thiết bị điện điện tử. Điều mà dân điện điện tử dễ dàng nhận ra là PWM chính nhân tố mà các đội Robocon sử dụng để điều khiển động cơ hay ổn định tốc độ động cơ. Trong bài viết này chúng ta sẽ tìm hiểu phương pháp dùng 8051 để tạo xung có độ rộng mong muốn trong điều khiển động cơ điện.
Giải thuật như sau:
- Tạo một tần số chuẩn từ 0,1 ms đến 10ms dùng các bộ timer của vi điều khiển.
- Thay đổi độ rộng xung bằng cách thay đổi tỷ số xung mức 1 và mức 0 của tần số chuẩn đó kết quả cho xung như yêu cầu .
Các bạn xem hình vẽ sau :


Với độ rộng xung thay đổi chúng ta có thể thay đổi độ sáng tối của đèn led , tốc độ động cơ ..
Dưới đây là một ứng dụng của PWM trong việc điều khiển động cơ điện 1 chiều



Video Mô Phỏng




Code ASM

;PHAN KHAI BAO CAC BIT NGO VAO
PWM BIT P1.6 ;BIT DIEU KHIEN THIET BI
UP BIT P3.4 ;TANG GIA TRI PWM
DOWN BIT P3.5 ;GIAM GIA TRI PWM
;PHAN KHAI BAO BIEN LED
PWM_VALUE EQU 31H
;KHAI BAO CAC VECTOR NGAT
ORG 0000H
LJMP SETUP ;KHOI DONG CHUONG TRINH KHI CAP NGUON
ORG 000BH
LJMP T0_ISR ;NGAT TIMER 0 DIEU RONG XUNG
ORG 0030H
SETUP:
SETB EA ;CHO PHEP NGAT TOAN CUC
SETB ET0 ;CHO PHEP NGAT TIMER 0
CLR PWM ;TAT THIET BI
MOV TMOD,#11H
MOV TH0,#HIGH(-200) ;\ ;TA 12MHZ => 200us x 100% = 20000us = 20ms
MOV TL0,#LOW(-200) ;/ CHU KY DIEU XUNG
MOV PWM_VALUE,#0 ;MAC DINH GIA TRI PWM = 0
MOV R7,#0 ;BIEN XAC DINH SO LAN NGAT TIMER
SETB TR0 ;CHO PHEP TIMER HOAT DONG
MAIN:
JB UP,CHECK_DOWN ;NEU PHIM UP = '1' THI KIEM TRA PHIM DOWN
LCALL DELAY200MS ;NEU PHIM UP = '0' THI CHO CHONG XUNG NAY
INC PWM_VALUE ;TANG GIA TRI PWM
MOV A,PWM_VALUE
CJNE A,#101,EXIT_UP ;CHUA TOI NGUONG TREN THI THOAT THU TUC NHAN PHIM
MOV PWM_VALUE,#100 ;DO DAY XUNG DAT 100%
EXIT_UP:
JMP MAIN
CHECK_DOWN:
JB DOWN,MAIN
LCALL DELAY200MS
DEC PWM_VALUE
MOV A,PWM_VALUE
CJNE A,#-1,EXIT_DOWN ;CHUA TOI NGUONG DUOI THI THOAT THU TUC NHAN PHIM
MOV PWM_VALUE,#0 ;DO DAY XUNG BANG 0
EXIT_DOWN:
JMP MAIN
T0_ISR: ;NGAT TIMER DUNG DE DIEU RONG XUNG
PUSH ACC
MOV 7FH,C
CLR TR0
MOV TH0,#HIGH(-200)
MOV TL0,#LOW(-200)
SETB TR0
MOV A,PWM_VALUE
CJNE A,#0,EN_PWM ;DO DAY XUNG <> 0 THI CHO DIEU XUNG
JMP EXIT_ISR ;DO DAY XUNG = 0 THI THOAT KHOI THU TUC NGAT
EN_PWM:
INC R7 ;TANG BIEN DEM NGAT
MOV A,R7
CJNE A,PWM_VALUE,OFF_PULSE ;DU THOI GIAN DAY XUNG THI TAT THIET BI
CLR PWM ;TAT THIET BI
OFF_PULSE:
CJNE A,#100,EXIT_ISR ;CHUA HET CHU KY DIEU XUNG THI THOAT NGAT
SETB PWM ;TOI ROI THI MO THIET BI
MOV R7,#0 ;RESET LAI BIEN DEM
EXIT_ISR:
MOV C,7FH
POP ACC
RETI
DELAY50MS:
MOV TH1,#HIGH(-50000) ; CHUONG TRINH CON TRE 50MS GIAY
MOV TL1,#LOW(-50000) ;  SU DUNG THACH ANH 12MHZ
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1
RET
DELAY200MS:
LCALL DELAY50MS
LCALL DELAY50MS
LCALL DELAY50MS
LCALL DELAY50MS
RET
END

Code C
#include <REGX52.H>
sbit    PWM = P1^6;//khai bao chan dieu khiên bam xung
sbit    TANG = P3^4;
sbit    GIAM = P3^5;
unsigned char dem=0,tocdo=50;
bit TANG1=1,TANG0=1,GIAM0=1,GIAM1=1;
void timer0(void) interrupt 1
{
TR0 = 0;
TF0 = 0;
dem++;
if(dem > 100)
dem = 0;
if(dem<tocdo)
PWM = 1;
else
PWM = 0;
TR0 = 1;
}
void phimnhan()
{
//////////////////////////
TANG0=TANG1;TANG1=TANG;
if((TANG0==1)&&(TANG1==0))
tocdo=tocdo+10;
if(tocdo==110)tocdo=100;
/////////////////////////////////
GIAM0=GIAM1;GIAM1=GIAM;
if((GIAM0==1)&&(GIAM1==0))
tocdo=tocdo-10;
if(tocdo==-10)tocdo=0;
}
void main(void)
{
TMOD = 0×02;
IE = 0×82;
TH0=TL0=-100; // tao tan so 0.1 ms
TR0 = 1;
PWM=0;
while(1)
{
phimnhan();
}
}


(file code và mô phỏng Protues 7.10)
Khi nhấn nút "Tải Về Máy", bạn sẽ vào trang quảng cáo, vui lòng chờ 5 giây. Nút  hiện ra ở góc phải phía trên, nhấn vào để đến trang download

Blog Điện Tử | Tin Học - Chia sẻ kiến thức - Kết nối đam mê điện tử