управление шаговыми двигателями

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем лемира, 1 май 2015.

  1. лемира

    лемира Нерд

    Ничего не выходит всё равно. А где надо останавливать выполнение? Я ставила в конце лупа, но без толку. Подскажите точку останова в программе.
     
  2. Unixon

    Unixon Оракул Модератор

    Ну вам нужно сделать done = (count > max_count); где max_count показывает, когда нужно остановиться.
     
  3. лемира

    лемира Нерд

    Да я так и делала. Сегодня попробую ещё, тогда отпишусь с исходным кодом. А max_count это счётчик?
     
  4. Unixon

    Unixon Оракул Модератор

    Это параметр задачи, определяет когда нужно прекратить вращение.
     
  5. лемира

    лемира Нерд

    max_count определять или ноль или один? В зависимости можно сказать,это метка останова?
     
  6. Unixon

    Unixon Оракул Модератор

    Что у вас определяют переменные count и countsperrev?
     
  7. лемира

    лемира Нерд

    countsperrev - это количество шагов, а count это счётчик, пока не достигнет количества шагов. Программа не моя, а Осипова. Из его лекций. Вот пытаюсь разобраться. Каунт- это количество сделанных шагов таким образом.
     
  8. Unixon

    Unixon Оракул Модератор

    У вас просто должен быть формальный критерий остановки. Чему должна быть равна переменная count после того, как все движения выполнены?
     
  9. лемира

    лемира Нерд

    Там зацикливание и на ноль. Сейчас.

    Вот, если count==countsperrev*2 то count =0; Т.о. происходит сдвиг каунта и зацикливание, как я поняла.
     
  10. Unixon

    Unixon Оракул Модератор

    Тогда нужно ввести еще один счетчик и в нем отсчитывать количество движений. Условие остановки соотв. будет записано относительно него.
     
  11. лемира

    лемира Нерд

    не понимаю эту часть кода, пытаюсь разобраться.Вот-вот. Я такой счётчик и ставила, но не вышло ничего.
    int k=0;
    void loop(){

    if(count < countsperrev )
    {k++;
    clockwise();
    }
    else if (count == countsperrev * 2)
    {k++
    count = 0;
    }
    else

    anticlockwise();

    count++;

    }Подскажите где грамотно поставить счётчик?
     
  12. лемира

    лемира Нерд

    И далее посмотреть числом, чему равно К? если к= определённому числу максимум, то остановить программу. Так я понимаю?
     
  13. Unixon

    Unixon Оракул Модератор

    Да. Если вам нужно один раз туда-обратно, то условие выхода - if (k>=2). Но (!) приращение k должно быть 1 раз на движение.

    Что делают функции clockwise(); и anticlockwise(); ?
     
  14. лемира

    лемира Нерд

    clockwise();anticlockwise(); крутят по часовой и против часовой стрелки. Но если прямо сюда ставитьK++, то счтёчик будет большой и больше 2-ух, т.к. шагов много , при котором вызывается функция по часовой и против часовой. Так я поняла. А как сделать на одно вхождение? bool я пробовала, но двигатель останавливается после прохождения после часовой стрелки, а мне нужно туда-обратно. Что не так?
     
  15. Unixon

    Unixon Оракул Модератор

    Как именно крутят? Ждут пока повернется или включают вращение и тут же выходят?
     
  16. лемира

    лемира Нерд

    delayMicroseconds(motorSpeed); определённое торможение-скорость есть при каждом шаге цикла.
     
  17. лемира

    лемира Нерд

    Я точно не понимаю. Тут функции ссылаются на др. функции и всё возвращают в луп, так я поняла.
     
  18. Unixon

    Unixon Оракул Модератор

    Разбирайтесь. Пока не поймете, ничего не получится.
     
  19. лемира

    лемира Нерд

    Всё! Методом перебора всё работает. Я вставила такую строчку. :
    void loop(){ if (done<countsperrev*2)
    {
    done++;
    if(count < countsperrev )
    {
    clockwise();
    }
    else if (count == countsperrev * 2)
    {
    count = 0;
    }
    else

    anticlockwise();

    count++;

    }} После туда-оброатно двигатель останавливается, если туда-обратно туда, то меняю строчку на if(done<countsperrev*3) тоесть 3 прохода до достижения максимума. Задача решена. Спасибо за поддержку.
     
  20. Serjay

    Serjay Нерд

    Здравстуйте!
    Подскажите пожалуйста пример управления шаговым двигателем. Цель нажав 1 раз на кнопку двигатель делает оборот 360 и оставнавливается.