Оглавление:

Генерация ШИМ-сигнала высокого разрешения для сервоприводов RC с устройствами STM32: 3 шага
Генерация ШИМ-сигнала высокого разрешения для сервоприводов RC с устройствами STM32: 3 шага

Видео: Генерация ШИМ-сигнала высокого разрешения для сервоприводов RC с устройствами STM32: 3 шага

Видео: Генерация ШИМ-сигнала высокого разрешения для сервоприводов RC с устройствами STM32: 3 шага
Видео: Повышаем разрешение ЦАП на базе ШИМ микроконтроллера 2024, Июль
Anonim
Генерация сигналов ШИМ высокого разрешения для сервоприводов RC с устройствами STM32
Генерация сигналов ШИМ высокого разрешения для сервоприводов RC с устройствами STM32
Генерация ШИМ-сигналов высокого разрешения для сервоприводов RC с устройствами STM32
Генерация ШИМ-сигналов высокого разрешения для сервоприводов RC с устройствами STM32
Генерация ШИМ-сигналов высокого разрешения для сервоприводов RC с устройствами STM32
Генерация ШИМ-сигналов высокого разрешения для сервоприводов RC с устройствами STM32

В настоящее время я создаю RC-передатчик / приемник на основе радиочастотного чипа SX1280. Одна из целей проекта состоит в том, чтобы я хотел получить 12-битное разрешение сервоприводов от стиков до сервоприводов. Отчасти потому, что современные цифровые сервоприводы имеют разрешение 12 бит, во-вторых, передатчик высокого класса в любом случае использует 12 бит. Я изучал, как я могу генерировать ШИМ-сигналы высокого разрешения на устройствах STM32. Я использую черную таблетку (STM32F103C8T8) на данный момент для прототипа.

Шаг 1: Список деталей

Аппаратное обеспечение

  • Любая отладочная плата STM32F103 (синяя таблетка, черная таблетка и т. Д.)
  • Блок питания USB в качестве источника питания
  • Программатор STM32 (Segger j-links, ST-LINK / V2 или просто клон st-link)

Программное обеспечение

  • STM32CubeMX
  • Atollic TrueSTUDIO для STM32
  • Источник проекта с github

Шаг 2: очевидное решение

Очевидное решение
Очевидное решение
Очевидное решение
Очевидное решение
Очевидное решение
Очевидное решение

Вероятно, самое простое решение - использовать один из таймеров, который может генерировать сигналы ШИМ, например TIM1-3 на STM32F103. Для современного цифрового сервопривода частота кадров может снизиться до 5 мс или около того, но для старого аналогового сервопривода она должна составлять 20 мс или 50 Гц. Итак, в худшем случае давайте сгенерируем это. При тактовой частоте 72 МГц и разрешении счетчика таймера 16 бит нам необходимо установить предварительный делитель таймера на минимум 23, чтобы покрыть частоту кадров 20 мс. Я выбрал 24, потому что тогда на 20 мс мне нужно установить счетчик точно на 60000. Вы можете увидеть настройку CubeMX и сгенерированные сигналы PWM 1 и 1,5 мс на скриншотах. К сожалению, для 1 мс счетчик таймера должен быть установлен на 3000, что даст нам только 11-битное разрешение. Неплохо, но цель была 12 бит, так что попробуем что-нибудь другое.

Конечно, если бы я выбрал микроконтроллер с 32-битным таймером, например STM32L476, это разрешение может быть намного выше, и проблема будет решена.

Но здесь я хотел бы предложить альтернативное решение, которое еще больше увеличит разрешение даже на STM32F103.

Шаг 3: каскадные таймеры для более высокого разрешения

Каскадные таймеры для более высокого разрешения
Каскадные таймеры для более высокого разрешения
Каскадные таймеры для более высокого разрешения
Каскадные таймеры для более высокого разрешения
Каскадные таймеры для более высокого разрешения
Каскадные таймеры для более высокого разрешения

Основная проблема с предыдущим решением заключается в том, что частота кадров (20 мс) относительно высока по сравнению с фактически сгенерированным ШИМ-сигналом (от 1 до 2 мс), поэтому мы тратим некоторые оцененные биты на оставшиеся 18 мс, когда мы ждем следующий кадр. Это может быть решено с помощью каскадных таймеров с использованием функции привязки таймера для синхронизации.

Идея состоит в том, что я буду использовать TIM1 в качестве ведущего для генерации частоты кадров (20 мс) и TIM2, TIM3 для обработки сигналов ШИМ в качестве ведомых устройств. Когда мастер запускает подчиненные, они генерируют только сигнал ШИМ в одном импульсном режиме. Поэтому мне нужно покрыть только 2 мс в этих таймерах. К счастью, вы можете каскадировать эти таймеры на аппаратном уровне, чтобы эта синхронизация не требовала вмешательства процессора и была очень точной, так как джиттер находится в области ps. Вы можете увидеть настройку CubeMX на скриншотах.

Как вы можете видеть, я выбрал 3 как прескаляр, поэтому для 2 мс мне нужно установить 48000 в счетчике таймера. Это дает нам 24000 на 1 мс, что на самом деле больше, что нам нужно для 14-битного разрешения. Тадаааа…

Пожалуйста, взгляните на скриншоты осциллографа во вступлении, чтобы увидеть окончательный результат. Канал 3 (фиолетовый) - это прерывание главного таймера, которое запускает мазь для генерации одного импульса. Каналы 1 и 4 (желтый и зеленый луч) представляют собой фактические сигналы ШИМ, генерируемые разными таймерами. Обратите внимание, что они синхронизированы, но они синхронизируются по задним фронтам, то есть из-за режима ШИМ 2. Это не проблема, потому что скорость ШИМ для конкретного сервопривода все еще правильная.

Другое преимущество этого решения состоит в том, что изменение частоты кадров означало бы изменить только период в TIM1. Для современных цифровых сервоприводов вы можете снизить частоту даже до 200-300 Гц, но, пожалуйста, обратитесь к руководству сервоприводов, если вы хотите выполнить точную настройку.

Рекомендуемые: