Tải bản đầy đủ
CHƯƠNG 3 :THIẾT KẾ MẠCH ĐO VÀ HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ

CHƯƠNG 3 :THIẾT KẾ MẠCH ĐO VÀ HIỂN THỊ TỐC ĐỘ ĐỘNG CƠ

Tải bản đầy đủ

đưa vào đầu còn lại của động cơ động cơ vẫn quay theo chiều như trước nhưng tốc độ
nhanh hơn.
Khi nhấn nút giảm tốc độ(chân P1.2) VXL sẽ tăng một xung PWM mới (giảm
độ rộng xung âm so với mức trước) trên chân 17 qua opto (cách ly quang chống nhiễu
cho vi điều khiển) qua MOSFET IRF540 khuếch đại tín hiệu đưa vào đầu còn lại của
động cơ động cơ vẫn quay theo chiều như trước nhưng tốc độ chậm hơn.
Khi nhấn nút đảo chiều(chân P1.3), tín hiệu được đưa đến vi điều khiển, vi
điều khiển nhận và xử lí tín hiệu sau đó đưa tín hiệu qua chân P3.6 khi đó chân P3.6
tích cực ơ mức 0V,khi đó cuộn hút rơle có điện tiếp điểm 1 và 2 của rơle đa tiếp điểm
bị đảo trạng thái . Điện áp đặt vào 2 đầu động cơ là khác nhau (0V – 12`V), đồng thời
vi điều khiển tạo xung PWM trên chân 17 qua opto (cách ly quang, chống nhiễu cho
vi điều khiển) qua MOSFET IRF540 khuếch đại tín hiệu đưa vào đầu còn lại của động
cơ động cơ quay ngược.
Khi nhấn nút RESET vi điều khiển, vi điều khiển trở về trạng thái ban đầu
động cơ ngừng hoạt động.
3.1.2. Tính toán và lựa chọn linh kiện mạch.
3.1.2.1. Khối nguồn.
Sơ đồ :

Hình 3.3.-Khối nguồn.

Nguyên lý:
Nguồn điện qua biến áp hạ áp từ 220V(AC) xuống 24V(AC) qua bộ chỉnh lưu
cầu biến thành áp 22,6 V(DC) qua các tụ lọc để san phẳng điện áp, rồi qua IC ổn áp
7805 và 7812 để ổn định điện áp, lấy ra mức điện áp 5V và 12V(DC) cấp cho vi xử lý
và khối công suất.
Điện áp ra sau cầu chỉnh lưu:
Ura= U2 - 2UD =24 – 2.0,7 =22,6 (V)
Công suất khả kiến của MBA:
PMBA=Ira.Ura= 3.22,6 = 67,8 (W)
(Sử dụng MBA 220/24VAC-3A).
Công suất sau khi qua IC7812 là:
P= U.I =12. 1,5= 18 W.
3.1.2.2. Khối điều khiển và cách ly.

Hình 3.4. Khối điều khiển và cách ly.
Chân P1.0 ; P1.1 được kết nối với phím bấm điều khiển chế độ hoạt động.
Chân P3.7 xuất tín hiệu xung PWM đưa đến khối công suất để điều khiển tốc độ của
động cơ.
Chân P1.0 xuất giá trị 0 là chế độ tăng tốc độ của động cơ.
Chân P1.1 xuất giá trị 0 là chế độ giảm tốc độ của động cơ.
Chân 18 và 19 kết nối với thạch anh 12MH tạo dao động.
Khối ổn áp nguồn 5V cấp nguồn cho vi xử lý AT89C51 hoạt động.
Chân P3.5 được kết nối với encoder để sửa xung cho encoder.
Cách ly

Opto PC817 giúp cách ly giữa mạch công suất và mạch điều khiển vì đôi khi động cơ
chạy quá dòng thì dòng trả về lớn chết một số linh kiện trong mạch công suất , nếu
không có cách ly thì dòng lớn sẽ theo vi mạch làm vi điều khiển và toàn bộ những linh
kiện khác trong mạch bị ảnh hưởng .
3.1.2.3. Khối hiển thị
Sơ đồ:

Hình 3.5. Khối hiển thị LCD
Chức năng: Khối LCD có nhiệm vụ hiển thị tốc độ động cơ.
Trong mạch Port0 sẽ truyền trực tiếp dữ liệu cho LCD.
Các chân điều khiển RS, RW, E được ghép nối với 3 chân P2.0, P2.1, P2.2 của
vi điều khiển.
Các chân số 2, 1 cung cấp nguồn hoạt động cho LCD, chân số 3 là chân điều
chỉnh độ tương phản được nối vào một điện trở tinh chỉnh.
Chân 15, 16 có nhiệm vụ cung cấp điện áp cho đèn led trong LCD và được hạn
dòng bằng 1 điện trở 1K.
Điện trở tinh chỉnh có chức năng thay đổi độ tương phản của LCD.

3.2.Chế tạo mạch.
Sơ đồ board mạch.

Hình 3.6. Sơ đồ board mạch.

3.3. Lắp đặt, chạy thử, hiệu chỉnh
Lập trình chương trình điều khiển cho VXL
Tiến hành lắp đặt, test mach trên bộ thí nghiệm hoặc trên panel, modul..vv
Tiến hành test tín hiệu các khối bằng máy hiện sóng:

Chú thích:
- Tín hiệu 1 (xanh da trời): là tín hiệu điều khiển (PWM) được đưa vào 1 đầu
của động cơ.
- Tín hiệu 2 (màu hồng): là tín hiệu DC dùng làm nguồn cố định của động cơ.
- Tín hiệu 3 (màu xanh lá): là tín hiệu (xung) phản hồi từ encoder.

Chương 4: Code Lập Trình
Code lập trình.
#include
/**********************Dinh nghi chan*******************************/
#define LCD_RS P2_0 // dinh nghia chan RS noi voi P2.0
#define LCD_EN P2_2
#define LCD_RW P2_1
#define LCD_D4 P2_4
#define LCD_D5 P2_5
#define LCD_D6 P2_6
#define LCD_D7 P2_7
#define UP P1_1
#define DOWN P1_2
#define DC P3_7
#define daochieu P1_3
#define chieuquay P3_6
/***************************Khai bao*******************************/
unsigned char Status ;
unsigned int speed,s_speed=0 ;
unsigned int so_xung =0,Ts;
void Delay_ms(unsigned int t)// ham tre 1ms
{
unsigned int x,y;
for(x=0;x{
for(y=0;y<123;y++);
}
}
void delay_us(unsigned int t) // ham tre us
{
while(t--);
}
void Lcd_Write_High_Nibble(unsigned char b)
{
LCD_D7 = b & 0x80;
//

LCD_D6 = b & 0x40;
LCD_D5 = b & 0x20;
LCD_D4 = b & 0x10;
}
void Lcd_Write_Low_Nibble(unsigned char b)
{
LCD_D7 = b & 0x08;
LCD_D6 = b & 0x04;
LCD_D5 = b & 0x02;
LCD_D4 = b & 0x01;
}
void Lcd_Delay_us(unsigned char t)
{
while(t--);
}
void Lcd_Cmd(unsigned char cmd)
{
LCD_RW = 0;
//
ghi 1 lenh len LCD
LCD_RS = 0;
//
chon thanh ghi lenh
Lcd_Write_High_Nibble(cmd);
LCD_EN = 1;
// tao 1 xung de chot du lieu
LCD_EN = 0;
Lcd_Write_Low_Nibble(cmd);
LCD_EN = 1;
LCD_EN = 0;
switch(cmd)
{
case 1:
case 2:
Delay_ms(2);
break;
default:
Lcd_Delay_us(37);
break;
}

}
void Lcd_Init()
{
LCD_RS = 0;
LCD_EN = 0;
LCD_RW = 0;
Delay_ms(20);
Lcd_Write_Low_Nibble(0x03);
LCD_EN = 1;
LCD_EN = 0;
Delay_ms(5);
Lcd_Write_Low_Nibble(0x03);
LCD_EN = 1;
LCD_EN = 0;
Lcd_Delay_us(100);
Lcd_Write_Low_Nibble(0x03);
LCD_EN = 1;
LCD_EN = 0;
Delay_ms(1);
Lcd_Write_Low_Nibble(0x02);
LCD_EN = 1;
LCD_EN = 0;
Delay_ms(1);
Lcd_Cmd(0x28);
Lcd_Cmd(12); //
Lcd_Cmd(1); //
Lcd_Cmd(6); //

//

// lenh dua con tro ve dau dong

hien thi che do 2 dong va font 5*7

}
void Lcd_Chr_Cp(unsigned char achar) // ham gui ky tu ngay tai vi tri con tro
{
LCD_RW = 0;

LCD_RS = 1;
Lcd_Write_High_Nibble(achar);
LCD_EN = 1;
LCD_EN = 0;
Lcd_Write_Low_Nibble(achar);
LCD_EN = 1;
LCD_EN = 0;
Lcd_Delay_us(37+4);
}
void Lcd_Chr(unsigned char row, unsigned char column,
unsigned char out_char)
// ham gui 1 ky tu tai 1 vi tri bat ky
{
unsigned char add;
// khai bao byte lenh
add = (row==1?0x80:0xC0);
// vi tri can hien thi, hang nao cot nao
add += (column - 1);
Lcd_Cmd(add);
// lenh de dich con tro den vi tri can thiet
Lcd_Chr_Cp(out_char);
//
goi ham xuat ky tu can hien thi tai vi tri con
tro
}
void Lcd_Out_Cp(unsigned char * str)
con tro
{
unsigned char i = 0;
1(unsgned char:0>255)
while(str[i])
{
Lcd_Chr_Cp(str[i]);
hinh LCD
i++;
}
}

// ham xuat ra 1 chuoi ky tu ngay tai vi tri

//khai bao bien i va gan cho no gia tri bang
// bien chay i
//

gui ky tu trong chuoi ra man

void Lcd_Out(unsigned char row, unsigned char column, // ham xuat ra man hinh mot
chuoi ky tu tai vi tri hang row, cot column
unsigned char* text)
{
unsigned char add;
// khai bao byte lenh
add = (row==1?0x80:0xC0); // di chuyen con tro den vi tri can thiet
add += (column - 1);
Lcd_Cmd(add);
// gui lenh den di chuyen con tro den vi tri
can thiet
Lcd_Out_Cp(text);// xuat 1 chuoi ra man hinh
}
void Lcd_Custom_Chr(unsigned char location, unsigned char * lcd_char)
{
unsigned char i;
Lcd_Cmd(0x40+location*8);
for (i = 0; i<=7; i++)
Lcd_Chr_Cp(lcd_char[i]);
}
void khoitaotimer()
{
TMOD=0x01;
TH0 =0x3c; // nap du lieu vao thanh ghi timer
TL0 =0xb0;
ET0=1;
EA=1;
TR0=1;
}
void khoitaongatngoai0()
{
EA=1;
EX1=1;
IT1=1;
}
void khoitaotimer1()
{

//???

TMOD=0x10;
TH1 =0x3C; // nap du lieu vao thanh ghi timer
TL1 =0xB0;
ET1=1;
EA=1;
TR1=1;
}
void hienthi()
{
Lcd_Chr(2,8,speed/1000+0x30);
// hien thi chu so hang nghin cua speed(toc
do) tai vi tri hang 2 cot 12. speed/1000 tinh ra hang nghin cua toc do sau do cong 0x30
la de doi chu so hang nghi sang ma ASSII, sau do hien thi ra LCD
Delay_ms(100);
Lcd_Chr_Cp((speed%1000)/100+0x30); // hien thi hang tram cua speed
Delay_ms(100);
Lcd_Chr_Cp((speed%100)/10+0x30); // hien thi hang chuc cua speed
Delay_ms(100);
Lcd_Chr_Cp(speed%10+0x30);
// hien thi hang don vi
cua speed
Delay_ms(100);
Lcd_Chr(1,12,s_speed/100+0x30);
// hien thi chu so hang tram
cua s_speed(phan tram xung) tai vi tri hang 1 cot 12. s_speed/100 tinh ra chu so hang
tram sau do cong them 0x30 la de doi chu so hang tram sang ma ASSII, sau do hien thi
ra LCD
Lcd_Chr_Cp((s_speed%100)/10+0x30); // hien thi chu so hang chuc cua
s_speed
Lcd_Chr_Cp(s_speed%10+0x30); // hien thi chu so hang don vi cua
s_speed
}
void nutnhan ()
{
if(daochieu==1)
{
chieuquay=1;
}
else