You are on page 1of 14

BÀI THỰC HÀNH 1.

2 ĐO VÀ ĐIỀU KHIỂN TỐC ĐỘ


ĐỘNG CƠ MỘT CHIỀU SỬ DỤNG ENCODER

1. Mục đích bài học


- Sử dụng Encoder và Timer, Couter của vi xử lý thực hiện
bài toán đo và điều chỉnh tốc độ động cơ một chiều với 3
cấp tốc độ. Các thiết bị trong hệ thống gồm:
- 1 vi điều khiển họ 8051
- 1 Encoder (100xung/vong)
- 1 động cơ 1 chiều 24VDC
- 4 Led 7 thanh hiển thị tốc độ
- 3 nút ấn Mode1, Mode2, Mode3 để chọn tốc độ với 3 tốc
độn tùy chọn.
2. Nội dung SV cần chuẩn bị
- Nghiên cứu đặc điểm của Encoder và sơ đồ đấu nối.
- Phương pháp đo tốc độ động cơ dùng Encoder
- Các phương pháp điều khiển tốc độ động cơ.
3. Trình tự thực hiện
3.1 Xây dựng mạch nguyên lý

Hình 1: Mạch nguyên lý trong proteus


3.2 Bài toán đo và hiển thị tốc độ động cơ
a) Nguyên lý:
(Encoder: dùng để đo số vòng quay của động cơ, encoder đo
tốc độ động cơ thông qua cơ chế sự liên lạc – mất liên lạc của
LED phát quang rồi gửi thành các xung điện áp vuông gửi tới
chân ngắt của VĐK. Khối VĐK: nhận các tín hiệu từ encoder
qua cơ chế ngắt căn cứ vào số Xung để tính toán tốc độ. Khối
hiển thị và cảnh báo: nhận số liệu về tốc độ từ VĐK rồi hiển
thị lên LED 7 thanh, khi tốc độ vượt ngưỡng cho phép thì LED
cảnh báo sáng.)
- các bước thực hiện đo:
+ Sử dụng ngắt ngoài 0 (INT0) để đếm xung của encoder (có
thể dùng counter để đếm
xung)
+ Dùng Timer0 định thời gian ngắt, thời gian này được lập
trình để có thể thay đổi tùy
vào mục đích, ở đây chọn thời gian ngắt bằng 1s để thuận lợi
cho việc tính toán. Sau khi
đếm được số xung trong 1s là B, và đã biết loại Encoder có số
xung/ vòng = A, ta suy ra
được công thức tính tốc độ động cơ:
B
n= ∗60 ( vòng/ phút).
A
b) Sơ đồ khối
Hình 2: sơ đồ khối của hệ thống
- Để thực hiện hệ thống thì sử dụng các ngoại vi:
Encoder(đo tốc độ), led 7 thanh (hiển thị tốc độ), led đơn
(cảnh báo)
c) Lưu đồ thuật toán được sử dụng

Hình 3: Lưu đồ thuật toán được sử dụng trong bài


3.3 Chương trình
Chương trình được sử dụng trong bài:
#include <REGX51.H>
#define LED1 P2_0
#define LED2 P2_1
#define LED3 P2_2
#define LED4 P2_3
char LED_7_THANH[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99,
0x92, 0x82, 0xf8, 0x80,0x90};
int so=0;
void delay_ms (int x)
{
int i,j ;
for (i=0; i<x; i++)
{
for (j=0; j<125; j++);
}
}
void hienthi_LED_7_THANH (int x){
int nghin, tram, chuc, dv;
nghin = x/1000;
tram = x%1000/100;
chuc = x%100/10;
dv = x%10;
LED1=0;
LED2=0;
LED3=0;
LED4=0;
P0 = LED_7_THANH[nghin]; LED1=1; delay_ms(2);
LED1=0;
P0 = LED_7_THANH[tram]; LED2=1; delay_ms(2);
LED2=0;
P0 = LED_7_THANH[chuc]; LED3=1; delay_ms(2);
LED3=0;
P0 = LED_7_THANH[dv]; LED4=1; delay_ms(2); LED4=0;
}
int xung = 0;
void ngatINT0(void) interrupt 0
{
xung++;
}
int thoi_gian=0;
float tocdo=0;
void timer0(void) interrupt 1
{
thoi_gian++;
if(thoi_gian==20){
tocdo=(float)xung*60/100;
thoi_gian=0;
xung=0;
}
TH0=0x3C;
TL0=0XB0;
TR0=1;
}
void main () {
EX0=1;
IT0=1;
EA=1;
TMOD = 0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;
TR0=1;
while(1) {
hienthi_LED_7_THANH(tocdo);
}
}
3.4 Nạp chương trình và chạy mô phỏng
Thực hiện nạp chương trình và chạy mô phỏng trong Proteus:
Hình 4: Mạch hoạt động với tốc độ v1
Hình 5: Mạch hoạt động với tốc độ v2

Hình 6: Mạch hoạt động với tốc độ v3


4. Đánh giá và nhận xét kết quả thực hiện
+ Chương trình viết đúng thuật toán đã được thiết kế
+ Mạch gọn, đơn giản, sử dụng đúng linh kiện đã được học và
yêu cầu của bài toán.
+ Chương trình tương thích với mạch nguyên lý.
+ Chương trình chạy liên tục, không xuất hiện lỗi trong quá
trình chạy.
+ Đã đáp ứng được đúng yêu cầu của bài toán.

BÀI THỰC HÀNH 1.2 ĐO VÀ ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ MỘT


CHIỀU SỬ DỤNG ENCODER (tiếp)

1. Bài toán điều khiển động cơ ở tốc độ đặt trước


Yêu cầu: Khi ấn các nút chọn tốc độ Mode 1, Mode 2, Mode 3,
động cơ sẽ chạy ở tốc độ đặt trước.
2. Mạch nguyên lý
Sơ đồ mạch nguyên lý được thiết kế trong Proteus

Hình 7:sơ đồ mạch nguyên lý được sử dụng trong bài


3. Lưu đồ thuật toán
Lưu đồ thuật toán được thiết kế để sử dụng trong bài:

Hình 8: Lưu đồ thuật toán được thiết kế


4. Chương trình
#include <REGX51.H>

#define LED1 P2_0


#define LED2 P2_1
#define LED3 P2_2
#define LED4 P2_3

char LED_7_THANH[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92,


0x82, 0xf8, 0x80,0x90};
int so=0;

void delay_ms (int x)


{
int i,j ;
for (i=0; i<x; i++)
{
for (j=0; j<125; j++);
}
}

void hienthi_LED_7_THANH (int x){


int nghin, tram, chuc, dv;

nghin = x/1000;
tram = x%1000/100;
chuc = x%100/10;
dv = x%10;

LED1=0;
LED2=0;
LED3=0;
LED4=0;

P0 = LED_7_THANH[nghin]; LED1=1; delay_ms(2); LED1=0;


P0 = LED_7_THANH[tram]; LED2=1; delay_ms(2); LED2=0;
P0 = LED_7_THANH[chuc]; LED3=1; delay_ms(2); LED3=0;
P0 = LED_7_THANH[dv]; LED4=1; delay_ms(2); LED4=0;
}

int xung = 0;
int dem;
void ngatINT0(void) interrupt 0
{
xung++;
}

int thoi_gian=0;
float tocdo=0;
void timer0(void) interrupt 1
{
thoi_gian++;
if(thoi_gian==20,P1_0==0){
tocdo=(float)xung*60/200;
thoi_gian=0;
xung=0;
}
if(thoi_gian==20,P1_1==0){
tocdo=(float)xung*60/150;
thoi_gian=0;
xung=0;
}
if(thoi_gian==20,P1_2==0){
tocdo=(float)xung*60/120;
thoi_gian=0;
xung=0;
}
if(thoi_gian==20,P1_3==0){
tocdo=(float)xung*0;
thoi_gian=0;
xung=0;
}

TH0=0x3C;
TL0=0XB0;
TR0=1;
}

void main () {
EX0=1;
IT0=1;
EA=1;
TMOD = 0X01;
TH0=0X3C;
TL0=0XB0;
ET0=1;
TR0=1;

while(1) {
hienthi_LED_7_THANH(tocdo);
if(P1_0==0) hienthi_LED_7_THANH(tocdo);
if(P1_1==0) hienthi_LED_7_THANH(tocdo);
if(P1_2==0) hienthi_LED_7_THANH(tocdo);
if(P1_3==0) hienthi_LED_7_THANH(tocdo);
}
}
5. Nạp và chạy mô phỏng
Thực hiện nạp chương trình và chạy mô phỏng trong Proteus:
+ Mạch chạy ở chế độ mode 1 với tốc độ 1:

Hình 9: mạch chạy ở chế độ 1 với tốc độ v1


+ Mạch chạy ở chế độ mode 2 với tốc độ 2:

Hình 10: mạch chạy ở chế độ 2 với tốc độ v2


+ Mạch chạy ở chế độ mode 3 với tốc độ 3:

Hình 11: mạch chạy ở chế độ 3 với tốc độ v3


+ Mạch về chế độ ban đầu với v = 0 :

Hình 12: mạch chạy ở chế độ ban đầu

6. Đánh giá và nhận xét kết quả thực hiện


+ Chương trình viết đúng thuật toán đã được thiết kế
+ Mạch gọn, đơn giản, sử dụng đúng linh kiện đã được học và
yêu cầu của bài toán.
+ Chương trình tương thích với mạch nguyên lý
+ Chương trình chạy liên tục, không xuất hiện lỗi trong quá
trình chạy.
+ Đã đáp ứng được đúng yêu cầu của bài toán.

You might also like