黄工无刷电机学习
直播中

jfsky

16年用户 510经验值
私信 关注
[问答]

怎样通过按钮去控制步进电机的旋转呢

怎样通过按钮去控制步进电机的旋转呢?有哪些方法?

回帖(1)

h1654155275.5764

2021-10-15 09:54:55
  正反转可控的步进电机
  通过按钮控制电机顺时针或逆时针旋转:
  
#include
#include
#include
#include
#include
#define INT8U unsigned char
#define INT16U unsigned int
***it FFW_KEY=P3^0;
***it REV_KEY=P3^1;
***it STOP_KEY=P3^2;
//0000_0001 A->AB->B->BC->C->CD->D->AD
INT8U code FFW_ARR[]={0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x09};
//0000_1001 AD->D->CD->C->BC->B->AB->A
INT8U code REV_ARR[]={0x09,0x08,0x0C,0x04,0x06,0x02,0x03,0x01};
/**
*延时
*
[email=*@param]*@param[/email] x 延时时间
[email=*@return]*@return[/email]
*/
void delay_ms(INT16U x)
{
INT8U t=120;
while(x--)
  while(t--);
}
/**
*顺时针旋转
*
[email=*@param]*@param[/email] n 旋转圈数
[email=*@return]*@return[/email]
*/
void STEP_FFW(INT8U n)
{
INT8U i,j;

for(i=0; i<5*n; i++)
{
  for(j=0; j<8; j++) //8*9=72
  {
   P1=FFW_ARR[j];
   delay_ms(60);
   
   if(STOP_KEY==0)
    return;
  }
}
}
/**
*逆时间旋转
*
[email=*@param]*@param[/email] n 旋转圈数
[email=*@return]*@return[/email]
*/
void STEP_REV(INT8U n)
{
INT8U i,j;

for(i=0; i<5*n; i++)
{
  for(j=0; j<8; j++)
  {
   P1=REV_ARR[j];
   delay_ms(60);
   
   if(STOP_KEY==0)
    return;
  }
}
}
void main()
{
INT8U n = 1;

while(1)
{
  if(FFW_KEY==0)
  {
   P0=0xFE; // 1111_1110
   STEP_FFW(n);
  }
  else if(REV_KEY==0)
  {
   P0=0xFD; // 1111_1101
   STEP_REV(n);
  }
  else
  {
   P0=0xFB; // 1111_1011
  }
}
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分