Плавный старт и плавная остановка шагового двигателя

GRiMmase
Offline
Зарегистрирован: 26.07.2012

 Написал простенький код управления ШД, хочу сделать что-бы ШД плавно стартовал и плавно останавливался, плавную остановку я реализовал в 27-й строке, а вот со стартом не могу разобраться. 

int PIN_STEP = 2; 
int PIN_DIR = 3;
int PIN_ENABLE = 4;


void setup()
 {
  pinMode(PIN_STEP, OUTPUT);
  pinMode(PIN_DIR, OUTPUT);
  pinMode(PIN_ENABLE, OUTPUT);
  digitalWrite(PIN_ENABLE, HIGH);
  }


void loop()
{

int DELAY_STEP = 100;                    // Время в микросекундах на задержку между шагами
int MOVE_STEP = 1000;                   // Кол-во шагов
int FADE_STEP = 20;
int FADE_START = 200;

    for (int i=0; i <= MOVE_STEP; i++)
    {
      

if (i >= MOVE_STEP - FADE_START) {DELAY_STEP = DELAY_STEP + FADE_STEP;} // Плавная остановка

    digitalWrite(PIN_DIR, HIGH);         // Поворот по часовой стрелке
    digitalWrite(PIN_STEP, LOW);
    digitalWrite(PIN_STEP, HIGH);
    delayMicroseconds(DELAY_STEP);       // Устанавливаем задержку между шагами
    }

  delay(5000);

}

 

ourlive
Offline
Зарегистрирован: 26.05.2012
int DELAY_STEP = 500; //какой должен быть коэффициент на старте, чтобы через 200 шагов получились нужные DELAY_STEP = 100 для среднено участка мне считать лень
if (i <=  FADE_START) {DELAY_STEP = DELAY_STEP - FADE_STEP;}

 

GRiMmase
Offline
Зарегистрирован: 26.07.2012

 Да, спасибо так и есть, DELAY_STEP = 4120 в моем случае. Не очень плавно вот только,  буду думать.

ourlive
Offline
Зарегистрирован: 26.05.2012
FADE_STEP=1;
//на базе данного кода плавнее не выйдет