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

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

  1. Приветствую, ребята. Тут кто-то озадачивается написанием собственной ОСи, а я вот озадачился написать прогу для управления ШД. Подобрал библиотеку, в частности - AccelStepper, создал простую прогу, которая через последовательный порт (USB) ардуинки управляет движками. И тут на глаза мне попалась подобная прога - Laser USB Controller, которая, в принципе, имеет такой же функционал, НО только с помощью G-кода.
    В реализации программы, есть несколько нюансов. Т.к. используется последовательный порт, то команды от ПК к контроллеру должны быть максимально короткими (видимо по этой причине G-код). Так вот вопрос. Стоит ли свою прогу завязывать на этот G-код ?
     
  2. akl

    akl Гуру

    смотря что этот шаговый двигатель будет делать.
    а в той программе для лазерного гравера Г-код используется потому что это станок чпу, там других вариантов как бы и нет.
     
  3. b707

    b707 Гуру

    Почему команды по порту "должны быть максимально короткими"? с чего вдруг такое ограничение?

    G-код, думаю используется потому, что это стандарт для граверов и других ЧПУ. Существует масса программ для подготовки G-кода, например из 3Д моделей
     
  4. Потому, чтобы прочитать команду, например, MOVE 150, 400 потребуется совершить 13 тактов АЦП. И это только для чтения одной команды (не говоря уже про ее обработку), т.к. Serial читает только по одному байту.
     
  5. b707

    b707 Гуру

    Как связаны АЦП (аналого-цифровой преобразователь) и чтение по Сериалу? :)
    Если же вы имели в виду такты МК (микроконтроллера) - то даже близко не угадали. Передача по UART идет побитно (это ведь "сериал" - то есть говоря по-русски - "последовательный" интерфейс). Передача каждого байта происходит последовательно, бит за битом, так что на передачу строчки "MOVE 150, 400" потребуется передать 14 * 8 бит. Тактов же на это будет потрачено вообще немеряно, так как передача каждого бита требует нескольких тактов МК
    Но все это совершенно не означает, что мы не можем передать строчки длиной десятки и сотни символов - все зависит от того, как написана программа.
    Как пример - загрузка скетча в МК тоже происходит по Сериал, при этом загрузчик (программа длиной менее килобайта) отлично справляется с приемом десятков килобайт за пару секунд
     
    ДеКодер нравится это.
  6. Да-да-да, я это и имел ввиду, а вы, как настоящий Гуру, дали весьма расширенный ответ :)
    я полагаю, что в главном цикле потребуется считывать каждый символ и формировать текст команды, потом эту команду уже обрабатывать.
     
  7. DetSimen

    DetSimen Спамовредитель Модератор

    Упрости язык, вместо Move пишы M
    MX-200 move по Х взат на 200 шагов
    MY400 move по Y вперед на 400 шагов
    MB20,-40 move both 20 по Х, -40 по Y
    P150 pause 150ms
    E end

    и т.д
     
    ДеКодер и Daniil нравится это.
  8. DetSimen

    DetSimen Спамовредитель Модератор

    В главном цикле надо принимать строку до CR/LF и отправлять её интерпретатору
     
  9. DetSimen

    DetSimen Спамовредитель Модератор

    я счас как раз работаю (вернее, балуюсь) над автокликером мыши/клавиатуры для Леонарды, программа грузится по Сериал в память и интерпретируеца оттуда по строкам
    под программу выделено макс 1 кБ ОЗУ, сокращенных команд влазит овердохрена
     
  10. Спасибо большое, кот!
    Как я понял, для этого можно задействовать функцию readStringUntil() ?
     
  11. b707

    b707 Гуру

    можно, но не нужно. Эта функция - одна из "ложных помощников". При отсутсвии окончания строки она подвешивает ардуину на секунду.
    Лучше написать прием строки самостоятельно. тем более что это буквально пара строк
     
    Ariadna-on-Line и ДеКодер нравится это.
  12. Ну да, так и думал, что придется собирать массив из "чаров"
     
  13. parovoZZ

    parovoZZ Гуру

    Шпиёон???
     
  14. DetSimen

    DetSimen Спамовредитель Модератор

    Нет
     
  15. parovoZZ

    parovoZZ Гуру

    А за коим тогда этот автокликсер?
     
  16. DetSimen

    DetSimen Спамовредитель Модератор

    Попросили. Мне стало интересно Леонарду пащюпать
     
  17. DetSimen

    DetSimen Спамовредитель Модератор

    У меня никогда совсем-совсем не было Леонарды.
     
  18. Daniil

    Daniil Гуру

    посмотрите пример serialEvent в ардуино идэ. Очень сильно должен помочь.
     
    ДеКодер нравится это.
  19. parovoZZ

    parovoZZ Гуру

    изменяешь вотке?

    и всё это время ты был девственником? Бедняга...
     
  20. DetSimen

    DetSimen Спамовредитель Модератор

    Одно другому не мешает. Днем то я стекл как трезвышко. ^_^
     
    Ariadna-on-Line нравится это.