Контроллер на 2 сигнала STEP/DIR
Да ладно вам разработка…
Алгоритм довольно прост. Это даже за разработку считать нельзя.
…Я хотел посоветоваться только на счет этого и все.
Так что же советоваться то? Это же не разработка: минут 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 здесь абсолютно избыточна, просто валялась под рукой.😃
Благодарю от души!😃 Будем изучать алгоритм! Блин, надо Си учить.😦