Привод "туда-сюда" на шаговом.

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY
Ответить
paf
Сообщения: 1
Зарегистрирован: 10 фев 2016, 13:23

Привод "туда-сюда" на шаговом.

Сообщение paf »

Понадобилось вот. Просто туда-сюда, именно на шаговом. Поскольку программист из меня как из бабушки балерина :))) (С)
А сделать нужно и побыстрее, то на основании скетча "Панорамная головка на Ардуино", очень плохо понимая, что же я все таки делаю, методом тупого тыка вылепил сие... Но оно работает! Эх если бы у кого нашлось бы пяток минуток прокомментировать "творение", был бы безмерно рад! Допустимы любые цензурные выражения! :)))

Код: Выделить всё

/*
    Для управления ШД в программе используется библиотека AccelStepper 
*/

#include <AccelStepper.h>

#define MOTOR1_DIR_PIN  8 //контакт DIR

#define MOTOR1_STEP_PIN 9 // контакт STEP

#define MOTOR1_LS_PIN 6   // контакт концевика

#define UPRAV_PIN 3   // управление поворотом с основной платы

#define ENABL_PIN 10   // контакт вкл. выкл драйвера

#define MOTOR1_SPR 2048  // Кол-во шагов на 1 оборот вала двигателя

#define MOTOR1_MAX_SPEED 600.0 

#define MOTOR1_INIT_SPEED 150.0


AccelStepper stpMotor1(AccelStepper::DRIVER, MOTOR1_STEP_PIN, MOTOR1_DIR_PIN);

int nMotor1SP;            
int nSpeedSP;                       
int nMotor1MV; 

void setup() {                
  phInit();
}

void loop() 
{
  phGetCommand();
  phMotorRun();
}
// end loop

void phInit()
{
  pinMode(MOTOR1_DIR_PIN, OUTPUT);
  
  pinMode(MOTOR1_STEP_PIN, OUTPUT);
  
  pinMode(ENABL_PIN, OUTPUT);

  pinMode(MOTOR1_LS_PIN, INPUT_PULLUP);
  
  pinMode(UPRAV_PIN, INPUT_PULLUP);
  
  nMotor1MV = 0;
  
  stpMotor1.setMaxSpeed(MOTOR1_MAX_SPEED);
  
  stpMotor1.setAcceleration(10);
  
  stpMotor1.setSpeed(40);
  
  
  stpMotor1.setSpeed(MOTOR1_INIT_SPEED);
  while (digitalRead(MOTOR1_LS_PIN) != 0) {
    stpMotor1.runSpeed();
  }
  
  delay(500);
  
  stpMotor1.setCurrentPosition(0);
  
  stpMotor1.setSpeed(-MOTOR1_INIT_SPEED);
  while (abs(stpMotor1.currentPosition()) < 200) //обратный ход после стопа
  {
    stpMotor1.runSpeed();
  } 
  
  stpMotor1.setCurrentPosition(0);
  
  stpMotor1.setSpeed(0);
    
  return;
}
// end phInit

void phGetCommand()
{
  nMotor1SP = 1023;      
  
  nSpeedSP = 500;         
  
  if (nMotor1SP > 100) {
    nMotor1MV = nSpeedSP;
  } 
  else if (nMotor1SP < -100) {
    nMotor1MV = -nSpeedSP;
   } 
  else {
    nMotor1MV = 0;
   }
  
  nMotor1MV = nMotor1MV / 5;
  
}

void phMotorRun() 
{
  //stpMotor1.setSpeed(nMotor1MV);
  digitalWrite(ENABL_PIN, LOW);         // драйвер вкл. 
 if (digitalRead(UPRAV_PIN) == 0) {     // если поворот ноль стоим на месте
 stpMotor1.runToNewPosition(0); 

 digitalWrite(ENABL_PIN, HIGH);
  } 
  else if (digitalRead(UPRAV_PIN) != 0) { //Идем в поворот
 digitalWrite(ENABL_PIN, LOW);
    stpMotor1.runToNewPosition(-2500);       // шагов на поворот лотков 
 digitalWrite(ENABL_PIN, HIGH);              // драйвер выкл чтоб не греть обмотки двига
  }
 }
Ответить