Это мой первый пост. Я программный парень, пытающийся сделать аппаратное обеспечение, так что будьте осторожны :)
схема
Я проектирую небольшую схему (см. Рис., Извините за грязную схему), которая проста и проста - это набор MOSFETS и драйверов затворов, предназначенных для переключения резистивных нагрузок (в данном случае грелок) с микроконтроллера. Нагревательные элементы часто имеют очень низкое сопротивление, и для поддержания мощности на желаемом уровне МОП-транзисторы переключаются с помощью ШИМ.
измерение
Помимо чисто функционального аспекта, есть и образовательная направленность. Я хочу быть в состоянии получить некоторую обратную связь о текущем потреблении. И мой наивный подход состоял в том, чтобы просто добавить какие-то современные шунтирующие датчики. При использовании мультиметра для измерения выходного напряжения от датчика, я на самом деле получаю нечто, похожее на средний ток (с ШИМ-переключением) из-за «медлительности» амперметра. Но при подключении одного и того же выхода, например, к АЦП atmega328p, я получаю некоторые плохие показания - скорость здесь помещает показание в любом месте прямоугольной волны ШИМ.
Итак, мой вопрос: как мне измерить (средний) ток при переключении с ШИМ?
Кажется, дизайн в порядке, но я, возможно, что-то упустил как в дизайне, так и в том, как в этом контексте следует использовать АЦП ОК.
Ответы:
Иногда то, что выглядит просто, не так просто. У вас есть довольно сложное измерение, но вы хотите простой результат. То, что вы хотите измерить, не является постоянным, оно меняется во времени. В зависимости от вашего уровня требований, вы можете рассчитать одно или несколько свойств текущего потребления. Эти свойства помогут вам лучше контролировать систему. Я предлагаю вам 3 разных решения, в порядке возрастания сложности.
Решение 1: Среднее
Вы хотите получить однозначный результат -> получить среднее по времени. Как уже предложено @akellyirl, используйте фильтр нижних частот. Вычислить
float y = alpha*input + (1-alpha)*y
для каждого образца, гдеalpha
коэффициент сглаживания. Смотрите Википедию для деталей.Решение 2: Макс + Средний
Вы заинтересованы в получении среднего и максимального значения. Мониторинг максимального значения может быть интересен, например, для определения размеров компонентов.
Решение 3: Стандартное отклонение + Макс. + Среднее
Почему?
Смотрите ниже графики. Есть 3 сигнала разных форм. Треугольник , A синус и пик сигнала. Все они периодические с одинаковым периодом, одинаковой амплитудой , одинаковым средним и одинаковыми минимальными и максимальными значениями . Но они имеют разные формы, и действительно, у них совершенно другая история ...
Одним из различий является стандартное отклонение. Вот почему я предлагаю вам расширить ваши измерения и включить стандартное отклонение. Проблема в том, что стандартный способ его вычисления потребляет процессор. Надеюсь, есть одно решение.
Как?
Используйте метод гистограммы . Постройте гистограмму всех измерений и эффективно извлеките статистику (min, max, avg, стандартное отклонение) набора данных. Гистограмма группирует значения, имеющие одинаковое значение или одинаковый диапазон значений. Преимущество состоит в том, чтобы избежать сохранения всех выборок (увеличивая счет во времени), и иметь быстрые вычисления для ограниченного числа данных.
Перед началом сбора измерений создайте массив для хранения гистограммы. Это одномерный целочисленный массив размером 32, например:
int histo[32];
В зависимости от диапазона амперметра, адаптируйте ниже функции. Например, если диапазон равен 256 мА, это означает, что интервал 0 гистограммы будет увеличиваться на значение от 0 до 8 мА, интервал 1 на значение от 8 до 16 мА и т. Д. Итак, вам нужно целое число для представления номер ячейки гистограммы:
short int index;
Каждый раз, когда вы получаете образец, найдите соответствующий индекс корзины:
index = (short int) floor(yi);
И увеличить этот мусорный ящик:
histo[index] += 1;
Чтобы вычислить среднее значение, запустите этот цикл:
Чтобы вычислить стандартное отклонение, запустите этот цикл:
Стратегия метода гистограммы состоит в том, чтобы выполнять медленные операции на нескольких бинах вместо всех полученных выборок сигнала. Чем длиннее размер выборки, тем лучше. Если вы хотите больше подробностей, прочитайте эту интересную страницу Гистограмма, Pmf и Pdf .
источник
Вы правильно понимаете проблему: вам нужно получить «среднее» значение ШИМ, точно так же, как измеритель, который вы используете для измерений.
Вы можете использовать RC-фильтр для сигналов A1,2,3, постоянная времени которых как минимум в десять раз превышает ваш период ШИМ. Это означает, что если ваш период ШИМ составлял 10 микросекунд, тогда постоянная времени RC должна составлять 100 микросекунд. Например, 10 кОм x 10 нФ = 100 мкс
Лучшее решение - это цифровая фильтрация сигналов в микроконтроллере:
Измените значение «0,99», чтобы изменить постоянную времени этого цифрового фильтра.
источник