Оптимизируйте энергопотребление с помощью АЦП STM32L4 - PullRequest
0 голосов
/ 06 ноября 2018

Я работаю над разработкой прошивки для STM32L4. Мне нужно сэмплировать аналоговый сигнал на частоте около 200 Гц. Таким образом, в основном одно аналого-цифровое преобразование каждые 5 мс.

До сих пор я запускал АЦП в режиме непрерывного преобразования, запускаемого таймером. Однако это не позволяет переводить STM32 в режим «Стоп» между преобразованиями, что было бы очень эффективно с точки зрения энергопотребления, поскольку 99% времени не имеет ничего общего с продуктом.

Таким образом, моя идея состоит в том, чтобы использовать режим одиночного преобразования: использовать таймер с низким энергопотреблением, чтобы выходить из режима остановки каждые 5 мсек, запускать одиночное преобразование в обработчике прерываний LPTIM (ожидание завершения преобразования АЦП в опросе) и вернитесь в режим остановки.

Как вы думаете, имеет ли это смысл или вы видите проблемы, чтобы продолжать в том же духе? Я не уверен насчет опроса одиночного преобразования АЦП внутри обработчика, как вы думаете? Я думаю, что одно преобразование на одном канале должно быть довольно быстрым (я работаю на частоте 80 МГц, в таблице указано максимальное время выборки 8 мкс)

Нужно ли отключать / включать АЦП (бит ADEN) между каждым преобразованием?

Кроме того, я должен знать, как долго длится одно преобразование, чтобы оценить, является ли решение интересным или нет. Я запутался насчет времени выборки (бит SMP). В справочном руководстве говорится: «Этого времени выборки должно быть достаточно, чтобы источник входного напряжения зарядил встроенный конденсатор до уровня входного напряжения». Как найти правильное значение SMP?

1 Ответ

0 голосов
/ 07 ноября 2018

С общей идеей проблем нет, LPTIM1 может генерировать события пробуждения через контроллер EXTI даже в режиме Stop2.

Я не уверен насчет опроса одиночного преобразования АЦП внутри обработчика, как вы думаете?

Возможно, вы захотите перевести MCU в режим ожидания в режиме прерывания по таймеру, и чтобы АЦП вызывал прерывание по завершении преобразования. Поэтому отключите SLEEPDEEP в прерывании по таймеру и включите его в прерывании АЦП.

Как найти правильное значение SMP?

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

...