Mạch Khóa Số Điện Tử Mạch Đếm Sản Phẩm Mạch Đèn giao thông Ngã Tư Mạch Trái Tim Final Mạch Trái Tim Final Mạch Trái Tim I Love U

October 19, 2012

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

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ử

6 comments:

cutu said...
19/10/12

kiểm tra sửa lỗi giùm em cái file mạch in này với anh / http://www.mediafire.com/?f8hzgf48jndbnoj :SS

Chip Kool said...
20/10/12

Nhìn cái mạch..em đi tự động ak..đường đi xấu quá..thô lắm..em muốn vẽ chuẩn chỉ cần em vẽ nguyên lý chuẩn..THÀ KIỂM TRA NGUYÊN LÝ CHUẨN CHỨ NGÔI KIỂM TRA MẠCH IN CHUẨN KHÔNG KHÓ ĐẤY..trừ khi em hiểu rõ mạch..vẽ bằng tay..mạch em vẽ cũng tạm ổn bước đầu..cố gắng hoàn thiện..mạch được.:P

Cường Nguyễn said...
25/10/12

@Chip Kool
bạn ơi...bạn có thể gửi cho mình mạch nguyên lý chuẩn của mạnh điều khiển tốc độ động cơ một chiều này được không?
mình đang cần thiết kế một cái mạch thực tế như vậy....
nếu có thể thì gửi qua mail cho mình bạn nhé
cuongnguyenutehy@gmail.com
cảm ơn bạn trước nhé

Tuan Ngoc Nguyen said...
20/4/13

Anh có thể share cho em lưu đồ thuật toán của bài mô phỏng điều khiển động cơ DC bằng PWM này vào mail ngtuanngoc92@gmail.com được không ạ, em mới học vi xử lý mà phần PWM này khó quá.
Em cám ơn ạ.

huynh tuanphuong said...
8/10/14

hi anh Chip, em co thể sử dụng VR thay cho nút nhấn đc k ạ? nếu đc thì em có cần phải sửa lại code asm k, anh làm ơn giúp em với, có gì anh gửi qua cho em nha, cảm ơn anh nhiều, huynhtuanphuong9999@gmail.com

huynh tuanphuong said...
8/10/14

MOV TH0,#HIGH(-200) ;\ ;TA 12MHZ => 200us x 100% = 20000us = 20ms
MOV PWM_VALUE,#100 ;DO DAY XUNG DAT 100%
sao hai dòng này bị lỗi vậy anh, em dùng SPKT phiên dịch mà bị lỗi

Post a Comment

Bạn đọc hãy giúp chúng tôi xây dựng cộng đồng bằng cách để lại bình luận, chúng tôi luôn đón nhận mọi ý kiến của các bạn:
» Bình luận nghiêm túc và không chứa các liên kết quảng cáo.
» Vui lòng không Spam nhận xét với mọi hình thức.
» Rất mong bạn đề tên cho nhận xét của chính mình - Bằng cách chọn vào Tên/URL và điền tên bạn vào (Phần URL có thể bỏ trống ).

- Bạn có thể chèn Link nhạc (NCT), video(Youtube),Hình ảnh vào comment bằng cú pháp:
+ [youtube] Link video Youtube [/youtube].
+ [img] Link ảnh( định dạng PNG, JPG,GIF) [/img]
+Chèn link liên kết: <a href="LINK" rel="nofollow">Name</a>
-Bạn copy mã bên cạnh biểu tượng chèn vào nhận xét để bày tỏ cảm xúc!!

:) :( :)) :(( =)) =D> :D :P