Время управления шаговым двигателем - PullRequest
4 голосов
/ 07 января 2011

У меня есть вопрос, касающийся управления шаговым двигателем при использовании стека Microchip TCP / IP.

В прошлом я использовал таймер для управления своим шаговым двигателем.Я устанавливаю период таймера на требуемое время между импульсами, а затем меняю выходы фазы двигателя, как необходимо в таймере ISR.В тех случаях, когда я делал это, мой шаговый двигатель двигался с максимальной частотой около 400 импульсов в секунду, что означает, что прерывание происходило каждые 2,5 миллисекунды.И я использовал USB для связи с хостом.

Сейчас я работаю над новым продуктом, который будет использовать стек TCP / IP для связи с ПК через Ethernet.Он также будет связываться с другими устройствами через модули SPI и UART.Это новое устройство должно быть способно работать с шаговым двигателем до 2000 импульсов в секунду, что означает, что прерывание может срабатывать каждые 0,5 миллисекунды, если я использую тот же подход таймера / ISR для управления шаговым двигателем.Шаговый двигатель включается и выключается на основе команд, полученных от хоста, поэтому связь с хостом и работа двигателя должны происходить согласованно и одновременно.Если скорость шагового двигателя изменяется незначительно, это не будет проблемой, но это не идеально.Кроме того, если бы степпер остановился, скажем, на 30 мс в середине своего хода, это было бы неприемлемо.

Я рассматриваю возможность использования PIC24F с тактовой частотой команд 16 МГц (32 МГц / 2 с использованием внутреннего FRC + PLL) для этого проекта.Считаете ли вы, что прерывания для степпера нарушат связь по Ethernet или наоборот?Есть ли лучший способ сделать это?

Я рассмотрел вопрос об использовании отдельного PIC для управления шаговым двигателем, а затем я мог бы отправлять команды выбора заданного положения или команды остановки для запуска и остановки движения, но это добавило бы в микшер еще одну прошивку и усложнило бы все вокруг.,

Ответы [ 3 ]

1 голос
/ 26 марта 2011

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

1 голос
/ 07 января 2011

Это зависит от аппаратного обеспечения, и лучший ответ - попробовать и попробовать.

Другие ваши варианты: либо использовать отдельный PIC для управления шаговым двигателем, как вы упомянули, использовать псевдопоточность (пользовательские потоки, но это обычно не доступно в большинстве компиляторов для платформы PIC.

Но, возможно, для вас лучше всего будет использовать основной цикл вашего программного обеспечения для управления шаговым двигателем (для ....переместить, уснуть, продолжить), а затем использовать прерывания для обработки входящих запросов TCP / IP, с помощью которых вы будете изменять регистры / переменные состояния.

Использование прерываний - хорошая идея, но когда у вас что-то такое высокое-приоритет, опрос и зацикливание являются лучшими вариантами.Чтобы убедиться, что все гладко, вы должны быть в состоянии гарантировать, что ваши прерывания TCP / IP не будут превышать xxx циклов (или миллисекунд, то же самое на PIC, на самом деле), или же добавление кода управления шаговым шагом в TCP/ Обработчик прерываний IP.

Теперь все это не понадобится, если ваш контроллер PIC имеет приоритетные прерывания.В этом случае просто установите шаговое прерывание на более высокий приоритет, чем прерывание TCP, и все будет в порядке.Тем не менее, я не верю, что PIC имеет это для пользовательских функций, но я могу ошибаться.Также может быть хорошей идеей перейти на другую платформу, которая поддерживает поддержку приоритетных прерываний, потому что это сделает код намного чище и облегчит вашу жизнь.

0 голосов
/ 07 января 2011

Нужно ли хосту запускать и останавливать шаговый двигатель на границе 0,5 мс? У меня нет никаких цифр, чтобы подтвердить это, но я чувствую, что переменная задержка соединения Ethernet может повлиять на вашу реакцию на команды, особенно если в той же сети есть другие устройства.

...