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

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 здесь абсолютно избыточна, просто валялась под рукой.😃

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