Báo cáo TT vi xử lý - Bài 7: Lập trình điều khiển motor bước

Báo Cáo TT.Vi Xử Lý BÀI 7: LẬP TRÌNH ĐIỀU KHIỂN MOTOR BƯỚC Bài 1: điều khiển motor bước quay thuận nữa bước với tốc độ 1 vòng/phút. câu 3: #include "msp430fg4618.h" #include "intrinsics.h" //------------------------ void main ( void ) { WDTCTL = WDTPW + WDTHOLD; //bang ma dieu khien nua buoc unsigned char CODE[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; unsigned char i; P4DIR=0xff; while(1) { for(i=0;i<8;i++) { P4OUT=CODE[i]; //quay nua buoc __delay_cycles(1250000); //delay 1.25s } } }

docx13 trang | Chia sẻ: thuychi11 | Lượt xem: 834 | Lượt tải: 0download
Bạn đang xem nội dung tài liệu Báo cáo TT vi xử lý - Bài 7: Lập trình điều khiển motor bước, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Báo Cáo TT.Vi Xử Lý BÀI 7: LẬP TRÌNH ĐIỀU KHIỂN MOTOR BƯỚC Bài 1: điều khiển motor bước quay thuận nữa bước với tốc độ 1 vòng/phút. câu 3: #include "msp430fg4618.h" #include "intrinsics.h" //------------------------ void main ( void ) { WDTCTL = WDTPW + WDTHOLD; //bang ma dieu khien nua buoc unsigned char CODE[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; unsigned char i; P4DIR=0xff; while(1) { for(i=0;i<8;i++) { P4OUT=CODE[i]; //quay nua buoc __delay_cycles(1250000); //delay 1.25s } } } Câu 4: Sửa lại chương trình để thay đổi tốc độ quay cho motor Tăng thời gian delay tốc độ động cơ sẽ giảm và ngược lại. Ví dụ để tăng tốc độ động cơ #include "msp430fg4618.h" #include "intrinsics.h" //------------------------ void main( void ) { WDTCTL = WDTPW + WDTHOLD; //bang ma dieu khien unsigned char CODE[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; unsigned char i; P4DIR=0xff; while(1) { for(i=0;i<8;i++) { P4OUT=CODE[i]; //quay nua buoc __delay_cycles(300000); // } } } Câu 5: Sửa lại chương trình để điều khiển motor bước quay thuận theo kiểu Wave Stepping. #include "msp430fg4618.h" #include "intrinsics.h" //------------------------ void main( void ) { WDTCTL = WDTPW + WDTHOLD; //bang ma dieu khien unsigned char CODE[]={0x01, 0x02, 0x04,0x08}; unsigned char i; P4DIR=0xff; while(1) { for(i=0;i<4;i++) { P4OUT=CODE[i]; __delay_cycles(625000); } } } 6. Sửa lại chương trình để điều khiển motor bước quay thuận theo kiểu Full Stepping. #include "msp430fg4618.h" #include "intrinsics.h" //------------------------ void main( void ) { WDTCTL = WDTPW + WDTHOLD; unsigned char CODE[]={0x03, 0x06, 0x0c,0x09}; unsigned char i; P4DIR=0xff; while(1) { for(i=0;i<4;i++) { P4OUT=CODE[i]; //quay nua buoc __delay_cycles(625000);} } } 7. Sửa lại chương trình để điều khiển motor bước quay thuận 100 bước theo kiểu Full Stepping, sau đó quay ngược 100 bước theo kiểu Wave stepping rồi dừng hẳn. #include "msp430fg4618.h" #include "intrinsics.h" //------------------------ void main( void ) { WDTCTL = WDTPW + WDTHOLD; unsigned char CODE[]={0x03, 0x06, 0x0c,0x09};// kieu full CODE1[]={0x01, 0x02, 0x04,0x08};//kieu wave unsigned char i; P4DIR=0xff; for (int t=0;t<25;t++) // lặp 25 lần { for(i=0;i<4;i++) // mỗi lần của 25 lần thì quay 4 bước { P4OUT=CODE[i]; //quay full __delay_cycles(625000); }} for (int t=0;t<25;t++) { for(i=4;i>0;i--) { P4OUT=CODE1[i]; //quay wave __delay_cycles(625000); // }} P4OUT=0x00;//dừng } 8/ Sửa lại đoạn chương trình trên để điều khiển motor sao cho thời gian trì hoãn giữa các bước là 1s. #include "msp430fg4618.h" #include "intrinsics.h" //------------------------ void main( void ) { WDTCTL = WDTPW + WDTHOLD; //bang ma dieu khien nua buoc unsigned char CODE[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; unsigned char i; P4DIR=0xff; while(1) { for(i=0;i<8;i++) { P4OUT=CODE[i]; //quay nua buoc __delay_cycles(1000000); } } } 9/ Sửa đoạn chương trình trên để motor quay thuận 4 bước, sau đó dừng 0.25s và rồi quay nghịch 4 bước #include "msp430fg4618.h" #include "intrinsics.h" //------------------------ void main( void ) { WDTCTL = WDTPW + WDTHOLD; insigned char CODE[]={0x01,0x02,0x04, 0x08 }; unsigned char i; P4DIR=0xff; while(1) { //quay thuan 4 buoc for(i=0;i<4;i++) { P4OUT=CODE[i]; //quay nua buoc __delay_cycles(50000); } //dung 0.25 s P4OUT= 0x00; __delay_cycles(250000); //quay nghich 4 buoc for(i=4;i>0;i--) { P4OUT=CODE[i]; //quay nua buoc __delay_cycles(50000); } } } 10/ Viết chương trình điều khiển motor bước quay theo chiều thuận với số bước quay thuận được nhập từ bàn phím HEX. #include "msp430fg4618.h" #include "intrinsics.h" void Dkmotor (unsigned char key) { unsigned char CODE[]={0x01,0x02,0x04,0x08}; unsigned char i,j=0; for(i=key;i>0;i--) //quay so buoc bang gia tri cua key { if(j==4) //neu het chy ky thi j=0; //nap lai giá tri 0x01 P4OUT=CODE[j]; __delay_cycles(500000);//delay 0.5s j++; } P4OUT=0x00; //dung motor } void main( void ) { WDTCTL = WDTPW + WDTHOLD; unsigned char key; P4DIR=0xFF; //motor buoc P7DIR=0x0F; //phim hex while(1) { // kiem tra cac phim o cot 1 P7OUT =0xfe; if(!(P7IN & BIT4)) //phim 1 {key =1; Dkmotor(key);} else if(!(P7IN & BIT5)) //phim 4 {key=4; Dkmotor(key);} else if(!(P7IN & BIT6)) //phim 7 {key=7; Dkmotor(key);} else if(!(P7IN & BIT7)) //phim 10 {key=10; Dkmotor(key);} // kiem tra cac phim o cot 2 P7OUT = 0xfd; if(!(P7IN & BIT4)) //phim 2 {key =2; Dkmotor(key);} else if(!(P7IN & BIT5)) //phim 5 {key=5; Dkmotor(key);} else if(!(P7IN & BIT6)) //phim 8 {key=8; Dkmotor(key);} else if(!(P7IN & BIT7)) //phim 0 {key=0; Dkmotor(key);} // kiem tra cac phim o cot 3 P7OUT =0xfb; if(!(P7IN & BIT4)) //phim 3 {key =3; Dkmotor(key);} else if(!(P7IN & BIT5)) //phim 6 {key=6; Dkmotor(key);} else if(!(P7IN & BIT6)) //phim 9 {key=9; Dkmotor(key);} else if(!(P7IN & BIT7)) //phim 11 {key=11; Dkmotor(key);}}} 11/ Viết chương trình điều khiển motor bước quay theo chiều thuận 4 bước, chiều ngược 4 bước rồi lặp lại với số lần lặp được nhập từ bàn phím số HEX. #include "msp430fg4618.h" #include "intrinsics.h" void Dkmotor (unsigned char key) { unsigned char CODE[]={0x01,0x02,0x04,0x08}; unsigned char i,j=0; for(i=key;i>0;i--) //quay so lan bang gia tri cua key { //quay thuan 4 buoc for (j=0;j<4;j++) { P4OUT=CODE[j]; __delay_cycles(500000);//delay 0.5s } //quay nghich 4 buoc for (j=4;j>0;j--) { P4OUT=CODE[j]; __delay_cycles(500000);//delay 0.5s } P4OUT=0x00; //dung motor } void main( void ) { WDTCTL = WDTPW + WDTHOLD; unsigned char key; P4DIR=0xFF; //motor buoc P7DIR=0x0F; //phim hex while(1) { // kiem tra cac phim o cot 1 P7OUT =0xfe; if(!(P7IN & BIT4)) //phim 1 {key =1; Dkmotor(key);} else if(!(P7IN & BIT5)) //phim 4 {key=4; Dkmotor(key);} else if(!(P7IN & BIT6)) //phim 7 {key=7; Dkmotor(key);} else if(!(P7IN & BIT7)) //phim 10 {key=10; Dkmotor(key);} // kiem tra cac phim o cot 2 P7OUT = 0xfd; if(!(P7IN & BIT4)) //phim 2 {key =2; Dkmotor(key);} else if(!(P7IN & BIT5)) //phim 5 {key=5; Dkmotor(key);} else if(!(P7IN & BIT6)) //phim 8 {key=8; Dkmotor(key);} else if(!(P7IN & BIT7)) //phim 0 {key=0; Dkmotor(key);} // kiem tra cac phim o cot 3 P7OUT =0xfb; if(!(P7IN & BIT4)) //phim 3 {key =3; Dkmotor(key);} else if(!(P7IN & BIT5)) //phim 6 {key=6; Dkmotor(key);} else if(!(P7IN & BIT6)) //phim 9 {key=9; Dkmotor(key);} else if(!(P7IN & BIT7)) //phim 11 {key=11; Dkmotor(key);}}} Bài 2: Chương trình điều khiển motor bước, với số bước nhập từ phím ma trận 2/ Sửa lại chương trình để motor có thể quay với số bước lớn hơn 11 #include "msp430f249.h" #include "intrinsics.h" //------------khai bao chuong trinh con------------------ void dkmoto (unsigned char key); //---------------chuongtrinh chinh----------------------- void main( void ) { WDTCTL = WDTPW + WDTHOLD; unsigned char key; P1DIR=0xFF; //motor buoc P5DIR=0x0F; //phim hex while(1) { // kiem tra cac phim o cot 1 P5OUT =0xfe; if(!(P5IN & BIT4)) //phim 1 {key =1; goto dkmotor;} else if(!(P5IN & BIT5)) //phim 4 {key=4; goto dkmotor;} else if(!(P5IN & BIT6)) //phim 7 {key=7; goto dkmotor;} else if(!(P5IN & BIT7)) //phim 10 {key=10; goto dkmotor;} // kiem tra cac phim o cot 2 P5OUT = 0xfd; if(!(P5IN & BIT4)) //phim 2 {key =2; goto dkmotor;} else if(!(P5IN & BIT5)) //phim 5 {key=5; goto dkmotor;} else if(!(P5IN & BIT6)) //phim 8 {key=8; goto dkmotor;} else if(!(P5IN & BIT7)) //phim 0 {key=0; goto dkmotor;} // kiem tra cac phim o cot 3 P5OUT =0xfb; if(!(P5IN & BIT4)) //phim 3 {key =3; goto dkmotor;} else if(!(P5IN & BIT5)) //phim 6 {key=6; goto dkmotor;} else if(!(P5IN & BIT6)) //phim 9 {key=9; goto dkmotor;} else if(!(P5IN & BIT7)) //phim 11 {key=11; goto dkmotor;} dkmotor: switch (key) {//neu key=x-->quay x buoc sau do gan key=0 de dung motor case 0: break;//neu key=0, khong quay case 1: {dkmoto(key); key=0; break;} case 2: {dkmoto(key); key=0; break;} case 3: {dkmoto(key); key=0; break;} case 4: {dkmoto(key); key=0; break;} case 5: {dkmoto(key); key=0; break;} case 6: {dkmoto(key); key=0;break;} case 7: {dkmoto(key); key=0;break;} case 8: {dkmoto(key); key=0;break;} case 9: {dkmoto(key); key=0;break;} case 10: {dkmoto(key); key=0;break;} case 11: {dkmoto(key); key=0;break;} } } } //-------------cai dat chuong trinh con------------ void dkmoto (unsigned char key) { unsigned char CODE[]={0x01,0x02,0x04,0x08}; unsigned char i,j=0; for(i=key+10;i>0;i--) //quay so buoc bang gia tri cua key +10 { if(j==4) //neu het chy ky thi j=0; //nap lai giá tri 0x01 P1OUT=CODE[j]; __delay_cycles(500000);//delay 0.5s j++; } P1OUT=0x00; //dung motor } 3/ Sửa lại chương trình để motor quay với số bước tương ứng với số lần nhấn phím đơn. SW1 quay thuận SW2 quay nghịch #include "msp430fg4618.h" #include "intrinsics.h" #define SW1 BIT2 #define SW2 BIT3 unsigned char CODE[]={0x01,0x02,0x04,0x08}; unsigned char CODE1[]={0x08,0x04,0x02,0x01}; int i=0,j=0; void main( void ) { WDTCTL = WDTPW + WDTHOLD; unsigned char key; P4DIR=0x0f; //motor buoc P3DIR=0x00; //phim don while(1) { while(!(P3IN&SW1))//SW1 dc an { key+=1; for(i=key;i>0;i--) //quay so buoc bang gia tri cua key { if(j==4) //neu het chy ky thi j=0; //nap lai giá tri 0x01 P4OUT=CODE[j]; __delay_cycles(500000);//delay 0.5s j++;} } P4OUT=0x00; key=0; //reset lại số bước nếu ko có nó sẽ cộng dồn sau mỗi lần ấn while(!(P3IN&SW2))//SW1 dc an { key+=1; for(i=key;i>0;i--) //quay so buoc bang gia tri cua key { if(j==4) //neu het chy ky thi j=0; //nap lai giá tri 0x01 P4OUT=CODE1[j]; __delay_cycles(500000);//delay 0.5s j++;} } P4OUT=0x00; key=0; }}