Arduino Motor Shield R3 Измерение тока

Я пытаюсь использовать текущие функции измерения Arduino Motor Shield R3 , щит основан на L289 . Значения, которые я прочитал, кажутся очень шумными. Я использую функцию AnalogRead() Arduino UNO A0 для измерения тока. Чтобы исправить это, я попытался использовать фильтр нижних частот между моторным щитом и Arduino Uno.

схематический

смоделируйте эту схему - схема, созданная с помощью CircuitLab

Это помогло исправить шум измерения, однако у меня есть несколько вопросов по этому поводу:

  1. Вызван ли шум в сигнале датчика больше самим двигателем или тем фактом, что двигатель управляется ШИМ? (Обратите внимание, что я уже увеличил частоту ШИМ Arduino Uno до 32 кГц.)
  2. Если бы я добавил фильтр нижних частот к входному ШИМ-сигналу, то измерение тока все еще было бы шумным? Я попытался добавить фильтр нижних частот к ШИМ, но, похоже, это не изменило определение тока. Однако фильтр нижних частот повлиял на двигатель, он начал работать как обычно и со временем замедлился почти до полной остановки. Возможно я неправильно подключил ФНЧ для ШИМ.
  3. Есть ли на самом деле какое-либо преимущество в добавлении фильтра нижних частот для входного ШИМ-сигнала или ШИМ с частотой 32 кГц достаточно быстр, и я должен просто использовать фильтр нижних частот для измерения тока?
Вы не можете ожидать, что мы узнаем, что такое «Arduino Motor Shield R3». Я даже не могу понять из вашего вопроса, является ли R3 каким-то номером модели, обозначением резистора или чем-то еще. Это общий сайт по электронике, где arduino — это небольшое подмножество того, о чем говорят. Схема помогла бы точно объяснить, что именно воспринимается и как это представляется на (предположительно?) A/D-входе микроконтроллера где-то.
Вы не хотите быть низкочастотным фильтром ШИМ-сигналов; идея состоит в том, чтобы включать и выключать какой-либо транзистор, не переводя его в промежуточное состояние, в котором он рассеивает тепло.

Ответы (1)

Из блок-схемы в техническом описании видно, что на определение тока влияют выходные каскады H-моста. Это означает, что когда вы используете ШИМ для управления двигателем, напряжение считывания будет меняться в зависимости от сигнала ШИМ. Напряжение на чувствительном резисторе пропорционально току через него, который, в свою очередь, зависит от напряжения на индукторе двигателя. В течение положительного периода сигнала ШИМ ток будет «медленно» увеличиваться, тогда как в течение отрицательного периода сигнала ШИМ ток будет «медленно» уменьшаться. На практике это будет немного похоже на треугольную волну, и это шум, который вы измеряете.

Решение состоит в том, чтобы убедиться, что вы синхронизируете измерение напряжения считывания с сигналом ШИМ. Например, вы можете привязать прерывание к таймеру, который используется для сигнала ШИМ, и для этого потребуется немного покопаться в таблице данных микроконтроллера (и немного проб и ошибок), чтобы понять, как это реализовать. Другой вариант — подключить вывод прерывания к выходному выводу ШИМ, что может быть проще для начала. Это можно сделать, хотя вам может потребоваться снизить частоту ШИМ (чтобы согласовать преобразование АЦП с рабочим циклом ШИМ), напрямую запрограммировать аппаратные регистры (библиотеки Arduino медленные) или использовать какой-либо ассемблер.

введите описание изображения здесь

Разве фильтр нижних частот на чувственном сигнале не дает такого же эффекта? Также исчезла бы эта треугольная волна, если бы я использовал прямое изменение напряжения вместо ШИМ?
Фильтр нижних частот дает тот же эффект, но требует дополнительного оборудования, тогда как синхронная выборка — это программное решение. Не уверен, что вы подразумеваете под «используется прямое изменение напряжения вместо ШИМ»
Я предпочитаю аппаратное решение в этом случае. Прямым изменением напряжения я думал отфильтровать ШИМ, который идет в моторный щит. Будет ли это иметь какое-либо преимущество по сравнению с функцией фильтрации?
Если отфильтровать ШИМ до аналогового напряжения, поступающего на моторный щит, то однозначно убьете щит. Выходные каскады не рассчитаны на аналоговые напряжения, они либо высокие, либо низкие. Если подумать и рассмотреть принципиальную схему в моем ответе, чип драйвера все равно превратит аналоговое напряжение в логический сигнал (элементы И), поэтому он вообще не будет работать.