Arduino 控制步进电机的转速随时间按正弦规律变化

xiaoxiao2021-02-28  62

下面这段Arduino代码可以用的前提条件是,你用的步进电机的驱动器只需要你给定速度(脉冲时间间隔)和方向即可(推荐用这种驱动器),不需要你具体地指定A+,A-,B+,B-四根线分别是高电平还是低电平(这种驱动器真TM难用)。

//转角θ=-ANcos(wt),转速V=ANwsin(wt)   float w=3;   int N=100; //N是半个周期的脉冲数,正比于正弦函数的振幅              //如果乘积Nw太大,步进电机就会丢步   float dt[400]={0}; //脉冲的时间间隔   int k;   const byte pinSPEED=5; const byte pinDIREC=6;    void setup() {   pinMode(pinSPEED,OUTPUT);  // 5号引脚发送PULSE(控制速度)   pinMode(pinDIREC,OUTPUT);  // 6号引脚指定SIGN (控制方向)    int dtMAX=30;   float t=0;     for(k=1;k<=N;k++)     {dt[k]=(1.0F/sin(k*PI/(N+1))> dtMAX ? dtMAX : 1.0F/sin(k*PI/(N+1)));   //如果两个脉冲的时间间隔超过预设的dtMAX,就认为它是dtMAX   //dtMAX的值可以根据需要自行修改     t=t+dt[k];}   //for循环结束后,t代表数组dt的前N项的和       for(k=1;k<=N;k++)     {dt[k]=PI*dt[k]/(w*t);}   }      void loop() {   digitalWrite(pinDIREC,HIGH); //一个方向运动   for(k=1;k<=N;k++)   {digitalWrite(pinSPEED,HIGH);     digitalWrite(pinSPEED,LOW);    delayMicroseconds(1E6*dt[k]);}      digitalWrite(pinDIREC,LOW);  //反方向运动   for(k=1;k<=N;k++)   {digitalWrite(pinSPEED,HIGH);    digitalWrite(pinSPEED,LOW);    delayMicroseconds(1E6*dt[k]);}   }  

转载请注明原文地址: https://www.6miu.com/read-75712.html

最新回复(0)