Контроллер на 2 сигнала STEP/DIR
Разрабатывает, разрабатывает…
Разрабатывает, разрабатывает…
Я на форуме не часто бываю. Но вы mura кажется имеете достаточный уровень квалификации по разработкам контроллеров ШД. Не так ли?
Пробовали создавать нечто подобное что я собираюсь делать?
Пишите для АВР?
Пишу и для AVR то-же, скажу что для получения двух независимых частот хватит и одного таймера. Был пульт, но там было все кнопками.
Я бы делал для каждой координаты свой кристалл, максимально быстрый алгоритм роботы и обработки данных. Насчет SD это хорошо, но для хобииста это лишнее. Если бы я рассчитывал на массовость своей продукции, то есть тысячами, так бы и сделал, а одну две или 100 – незачем нагружать микроконтроллер лишними движениями. Насчет PIC, у AVR тоже есть несколько таймеров 16-ти разрядных таймеров, и тоже есть прерывания по переполнению. Дело привычки. А кристалл бы сделал с возможностью подключения би- и униполярных ШД. Большой шаг деления скажем 1/32 или 1/256 😃.
А в результате получается, что дешевле и быстрее поставить старый комп с ДОС и какой-нибудь программой. Или даже с win XP/Linux - что-нибудь в ITX формате.
Разработка - дело дорогое и небыстрое, особенно когда ТЗ толком не сформулировано, а все держится на неясных вопросах/пожеланиях.
А в результате получается, что дешевле и быстрее поставить старый комп с ДОС и какой-нибудь программой. Или даже с win XP/Linux - что-нибудь в ITX формате.
Разработка - дело дорогое и небыстрое, особенно когда ТЗ толком не сформулировано, а все держится на неясных вопросах/пожеланиях.
Да ладно вам разработка.😉 Старые компы как раз есть. даже 466 селерон рабочий дома валяется.😁
Алгоритм довольно прост. Это даже за разработку считать нельзя.
С потенциометра измеряем напряжение с помощью АЦП.
Результат через перекодировочную таблицу помещается в таймер, и ждем пока не установится флаг.
Как только флаг таймера установится, все повторяется снова. (следующий микрошаг)
Просто, как лучше сделать чередование для двух сигналов. То есть уже не один а два процесса. (временных интервалов.)
Я хотел посоветоваться только на счет этого и все.
А в результате получается, что дешевле и быстрее поставить старый комп с ДОС и какой-нибудь программой.
Это правда!
Но в этом случае, похоже, запуск станка не цель.
Да ладно вам разработка…
Алгоритм довольно прост. Это даже за разработку считать нельзя.
…Я хотел посоветоваться только на счет этого и все.
Так что же советоваться то? Это же не разработка: минут 10 посидел и готово 😵
“Нравится” мне такой подход: мне самому думать лень и свое время тратить не хочется, а вам что, трудно? Это же фигня, не разработка… 😈
С потенциометра измеряем напряжение с помощью АЦП.
Результат через перекодировочную таблицу помещается в таймер, и ждем пока не установится флаг.
Как только флаг таймера установится, все повторяется снова. (следующий микрошаг)
Просто, как лучше сделать чередование для двух сигналов. То есть уже не один а два процесса. (временных интервалов.)
Делал я такую ерундовину, когда в мастерской компа не было, а станок покрутить хотелось.
Система элементарная - два джойстика - 4 потенциометра на АЦП
AVR, один таймер на максимальную частоту шага. В прерывании таймера выставляем степ на нужном канале по перекодированным через таблицу данным АЦП и запускаем второй таймер, который сбрасывает степ. Заодно вывод скорости по осям на ЖКИ, пару кнопок, светодиодов, два выхода вкл/выкл.
Делалось на макетке ATmega32.
если надо - могу забросить схему и программу.
ЗЫ. Делалось чтобы попробывать станок, так что для нормальной работы нужно добавить ограничение максимального ускорения - чтобы при резких рывках джойстика не срывался движок. Но мне лень:)
Думаю будут проблемы с контроллером для двух драйверов и самая большая – синхронизация двух потоков step.
Делал я такую ерундовину, когда в мастерской компа не было, а станок покрутить хотелось.
Система элементарная - два джойстика - 4 потенциометра на АЦП
AVR, один таймер на максимальную частоту шага. В прерывании таймера выставляем степ на нужном канале по перекодированным через таблицу данным АЦП и запускаем второй таймер, который сбрасывает степ. Заодно вывод скорости по осям на ЖКИ, пару кнопок, светодиодов, два выхода вкл/выкл.Делалось на макетке ATmega32.
если надо - могу забросить схему и программу.
ЗЫ. Делалось чтобы попробывать станок, так что для нормальной работы нужно добавить ограничение максимального ускорения - чтобы при резких рывках джойстика не срывался движок. Но мне лень:)
Спасибо за толковый ответ! Если вас не затруднит с удовольствием бы посмотрел на программу и схему.😃
И еще хотел спросить. А где запускаете измерение АЦП. В основной программе?
Измеряете сразу все 4 канала? Или идет случайный характер?
Спасибо за толковый ответ! Если вас не затруднит с удовольствием бы посмотрел на программу и схему.😃
К сожалению нашел только промежуточный вариант на два канала.
Коротко о программе:
Таймер 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 здесь абсолютно избыточна, просто валялась под рукой.😃
К сожалению нашел только промежуточный вариант на два канала.
Коротко о программе:
Таймер 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 здесь абсолютно избыточна, просто валялась под рукой.😃
Благодарю от души!😃 Будем изучать алгоритм! Блин, надо Си учить.😦