能夠實現(xiàn)步進電機正轉3圈,反轉3圈和停止。內(nèi)容很基礎,供大家學習參考。仿真圖如下:
單片機源程序如下:
- #include <reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code FFW[]=
- {
- 0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
- }; //正轉
- uchar code REV[]=
- {
- 0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01
- }; //反轉
- sbit K1 = P3^0;
- sbit K2 = P3^1;
- sbit K3 = P3^2;
- void DelayMS(uint ms)
- {
- uchar i;
- while(ms--)
- {
- for(i=0;i<120;i++);
- }
- }
- void SETP_MOTOR_FFW(uchar n) //電機正轉函數(shù),n為圈數(shù)
- {
- uchar i,j;
- for(i=0;i<5*n;i++)
- {
- for(j=0;j<8;j++)
- {
- if(K3 == 0) break; //檢測K3是否按下,如果按下則停止轉動
- P1 = FFW[j];
- DelayMS(25);
- }
- }
- }
- void SETP_MOTOR_REV(uchar n) //電機反轉函數(shù),n為圈數(shù)
- {
- uchar i,j;
- for(i=0;i<5*n;i++)
- {
- for(j=0;j<8;j++)
- {
- if(K3 == 0) break;
- P1 = REV[j];
- DelayMS(25);
- }
- }
- }
- void main()
- {
- uchar N = 3; //轉3圈
- while(1)
- {
- if(K1 == 0)
- {
- P0 = 0xfe; //正轉指示燈點亮
- SETP_MOTOR_FFW(N);
- if(K3 == 0) break;
- }
- else if(K2 == 0)
- {
- P0 = 0xfd; //反轉指示燈點亮
- SETP_MOTOR_REV(N);
- if(K3 == 0) break;
- }
- else
- {
- P0 = 0xfb; //停止指示燈點亮
- P1 = 0x03; //?
- }
- }
- }
復制代碼
所有資料51hei提供下載:
步進電機的正反轉控制.rar
(42.2 KB, 下載次數(shù): 67)
2021-6-4 11:21 上傳
點擊文件名下載附件
|