Измерение среднего тока с помощью ОК и токового шунта

12

Это мой первый пост. Я программный парень, пытающийся сделать аппаратное обеспечение, так что будьте осторожны :)

схема

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

измерение

Помимо чисто функционального аспекта, есть и образовательная направленность. Я хочу быть в состоянии получить некоторую обратную связь о текущем потреблении. И мой наивный подход состоял в том, чтобы просто добавить какие-то современные шунтирующие датчики. При использовании мультиметра для измерения выходного напряжения от датчика, я на самом деле получаю нечто, похожее на средний ток (с ШИМ-переключением) из-за «медлительности» амперметра. Но при подключении одного и того же выхода, например, к АЦП atmega328p, я получаю некоторые плохие показания - скорость здесь помещает показание в любом месте прямоугольной волны ШИМ.

Итак, мой вопрос: как мне измерить (средний) ток при переключении с ШИМ?

Кажется, дизайн в порядке, но я, возможно, что-то упустил как в дизайне, так и в том, как в этом контексте следует использовать АЦП ОК.

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

LTJ
источник
Я думаю, что фильтр может быть использован для получения среднего напряжения от ШИМ. Интересная статья , которая объясняет такой фильтр и значения , которые используются в зависимости от частоты ШИМ это одна .
alexan_e
Есть несколько связанных ответов на этот вопрос . Но они просто упоминают об использовании шунтов и микросхем для измерения тока. Там нет упоминания о ШИМ, хотя.
Рикардо
Спасибо за комментарии. @alexan_e: TI показывает входной фильтр в таблице данных INA197, но я не был уверен в его использовании. Это может быть путь, когда нет стабильного напряжения.
LTJ
Я думаю, что это решение вашей проблемы, но я бы предпочел, чтобы кто-то побольше об этом рассказал, предоставив подробный ответ, поэтому я опубликовал это как комментарий.
alexan_e
Поскольку на выходе используется ШИМ с переменным режимом работы, вы можете использовать схему пикового детектора и измерять ее с помощью АЦП.
Мартин

Ответы:

6

Иногда то, что выглядит просто, не так просто. У вас есть довольно сложное измерение, но вы хотите простой результат. То, что вы хотите измерить, не является постоянным, оно меняется во времени. В зависимости от вашего уровня требований, вы можете рассчитать одно или несколько свойств текущего потребления. Эти свойства помогут вам лучше контролировать систему. Я предлагаю вам 3 разных решения, в порядке возрастания сложности.

Решение 1: Среднее

Вы хотите получить однозначный результат -> получить среднее по времени. Как уже предложено @akellyirl, используйте фильтр нижних частот. Вычислить float y = alpha*input + (1-alpha)*yдля каждого образца, где alphaкоэффициент сглаживания. Смотрите Википедию для деталей.

Решение 2: Макс + Средний

Вы заинтересованы в получении среднего и максимального значения. Мониторинг максимального значения может быть интересен, например, для определения размеров компонентов.

if (y > max)
  max = y;

Решение 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;

Чтобы вычислить среднее значение, запустите этот цикл:

float mean = 0;
int N = 0;
for (i=0; i < 32 ; i++) {
  mean = i * histo[i]; // sum along the histogram
  N += i; // count of samples
}
mean /= N; // divide the sum by the count of samples.
mean *= 8; // multiply by the bin width, in mA: Range of 256 mA / 32 bins = 8 mA per bin.

Чтобы вычислить стандартное отклонение, запустите этот цикл:

float std_dev = 0;

for (i=0; i < 32 ; i++) {
  std_dev = (i - mean) * (i - mean) * histo[i]; // sum along the histogram
}
std_dev /= N; // divide the sum by the count of samples.
std_dev = sqrt(std_dev); // get the root mean square to finally convert the variance to standard deviation.

Стратегия метода гистограммы состоит в том, чтобы выполнять медленные операции на нескольких бинах вместо всех полученных выборок сигнала. Чем длиннее размер выборки, тем лучше. Если вы хотите больше подробностей, прочитайте эту интересную страницу Гистограмма, Pmf и Pdf .

RawBean
источник
очень подробное и четкое объяснение. На практическом уровне, как вы гарантируете, что выборка АЦП распределяется «надлежащим образом», то есть не связана каким-либо образом с сигналом ШИМ? Я должен признать, что сейчас я просто использую Arduino (hw + sw) для выборки как ШИМ, так и АЦП. Возможно, мне следует настроить встроенные таймеры самостоятельно. Я думаю, частота дискретизации должна быть немного выше, чем частота ШИМ, верно?
LTJ
1
Как только вы начинаете делать выборки, все становится довольно сложно. Первое, что нужно сделать, это иметь в виду теорему Найквиста-Шеннона. Интуитивно понятно, что чем выше частота дискретизации, тем больше у вас информации. Но что не является интуитивно понятным, хотя и фундаментальным, так это то, что перед дискретизацией на частоте Fs необходимо абсолютно низкочастотный фильтр (в области аналоговой / электронной техники) сигнала в Fs / 2. В противном случае на вас повлияет псевдоним. Я предлагаю вам выбрать самую высокую частоту дискретизации. Приблизительно в 10 раз больше частоты ШИМ, если это возможно.
RawBean
Это распространенное недоразумение теоремы Найквиста-Шеннона, в котором фактически говорится, что вам необходимо производить выборку с удвоенной пропускной способностью. Псевдоним может быть полезным. Нет никакого неуважения, но это похоже на ответ из книги. Предположение о ~ 10-кратной дискретизации ШИМ в этом сценарии, когда высокочастотная детализация, скорее всего, не имеет значения, является излишним.
akellyirl
1

Вы правильно понимаете проблему: вам нужно получить «среднее» значение ШИМ, точно так же, как измеритель, который вы используете для измерений.

Вы можете использовать RC-фильтр для сигналов A1,2,3, постоянная времени которых как минимум в десять раз превышает ваш период ШИМ. Это означает, что если ваш период ШИМ составлял 10 микросекунд, тогда постоянная времени RC должна составлять 100 микросекунд. Например, 10 кОм x 10 нФ = 100 мкс

Лучшее решение - это цифровая фильтрация сигналов в микроконтроллере:

float y = (1-0.99)*input + 0.99*y; 

Измените значение «0,99», чтобы изменить постоянную времени этого цифрового фильтра.

akellyirl
источник
1
Остерегайтесь псевдонимов, если вы делаете это в коде.
Энди ака
Псевдоним не обязательно является проблемой. Мы все знаем, что для восстановления сигнала частота дискретизации должна быть как минимум вдвое больше максимальной частоты. Но когда сигнал ограничен полосой пропускания, вам нужно только сэмплировать с удвоенной полосой пропускания . Это называется недосэмплиг. Поскольку сигнал, предположительно, имеет низкую частоту, поскольку он управляет электрогрелкой, разумные частоты дискретизации в диапазоне от 100 до 1000 сП должны быть хорошими. Смотрите: ni.com/newsletter/50078/en
akellyirl
Было бы разумно убедиться, что частота ШИМ и частота дискретизации взаимно просты, если используется недостаточная выборка.
akellyirl
Именно мои мысли - если измерять через АЦП и генерировать ШИМ в одном и том же MCU, может быть тенденция к тому, что оба будут заблокированы во времени.
Энди ака
Сигнал на частоте ШИМ, а не низкой частоте. Если бы он был низким, то, вероятно, он менее ресурсоемок, чтобы просто производить выборку за один период и в среднем, чем использовать математику с плавающей запятой таким образом.
Скотт Сейдман