Điều chế độ rộng xung PWM
Chủ Nhật, 20 tháng 5, 2012
0
nhận xét
Điều chế độ rộng xung PWM:
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
Trên mạch có 2 phím tăng giảm để điều chỉnh độ rộng xung. Xung đầu ra được khuếch đại qua tran TIP41 điều khiển động cơ.
Code lập trình :
#include <REGX52.H>
sbit PWM = P2^3;
sbit TANG = P1^2;
sbit GIAM = P1^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();
}
}
0 nhận xét:
Đăng nhận xét