Xem mẫu

  1. 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.
  2. 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
  3. 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
  4. 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.
  5. Bài 8: BÀI TOÁN TỔNG QUÁT II>PHÍM MA TRẬN: Sơ Đồ Nguyên Lý:
  6. 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
  7. 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 | = | =============== -------------------------------------------*/
  8. 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;
  9. 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;}
  10. 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 }
  11. 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 }
  12. 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 }
  13. 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';
  14. 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); }
  15. 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
  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
  17. 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
  18. 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
  19. 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; }
  20. 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