No Image

Вольтметр амперметр на микроконтроллере

СОДЕРЖАНИЕ
1 443 просмотров
12 декабря 2019

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

Основные характеристики устройства:

  • основа устройства – микроконтроллер AVR ATmega8 компании Atmel;
  • диапазон измеряемого напряжения: 0 В – 30 В, шаг 10 мВ;
  • диапазон измеряемого тока: 0 А – 99 А, шаг 10 мА (шаг зависит от значения сопротивления шунта);
  • два вариатна конструкции: с микроконтроллером в TQFP и PDIP корпусе;
  • односторонняя печатная плата;
  • компактная конструкция;
  • отображение измеряемых величин на ЖК дисплее (однострочном или двухстрочном) на базе контроллера HD44780.

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

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

Внутреннее разрешение вольтамперметра по диапазону измерения тока рассчитывается согласно выражения:

Разрешение[мА] = 1/(R[Ом]×3.2)

Кроме того, падение напряжения на шунте не должно превышать 2.4 В, поэтому значение сопротивления шунта должно быть меньше 2.4/Imax[A]

Автором было разработано два варианта вольтамперметра:

  • вариант №1: применен микроконтроллер ATmega8 в корпусе TQFP32;
  • вариант №2: применен микроконтроллер ATmega8 в корпусе PDIP.

Принципиальная схема вольтамперметра (вариант №1)

Список электронных компонентов (вариант №1)

Обозначение в схеме

Номинал

Корпус

Примечание

C4, C5, C6, C7, C8, C9

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

Опционально. Для защиты транзистора
от помехи по напряжению при включении
вентилятора.

На плату не устанавливается

Опционально. Для защиты транзистора
от помехи по напряжению при включении
вентилятора.

Диод Шоттки: 100 В, 3 А

Регулятор напряжения +5 В

Регулятор напряжения +12 В

N-канальный MOSFET
(ток вентилятора менее 200 мА)

Принципиальная схема вольтамперметра (вариант №2)

Ниже представлена схема подключения модуля в блоке питания.

Рассмотрим подробно процесс настройки вольтамперметра.

Кнопка S1 – сброс/установка параметров.
Для входа в режим установки параметров вольамперметра необходимо, удерживая кнопку нажатой, подать питание на схему. На дисплее появится надпись «www.elfly.pl», что означает вход в режим установки.

Первый параметр для настройки – опорное напряжение для АЦП микроконтроллера. Опорное напряжение является основным фактором погрешности измерений. Пользователь должен измерить опорное напряжение на выводе 20 микроконтроллера (для микроконтроллера в корпусе PDIP – вывод 21). Измеренное значение вы и должны прописать в этом «сервисном меню» при помощи этой же кнопки S1, иначе, по умолчанию, принимается значение опорного напряжения Vref = 2.56 В (соответственно техническому описанию на микроконтроллер).

После изменения значения опорного напряжения для сохранения параметра никаких манипуляций с кнопкой S1не должно проводится в течении 5 с.

Следующий параметр – установка значения сопротивления резистора-шунта.
Если номинал шунта известен, то нажатиями на кнопку S1 необходимо добиться отображения на дисплее соответствующего значения и затем не нажимать кнопку в течении 5 с для сохранения значения.

Если значение сопротивления шунта неизвестно, то необходимо на выход блока питания подключить амперметр, выставить некоторый ток при помощи регулятора ограничения тока блока питания и нажать кнопку S1. Кнопку необходимо нажимать пока показания амперметра и нашего устройства (с правой стороны на дисплее, с левой стороны отображается значение шунта) не станут равными.

После проведения этой процедуры для сохранения параметров кнопку не нажимать в течении 5 с.

Кроме того кнопка S1 используется для сброса значения электрической емкости при зарядке Li-Pol аккумуляторов.

Резистор R9 – точная настройка поддиапазона делителя напряжения.
Чтобы исключить ошибки преобразования АЦП диапазон измерений разбит на два поддиапазона 0 В – 10 В и 10 В – 30 В. Для настройки необходимо на выход блока питания подключить вольтметр и установить выходное напряжение на уровне около 9 В, и регулируя R9 добиться одинаковых показаний вольтметра и нашего устройства.

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

Резистор R1 – регулировка контрастности LCD.
Если после сборки устройства на дисплее ничего не отображается, то сперва необходимо отрегулировать контрастность дисплея.

Коннектор J1 – подключение вентилятора.

Коннектор J2 – питание модуля вольтамперметра (+12 В)
Если ваш блок питания имеет выход стабилизированного напряжения +12 В, то его можно подключить к этому коннектору, и в таком случае можно не использовать в схеме регулятор напряжения U2. Такое решение имеет свои плюсы т.к. возможно подключить более мощный вентилятор охлаждения.

Если выхода +12 В у вашего блока питания нет, то этот коннектор необходимо оставить не подключенным.

Примечание. Во втором варианте схемы (PDIP) данный коннектор отсутствует.

Коннектор J3 – питание модуля вольтамперметра (+35 В)
Напряжение питания +35 В подается с диодного моста блока питания. Перед подключением необходимо уточнить параметры используемого регулятора напряжения U2 и уровень напряжения с диодного моста, чтобы не повредить регулятор U2. Но с другой стороны, минимальное напряжение, подаваемое на этот коннектор, не должно быть ниже 9 В или 6.5 В, если используются регуляторы с низким падением напряжения (LDO).

Читайте также:  Залили ламинат горячей водой что делать

Данный коннектор должен быть подключен независимо от того, подключен ли коннектор J2 к питанию +12 В.

Коннектор J4 – подключение линий измерения напряжения и тока.
Выводы коннектора подключаются:

  • Вывод 1 – подключается к клемме «+» блока питания;
  • Вывод 2 – подключается к клемме «–» блока питания;
  • Вывод 3 – «общий»

Коннектор LCD – подключение индикатора
Вольтамперметр работает корректно с однострочным LCD. Дисплей необходимо использовать со светодиодной подсветкой (ток потребления до 15 мА).

Программирование микроконтроллера

Микроконтроллер может быть запрограммирован с помощью отдельного программатора или же в внутрисхемно с помощью переходника, который подключается к коннектору LCD. Примерный внешний вид переходника изготовленного автором из кабеля IDE:

Помните, что при программировании микроконтроллера в схеме, необходимо подать напряжение питания +5 В. В зависимости от используемого программатора, напряжение питания может подаваться от самого программатора, либо от внешнего источника.

Соответствие сигналов переходника, коннектора LCD, микроконтроллера и программатора

Выводы
ЖК модуля

Сигнал

Выводы
микроконтроллера

Выводы
программатора

Простой вольтметр-амперметр можно собрать на микроконтроллере Atmega8. Вывод информации осуществляется на символьный LCD дисплей 16×2.

  • диапазон измеряемого напряжения: 0 до 25 В;
  • диапазон тока: от 0 до 2.5 В;

Для работы нам понадобятся два канала АЦП, это каналы ADC0 и ADC1, при помощи одного мы мерием напяржение при помощи другого силу тока. В качестве источника внутренного напряжения используется внтуренней опорное напряжение в 2.56 В. АЦП работают с разрядность в 10 бит. Микроконтроллер Atmega8 затактирован от внутреннего RC генератора с частотой в 4 МГц.

Схема Вольтметра-Амперметра на микроконтроллере Atmega8

Вывод информации на дисплей осуществляется следующим образом:

Напряжение которое нам нужно померить сначала подается на делитель напряжения, и уже с него подается на вход АЦП ADC1. Делить собран на резисторах с номиналами в 100 кОм и 10 кОм, получается что отношение входного и выходного напряжения 10 к 1. Максимальное напряжение которое можно подать на вход делителя составляет 28.13 В.

Для того чтобы померить силу тока нам понадобится токовый шунт, его включаем в разры цепи ток в которой хотим померть. Падение напряжения на шутнте нетрудно определить по закону Ома, эта величина меряется други АЦП ADC0. Нужно стремится к уменьшению сопротивлению шунта, чем он меньше тем лучше. Если сопротивление равно 0,1 Ом то при силе тока в 1 Ампера получается падение напряжения в 0,1В.

Если у нас ток в 2 А то падение напряжения составит 0,2 В. Это значение очень мало для того чтобы его подать на вход АЦП микроконтроллера, поэтому его можно устелить при помощи ОУ (операционного усилителя). В нашем примере можно использовать схему неинвертирующего усилителя. Коэффициент усиления составит

Нудно чтобы это коэффициент был равен 10, для того чтобы измеряемы ток, к примеру 1 А соответствовал напряжение на выходе ОУ в 2В. В связи с тем что ИОП (источник опорного напряжения) 2.56 В. то мы не может подать больше этого значения. Шаг измерения тока состовит: 2.56А/2024=2.5 мА.

Таким образом для того чтобы получить значение тока, нам нужно напряжение измеренное АЦП умножить на 2.5

Измерение происходит по прерыванию окончания преобразования АЦП. Сначала выбирается канал 1 и снимается напряжения, далее выбирается второй и также снимается напряжение. Измерения каналов происхоид 400 раз, далее вычисляется среднее значение и выводятся на символьный дисплей.

Затеял я навести порядок на рабочем столе и радикально упрятать в корпус привода для чтения CD-ROM лабораторный блок питания, блок питания паяльника TS-100, USB-хаб и USB-зарядку. Но в последний момент возникла трудность — китайский вольтметр с амперметром не влезли по ширине передней панели привода. Решил я сделать свой, снова на PIC16F690, схему которого я давно публиковал на моём старом сайте. Но под руку попали сдвоенные 7-сегментные индикаторы, которые замечательно вписались по ширине корпуса 30мм. Пришлось ставить четырехразрядные индикаторы и переписывать программу контроллера для более точного расчета напряжения и тока…

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

Схема нового вольтметра и амперметра для лабораторного блока питания мало отличается от схемы старого. Но софт переписал с нуля и радикально. Главное отличие в схеме амперметра применен шунт не 0,1 Ом, а 0,01. Это очень уменьшило падение напряжения на нём, но повысило требования к преобразователю тока в напряжение. Так как в качестве усилителя я применил «народный» LM358, пришлось для компенсации напряжения смещения вводить программную коррекцию. При первом включении прибора (обязательно без нагрузки) он измеряет падение напряжения на шунте и смещение ОУ и принимает этот уровень за ноль и сохраняет значение в энергонезависимую память. Далее все измерения производятся относительно запомненного уровня.

Если по какой-то причине Вы захотите произвести снова калибровку нуля, сделать это можно подав питание на плату с нажатой кнопкой калибровки. Прибор сотрет старое значение. Следующее включение амперметра приведет к измерению и сохранению напряжения условного нуля отсчета.

Резистор, подключенный к выводу 4 микроконтроллера, определяет тип используемого экрана — с общим анодом или общим катодом.
Плата рассчитана на индикатор высотой знака 0,36″.
Мой неудачный первый опыт сборки прибора показал, что зелёные индикаторы почему-то светят весьма слабо. Видимо потому, что яркость слабого свечения зеленых индикаторов делится во времени не на три, а на восемь разрядов двух индикаторов.

В архиве три платы (индикатор и два варианта процессорной платы для контроллеров в корпусах SSOP и SOIC), схема и прошивка прибора.

Читайте также:  Готовый проект кухни 5 класс технология

Если у Вас возникнут вопросы или Вы захотите связаться со мной, сделайте это с помощью формы на страничке «Обратная связь»

97 thoughts on “ Вольтметр и амперметр повышенной точности ”

Есть мысль использовать этот измеритель в ЗУ автомобильного аккумулятора. Есть два вопроса по этому поводу:
1. На схеме указан диапазон измеряемого тока 0-4А, можно ли его увеличить до 10А?
2. Какой метод измерения тока в этом приборе? В автомобильных зарядных форма тока далека от идеальной, особенно если сделана на тиристорах, поэтому хотелось бы иметь среднеквадратичный метод измерения, True RMS так сказать.

Спасибо за очередную, простую и функциональную конструкцию.

Доброго дня.
Я думаю, для автомобильного зарядного не обязательно мерить в миллиамперах ток.. Для зарядки лучше подойдет вот эта моя конструкция, тем более с нужной разрядностью и учётом формы тока уже всё нормально:
http://smartelectronix.biz/publ/ochen_prostoj_ampervoltmetr_na_pic16f690/1-1-0-2

Здравствуйте, Eddy. Я заметил, что Вы почти никогда не публикуете исходных кодов к своим разработкам, делитесь только готовыми прошивками. Думаю, что Вы как программист хорошо понимаете их ценность, исходники позволяют делиться опытом, исправлять ошибки, и дорабатывать проекты, использовать программные решения одних проектов в других, читающие их программисты могли бы делиться с Вами своими способами доработки Ваших проектов. Исходники позволяют заранее детально оценить поведение прошивки, и её применимость, думаю я мог бы продолжать перечислять, но у Вас вероятно есть причины их не публиковать ? Может это коммерция ? Но Вы не публикуете исходники даже к самым простейшим проектам, коммерчески не эффективным на мой взгляд. И предложений о продаже я тоже не видел тут. Тогда что за причины ? Раскроете секрет?

Доброго дня, Владимир
Вы практически угадали — я уже очень давно зарабатываю на кусок хлеба разработкой устройств на микроконтроллерах и написанием прошивок к ним. Многие пошли в серию от сотен до десятков тысяч устройств. У меня нет стабильной зарплаты от слова «совсем», т.е. что написал, то и получил. Причём очень часто пишу совсем бесплатно, если разработка не для серийного производства, просто из желания помочь людям.
Вторая причина в том, что я считаю, что учиться надо на примерах, выкладываемых производителями контроллеров и компиляторов — тексты тех документов создаются профессиональными программистами, а не самоучками вроде меня. Они содержат подробное изложение теории и практических советов по решению задачи. У меня нет такого количества свободного времени, чтобы заниматься преподаванием основ программирования. Увы.
Третья причина в том, что я очень сомневаюсь в том, что кто-то будет тратить своё время на улучшение или исправление моих текстов. Свои ошибки я стараюсь устранять самостоятельно и максимально быстро. Если человеку нужен вольтметр, он его либо купит на Алиэкспрессе за полтора доллара, либо соберет себе по материалам одного из опубликованных в сети проектов. За пол часа. А сидеть сутками и ковырять сотни строк математики, вспоминая старшие классы школы или курсы института.. Зачем?

1) причина коммерция вполне понятна.
Но я как раз насчёт тех самых не коммерческих. «умные кнопки», думаю один из них. Помню, я очень удивился не увидев исходников в архиве к этим умным кнопкам. Нужды в них не было,
сам бы такое мог написать, просто любопытство. Я давно слежу за вашими разработками они подкупают простотой схемотехники, это стиль всех ваших схем, ведь «Всё гениальное просто!»
Любопытно было может и тексты Ваши так-же просты и понятны всем 🙂

3)причина «…кто-то будет тратить своё время на улучшение или исправление моих текстов.»
Соглашусь с Вами, что никто не будет тратить своё время на доработку чужих частных проектов, но Вы не учли, что проекты с открытыми исходниками с момента их открытия
перестают быть единолично чьими-то. С исходниками навсегда остаются имена их авторов но сами тексты уже достояние общества, и могут стать самостоятельными и бессмертными как и
имена их авторов. (Имя Линус Торвальдс яркий пример). т.е. тексты уже не совсем Ваши и другие люди часто дорабатывают их не из благородства и альтруизма, а в СВОИХ личных и даже корыстных целях и потом делятся своими трудами просто потому, что понимают ценность своего труда, а поделиться этим ничего им не стоит, время на доработку они всё равно уже потратили. Мне лично всегда интересно узнать оценку своей доработки от авторов программы и особенно приятно когда мою доработку включают в официальный релиз.
Я говорю это из личного опыта. Я помню, участвовал в устранении одного бага биллинговой системы Stargazer украинских разработчиков, наличие бага они подтвердили но сами они не спешили его устранять т.к. не использовали эту часть программы. От денег они отказались, сказали нет времени на это. Я потратил недели на изучение исходников и написание патча, разработчики помогали мне, отвечая на вопросы на форуме, результат я опубликовал на том-же форуме с предложением включить в релиз, увы в релиз мой патч не включили по двум причинам,
1) патч не решал проблему в корне, а лишь помогал её обходить т.е. по факту это «костыль» на большее силёнок не хватило 🙂
2) применение патча гипотетически могло нарушить работу программы в других частях, требовалось длительное тестирование, ради не очень полезного самим разработчикам «костыля» они не хотели тратить на это время и рисковать. Их Stargazer-ы обслуживали тысячи абонентов, а мой стоял в офисе на 50чел. Но в любом случае мой патч остался опубликованным, и всем кто столкнулся с тем-же багом как я, было уже можно решить проблему. Пусть авторы не приняли мой способ решения, но баг, а затем и ошибку в их коде я всё-таки нашёл, значит чем-то помог проекту.

Читайте также:  Домокомплекты бань из профилированного бруса

2.1)причина » учиться надо на примерах, выкладываемых производителями…»
и согласен и нет . Так как сказали Вы, так надо только начинать учиться основам, далее этого будет мало.
Например основы от производителя научат вас записывать числа в ячейки EEPROM, но если их много, как их там систематизировать чтобы удобно было работать и самому не запутаться,
придумывайте сами.
Основы от производителя научат вас менять содержимое памяти программ, даже есть готовый модуль от mplab xc8 mcc
Но как там не запутаться и меняя текст строки не затереть случайно исполняемый код придумайте сами.
И однажды мне удалось написать свои очень оригинальные версии модулей для работы с EEPROM и памятью программ. Гениальна даже не реализация, её Вы возможно сможете ещё
улучшить, гениальна сама идея переложить на компилятор заботу о распределении памяти EEPROM и FLASH. Мы ведь не задумываемся об адресах размещения наших переменных и констант в озу и памяти программ, компилятор делает это за нас, но в EEPROM производителями такое не предусмотрено, то-же самое при использовании FLASH памяти программ, её используют поблочно, что ещё геморойнее чем EEPROM, при этом память под константы в этой же самой FLASH компилятор успешно распределяет без нашего участия.
Написанные мной модули позволяют работать с этими типами памяти почти так-же привычно как с ОЗУ. Сначала была идея загнать все данные в одну структуру в ОЗУ и работать с ними привычным способом, а в EEPROM только копировать полностью или частично эту структуру из ОЗУ. Но такой не бережный расход ОЗУ меня не устраивал. И тут пришла идея объявить эту структуру в ОЗУ и не использовать! (не сочтите меня поспешно за идиота) т.к. структура не будет использоваться её можно объявить располагаемой хоть с нулевого адреса ОЗУ где лежат совсем другие данные. Этим данным ничто не угрожает. Эта структура описывает данные хранимые на самом деле в EEPROM, компилятор об этом «не догадывается:)» она позволяет нам привычным способом получать данные о размерности элементов и их смещении относительно начала структуры. Работать с указателями на элементы этой структуры надо ,передавая их в специальную функцию которая вычислит смещение и использует его для чтения или записи нужного элемента из EEPROM!
С памятью программ получилось ещё интереснее, там оказались совсем не нужны виртуальные структуры, ведь компилятор в этой области умеет работать с константами, правда только на чтение 🙂 этот недостаток я и исправил написав функцию, меняющую значение констант по указателю. Т.е. для использования памяти программ в качестве перезаписываемой, объявляем обычные константы, константные структуры и массивы, читаем их обычным способом и перезаписываем передавая указатель в мою функцию.
А теперь скажите, Вы видели подобные примеры от производителей?
Оценив на практике удобство и мощь этих модулей, возник вопрос — почему ни в одном учебнике мне не попалось ничего подобного, я присваиваю новые значения константам и
константным структурам будто они не константы вовсе! Написав тогда собственное решение лучше предлагаемых профессионалами, я понял что они не боги. И у самоучек могут быть не
стандартные решения лучше. Такие удачные изобретения получаются не часто, как настоящие шедевры 🙂 Думаю у каждого опытного программиста есть подобный «брилиант» среди своих наработок, и получить их много в своё распоряжение можно только разбирая чужой код. Самому много такого не придумать нужна слишком «большая удача».
А примеры от производителей конечно грамотны и полезны, но теперь для меня это лишь «инструкция к инструменту» она учит грамотно пользоваться инструментом, но шедевры
делать не научит.

2.2)причина » У меня нет такого количества свободного времени, чтобы заниматься преподаванием основ программирования. Увы.»
Тут мне возразить совсем нечего, в рыночной экономике все участники загружены по максимуму, а кто нет, тот проиграл в конкуренцию.
Публикация исходников вызовет и дилетантские вопросы и не всегда полезные Вам дискусии, с потерей времени.
Надеюсь однако, что наша беседа была Вам полезна.

«Самое важное — не то большое, до чего додумались другие, но то маленькое, к чему пришёл ТЫ сам » /Харуки Мураками/ ©
🙂
И всё же, я считаю что для обсуждения способов реализации той или иной функции есть специализированные форумы программистов.
У этого показометра исходник 550 строк. На Си (PCWHD). Две недели с чистого листа. Зачем это нормальному человеку?
Я проникся кусочком философии Джобса, который стремился спрятать сложность объекта от пользователя — устройство должно быть простым и хорошо выполнять свои функции. У человека не должна болеть голова, где там ошибка. Ему надо чтобы всё работало, а не заниматься самоистязанием с калькулятором и симулятором..
Я думаю, что возможно, когда я смогу хоть малость расслабиться от необходимости добывать кусок насущной пищи и буду считать себя достаточно умелым программистом, начну выкладывать свои труды. А пока сам учусь программированию. Постоянно. Последние лет тридцать. 🙂

Комментировать
1 443 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector