Xem mẫu
- Bài 8: BÀI TOÁN TỔNG QUÁT
I>Điều Khiển Động Cơ Nâng Cao:
Ở bài trước các bạn đã biết cách điều khiển động cơ với
một tốc độ cố định (động cơ chỉ chạy với một tốc độ hoặc
nếu có thay đổi tốc độ thì hoàn toàn phụ thuộc vào chương
trình trên vđk) .Như vậy với một bài toán thực tế :tốc độ
động cơ thay đổi tùy thuộc vào môi trường bên ngoài(cảm
biến…) thì nó chưa giải quyết được vấn đề .
Ở bài này ta sẽ đi giải quyết vấn để trên.
- Bài 8: BÀI TOÁN TỔNG QUÁT
THUẬT TOÁN ĐIỀU KHIỂN:
Giả sử ta cần có 10 cấp tốc độ cho ĐC, và muốn động cơ quay ở cấp
tốc độ v vơi T = 0,001s(f=1kHz), tốc độ v này được thay đổi qua việc
thiết lập bằng phím bấm , qua giao tiếp máy tính , hay qua tính toán
từ việc thu thập giư liệu từ các cảm biến ….ta sẽ có giải thuật cho
hàm PWM như sau :
Để có được 10 cấp tốc độ thì ta sẽ chia T thành 10 lần ngắt BĐT.
Như vậy với T=0,001s=1000chu kỳ máy thì ta phải tạo BĐT 100 chu kỳ
sẽ ngắt một lần(kiến thức bài 6).Như vậy có thể coi mỗi lần ngắt sẽ
tương đương với một cấp tốc độ , và việc còn lại là so sánh số lần
ngắt với v để tạo xung thich hợp
- Bài 8: BÀI TOÁN TỔNG QUÁT
Giải thuật chương trình tạo xung
Start
Tắ cờ ngắ ko tắ
t t, t
BĐT(TRx)
i++;
Đ PWM=1
If(i
- Bài 8: BÀI TOÁN TỔNG QUÁT
B1 :Dùng bộ đếm Counter0 để đếm số lần nhấn phím
ở chân P3_4 ,băm xung đk động cơ băng T0,mỗi lần bấm
thì tốc độ động cơ sẽ tăng lên 1 cấp(10 cấp như trên).
(tham khảo B1 của bài số 7). Dùng cả ngắt ngoài để thay
đổi chiều quay của động cơ(INT0)
B2 : Vẫn dùng Counter0 như trên(hoặc hàm phím bấm)
và 20 cấp tốc độ. Tốc độ động cơ sẽ thay đổi tùy thuộc
vào việc bạn bấm nhanh hay chậm (bấm càng nhanh thì
tốc độ đc càng cao) .Hiển thị cấp tốc độ ra Led 7 thanh.
- Bài 8: BÀI TOÁN TỔNG QUÁT
II>PHÍM MA TRẬN:
Sơ Đồ Nguyên Lý:
- Bài 8: BÀI TOÁN TỔNG QUÁT
5V
R26 R27 R28 R25
10Kx8 R R R
5VDC
5V
A PHIM 1 PHIM 2 PHIM 3 PHIM 4
U3
40
21
B 22 P2.0 1 2 1 2 1 2 1 2
VCC
23 P2.1 R3
P2.2 R21
24 10K + C3
C 25
26
P2.3
P2.4 31 10uF/25V
HANG 1
D 27 P2.5 EA/VP PHIM 5 PHIM 6 PHIM 7 PHIM 8
P2.6 R
E 9 1 2 1 2 1 2 1 2
RESET
F R1
R22
10K
G
10 P3.0
PHIM 9 PHIM 10 PHIM 11 PHIM 12 HANG 2
LED 7 THANH P3.0
P3.1
11
12
P3.1
P3.2 5V
1 2 1 2 1 2 1 2
R
P3.2 13 P3.3 P3.0
P3.3 P3.1 R23
C2 14 P3.4
33p
18
P3.4
P3.5
15
16
P3.5
P3.6
P3.2
P3.3
PHIM 13 PHIM 14 PHIM 15 PHIM 16 HANG 3
X2 P3.6 17 P3.7 P3.4 1 2 1 2 1 2 1 2
P3.7 P3.5 R
12Mhz
C1 19 P3.6
33p 20 X1 P3.7
VSS
8051 R24
HANG 4
R
COT 1
COT 2
COT 3
COT 4
- Bài 8: BÀI TOÁN TỔNG QUÁT
// Ban phim ma tran ------------------------------------
// chuong trinh lam quen voi ban phim matran 4*4
// Hien thi phim an tren LCD
/*-------------Ban phim matran---------------
===============
| 0 | 1 | 2 | 3 |
===============
| 4 | 5 | 6 | 7 |
===============
| 8 | 9 | + | - | Cac phim chuc nang voi ten dinh truoc.
===============
| * | / | D | = |
===============
-------------------------------------------*/
- Bài 8: BÀI TOÁN TỔNG QUÁT
#include
long codeLCD, hienthi ;
sbit co1 = P1^3;
sbit co2 = P1^2;
sbit co3 = P1^1;
sbit co4 = P1^0;
sbit ha1 = P1^7;
sbit ha2 = P1^6;
sbit ha3 = P1^5;
sbit ha4 = P1^4;
#include < string.h>
sfr LCDdata = 0xA0;// Cong 2 , 8 bit du lieu P0 co dia chi 0x80, P1 0x90 , P2 0xA0
sbit BF = 0xA7; // Co ban bit 7 cua p2
sbit RS = P3^7;
sbit RW = P3^6;
sbit EN = P3^5;
- Bài 8: BÀI TOÁN TỔNG QUÁT
/*------chuyen sang ma ASCII cho LCD--------*/
void decode_LCD(unsigned char number2)
{
switch (number2)
{
case 0: {codeLCD='0';break;}
case 1: {codeLCD='1';break;}
case 2: {codeLCD='2';break;}
case 3: {codeLCD='3';break;}
case 4: {codeLCD='4';break;}
case 5: {codeLCD='5';break;}
case 6: {codeLCD='6';break;}
case 7: {codeLCD='7';break;}
case 8: {codeLCD='8';break;}
case 9: {codeLCD='9';break;}
case 10: {codeLCD='+';break;}
case 11: {codeLCD='-';break;}
case 12: {codeLCD='*';break;}
case 13: {codeLCD='/';break;}
case 14: {codeLCD='D';break;}
case 15: {codeLCD='=';break;}
- Bài 8: BÀI TOÁN TỔNG QUÁT
/*---------Cac chuong trinh con cua lcd ------*/
//---------------Chuong trinh con kiem tra su san sang cua lcd----------------;
void wait(void)
{
long n = 0;
EN=1;// Dua chan cho fep len cao
RS=0;// Chon thanh ghi lenh
RW=1;// Doc tu LCD
LCDdata=0xff;// Gia tri 0xFF
while(BF){n++; if(n>110) break;}// Kiem tra co ban
// Neu ban dem n den 100 roi thoat khoi while
EN=0;// Dua xung cao xuong thap de chot
RW=0;// Doc tu LCD
}
- Bài 8: BÀI TOÁN TỔNG QUÁT
//------------------Chuong trinh con thiet lap lenh cho LCD----------------------;
void LCDcontrol(unsigned char x)
{
EN=1;// Dua chan cho fep len cao
RS=0;// Chon thanh ghi lenh
RW=0;// Ghi len LCD
LCDdata=x;// Gia tri x
EN=0;// Xung cao xuong thap
wait();// Doi LCD san sang
}
- Bài 8: BÀI TOÁN TỔNG QUÁT
//---------------chuong trinh con thiet lap mot so thong so cua lcd---------------;
void LCDinit(void)
{
LCDcontrol(0x38);// 2 dong va ma tran 5x7
LCDcontrol(0xc0);
LCDcontrol(0x0e);// Bat con tro
LCDcontrol(0x01);// Xoa man hinh
}
//------------------Chuong trinh con thiet lap dulieu cho LCD----------------------;
void LCDwrite(unsigned char c)
{
EN=1;// Cho fep muc cao
RS=1;// Ghi du lieu
RW=0;// Ghi len LCD
LCDdata=c;// Gia tri C
EN=0;// Xung cao xuong thap
wait();// Cho
}
- Bài 8: BÀI TOÁN TỔNG QUÁT
/*-----------------Chuong trinh con quet phim------------*/
void quetphim (void)
{ ha1=0; ha2=ha3=ha4=1;
if ( co1==0) codeLCD='0';
if ( co2==0) codeLCD='1';
if ( co3==0) codeLCD='2';
if ( co4==0) codeLCD='3';
ha2=0; ha1=ha3=ha4=1;
if ( co1==0) codeLCD='4';
if ( co2==0) codeLCD='5';
if ( co3==0) codeLCD='6';
if ( co4==0) codeLCD='7';
ha3=0; ha2=ha1=ha4=1;
if ( co1==0) codeLCD='8';
if ( co2==0) codeLCD='9';
if ( co3==0) codeLCD='+';
if ( co4==0) codeLCD='-';
ha4=0; ha2=ha3=ha1=1;
if ( co1==0) codeLCD='*';
if ( co2==0) codeLCD='/';
if ( co3==0) codeLCD='D';
- Bài 8: BÀI TOÁN TỔNG QUÁT
// main program ------>>-----
main()
{
ha1=ha2=ha3=ha4=co1=co2=co3=co4=1; // thiet lap cot dau vao vdk
LCDinit();
LCDwrite('P');
LCDwrite('h');
LCDwrite('i');
LCDwrite('m');
LCDwrite(' ');
LCDwrite('a');
LCDwrite('n');
LCDwrite(' ');
LCDwrite('l');
LCDwrite('a');
LCDwrite(':');
while(1){
quetphim();
LCDcontrol(0x8c);
LCDwrite(codeLCD);
}
- Bài 8: BÀI TOÁN TỔNG QUÁT
III>Led Matrix:
8 7 6 5 4 3 2 1
L E D M A T R IX 1
8x8
9 10 11 12 13 14 15 16
- Bài 8: BÀI TOÁN TỔNG QUÁT
VCC
1
R3
10K
H ang6
H ang3
H ang1
H ang2
H ang4
C o t4
C o t6
C o t7
9 U1
8
7
6
5
4
3
2
C o t1 39 21 H ang1
C o t2 38 P 0 .0 /A D 0 P 2 .0 /A 8 22 H ang2 8 7 6 5 4 3 2 1
C o t3 37 P 0 .1 /A D 1 P 2 .1 /A 9 23 H ang3
C o t4 36 P 0 .2 /A D 2 P 2 .2 /A 1 0 24 H ang4
C o t5 35 P 0 .3 /A D 3 P 2 .3 /A 1 1 25 H ang5
C o t6 34 P 0 .4 /A D 4 P 2 .4 /A 1 2 26 H ang6
C o t7 33 P 0 .5 /A D 5 P 2 .5 /A 1 3 27 H ang7
C o t8 32 P 0 .6 /A D 6 P 2 .6 /A 1 4 28 H ang8
P 0 .7 /A D 7 P 2 .7 /A 1 5
1 10
2 P 1 .0 P 3 .0 /R X D 11 L E D M A TR IX 1
3 P 1 .1 P 3 .1 /T XD 12
4 P 1 .2 P 3 .2 /IN T 0 13 8x8
5 P 1 .3 P 3 .3 /IN T 1 14
6 P 1 .4 P 3 .4 /T 0 15
7 P 1 .5 P 3 .5 /T 1 16
8 P 1 .6 P 3 .6 /W R 17
P 1 .7 P 3 .7 /R D
19 30
Y1 18 X1 ALE 29 9 10 11 12 13 14 15 16
X2 PSEN
31
C o t5
C o t3
C o t8
9 EA
H ang8
H ang5
H ang7
C o t2
C o t1
C1 C2 RST
33p 12M 33p 40
GND
VCC
8051
20
+ C3 R2
10K
10uF
- Bài 8: BÀI TOÁN TỔNG QUÁT
D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 8
H ang 1 LED LED LED LED LED LED LED LED
D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 8
LED LED LED LED LED LED LED LED
H ang 2
D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 8
LED LED LED LED LED LED LED LED
H ang 3
D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 8
H ang 4 LED LED LED LED LED LED LED LED
D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 8
H ang 5 LED LED LED LED LED LED LED LED
D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 8
LED LED LED LED LED LED LED LED
H ang 6
D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 8
H ang 7 LED LED LED LED LED LED LED LED
D 2 D 3 D 4 D 5 D 6 D 7 D 8 D 8
LED LED LED LED LED LED LED LED
C o t1
C o t2
C o t3
C o t4
C o t5
C o t6
C o t7
C o t8
H ang 8
- Bài 8: BÀI TOÁN TỔNG QUÁT
#include
/* Cot tu P0.0 den P0.7
Hang tu P2.0 den P2.7
De quet dua muc logic 0 lan luot ra cong 0
*/
/* Ham tre */
void delay(long time)
{
long n;
for(n=0; n
- Bài 8: BÀI TOÁN TỔNG QUÁT
/* Ham nap gia tri hien thi cac ky tu vao mang kytu1
co 8 gia tri dua ra va 1 gia tri khong bat den nao de cac ky tu cach nhau 1 cot */
void mahoa(unsigned char x)
{
switch(x)
{
// Dau trang
case 0: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00;
kytu1[3]=0x00; kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00;
kytu1[8]=0x00; break; }
// Chu M
case 1: { kytu1[0]=0x00; kytu1[1]=0xFF; kytu1[2]=0x02;
kytu1[3]=0x04; kytu1[4]=0x08; kytu1[5]=0x04; kytu1[6]=0x02; kytu1[7]=0xFF;
kytu1[8]=0x00; break; }
// Chu T
case 2: { kytu1[0]=0x00; kytu1[1]=0x01; kytu1[2]=0x01;
kytu1[3]=0x01; kytu1[4]=0xFF; kytu1[5]=0x01; kytu1[6]=0x01; kytu1[7]=0x01;
kytu1[8]=0x00; break; }
- Bài 8: BÀI TOÁN TỔNG QUÁT
// Chu C
case 3: { kytu1[0]=0x00; kytu1[1]=0x7E; kytu1[2]=0x81;
kytu1[3]=0x81; kytu1[4]=0x81; kytu1[5]=0x81; kytu1[6]=0x42; kytu1[7]=0x00;
kytu1[8]=0x00; break; }
// Dau trang
case 4: { kytu1[0]=0x00; kytu1[1]=0x00; kytu1[2]=0x00;
kytu1[3]=0x00; kytu1[4]=0x00; kytu1[5]=0x00; kytu1[6]=0x00; kytu1[7]=0x00;
kytu1[8]=0x00; break; }
}
}
nguon tai.lieu . vn