Простой цифровой вольтметр постоянного тока. Три диапазона измерений с автоматическим переключением 1 — 0,001 — 0,999 V, 2 — 0,01-9,99 V, 3 — 0,1-99,9. Четыре управляемых выхода с возможностью задания функции контроля и времени реакции на событие. Программная калибровка. Функция амперметра, возможность использования для преобразования напряжения шунта для индикации тока. Устройство выполнено на универсальной плате ch-4000.
Схема вольтметра.
Это конфигурации платы для функции аналогового входа. Это вариант для простого вольтметра с одним диапазоном от 0,01 до 10.00 вольт, если R1=180 k, R3=20k (1/10). Если удалить R3, будет диапазон от 0,001 до 1,000 вольта. Если R1=180 k, а R3=1,8 k, это будет 1/100 диапазон от 0,1 до 100,0 вольт.
Но плата позволяет сделать 2 автоматических диапазона, ну а если и еще извратиться (бросить проводок), то трех диапазонный. проблема только в том, что логический ноль на выходе контроллера не совсем ноль, это уровень порядка до 20 милливольт, но это терпимо, для диапазон измерения до 10 и 100 вольт. Эти вносимые погрешности можно программно скомпенсировать.
Монтажная схема платы.
Оставлены только используемые компоненты. Расположение элементов на верней стороне платы.
Расположение элементов на нижней стороне платы.
Перечень элементов необходимых для сборки.
Наименование | Типоразмер | Тип (замена) | Количество | Примечание |
Микроконтроллер | SSOP | PIC16F1829 | 1 | PIC1 |
Стабилизатор | SO-8 | 78L05 | 1 | ST1 |
Ключи | SO-14 | ULN2003D | 1 | U1 |
Индикатор | SR410561N/32 | 1 | LD1 | |
Диод | SM4007 | 1 | D1 | |
Резистор | 1206 | 0 | 1 | R4 |
Резистор | 1206 | 22 | 1 | R5 |
Резистор | 0805 | 680 | 8 | R7,R8,R9,R24, R25,R26,R27,R28 |
Резистор | 0805 | 1K | 4 | R30,R31,R32,R33 |
Резистор | 0805 | 10K | 1 | R12 |
Резистор | 0805 | 180K | 1 | R1 |
Резистор | 0805 | 1.8K | 1 | R13 |
CHIP BEADS | 0805 | LCBB-601 | 1 | R11 |
Резистор | 0603 | 0 | 1 | R37,R39 |
Конденсатор | 0805 | 0.1x50v | 3 | C4,C7,C5 |
Тактовая кнопка | SMD | TACT 6×6-15.0 | 4 | PB1-PB4 |
Конденсатор керамический | 1206 | 10,0х25v | 1 | C8 |
Конденсатор электролитический | 220,0х25v | 1 | C3 | |
Конденсатор электролитический | 100,0х16v | 1 | C6 | |
Стабилитрон | SOT23 | BZX84-C5V1 | 1 | Z1 |
Стабилитрон | SOT23 | BZX84-C30 | 1 | Z6 |
Проблема простоты и точности.
Первая простота заключена в самом микроконтроллере. в нем встроен источник опорного напряжения, который позволяет нам получить опорное напряжение 1024 милливольта. Т.е. мы сразу имеем точный отсчет. Это даст без преобразования измерять, просто подавая на вход контролера напряжения от 0,001 до 1,000 вольта.
Простота конструкции не дает возможности сделать высокую точность измерения. Дело в том, что на уровне 1 милливольта всегда присутствуют электронаводки от радио и электросети. Тем более в этом микроконтроллере нет отдельных цепей для аналоговой части, и здесь будет проблематично выполнить измерения в спящем режиме, так как динамическая индикация требует, чтобы контроллер был всегда в работе, ну и плюс цифровой шум, от самого контроллера будет мешать точности измерения. Но микроконтроллер и для того называется микроконтроллером, что здесь есть много вариантов для программной обработки данных.
Для удешевления конструкции мы используем в делители обычные резисторы с 5% допуском, это нам добавит нелинейности которую необходимо будет скорректировать программно, эта функция и функция коррекции нуля на уровнях 10 и 100, реализовано в режиме настройки.
Для реализации механизма устранения «блыманья» надо будет применить три метода, что-бы получить индикацию приемлемого вида.
Для борьбы с помехами мы применим три метода
- Вычисление среднего из N — измерений.
- Применение «накапливающего интегратора».
- Поиск минимального сигнала в циклах «накапливающего интегратора».
Что дает каждый метод в отдельности.
1. Вычисление среднего их N — измерений. Позволяет выполнить несколько измерений и найти среднее значение, что естественно «сгладит» поверхностные пульсации вызванные электронаводками и цифровым шумом.
if(GO==0)
{
//------------------------------------------
volt[ctetizm]=ADRESL; // чтение данных их АЦП
volt[ctetizm]+=ADRESH<<8; // ADC data read them
if(++ctetizm>IZMR)ctetizm=0;
GO=1; // запуск измерения/start of measurement
voltage=0;
for(a=0;a<IZMR;a++)
{
voltage+=volt[a];
}
voltage=voltage/IZMR;
if(voltage<voltageMIN)voltageMIN=voltage;
2. Применение «накапливающего интегратора». Позволит выполнять смену индикации напряжения с «первого» показания (которое в настоящий момент на индикаторе) на «второе» (которое подготовлено блоком обработки сигнала), когда «второе» встречается в N раз чаще чем «первое».
// ФИЛЬТР устранения дрожания индикации при смене напряжения "накапливающий интегратор"
// FILTER jitter display by changing the voltage to "accumulate integrator"
if(voltage!=voltager && timery)timery--;
else
{
voltager=voltageMIN;
timery=500; // нельзя делать очень большим, появится эффект тригерности
voltageMIN=1023;
}
3. Поиск минимального сигнала в циклах «накапливающего интегратора». Будут выводить на индикатор минимальное значение, что как показала практика, является более достоверным. А так-ка поиск минимума, должен происходить не во всем времени, а только в моменты периода работы «накапливающего интегратора», то как раз в эти моменты будет происходить сброс минимума текущего измерения. Сброс будет выполняться к максимальному значению АЦП.
Для автоматического выбора пределов используем условие превышения уровня сигнала выше 1000, для возврата на уровень ниже если ниже 99. Для предотвращения перепрыгивания на уровень выше необходимо сбросить уровень сигнала в буфере на среднее значение.
// функция автоматического переключения на нужный уровень if(voltage>1000&&tochraraz==1) { // выбор уровня 2 LEVEL01=0; LEVEL02=1; tochraraz=2; for(a=0;a<IZMR;a++)// сброс значение в среднее хначение { volt[a]=200; } } else if(voltage>1000&&tochraraz==2) { // выбор уровня 3 LEVEL01=1; LEVEL02=0; tochraraz=3; for(a=0;a<IZMR;a++)// сброс измерение в среднее значение { volt[a]=200; } } else if(voltage<99&&tochraraz==3) { // выбор уровня 2 LEVEL01=0; LEVEL02=1; tochraraz=2; for(a=0;a<IZMR;a++)// сброс измерение в среднее значение { volt[a]=200; } } else if(voltage<99&&tochraraz==2) { LEVEL01=1; LEVEL02=1; tochraraz=1; for(a=0;a<IZMR;a++)// сброс измерение в среднее значение { volt[a]=200; } }
Расширение функций.
Простое измерение напряжения — неинтересно, поэтому в вольтметре предусмотрено два задатчика (для варианта трехдиапазонного измерителя, если использовать один диапазон, то можно сделать 4 управляющих выхода).
…
Продолжение следует…
[box title=»Файлы для загрузки» color=»#521BDE»] СТРАНИЦА ЗАГРУЗКИ[/box]
Хорошая идея. Ждем продолжения… На этой базе можно сразу и амперметр собрать и получиться готовый блок индикации для БП…
Все руки не доходят, нет свободного времени, чтобы до сайта добраться, только освобожусь обязательно , закончу статью.