Alexcnc

sterowanie silnika krokowego klej maszyna 2

Jan 11th, 2025 (edited)
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.27 KB | None | 0 0
  1. // Подключение пинов
  2. const int ledPin = 13;  // Пин встроенного светодиода для контроля STEP
  3. const int stepPin = 2;  // Пин для STEP
  4. const int dirPin = 3;   // Пин для DIR
  5. const int button1Pin = 6; // Пин для первой кнопки
  6. const int button2Pin = 7; // Пин для второй кнопки
  7.  
  8. // Переменная для управления скоростью (частота шагов)
  9. void stepMotor(); // Прототип функции
  10. void setStepFrequency(unsigned int frequency); // Прототип функции
  11. void setStepFrequency(unsigned int frequency); // Прототип функции
  12. unsigned int stepDelay = 500; // Задержка в микросекундах (по умолчанию 500)
  13.  
  14. void setup() {
  15.   pinMode(ledPin, OUTPUT); // Настройка пина светодиода
  16.   // Настройка пинов
  17.   pinMode(stepPin, OUTPUT);
  18.   pinMode(dirPin, OUTPUT);
  19.   pinMode(button1Pin, INPUT_PULLUP); // Кнопка 1 с подтяжкой к питанию
  20.   pinMode(button2Pin, INPUT_PULLUP); // Кнопка 2 с подтяжкой к питанию
  21.  
  22.   // Установка начальной скорости (можно изменить в коде)
  23.   setStepFrequency(2000); // Установка 2000 Гц для 2000 шагов в секунду
  24. }
  25.  
  26. void loop() {
  27.   bool motorActive = false;
  28.  
  29.   // Чтение состояния кнопок
  30.   bool button1State = !digitalRead(button1Pin); // Логический 0 -> кнопка нажата
  31.   bool button2State = !digitalRead(button2Pin); // Логический 0 -> кнопка нажата
  32.  
  33.   if (button1State && !button2State) {
  34.     // Вращение в одну сторону
  35.     digitalWrite(dirPin, HIGH); // Устанавливаем направление
  36.     stepMotor();
  37.     motorActive = true;
  38.   } else if (button2State && !button1State) {
  39.     // Вращение в другую сторону
  40.     digitalWrite(dirPin, LOW); // Устанавливаем направление
  41.     stepMotor();
  42.     motorActive = true;
  43.   } else {
  44.     // Обе кнопки отпущены или нажаты одновременно - двигатель стоит
  45.     motorActive = false;
  46.   }
  47.  
  48.   // Управление светодиодом
  49.   digitalWrite(ledPin, motorActive ? HIGH : LOW);
  50. }
  51.  
  52. // Функция для выполнения одного шага двигателя
  53. void stepMotor() {
  54.   digitalWrite(ledPin, HIGH); // Включаем светодиод для визуального контроля
  55.   digitalWrite(stepPin, HIGH); // STEP сигнал HIGH
  56.   delayMicroseconds(stepDelay);      // Задержка для формирования импульса
  57.   digitalWrite(stepPin, LOW);  // STEP сигнал LOW
  58.   digitalWrite(ledPin, LOW); // Выключаем светодиод
  59.   delayMicroseconds(stepDelay);      // Задержка для формирования импульса
  60. }
  61.  
  62. // Функция для установки частоты вращения
  63. void setStepFrequency(unsigned int frequency) {
  64.   if (frequency > 0) {
  65.     stepDelay = 1000000 / (2 * frequency); // Рассчитываем задержку на основе частоты
  66.   }
  67. }
  68.  
  69.  
Advertisement
Add Comment
Please, Sign In to add comment