最近项目关键技术测试,需要用到单片机控制步进电机驱动一个机械件,因此根据硬件配置编写了一些代码,供大家参考。
硬件配置:STC15F2K60S2单片机、28BYJ-48步进电机(5V、12V兼容)、驱动器为UN2003AN。
代码在附件中。
- //此代码比较抽象:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define MotorData P0
- uchar phasecw[8] ={0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1,0xf9};//顺时针
- void delay(uint a,b)
- {
- uint i,k,j;
- for(i=11;i>0;i--)
- {
- for(k=a;k>0;k--)
- {
- for(j=b;j>0;j--);
- }
- }
- }
- sbit P1_0=P1^0; //气泵
- sbit stop=P1^1;
- main()
- {
- uint n,r,m;
- MotorData=0xf0;
- while(stop)
- {
- for(n=6;n>1;n--)
- {
- for(r=85;r>0;r--)
- {
- for(m=0;m<8;m++)
- {
- MotorData=phasecw[m];
- delay(100,1);
- }
-
- }
- if(!stop) delay(100,1); //关机时、电源低于10%时,电机恢复原位,可增加位置
- else
- {
- MotorData=0xf0;
- delay(2000,100); //insert power manage
- P1_0=0;
- delay(2000,100); //insert power manage
- P1_0=1;
- }
- }
- for(r=87;r>0;r--)
- {
- for(m=0;m<8;m++)
- {
- MotorData=phasecw[m];
- delay(100,1);
- }
-
- }
- MotorData=0xf0;
- if(!stop) delay(100,1); //关机时,电机恢复原位 ,可增加位置
- else
- {
- delay(2000,1000);
- n=6;
- }
- }
- }
复制代码
上述源码word:
STC15F2K60S2控制步进电机程序.docx
(12.68 KB, 下载次数: 36)
|