Помогите дописать скетч для сверлилки

ДенДен

✩✩✩✩✩✩✩
9 Апр 2023
5
0
Оформи код соответствующим тэгом
Сделал себе сверлилку для печатных плат на базе механизма от двд-привода. Имеется комплект Ардуино Нано+А4988+ шаговый двигатель каретки двдишника. Хотел чтоб он с кнопки медленно, плавно опускался, делал паузу и поднимался. С ардуино столкнулся в первый раз. Скетч кое как переделал из другого, но не так как надо. Подскажите как поменять скорость опускания медленее, а подьем быстрее?

//Пины управления шаговиком
#define STEP_PIN 4
#define DIR_PIN 5
//Пин кнопки
#define start_button 2
//Здесь можно настроить время поворота и паузы
#define move_forward_time 800 //время прямого хода в мсек
#define move_back_time 800 //время обратного хода в мсек
#define pause_time 8000 //время паузы в мсек
#define frequency 3000 //Время между импульсами в мксек. 1000 мксек = 1 мсек = 0.001 сек. Частота следования импульсов 1/0.001 = 1 кГц,
//Не рекомендуется устанавливать время меньше 100 мсек, т.к. частота будет 10 кГц
//Таймер для millis()
uint32_t timer = 0;
//Логический флаг для рабочего режима
bool flag = 0;
void setup() {
pinMode(start_button, INPUT_PULLUP); //Подтягиваем кнопку к питанию
pinMode(STEP_PIN , OUTPUT); //Настраиваем пины управления
pinMode(DIR_PIN , OUTPUT);
}
void loop () {
if (!digitalRead(start_button)) { //Если нажали на кнопку
flag = 1; //Активируем флаг рабочего режима
timer = millis(); //Запускаем таймер
}
if (flag) { //Если флаг активирован
digitalWrite(DIR_PIN , HIGH); //Задаем направление вращения
// for (int i = 0; i < 200; i++) { //Выполняем нужное число шагов 200*16 = 3200 шагов оборот
// digitalWrite(STEP_PIN , HIGH);
// delayMicroseconds(frequency);
// digitalWrite(STEP_PIN , LOW);
// }
// flag = 0;
do { //Крутим движок move_forward_time мсек
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(frequency);
digitalWrite(STEP_PIN , LOW);
} while (millis() - timer < move_forward_time);
delay(pause_time); //Пауза pause_time мсек
timer = millis(); //Снова запускаем таймер
digitalWrite(DIR_PIN , LOW); //Крутим движок move_back_time мсек
do {
digitalWrite(STEP_PIN , HIGH);
delayMicroseconds(frequency);
digitalWrite(STEP_PIN , LOW);
} while (millis() - timer < move_back_time);
flag = 0; //Гасим флаг
}
}
 

ДенДен

✩✩✩✩✩✩✩
9 Апр 2023
5
0
@Alex_HF, пробовал, он просто дольше крутится, но с той же скоростью, а когда задвигает каретку до ограничения просто трещит.
 

Alex_HF

★✩✩✩✩✩✩
11 Мар 2023
40
16
значит надо ввести новый
#define frequency_UP 1000

C++:
...

    delay(pause_time);                        //Пауза pause_time мсек
    timer = millis();                         //Снова запускаем таймер
    digitalWrite(DIR_PIN, LOW);        //Крутим движок move_back_time мсек
    do {
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(frequency_UP);
      digitalWrite(STEP_PIN, LOW);
    } while (millis() - timer < move_back_time);
    flag = 0;//Гасим флаг
 

ДенДен

✩✩✩✩✩✩✩
9 Апр 2023
5
0
@Alex_HF, а можно этот параметр прописать отдельно для прямого и обратного хода? я его меняю, но сейчас он влияет на оба хода
 

Alex_HF

★✩✩✩✩✩✩
11 Мар 2023
40
16
ну я же вам написал - добавить
значит надо ввести новый
#define frequency_UP 1000
старый
#define frequency 3000 //Время между импульсами в мксек. 1000 мксек = 1 мсек = 0.001 сек. Частота следования импульсов 1/0.001 = 1 кГц,
оставить

а в конце вашего цикла loop() изменить delayMicroseconds(frequency); на delayMicroseconds(frequency_UP);
т.е опускать каретку он будет с задержкой frequency, а поднимать с frequency_UP
 
  • Лойс +1
Реакции: ДенДен

ДенДен

✩✩✩✩✩✩✩
9 Апр 2023
5
0
@Alex_HF, спасибо, а пины ms1/2/3 можно было не подключать? упоминания в скетче я их не вижу или они по умолчанию включены?
 

Alex_HF

★✩✩✩✩✩✩
11 Мар 2023
40
16
1681064244867.png
Входы MS3, MS2 и MS1 драйвера, внутрисхемно прижаты к GND (через сопротивления в несколько десятков кОм). Так что если их оставить не подключёнными, то драйвер будет работать в полношаговом режиме.
 

ДенДен

✩✩✩✩✩✩✩
9 Апр 2023
5
0
@Alex_HF, в скетче я не увидел их включения, я правильно понимаю если все три включить, то каретка будет плавнее двигаться и двигатель тише работать, как их включить?
 

Alex_HF

★✩✩✩✩✩✩
11 Мар 2023
40
16
Я сомневаюсь, что вам потребуется программно изменять размер шага через ардуину - поэтому подключите выводы MS1, MS2, MS3 к +5V. Шаг станет равным 1/16.

Если хотите менять из программы прочитайте урок