Тел. (495) 972-27-12

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

Обсуждаем Arduino, Raspberry Pi и другие электронные компоненты и проекты DIY

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

Сообщение paf » 05 мар 2016, 13:19

Понадобилось вот. Просто туда-сюда, именно на шаговом. Поскольку программист из меня как из бабушки балерина :))) (С)
А сделать нужно и побыстрее, то на основании скетча "Панорамная головка на Ардуино", очень плохо понимая, что же я все таки делаю, методом тупого тыка вылепил сие... Но оно работает! Эх если бы у кого нашлось бы пяток минуток прокомментировать "творение", был бы безмерно рад! Допустимы любые цензурные выражения! :)))
Code: [Выделить всё] [Expand/Collapse]
  1. /*
  2.     Для управления ШД в программе используется библиотека AccelStepper
  3. */
  4.  
  5. #include <AccelStepper.h>
  6.  
  7. #define MOTOR1_DIR_PIN  8 //контакт DIR
  8.  
  9. #define MOTOR1_STEP_PIN 9 // контакт STEP
  10.  
  11. #define MOTOR1_LS_PIN 6   // контакт концевика
  12.  
  13. #define UPRAV_PIN 3   // управление поворотом с основной платы
  14.  
  15. #define ENABL_PIN 10   // контакт вкл. выкл драйвера
  16.  
  17. #define MOTOR1_SPR 2048  // Кол-во шагов на 1 оборот вала двигателя
  18.  
  19. #define MOTOR1_MAX_SPEED 600.0
  20.  
  21. #define MOTOR1_INIT_SPEED 150.0
  22.  
  23.  
  24. AccelStepper stpMotor1(AccelStepper::DRIVER, MOTOR1_STEP_PIN, MOTOR1_DIR_PIN);
  25.  
  26. int nMotor1SP;            
  27. int nSpeedSP;                      
  28. int nMotor1MV;
  29.  
  30. void setup() {                
  31.   phInit();
  32. }
  33.  
  34. void loop()
  35. {
  36.   phGetCommand();
  37.   phMotorRun();
  38. }
  39. // end loop
  40.  
  41. void phInit()
  42. {
  43.   pinMode(MOTOR1_DIR_PIN, OUTPUT);
  44.  
  45.   pinMode(MOTOR1_STEP_PIN, OUTPUT);
  46.  
  47.   pinMode(ENABL_PIN, OUTPUT);
  48.  
  49.   pinMode(MOTOR1_LS_PIN, INPUT_PULLUP);
  50.  
  51.   pinMode(UPRAV_PIN, INPUT_PULLUP);
  52.  
  53.   nMotor1MV = 0;
  54.  
  55.   stpMotor1.setMaxSpeed(MOTOR1_MAX_SPEED);
  56.  
  57.   stpMotor1.setAcceleration(10);
  58.  
  59.   stpMotor1.setSpeed(40);
  60.  
  61.  
  62.   stpMotor1.setSpeed(MOTOR1_INIT_SPEED);
  63.   while (digitalRead(MOTOR1_LS_PIN) != 0) {
  64.     stpMotor1.runSpeed();
  65.   }
  66.  
  67.   delay(500);
  68.  
  69.   stpMotor1.setCurrentPosition(0);
  70.  
  71.   stpMotor1.setSpeed(-MOTOR1_INIT_SPEED);
  72.   while (abs(stpMotor1.currentPosition()) < 200) //обратный ход после стопа
  73.   {
  74.     stpMotor1.runSpeed();
  75.   }
  76.  
  77.   stpMotor1.setCurrentPosition(0);
  78.  
  79.   stpMotor1.setSpeed(0);
  80.    
  81.   return;
  82. }
  83. // end phInit
  84.  
  85. void phGetCommand()
  86. {
  87.   nMotor1SP = 1023;      
  88.  
  89.   nSpeedSP = 500;        
  90.  
  91.   if (nMotor1SP > 100) {
  92.     nMotor1MV = nSpeedSP;
  93.   }
  94.   else if (nMotor1SP < -100) {
  95.     nMotor1MV = -nSpeedSP;
  96.    }
  97.   else {
  98.     nMotor1MV = 0;
  99.    }
  100.  
  101.   nMotor1MV = nMotor1MV / 5;
  102.  
  103. }
  104.  
  105. void phMotorRun()
  106. {
  107.   //stpMotor1.setSpeed(nMotor1MV);
  108.   digitalWrite(ENABL_PIN, LOW);         // драйвер вкл.
  109.  if (digitalRead(UPRAV_PIN) == 0) {     // если поворот ноль стоим на месте
  110.  stpMotor1.runToNewPosition(0);
  111.  
  112.  digitalWrite(ENABL_PIN, HIGH);
  113.   }
  114.   else if (digitalRead(UPRAV_PIN) != 0) { //Идем в поворот
  115.  digitalWrite(ENABL_PIN, LOW);
  116.     stpMotor1.runToNewPosition(-2500);       // шагов на поворот лотков
  117.  digitalWrite(ENABL_PIN, HIGH);              // драйвер выкл чтоб не греть обмотки двига
  118.   }
  119.  }
  120.  
GeSHi © Codebox Plus
paf
 
Сообщения: 1
Зарегистрирован: 10 фев 2016, 13:23

Вернуться в Arduino и Ко. ♥♥♥



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron