Avr измерение тока и напряжения. Измерение действующего значения напряжения. Измерительный трансформатор тока

Ibrahim Kamal (IKALOGIC)

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

Данная статья преследует учебные цели. Мы рассмотрим аппаратное решение и программную реализацию в задаче измерения уровня напряжения батареи (аккумулятора) с помощью микроконтроллера, который питается от этого же источника. Предполагается, что пользователи знакомы с программированием микроконтроллеров AVR и имеют базовые знания языка Си. Используемый компилятор - WinAVR.

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

Существует множество способов и решений для отслеживания уровня напряжения батареи питания, многие из них требуют использования внешних компонентов и узлов. Рассматриваемое нами решение не требует внешних компонентов, мы будем использовать лишь ресурсы и периферию микроконтроллера - встроенный АЦП.

Использовать будем микроконтроллер компании ATMEGA48 , но программный код полностью совместим с микроконтроллерами ATMEGA88 , ATMEGA168 , ATMEGA328 . Кроме того, немного исправив исходный код, можно применить данное решение для микроконтроллеров AVR со встроенным АЦП.

Пользователи, наверное задаются вопросом: «Неужели настолько сложен процесс измерения напряжения питания микроконтроллера?» Для решения этой задачи у нас есть микроконтроллер, и нам необходимо преобразовать аналоговую величину напряжения в цифровое значение, которое может использоваться микроконтроллером для дальнейших вычислений и действий.

Вы, наверное, скажете: «Так в чем же дело. Мы подключим положительный вывод батареи, от которой питается микроконтроллер, к входу АЦП и преобразуем величину напряжения в цифровое значение!».

Однако в этом случае вы будете не правы, это не так просто. Проблема в том, что источник напряжения используется для питания самого микроконтроллера (Vcc), а также в качестве источника опорного напряжения АЦП.

Если рассмотреть данную проблему с математической точки зрения, если вы понимаете проблему. В общем случае соотношение между измеренным напряжением и величиной в цифровой форме, преобразованной 8-разрядным АЦП, следующее:

,

где ADC_VALUE - значение полученное при аналого-цифровом преобразовании,
V_measure - измеренная величина напряжения, V_REF - опорное напряжение для АЦП.

Теперь, по условиям нашей задачи, мы знаем что V_measure = V_REF = Vcc и в итоге результатом уравнения всегда будет значение равное 255 и оно не будет изменяться при изменении напряжения батареи. Такая ситуация всегда будет иметь место при измерении напряжение батареи, которое также используется в качестве источника опорного напряжения.

Для решения задачи без использования каких-либо внешних компонентов, AVR микроконтроллер имеет очень полезный встроенный узел, называемый внутренний Band Gap источник опорного напряжения (Band Gap Reference Voltage). Выходное напряжение этого источника около 1.1 В, и оно остается неизменным при изменении температуры и напряжения питания микроконтроллера. Это напряжение может подаваться на вход АЦП, как и любое внешнее напряжение, с единственным исключением, что делается это программно, без включения дополнительных внешних компонентов.

Хотя данный узел не был разработан для нашей определенной цели, мы будем использовать его в нашей задаче по измерению напряжения питания микроконтроллера.

Рассмотрим наше уравнение

ADC_VALUE = V_measure * 255/V_REF ,

Но, решая измерить опорное напряжение V_BG , мы получим следующее выражение

ADC_VALUE = V_BG * 255/V_REF

И так как в нашем случае опорное напряжение АЦП равно Vcc (основной момент нашей задачи), то уравнение примет вид

ADC_VALUE = V_BG * 255/Vcc

Зная, что V_BG=1.1 В , из уравнения мы можем вычислить напряжение питания микроконтроллера

Vcc = 1.1 * 255/ADC_VALUE

Благодаря последнему выражению вы сможете вычислить фактическую величину напряжения источника питания вашего устройства на микроконтроллере без использования каких-либо внешних компонентов.

Рассмотрим пример реализации.

Принципиальная схема

Мы используем три NiCad аккумулятора для питания микроконтроллера. Напряжение питания, при полностью заряженных аккумуляторах, составит 4.2 В. Нам необходимо включить светодиод, подключенный к порту PB0, если напряжение будет ниже 3.2 В.

Листинг

#include avrio.h #include avrinterrupt.h
// Global variables
float vcc;//variable to hold the value of Vcc
void setup_adc(void)
{
ADMUX = 0xE; //Set the Band Gap voltage as the ADC input
ADCSRA = (1ADEN)|(1ADATE)|(1ADIE)|(1ADSC)|5;
}
ISR(ADC_vect) //ADC End of Conversion interrupt
{
unsigned char adc_data;
adc_data = ADC>>2; //read 8 bit value
vcc = 1.1 * 255 / adc_data;
}
// Main program
// ***********************************************************
int main(void)
{
DDRB = DDRB | (1PB0); //set PB0 as output (for the LED).
sei(); //Activate interrupts setup_adc();
//setup the ADC

while(1)
{
// Infinite loop
if (vcc < 3.2)
{
PORTB |= (1PB0);
}
else
{
PORTB &= ~(1PB0);
}
}
}

Следует учитывать, что напряжение V_BG будет разное у разных микроконтроллеров, особенно из разных партий, и может находиться в пределах 1.01 В - 1.2 В, следовательно необходима будет калибровка. Таким образом, если вычисленное значение Vcc с использованием данного кода неправильное, необходимо проделать следующие действия: измерить вольтметром напряжение питания Vсс и, используя уравнение ниже и зная значение ADC_VALUE , вычислить значение V_BG

Как известно многие современные микроконтроллеры имеют встроенный многоканальный АЦП, как правило, физически АЦП всего один, а многоканальность обеспечивается с помощью мультиплексирования. Диапазон напряжений с которыми может работать АЦП определяют уровни опорных напряжений(+VREF и -VREF ), они не должны выходить за диапазон питания микроконтроллера. Диапазон напряжений, питающих микроконтроллер, может быть от 0 до 3.3, либо от 0 до 5 вольт. Отсюда становится понятно что измерять отрицательные напряжения АЦП не может, а это бывает необходимо.

Для измерения отрицательных напряжений с помощью АЦП существует несколько способов, во всех примерах будем считать что -VREF = 0 , а +VREF = 5 вольт.

Необходимо измерять только отрицательные напряжения, например, от -5 до 0.
В таком случае можно применить инвертирующий усилитель, построенный на операционном усилителе(ОУ), с коэффициентом усиления равным -1.

Когда на вход схемы будет приходить -1 вольт, на вход АЦП будет поступать +1 вольт. Если же сигнал, который хотим измерить нужно усилить, достаточно изменить номиналы резисторов R1 и R2.

Необходимо измерять только отрицательные напряжения, например, от -15 до 0.
В таком случае можно применить сумматор построенный на ОУ


Номиналы резисторов R1 и R2 рассчитываются следующим образом, когда Uвх = -15 вольт, суммарное падение напряжение на резисторах R1 и R2 равно 20 вольт. В этом случае на прямом входе ОУ должно быть 0 вольт, отсюда становится понятно, что на R1 упадёт 5 вольт, а на R2 упадёт 15 вольт, из этого следует, что номиналы резисторов должны соотносится как R2/R1 = 3/1. С другой стороны, так как резисторы соединены последовательно и через них течёт один и тот же ток, можно записать формулу.


Идём дальше, так как в схеме присутствует отрицательная обратная связь, напряжение на прямом и инверсном выводе должны быть равны. Когда Uвх = 0 на выходе ОУ будет 5 вольт(в данном случае ноль на входе - максимальное значение, значит на выходе должно быть максимальное значение равное 5 вольтам). В это же время на прямом входе ОУ будет 3.75 вольта, и эти же 3.75 будут на инверсном входе. Так как на выходе ОУ 5 вольт, а на инверсном входе 3.75, легко рассчитать соотношение R3 к R4(обычный делитель напряжения).


Предположив, что R1 и R4 равны 10К, получаем


R1 = 10К

R2 = 30К

R3 = 30К

R4 = 10К

Необходимо измерить напряжение, которое может изменяться от -10 до 10 вольт.

Сделать это очень просто, для этого надо создать смещение, чтобы при подаче -10 вольт на вход схемы на входе АЦП было 0 вольт, тогда при подаче 10 вольт на входе АЦП будет 5 вольт.

Реализовать это можно несколькими способами:

  • на резисторах


Номиналы резисторов рассчитываются очень просто, когда мы подаём на левый вход R2 -10 вольт на его правом выводе должно быть 0 вольт, в таком случае ток через R3 не течёт, так как на его концах отсутствует разность потенциалов.

Ток, протекающий через R2, равен


Ток, протекающий через R1, равен


Так как резисторы R1 и R2 соединены последовательно, то и токи, протекающие через них равны.


Предположим R2 равен 10K, тогда R1 равен 5K.

Ток через R2 равен току через R3, получаем


получаем

R1 = 5К

R2 = 10К

R3 = 10К

Минус схемы на резисторах, это то что R2 ограничивает ток, поступающий на вход АЦП и то что любой шум в цепи питания будет попадать на вход АЦП. Хотелось бы обратить внимание на то, что у АЦП есть такой параметр, как входное сопротивление, которое, как правило, зависит от частоты сэмплирования , ниже изображена таблица в которой показано как зависит сопротивление входа от периода преобразования АЦП для STM32


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

Этот недостаток можно исправить, собрав схему, которая обладает низким выходным сопротивлением, то есть может отдать большой ток.

  • сумматор на операционном усилителе


И снова нам поможет сумматор на операционном усилителе, как рассчитываются номиналы резисторов описано выше, но суть одна, надо взять два крайних значения, поступающего напряжения, при минимальном значении на выходе ОУ должен быть ноль, при максимальном должно быть 5 вольт(не забываем, что -VREF = 0 , а +VREF = 5 вольт). Если необходимо измерять положительное и отрицательное напряжение, в качестве смещения удобно использовать половину опорного напряжения, то есть 2.5 вольта.
Вот что получилось в микрокапе, картинку можно увеличить кликнув по ней.


Схема на ОУ обладает низким выходным сопротивлением, то есть может отдавать большой ток и может быть пересчитана для измерения других напряжений, например, ±2.5 вольта.
мы рассмотрим ещё несколько способов измерения отрицательного напряжения с помощью АЦП.

Сеть 220 В в большинстве случаев является основным источником питания для устройств, содержащих МК. Кроме того, она может служить информационным и управляющим каналом. Актуальными являются следующие задачи:

  • измерение сетевой частоты и сетевого напряжения;
  • проверка наличия сетевого питания при переходе на резервный источник;
  • передача по сетевым проводам информационных сигналов;
  • тактирование работы устройства от сетевой частоты;
  • определение момента перехода переменного напряжения через нуль, чтобы коммутировать различные нагрузки с минимальным уровнем помех.

Стандартами стран СНГ допускается разброс сетевого напряжения в диапазоне 187...242 В и изменение частоты в пределах 49...51 Гц. Однако эти параметры варьируются в зависимости от страны и континента (Табл. 3.1), что надо учитывать при разработке продукции на экспорт.

Таблица 3.1. Стандарты электрических сетей в разных странах

Для адаптации напряжения сети 220 В к низковольтным входам МК используют резистивные делители (Рис. 3.1, а...з), оптическую (Рис. 3.2, а...ж) и трансформаторную (Рис. 3.3, а...з) развязку. В двух последних случаях гарантируется гальваническая изоляция первичных и вторичных цепей, что повышает безопасность.

Рис. 3.1. Схемы неизолированных датчиков сетевого напряжения 220 В {начало):

а) диод VD1 отсекает отрицательную полуволну напряжения, резистором R2 регулируется амплитуда сигнала на входе МК (частота 50 Гц), конденсатор С1 устраняет помехи;

б) на вход МК поступает сигнал удвоенной частоты 100 Гц от мостового выпрямителя;

в) провод питания МК +5 В гальванически связан с сетыо 220 В. Резистор R1 ограничивает ток через внутренние защитные диоды МК (0.1...0.3 мА). Частота сигнала 50 Гц;

г) транзисторы VTI, VT2 образуют двухсторонний ограничитель напряжения с нагрузкой в виде резистора R2. Транзистор VT3 — усилитель-инвертор. Конденсатор С1 защищает МК от коммутационных помех, которые могут возникать в сети 220 В при работе тиристоров;

д) МК проверяет исправность симистора VS1 и отсутствие обрыва в нагрузке Конденсатор С1 имеет большую ёмкость, поэтому на входе МК напряжение усредняется. Резистором R2 устанавливается порог напряжения, ниже которого считается, что произошла авария;

е) для устройств, которые критичны к полярности включения вилки в сетевую розетку, «нуль» (N) и «фазу» (L) определяют стандартным прибором электрика «светящаяся отвёртка»;

ж) двухстороннее ограничение сетевого напряжения внутренними диодами МК. Конденсатор С1 высоковольтный (250 В переменного напряжения) на случай обрыва резистора R3.

Рис. 3.2. Схемы датчиков сетевого напряжения 220 В с оптической изоляцией (начало):

а) фототранзисторы оптопары VU1 закрываются на 0.1...0.2 мс в момент перехода сетевого напряжения через нуль. Точная длительность подбирается резистором R2, частота 100 Гц;

б) формирователь импульсов с частотой 50 Гц. Двойная гальваническая развязка: на оптопа-ре VU1 и на трансформаторе 77. Коллекторной нагрузкой оптопары служит внутренний резистор МК. Диод Шоттки VD1 защищает излучатель оптопары VU1 от обратного напряжения;

в) аналогично Рис. 3.2, а, но на двух отдельных оптопарах и без транзисторного ключа;

г) МК проверяет отсутствие обрыва в нагрузке по наличию импульсных сигналов с частотой 50 Гц. Диоды VD1... VD6 запараллелены (встречно) для максимальной симметрии схемы;

Рис. 3.2. Схемы датчиков сетевого напряжения 220 В с оптической изоляцией (окончание)".

д) двухкаскадный формирователь сетевых импульсов на транзисторах VTI, VT2. Частота сигнала на входе МК 100 Гц. Питание первичной стороны формирователя осуществляется от параметрического стабилизатора, собранного на элементах R3, VD2, VD3, С1. Диодный мост VD1 должен быть рассчитан на обратное напряжение не менее 400 В;

е) индикатор наличия сетевого напряжения с гальванической развязкой на оптопаре VU1. Элементы С1, R2 служат соответственно реактивным и активным балластом для стабилитрона VD5. При отключении сети 220 В конденсатор С1 быстро разряжается через резистор R1 (доли секунды). Это повышает безопасность, иначе конденсатор может разрядиться через тело человека, если случайно прикоснуться к обесточенной сетевой вилке руками;

ж) светодиод HL1 индицирует наличие сетевого питания и защищает излучатель оптопа-ры VU1 от обратного напряжения. Резистор RI при положительной полуволне задаёт ток через оптопару, а при отрицательной — через светодиод HL1. Частота импульсов на входе МК 50 Гц.

Рис. 3.3. Схемы датчиков сетевого напряжения 220 В с трансформаторной развязкой {начало):

а) транзисторный формирователь импульсов с частотой 100 Гц. Конденсатор С2 подавляет импульсные помехи. Резистор RI подбирается так, чтобы транзистор VT1 был гарантированно открыт при самом низком сетевом напряжении. Оно, в свою очередь, определяется коэффициентом передачи трансформатора 77. Напряжение с диодного моста VD1...VD4 поступает также в систему основного питания, которая формирует напряжение +5 В для МК;

б) детектор перехода сетевого напряжения через нуль. Компаратор DA1 увеличивает крутизну фронтов сигнала и повышает помехоустойчивость. Выход компаратора (открытый коллектор) нагружен на «pull-up» резистор R3. Диоды VD5, VD6 ограничивают напряжение на входах компаратора на уровне 0.6...0.7 В при положительной полуволне сетевого напряжения, а диоды, входящие в мост VDI...VD4, — при отрицательной полуволне;

в) на резисторе R2 выделяется пульсирующее напряжение частотой 100 Гц. Конденсатор С1 подавляет ВЧ-помехи. Элементы VD3, R1 защищают МК от всплесков сетевого напряжения. Диоды VD1, VD2должны соединяться с адаптером А1 отдельными проводами;

г) с диодного моста VDI... VD4 пульсирующее напряжения частотой 100 Гц поступает на входы аналогового компаратора МК. Стабилитроны VD5, VD6 должны иметь пороговое напряжение ниже, чем напряжение питания М К (в данном случае это+5 В). Диоды VD7, VD8защищают М К от большого разбаланса напряжений на входах компаратора;

Рис. 3.3. Схемы датчиков сетевого напряжения 220 В с трансформаторной развязкой (окончание):

д) формирователь прямоугольных импульсов ТТЛ-уровня из переменного сетевого напряжения 9... 12 В. Задействуется свободный канал микросхемы DA1 (драйвер интерфейса RS-232), имеющий на входе триггер Шмитта. Цепочка RI, С2служит фильтром ВЧ-помех;

е) резисторы R2, R3 образуют делитель с уровнем +2.5 В, чтобы АЦП МК работал в линейном режиме. Частота импульсов, снимаемых с диодного ограничителя VD3, VD4, — 50 Гц;

ж) аналогично Рис.3.3, г, но с двумя парами ограничительных диодов Шоттки VD2...VD5. Это, очевидно, перестраховка на случай выхода из строя диодов, находящихся в мосту VDI;

з) амплитуда входного напряжения МК с частотой пульсаций 100 Гц регулируется резистором R2. Конденсатор большой ёмкости С1 при отключении сети поддерживает некоторое время напряжение питания +5 В, чтобы МК успел корректно закончить программные процедуры.

Вольтметры на микроконтроллере - что может быть проще? Это так, если речь идет об измерении на постоянном токе, или определения мгновенных значений переменного. Но измерение действующего значения переменного напряжения, тем более несинусоидальной формы - нетривиальная задача. Однако, и она решаема, причем на достаточно простом и недорогом микроконтроллере семейства AVR.

Данная статья носит скорее характер рассуждений на тему, нежели описание конкретного проекта. Ее назначение - направить мысль в нужное русло, обозначить цели, подводные камни, проложить "лоцию" их обхода... Чтобы каждый желающий мог самостоятельно реализовать изложенный принцип.

Итак, сначала микро-экскурс в теорию. Как известно, действующим значением переменного тока и напряжения называют величину, которая принимается в расчетах выделяющейся теплоты или мощности. Для постоянного тока действующее значение равно амплитудному, среднему и мгновенному, для переменного тока - это все разные величины.

Мгновенное значение переменного напряжения - это абсолютный уровень напряжения в конкретный момент времени, одиночный отсчет. Амплитудное значение - это наибольшее значение синусоиды (или другой кривой для несинусоидальной формы сигнала) за период. Амплитудное значение берется по модулю, т.е. не бывает минусовой и плюсовой амплитуды. Среднее значение, как следует из самого термина, это сумма всех мгновенных значений (отсчетов) за период, деленная на количество отсчетов. Математически - это интеграл мгновенных значений за период. Очевидно, что для синусоидальной формы среднее за период значение будет равно нулю. Если форма кривой напряжения искажена, то среднее значение за период может оказаться ненулевым - тогда оно получает название постоянной составляющей переменного напряжения. Наконец, действующее или эффективное значение напряжения - это величина, численно равная половине интеграла квадрата мгновенных значений напряжения за период. Поэтому его еще называют среднеквадратичным напряжением.

Теперь подумаем, как эта теория поможет нам решить нашу задачу. В МК мы имеем дело с АЦП, которое (в некотором приближении) способно давать нам отдельные отсчеты напряжения, т.е. оно умеет определять мгновенные значения напряжения. Легко понять, что для определения действующего значения нам необходимо проинтегрировать (т.е. просуммировать ) квадраты результатов АЦП, взятых через равные промежутки в течение одного периода измеряемого напряжения. Почему я не говорю о необходимости делить сумму квадратов пополам, хотя теория вроде бы этого требует? Да потому, что АЦП дает нам результат в абстрактных числах, оторванных от реальности. Чтобы из этой абстракции получить реальное значение, нам все равно надо умножить их на какой-то размерный коэффициент, в котором может быть учтено то самое деление на 2. Поясню: если «один шаг» АЦП соответствует 0,02В напряжения, то для перевода в реальные вольты нам надо умножить результат АЦП на 0,02. Если же в процессе вычислений нам потом потребуется разделить эти значения на 2, так не проще ли умножать сразу на коэффициент 0,01В?!

Наметим алгоритм нашей программы. В общих чертах он будет таким:

  1. Получить через равные промежутки N отсчетов АЦП в течение одного периода измеряемого напряжения.
  2. Возвести результаты в квадрат и просуммировать.
  3. Извлечь квадратный корень из полученной суммы.
  4. Умножить полученный результат на масштабирующий коэффициент и вывести результат на индикатор.

Чтобы наш вольтметр показывал значение непрерывно, этот алгоритм надо выполнять циклически.

Теперь давайте разбираться с деталями. Прежде всего, определимся с числом отсчетов N . Казалось бы, все просто: чем оно больше, тем точнее результат. И это действительно так, однако не следует забывать о том, что в нашем распоряжении не суперкомпьютер, а всего лишь микроконтроллер AVR, возможности которого весьма ограничены.

Прежде всего, есть ограничение на скорость работы АЦП. Atmel рекомендует использовать АЦП при работе от тактовой частоты не более 200 кГц , иначе будет увеличиваться погрешность результатов. Один цикл измерений АЦП длится (в установившемся режиме) 13 тактов, т.е. при любых ухищрениях мы не сможем использовать АЦП чаще, чем 15384 раза в секунду, если хотим получать все 10 бит результата верно. Прикинем, что же мы получаем в результате. Длительность периода сетевого напряжение 20 мс. При вышеобозначенной частоте семплов за один период мы просто не успеем получить более 307 отсчетов. Конечно, если немного пожертвовать точностью, можно увеличить скорость АЦП и соответственно, число отсчетов за период.

Другое важное ограничение - это быстродействие математических операций. Возведение в квадрат - процедура очень затратная по числу тактов работы микроконтроллера, и если выполнять интегрирование «на лету», т.е. по мере поступления результатов из АЦП, частота семплирования в 15К будет недостижима даже в теории. Выход один - быстро накапливать нужное количество данных в массиве, а потом неторопясь их обрабатывать. И тут мы наталкиваемся на третье ограничние - объем ОЗУ. Теоретически максимальное количество отсчетов из 307-и 10-битовых чисел потребует для хранения 614 байт ОЗУ, что уже больше всей имеющейся памяти во многих МК, а для, например, Atmega8 составляет больше половины. А ведь для работы нам еще нужно место под стек, под другие промежуточные переменные... Так что число отсчетов N=307 можно считать абсолютно максимальным для всех МК с объемом ОЗУ 1К и менее.

Для заполнения массива отсчетов используем прерывание по завершению цикла АЦП. То есть определим переменную-индекс, указывающую на очередной элемент нашего массива, а в обработчике этого прерывания будем сохранять по этому индексу результат АЦП в массиве и увеличивать индекс. Так как по нашим расчетам с момента первого семпла и до последнего (307-го) должно пройти 20 миллисекунд, можно считать, что задача получения мгновенных значений напряжения за период нами решена. Однако, надо же контролировать выход индекса за пределы допустимого значения, т.е. делать проверку - не больше ли 307-и семплов мы сделали? Естественно, нужно быть уверенным, что время всех дополнительных расчетов не увеличит периодичность поступления семплов, иначе не миновать больших ошибок.

Предположим, мы наконец-то получили наш массив отсчетов, и теперь необходимо провести его обработку. Вы себе представляете возведение в квадрат на ассемблере? А извлечение квадратного корня? Конечно, все решаемо, но гораздо проще применить встроенные функции языка Си square и sqrt . Отсюда 2 неизбежных вывода: программу мы делаем на Си и все предыдущие рассуждения требуют корректировки ... Этот ошарашивающий вывод следует понимать так: Си - язык высокого уровня, и потому существенно более медленный, чем ассемблер. Значит, процедуры обработки прерываний могут потребовать больше времени, чем мы рассчитывали, т.е. нарушить стройные расчеты количества и частоты семплов. Значит, надо обязательно проконтролировать время исполнения критических участков нашей программы (например, в той же AVR Studio ), и, если окажется, что период семплирования существенно больше расчетного, провести корректировку всех расчетов - от количества семплов до частоты АЦП. Но забудем на время об этом.

Итак, замеры и расчеты позади. Остается организовать вывод результатов. Тут, как говорится, простор широк: от семисегментных индикатров с динамической индикацией до LCD символьных дисплеев или передачи результатов по UART в компьютер. Только помните, что динамическая индикация так же работает по прерываниям, т.е. может исказить временные интервалы получения семплов.

Надеюсь, принцип понятен. Теперь несколько слов о не затронутых проблемах. Прежде всего, все наши размышления относились к измерению сетевого напряжения, т.е. напряжения с частотой 50 Гц . При других частотах, наша программа будет давать результат с погрешностью. Величина этой погрешности будет минимальна, если в 20 мс будет укладываться целое число периодов напряжения (для симметричных форм сигнала - полупериодов ). Если число целых периодов (полупериодов) будет не целое, погрешность будет максимальна, причем характер показаний вольтметра будет иметь вид «биений». Так как напрасно ожидать высокой точности от численного интегрирования при числе семплов за период менее нескольких десятков, то верхнее значение частоты для измеряемого напряжения в реальности будет не больше 200 Гц. Короче говоря, мы все-таки сделаем прибор только на 50 Гц. Хотя на 25 он будет работать совсем не плохо. Разумеется, прибор покажет верное значение для любой формы переменного напряжения 50 Гц, а так же для постоянного тока.

Принципиальная схема проекта Proteus

В подтверждение всех изложенных выкладок (и для их проверки) привожу конкретный пример реализации вольтметра. Я не собирал реальную схему, ограничился проектом в протеусе . Однако полученные при моделировании результаты полностью подтвердили изложенное и позволяют утверждать, что реальная схема с минимальными доработками (источник питания и защитные цепи) будет работать. Предлагаемая прошивка для МК полностью работоспособна - дорабатывайте схему, делайте печатную плату и пользуйтесь. Однако, я делал ее по-своему, т.е. чуть-чуть иначе , чем только что рассказал. Самое главное, что в моей программе не так - это число семплов в массиве: у меня их 256 . Из-за этого мне пришлось отказаться от «естественной» частоты семплов и привязать их к таймеру, это в свою очередь потребовало поднять рабочую частоту АЦП до 250 кГц (при тактовой частоте МК в 8 мГц). Кстати, получить 250 кГц для АЦП от встроенного RC-генератора меги гораздо проще, чем 200, так что не исключаю, что при написании собственной программы вы тоже будете вынуждены пойти по моему пути...

Проект для Proteus 7.1 Pro SP2 и файл прошивки можно скачать в . В проекте штрих-пунктиром обведена часть, которая собственно вольтметр. А левее - это источник тестового сигнала. Входной мост и делитель напряжения должны быть с запасом рассчитаны на входное напряжение, лучше выбирать 1000-вольтовые диоды, они-то уж точно выдержат. Делитель лучше сделать именно как показано на схеме - из трех резисторов, т.к. один резистор соответствующего номинала может не выдержать высоких напряжений. Еще лучше взять больше резисторов, кстати, проще будет и коэффициент деления подобрать. На схеме не показаны многие нюансы, например, защитный стабили-трон на входе АЦП, но это именно нюансы. Моя прошивка обеспечивает измерение напряжений до 710В, при этом погрешность не более 2В для синусоидальной формы напряжения. Для других форм напряжения погрешность может увеличиться, но не сильно. Думаю, в 5% точно уложится. Для простого прибора со шкалой 10-700В неплохо, не так ли? Прошивка имеет особенность: если на вход подано напряжение с амплитудным значением более 1000В (примерно), прибор покажет символ «Е » - перегрузка. Это произойдет даже если действующее значение будет существенно меньше 700В.

Только зарегистрированные пользователи могут оставлять коментарии.
Пожалуйста зарегистрируйтесь или войдите в ваш аккаунт.

Довольно простой прибор измеряющий напряжение, ток и показывающий полную мощность потребляемую нагрузкой на частоте 50 Гц.

При ремонтных работах или при проверке и испытаниях новых устройств часто требуется подавать напряжение от ЛАТР’а, при этом необходимо контролировать напряжение и ток. Для этих целей был разработан и собран вольтметр-амперметр на микроконтроллере с LCD индикатором. Поскольку, напряжение и ток измеряются, то легко вычисляется и полная мощность. В результате получился весьма компактный измеритель.
Технические характеристики
1. Пределы изменения измеряемого напряжения 0 – 255 Вольт, дискретность 0,5 вольта. Показания отображаются с шагом 1вольт.
2. Пределы изменения измеряемого тока 0 – 10 Ампер, дискретность 20 ма. Показания отображаются с шагом 10 ма.
3. Полная мощность вычисляется, как произведение величины тока на напряжение и отображается только целочисленное значение в Вольт-амперах.

Принципиальная схема

Исключён фрагмент. Наш журнал существует на пожертвования читателей. Полный вариант этой статьи доступен только


В схеме применено прямое измерение переменного напряжения и тока микроконтроллером.
Измеряемое напряжение через делитель R7, R9, R12 и C12 поступает на вход микроконтроллера через конденсатор C10. Конденсатор C12 совместно с делителем входного напряжения образует интегрирующую цепь, которая препятствует проникновению импульсных помех.

Измеряемый ток протекает по шунту R1, напряжение, снимаемое с него, усиливается операционным усилителем и через цепочку R8 и C8 поступает на вход микроконтроллера. Первый каскад на OP1 представляет собой инвертирующий усилитель с интегрирующим конденсатором C3 в цепи обратной связи. В связи с тем, что размах напряжения, снимаемого с OP1 должен быть около 5 Вольт, на микросхему усилителя поступает повышенное питание (9-15 Вольт). Второй каскад на OP2 включен повторителем и особенностей не имеет. Конденсатор C3 служит для уменьшения помех при работе АЦП микроконтроллера.

На измерительные входы RA0 и RA1 поступает постоянное стабилизированное смещение 2,5 вольта через резисторы R11 и R13. Это напряжение позволяет правильно измерять положительный и отрицательный полупериоды входных напряжений.
К микроконтроллеру PIC16F690 подключен LCD дисплей, с отображением 2-х строк по 16 символов. Резистор R14 служит для установки оптимальной контрастности дисплея. Резистор R15 определяет ток подсветки дисплея.
Питание прибора осуществляется от отдельного трансформатора на 9 – 12 Вольт. Стабилизатор питания +5 Вольт собран на микросхеме 78L05 и особенностей не имеет.


Я запитал прибор от телефонного адаптера. В связи с тем, что на плате есть свой мост Br1, полярность подключения не имеет значения. Важно, чтобы на конденсаторе C4 было напряжение в пределах 10 – 15 Вольт.

--
Спасибо за внимание!


🕗 20/08/12 ⚖️ 18,04 Kb ⇣ 442 Здравствуй, читатель!

--
Спасибо за внимание!
Игорь Котов, главный редактор журнала «Датагор»


🕗 20/08/12 ⚖️ 6,41 Kb ⇣ 457 Здравствуй, читатель! Меня зовут Игорь, мне 45, я сибиряк и заядлый электронщик-любитель. Я придумал, создал и содержу этот замечательный сайт с 2006 года.
Уже более 10 лет наш журнал существует только на мои средства.

Хорош! Халява кончилась. Хочешь файлы и полезные статьи - помоги мне!