51微控制器——控制步進電機加速、減速及反轉
阿新 • • 發佈:2018-11-17
加速:
#include<reg52.h> #define uchar unsigned char #define uint unsigned int #define MotorData P1 uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正轉 電機導通相序 D-C-B-A uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反轉 電機導通相序 A-B-C-D uchar speed; //延時 void Delay_xms(uint x) { uint i,j; for(i=0;i<x;i++) for(j=0;j<112;j++); } //電機順時針轉動 void MotorCW(void) { uchar i; for(i=0;i<4;i++) { MotorData=phasecw[i]; Delay_xms(speed); } } //停轉 void MotorStop(void) { MotorData=0x00; } void main(void) { uint i; Delay_xms(50);//等待系統穩定 speed=25; while(1) { for(i=0;i<10;i++) { MotorCW(); } speed--; //加速 if(speed<4) { speed=25; MotorStop(); Delay_xms(500); } } }
減速:
#include<reg52.h> #define uchar unsigned char #define uint unsigned int #define MotorData P1 uchar phasecw[4] ={0x08,0x04,0x02,0x01}; uchar phaseccw[4]={0x01,0x02,0x04,0x08}; uchar speed; void Delay_xms(uint x) { uint i,j; for(i=0;i<x;i++) for(j=0;j<112;j++); } void MotorCW(void) { uchar i; for(i=0;i<4;i++) { MotorData=phasecw[i]; Delay_xms(speed); } } void MotorStop(void) { MotorData=0x00; } void main(void) { uint i; Delay_xms(50); speed=4; while(1) { for(i=0;i<10;i++) { MotorCW(); } speed++; //減速 if(speed>25) { speed=4; MotorStop(); Delay_xms(500); } } }
正反轉:
#include<reg52.h> #define uchar unsigned char #define uint unsigned int #define MotorData P1 uchar phasecw[4] ={0x08,0x04,0x02,0x01}; uchar phaseccw[4]={0x01,0x02,0x04,0x08}; void Delay_xms(uint x) { uint i,j; for(i=0;i<x;i++) for(j=0;j<112;j++); } void MotorCW(void) { uchar i; for(i=0;i<4;i++) { MotorData=phasecw[i]; Delay_xms(4); } } void MotorCCW(void) { uchar i; for(i=0;i<4;i++) { MotorData=phaseccw[i]; Delay_xms(4); } } void MotorStop(void) { MotorData=0x00; } void main(void) { uint i; Delay_xms(50); while(1) { for(i=0;i<500;i++) { MotorCW(); //順時針轉動 } MotorStop(); //停轉 Delay_xms(500); for(i=0;i<500;i++) { MotorCCW(); //逆時針轉動 } MotorStop(); //停轉 Delay_xms(500); } }