求一C程序,关于用单片机控制步进电机的。要求:可以用单片机上的独立按键控制电机的正反转。主要要求可

2025-02-24 06:42:15
推荐回答(2个)
回答1:

俺手头没有步进电机的硬件驱动电路,只好用LED测试了,测试通过喽


只不过程序中的延时 时间比较长,你可以随意修改


另外,你没说是什么步进电机,和控制方式


所以,本人就按照常用的 两相步进电机写的,方式为 8拍


程序设计思路为,设立一个变量来记录状态,然后再根据状态去执行不同语句


具体程序如下,如有不懂之处可以继续追问或私密我加好友


若满意,帮到了你,请记得采纳,谢谢!


/***************************************************************************/

#include


sbit S1=P3^2; sbit S2=P3^3; sbit S3=P3^4; sbit S4=P3^5; sbit S5=P3^6;

int i=0,t=0,fe=0;

char LD[8]={0xfe,0xfc,0xfd,0xf9,0xfb,0xf3,0xf7,0xf6};//两相8拍编码

/***************************************************************************/

void delay(int t)//延时函数

{

int j;

for(;t>0;t--)

{for(j=200;j>0;j--);}

}

/***************************************************************************/

void main(void)

{

     while(1) //主循环内,只执行端口赋值

     {

         P2=LD[i]; //对 P2 端口赋值,点亮 LED

        

         //方向判断,停止是0,所以没必要编写停止语句

         if(fe==1) //如果是反转

         {

             i++;if(i>7){i=0;}//正向流动

             delay(100);//延时一会,即旋转的速度

         }

         if(fe==2) //如果是正转

         {

             i--;if(i<0){i=7;}//反向流动

             delay(100);//延时一会,即旋转的速度

         }

         if(fe==3) //如果是延时

         {

             delay(1000);//延时一会,再反转

             for(t=0;t<100;t++)//反转 100个脉冲

             {

                 i++;if(i>7){i=0;}//正向流动

                 P2=LD[i];

                 delay(100);//延时一会,即旋转的速度

             }

             fe=0;//反转结束后,则停止

         }

        

         //按键部分

         if(S5==0){fe=0;}//停止

         if(S4==0){fe=1;}//反转

         if(S3==0){fe=2;}//正转

         if(S2==0){fe=3;}//延时

         if(S1==0){fe=2;}//正转

     }

}

/***************************************************************************/

回答2:

可以做,具体要求呢?步进电机型号呢?用单片机做驱动器,还是有额外的驱动器?