Управление скоростью BLDC со встроенным контроллером (Hall out, PWM in)

Я стремлюсь к точному контролю скорости этот двигатель BLDC: он имеет встроенный контроллер, выдающий цифровой сигнал Холла (период 20,8 мс на осциллографе, без нагрузки) и использующий ШИМ в качестве входа для регулирования скорости.

Насколько мне известно, это задача ПИД-регулятора: измерить импульсы Холла на входе, отрегулировать рабочий цикл ШИМ на основе целевого периода/частоты выходного сигнала Холла.

Скорость должна контролироваться с погрешностью < 1% (чем меньше, тем лучше).

  • Реалистична ли эта цель для данного двигателя?
  • Как измерить длительность импульса?
  • Будет ли pulseIn (с отключенными прерываниями) достаточно точным? Должен ли я измерять минимумы или максимумы?
  • Должен ли я вместо этого измерять несколько импульсов (и как)? Или я должен принять неточность в периоде импульса и компенсировать (сгладить) его, используя интегральные/производные члены?
  • Нужно ли для этой задачи разрешение ШИМ более 8 бит? (Сначала я буду использовать Nano, но могу переключиться на Nano Every, который имеет 10-битный ШИМ).

Приветствуются любые другие комментарии/предложения.

, 👍0

Обсуждение

вы можете иметь 16-битный ШИМ с Timer1 (библиотекой) на Nano, @Juraj


2 ответа


Лучший ответ:

3

Это лишь частичный ответ об измерении периода или продолжительности пульса.

Для максимальной точности я бы рекомендовал использовать функцию "захват ввода". 16-битного таймера. Это не так просто, как использовать pulseIn() или синхронизацию. сигнал с помощью micros(): вам придется внимательно изучить MCU datasheet и вручную настроить биты некоторых регистров ввода/вывода. Ты будет вознагражден высокой точностью (один цикл, если таймер работает в тактовой частоты MCU) и без джиттера, присущего любому программный подход.

Остерегайтесь того, что Nano и Nano Every используют разные микроконтроллеры с очень разные таймеры. Оба имеют возможность захвата ввода, но если вы переключите от одного к другому вам придется переделывать большую часть работы. Обратите внимание, что Nano поддерживает 10-битный ШИМ, если вы запрограммируете его на низком уровне.

Программный подход (pulseIn() или attachInterrupt() + micros()) имеет преимущество переносимости.

,

1

Чтобы немного расширить ответ Эдгара:

Есть два основных способа измерения частоты, каждый из которых требует разных ресурсов и лучше подходит для разных ситуаций.

Метод, описанный Эдгаром с использованием метода захвата входного сигнала, хорош для быстро меняющихся низкочастотных сигналов, когда вы хотите очень быстро реагировать на изменения частоты. Он работает путем измерения времени между двумя импульсами с помощью автономного таймера. Конечно, вы можете измерять частоты только с той скоростью, с которой может работать таймер, что в любом случае довольно быстро, и при правильной настройке он может работать почти полностью асинхронно, поэтому вы можете просто запросить текущее записанное время, когда вам нужно.

Другой вариант – подсчет количества импульсов за заданный период времени. Это также можно сделать аппаратно, но с использованием другого набора периферийных устройств.

Для этого у вас есть два таймера. Таймер 1 может использовать внешний сигнал на выводе D5 в качестве часов. По сути, это превращает его в счетчик импульсов, и каждый раз, когда импульс поступает на вывод таймера, счетчик увеличивается на единицу.

Затем у вас есть второй таймер, который запускает прерывание в заданный период времени. Каков этот период, зависит от желаемой чувствительности и частотного диапазона, который вы хотите измерить. Вы также можете использовать "предделитель" Таймера 1, чтобы увеличить диапазон измерения частоты, подсчитывая только каждый 2-й, 4-й или 8-й и т. д. фронт.

Конечно, все это использование таймера будет мешать генерации ШИМ на Nano, но должно быть лучше на Nano Every, но вам следует проверить таблицу данных на предмет использования таймера.

Подводя итог:

Захват ввода

  • Быстрый ответ
  • Ограниченный диапазон частот

Подсчет импульсов с помощью таймера 1

  • Замедленный отклик
  • Естественно сглаженный вывод
  • Более широкий частотный диапазон
  • Понимает концепцию нулевой частоты.
  • Мешает генерации ШИМ

Какой бы метод вы ни выбрали, обязательно пропустите его через PID, чтобы создать стабильный выходной RPM.

,