Вольтметр предназначен для индикации напряжения на заряжаемом аккумуляторе. Он может измерять напряжение в пределах от 6 до 20V, что позволяет его встроить практически в любое зарядное устройство, заряжающее как аккумуляторы для портативной аппаратуры, так и свинцовые для стартеров автомобильной или мотоциклетной, тракторной техники.
Вольтметр питается от измеряемой цепи, этим ограничивается нижний предел измерения, так как напряжение питания микроконтроллера не может быть меньше 5V. В то же время, если разъединить измеряемую и питающую цепи (использовать отдельный источник питания, не зависящий от измеряемой цепи) можно будет измерять напряжене в пределах 0-20V. Этот вариант может подойти для использования вольтметра для индикации выходного регулируемого напряжения лабораторного источника питания.
В основе устройства микроконтроллер PIC16F688 со встроенным АЦП. Максимальное напряжение на входе RA2 не может превышать 5V, поэтому в схеме имеется делитель на резисторах R1, R2 и аварийный ограничитель входного напряжения на стабилитроне VD1.
Измеряемое напряжение поступает на разъем Х1. Здесь оно разделяется на две цепи. На цепь питания, — напряжение поступает на интегральный стабилизатор А1 типа 7805, который поддерживает стабильным напряжение питания микроконтроллера 5V независимо от величины входного измеряемого напряжение, которое является и питающим одновременно.
На измерительную цепь напряжение поступает через делитель R1, R2. Резистор R2 взят подстроечный, многооборотный, с его помощью калибруют вольтметр сравнивая его показания с показаниями образцового вольтметр (например, мультиметра).
Разъем Х2 используется для внутрисхемного программирования, например, для обновления или внесения изменений в программу. Кнопка S1 предназначена для аварийного сброса если схема зависнет.
Индикация осуществляется на стандартном ЖК-двухстрочном индикаторе с подсветкой (выводы 15-16) и регулировкой контрастности (R4). Можно использовать и индикатор без подсветки.
Немного о работе устройства.
Для правильной работы АЦП требуется источник стабильного опорного напряжения, здесь в качестве такового используется напряжение питания +5V, таким образом стабильность работы АЦП практически зависит от стабильности интегрального стабилизатора А1. В результате АЦП преобразует в цифровой код любое напряжение от 0 до 5V работая 1024-мя ступенями (фактически от 0 до 1023). Таким образом разрешение равно 0,0049V на ступеньку преобразования.
Входной делитель (на R1 и R2) при правильной настройке делает умножение входного напряжение на 0,2457. Например, если входное напряжение равно 12V, то напряжение на входе RA2 будет равно 2,9484V. Далее вычисляется количество ступеней преобразования => 2,9484 /0,0049 = 601,7, то есть 601 целая ступень. Теперь остается выполнить умножение этого числа ступеней на два => 601 х 2 = 1202 и расставить запятые (индицируется только три разряда). Индицируется результат «12,0V».
Программа написана на языке С :
/* Project: Diqital Voltmeter based on PIC16F688
Internal Oscillator @ 4МНz, MCLR
EnaЬled, PWRT EnaЬled, WDT OFF
Constructor 09/2013
*/
// LCD module connections
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D4 at RC0_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D7 at RCЗ_bit;
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC0_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D7_Direction at TRISC3_ bit;
// End LCD module connections
char Messaqe1 [] = «ВАТТЕRY»;
unsiqned int ADC_Value, DisplayVolt;
char *volt = «00.0″;
void main() {
ANSEL = 0b00000100; // RA2/AN2 is analog input
ADCONO = 0b00001000; // Analog channel select @ AN2
ADCON1 = 0×00; // Reference voltage is Vdd
CMCON0 = 0×07 ; // Disable comparators
TRISC = 0b00000000; // PORTC All Outputs
TRISA = 0b00001100; // PORTA All Outputs, Except RA3 and RA2
Lcd_Init(); // Initialize LCD
Lcd_Cmd(_LCD_CLEAR); // CLEAR display
Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
Lcd_Out(1,1,Messagel);
Lcd_Chr(2,10,’V’) ;
do {
ADC_Value = ADC_Read(2);
DisplayVolt = ADC_Value * 2;
volt[0] = DisplayVolt/1000 + 48;
volt[1] = (DisplayVolt/100)%10 + 48;
volt[3] = (DisplayVolt/10)%10 + 48;
Lcd_Out(2,5,volt);
delay_ms(500); // Hold for 500 ms
} while(1);
} // End main()
Скачать всё можно
Скомпилирована в MikroC Pro for PIC.
При прошивке устанавливают фьюзы:
Oscillator -> Internal RC No Clock
Watchdog Timer -> Off
Power Up Timer -> On
Master Clear Enable -> Enabled
Code Protect -> Off
Data EE Read Protect -> Off
Brown Out Detect -> BOD Enabled,
SBOREN Disabled
Internal External Switch Over Mode -> Enabled
Monitor Clock Fail-Safe -> Enabled
Монтаж выполнен на готовой макетной печатной плате («решето») размерами 80×30 мм.
Налаживание сводится к настройке входного делителя резистором R2 так чтобы показания соответствовали действительности. Желательно чтобы R2 был многооборотным (для точности).