Контроллер на 2 сигнала STEP/DIR

Гани

Приветствую всех!
Надо тут разработать контроллер для двух драйверов на основе микроконтроллера PIC18Fxxxx.
Драйверы готовые китайского производства. Управляются с помощью стандартных сигналов типа STEP/DIR.

Есть готовый девайс-контроллер STEP/DIR на одном PIC18F.
Но он умеет управлять только одной парой сигналов STEP/DIR.

С целью уменьшения цены и дальнейшего удобства по увеличению функциональности
решил управлять двумя китайскими драйверами ШД с помощью одного пик контроллера.

Какие грабли могут ждать меня при таком алгоритме?

PIC18F Был выбран по причине наличия в нем нескольких 16 разрядных таймеров. Для создания независимых временных периодов необходимых для двух сигналов
STEP/DIR.
А скорость у меня задается с помощью АЦП. АЦП нужен для джойстика-потенциометра который указывает направление и скорость вращения ШД.

mura

Какой предполaгается тираж?

Evgeny_l

А в чем суть? Управление в ручном режиме? Руками неудобно рулить.

Гани
mura:

Какой предполaгается тираж?

Пока совсем небольшой. Но…

Кто нибудь разрабатывал такой 2 осевой контроллер на базе МК?
Сам немного программирую PIC контроллеры. Но именно на одном контроллере две независимые частоты еще не реализовывал.
Ну ясно что будет использовано прерывание и таймеры. Ну кто знает какие грабли меня ждут. пока делаем как было, два PIC18 работают каждый на свою координату.
Захотелось сделать индикатор, кнопки и.т.д. А это значить(да и вообще так правильно) что должен быть ОДИН управляющий контроллер.

Где то уважаемый AT_LAB писал про какие то недостатки подобной реализации управления. Но никак не смог найти эту тему.

Evgeny_l:

А в чем суть? Управление в ручном режиме? Руками неудобно рулить.

Есть два варианта. Управление с помощью компьютера и джойстика
со встроенным контроллером(ручной режим). Оба варинта генерируют
стандартные сигналы STEP/DIR.
Хотя в будущем кто знает. В МК можно залить и операционную систему.
Подключить внешнюю память типа SD, загонять туда какие нибудь операции или даже алгоритмы и.т.д. Но это потом конечно.

Dj_smart
Гани:

Подключить внешнюю память типа SD

Просто для ознакомления it-en.ru/cnc/

Гани
Dj_smart:

Просто для ознакомления it-en.ru/cnc/

Ну, система хорошая. Понравилось. Но что-то не понял сколько они просят за прошитый контроллер.
Но к сожалению там Атмега, а я не умею писать под Атмелы.
А программу все равно придется переделывать.
Причина по вышеописанным причинам. Мне все же нужен именно ручной режим, причем с управлением от джойстика-потенциометра. Где отклоняя угол можно менять скорость и направление.(дозировать)

Гани

Неужели здесь никто не разрабатывает свои контроллеры для ШД?

mura

Разрабатывает, разрабатывает…

Гани
mura:

Разрабатывает, разрабатывает…

Я на форуме не часто бываю. Но вы mura кажется имеете достаточный уровень квалификации по разработкам контроллеров ШД. Не так ли?
Пробовали создавать нечто подобное что я собираюсь делать?
Пишите для АВР?

mura

Пишу и для AVR то-же, скажу что для получения двух независимых частот хватит и одного таймера. Был пульт, но там было все кнопками.

Zliva

Я бы делал для каждой координаты свой кристалл, максимально быстрый алгоритм роботы и обработки данных. Насчет SD это хорошо, но для хобииста это лишнее. Если бы я рассчитывал на массовость своей продукции, то есть тысячами, так бы и сделал, а одну две или 100 – незачем нагружать микроконтроллер лишними движениями. Насчет PIC, у AVR тоже есть несколько таймеров 16-ти разрядных таймеров, и тоже есть прерывания по переполнению. Дело привычки. А кристалл бы сделал с возможностью подключения би- и униполярных ШД. Большой шаг деления скажем 1/32 или 1/256 😃.

ATLab

А в результате получается, что дешевле и быстрее поставить старый комп с ДОС и какой-нибудь программой. Или даже с win XP/Linux - что-нибудь в ITX формате.
Разработка - дело дорогое и небыстрое, особенно когда ТЗ толком не сформулировано, а все держится на неясных вопросах/пожеланиях.

Гани
ATLab:

А в результате получается, что дешевле и быстрее поставить старый комп с ДОС и какой-нибудь программой. Или даже с win XP/Linux - что-нибудь в ITX формате.
Разработка - дело дорогое и небыстрое, особенно когда ТЗ толком не сформулировано, а все держится на неясных вопросах/пожеланиях.

Да ладно вам разработка.😉 Старые компы как раз есть. даже 466 селерон рабочий дома валяется.😁

Алгоритм довольно прост. Это даже за разработку считать нельзя.
С потенциометра измеряем напряжение с помощью АЦП.
Результат через перекодировочную таблицу помещается в таймер, и ждем пока не установится флаг.
Как только флаг таймера установится, все повторяется снова. (следующий микрошаг)
Просто, как лучше сделать чередование для двух сигналов. То есть уже не один а два процесса. (временных интервалов.)
Я хотел посоветоваться только на счет этого и все.

mura
ATLab:

А в результате получается, что дешевле и быстрее поставить старый комп с ДОС и какой-нибудь программой.

Это правда!
Но в этом случае, похоже, запуск станка не цель.

ATLab
Гани:

Да ладно вам разработка…
Алгоритм довольно прост. Это даже за разработку считать нельзя.
…Я хотел посоветоваться только на счет этого и все.

Так что же советоваться то? Это же не разработка: минут 10 посидел и готово 😵
“Нравится” мне такой подход: мне самому думать лень и свое время тратить не хочется, а вам что, трудно? Это же фигня, не разработка… 😈

Sergh
Гани:

С потенциометра измеряем напряжение с помощью АЦП.
Результат через перекодировочную таблицу помещается в таймер, и ждем пока не установится флаг.
Как только флаг таймера установится, все повторяется снова. (следующий микрошаг)
Просто, как лучше сделать чередование для двух сигналов. То есть уже не один а два процесса. (временных интервалов.)

Делал я такую ерундовину, когда в мастерской компа не было, а станок покрутить хотелось.
Система элементарная - два джойстика - 4 потенциометра на АЦП
AVR, один таймер на максимальную частоту шага. В прерывании таймера выставляем степ на нужном канале по перекодированным через таблицу данным АЦП и запускаем второй таймер, который сбрасывает степ. Заодно вывод скорости по осям на ЖКИ, пару кнопок, светодиодов, два выхода вкл/выкл.

Делалось на макетке ATmega32.

если надо - могу забросить схему и программу.

ЗЫ. Делалось чтобы попробывать станок, так что для нормальной работы нужно добавить ограничение максимального ускорения - чтобы при резких рывках джойстика не срывался движок. Но мне лень:)

Zliva

Думаю будут проблемы с контроллером для двух драйверов и самая большая – синхронизация двух потоков step.

Гани
Sergh:

Делал я такую ерундовину, когда в мастерской компа не было, а станок покрутить хотелось.
Система элементарная - два джойстика - 4 потенциометра на АЦП
AVR, один таймер на максимальную частоту шага. В прерывании таймера выставляем степ на нужном канале по перекодированным через таблицу данным АЦП и запускаем второй таймер, который сбрасывает степ. Заодно вывод скорости по осям на ЖКИ, пару кнопок, светодиодов, два выхода вкл/выкл.

Делалось на макетке ATmega32.

если надо - могу забросить схему и программу.

ЗЫ. Делалось чтобы попробывать станок, так что для нормальной работы нужно добавить ограничение максимального ускорения - чтобы при резких рывках джойстика не срывался движок. Но мне лень:)

Спасибо за толковый ответ! Если вас не затруднит с удовольствием бы посмотрел на программу и схему.😃

И еще хотел спросить. А где запускаете измерение АЦП. В основной программе?
Измеряете сразу все 4 канала? Или идет случайный характер?

Sergh
Гани:

Спасибо за толковый ответ! Если вас не затруднит с удовольствием бы посмотрел на программу и схему.😃

К сожалению нашел только промежуточный вариант на два канала.

Коротко о программе:

Таймер 1 - по прерыванию от переполнения выводит на контроллер станка частоту для Charge Pomp.

Таймер 2 - определяет длительность импульса step, по переполнению сбрасывая его.

Таймер 0 - прерывание по переполнению - собственно генерит step сигналы. Период таймера определяется заданной максимальной частотой сигнала step. Сигналы step устанавливаются каждый T[i] - й период, где T[i] - от 1 - частота максимальна до 255, 0 - выключен.
Значение T[i] для каждого step определяется соответствующим каналом АЦП.
Если в текущем прерывании был установлен хоть один сигнал step, то при выходе запускается Таймер 2.

АЦП - Производится циклический опрос каналов. Мне было вполне достаточно 16 градаций скорости на направление, поэтому младшие биты отбрасываются. Так как ноль джойстика приходится на ~2,5В, значение приводится к числу градаций, одновременно выставляется соответствующий сигнал dir. Далее устанавливается значение T[i] по вектору TT. Значения TT подбираются эмпирически и зависят от мотора, джойстика, требуемого диапазона шагов.

INT0,INT1 – по нажатию кнопки инвертируют соответствующие выход и светодиод.

Програмка писалась не для повседневного использования, так что если есть желание на ее основе сделать что нибудь полезное нужно:

  • ввести защиту от дребезга на кнопки;
  • ввести контроль максимального ускорения для step.

Программа написана на IAR C, схема на Proteus и в pdf.

ЗЫ. Конечно ATmega32 здесь абсолютно избыточна, просто валялась под рукой.😃

project.zip

Гани
Sergh:

К сожалению нашел только промежуточный вариант на два канала.

Коротко о программе:

Таймер 1 - по прерыванию от переполнения выводит на контроллер станка частоту для Charge Pomp.

Таймер 2 - определяет длительность импульса step, по переполнению сбрасывая его.

Таймер 0 - прерывание по переполнению - собственно генерит step сигналы. Период таймера определяется заданной максимальной частотой сигнала step. Сигналы step устанавливаются каждый T[i] - й период, где T[i] - от 1 - частота максимальна до 255, 0 - выключен.
Значение T[i] для каждого step определяется соответствующим каналом АЦП.
Если в текущем прерывании был установлен хоть один сигнал step, то при выходе запускается Таймер 2.

АЦП - Производится циклический опрос каналов. Мне было вполне достаточно 16 градаций скорости на направление, поэтому младшие биты отбрасываются. Так как ноль джойстика приходится на ~2,5В, значение приводится к числу градаций, одновременно выставляется соответствующий сигнал dir. Далее устанавливается значение T[i] по вектору TT. Значения TT подбираются эмпирически и зависят от мотора, джойстика, требуемого диапазона шагов.

INT0,INT1 – по нажатию кнопки инвертируют соответствующие выход и светодиод.

Програмка писалась не для повседневного использования, так что если есть желание на ее основе сделать что нибудь полезное нужно:

  • ввести защиту от дребезга на кнопки;
  • ввести контроль максимального ускорения для step.

Программа написана на IAR C, схема на Proteus и в pdf.

ЗЫ. Конечно ATmega32 здесь абсолютно избыточна, просто валялась под рукой.😃

Благодарю от души!😃 Будем изучать алгоритм! Блин, надо Си учить.😦