| Ваш IP: 34.236.145.124 | Online(17) - гости: 9, боты: 8 | Загрузка сервера: 2.09 ::::::::::::

Вольтамперметр для блока питания (Arduino)

Цифровой вольтамперметр предназначенный для установки в блок питания для отображения выходного напряжения и тока. Дополнительно используется отключение нагрузки когда ток нагрузки превышает допустимый порог. Допустимый порог устанавливается кнопками «+» и «-» с шагом 0,01 А. При превышении допустимого тока срабатывает реле и отключает нагрузку на 10 секунд, на индикаторе (1602 на базе контроллера HD44780) появляется надпись «10sOFF». Если ток нагрузки не превышает допустимый предел, на индикаторе высвечивается надпись «ON». При изменении уставки максимальной нагрузки на индикаторе высвечивается надпись «REG». Значение максимально допустимого тока сохраняются в энергонезависимой памяти при каждом его изменении.

Для обеспечения высокой точности измерения тока до 10 А и напряжения до 30 В используется АЦП-модуль ADS1115 который представляет собой 16-битный аналого-цифровой преобразователь, он имеет 4 входа для преобразования аналогового сигнал в цифровой.

При измерении напряжения от 0 до 30 множитель АЦП равен 1, при этом максимальное измеряемое напряжение равно  4.096 В с разрешением 1 bit = 0.125 мВ, но с учетом делителя напряжения на резисторах R2 R3 (8 раз) разрешение падает до 2 мВ при измерении напряжения до 30 В.

При измерении тока от 0 до 10 А множитель АЦП равен 16, а максимальное измеряемое напряжение равно 0.256 В с разрешением 1 bit = 0.0078125 мВ. Но на шунте при токе 10 А (практически можно измерять ток до 25,6 А, но в данном варианте, на индикатор выводится ток до 10 А) возникает падение напряжения 100 мВ, поэтому измерение тока производится с минимальным разрешением 0,001 А (0,78125 мА).

Как видно на схеме R4 R6 замыкают входы на землю, это сделано для измерения дрейфа нуля АЦП, эти измерения вносят поправку на результаты измерения тока и напряжения. Дополнительно используется программная коррекция измерений при падении напряжения на шунте.

При каждом цикле программы измерения напряжения и тока производятся по 10 раз, далее выводится среднее значение тока и напряжения.

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

Шунт (до 10 А) и делитель напряжения R2 R3 (0,25 Вт и выше) могут иметь достаточно большую погрешность, во время калибровки в скетче необходимо указать калибровочные значения для тока и напряжения.

#include <Wire.h>
#include <Adafruit_ADS1015.h>
#include <EEPROM.h>//#include <EEPROMex.h>
Adafruit_ADS1115 ads;
#include <LiquidCrystal.h>
  LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
 
  int u0,u1,a2,a3,i;
  byte w,stop;
  float u_0,u_1,u_ob0,u_ob1,a_2,a_3,a_ob2,a_ob3,i_reg;
  unsigned long time=millis();
  const float kalib0=7.970;// калибровка вольтметра А0 по максимальному напряжению 30V I=0
  const float kalib2=1.000;// калибровка амперметра А2 по максимальному току 10 А
 
void setup(void){
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(12,INPUT);pinMode(11,INPUT);pinMode(10,OUTPUT);
  i_reg = EEPROM.read(0)+(float)EEPROM.read(1)/100;// reg eeprom
  ads.begin();delay(100);
}
 
void loop(){
  if(digitalRead(12)==HIGH){i_reg=i_reg+0.01;if(i_reg>=9.99){i_reg=9.99;}time=millis();delay(200);w=1;}
  if(digitalRead(11)==HIGH){i_reg=i_reg-0.01;if(i_reg<0){i_reg=0.01;}time=millis();delay(200);w=1;}
  if(millis()-time>3000){
////////////////////////////////// вольтметр //////////////////////////////////////////// 
 while(i<10){i++;ads.setGain(GAIN_ONE);
   u0 = ads.readADC_SingleEnded(0);u_0 = u0*0.125*kalib0/1000;delay(20);
   u1 = ads.readADC_SingleEnded(1);u_1 = u1*0.125*kalib0/1000;delay(5);
   u_ob0=u_ob0+u_0;u_ob1=u_ob1+u_1;}
   u_0=u_ob0/10;u_ob0=0;u_1=u_ob1/10;u_ob1=0;i=0;  u_0=u_0-u_1;
  ///////////////////////////////// амперметр /////////////////////////////////////////////
 while(i<10){i++;ads.setGain(GAIN_SIXTEEN);
   a2 = ads.readADC_SingleEnded(2);a_2 = a2*0.0078125*kalib2/10;
   if(a_2>=i_reg){digitalWrite(10,LOW);stop=1;break;}else{digitalWrite(10,HIGH);}delay(20);
   a3 = ads.readADC_SingleEnded(3);a_3 = a3*0.0078125*kalib2/10;delay(5);
   a_ob2=a_ob2+a_2;a_ob3=a_ob3+a_3;}
   a_3=a_ob3/10;a_ob3=0;a_2=a_ob2/10;a_ob2=0;i=0;a_2=a_2-a_3; 
    ///////////////////////////////// вывод на экран ///////////////////////////////////////
   if(a_2<0.005){a_2=0;}if(u_0<0.005){u_0=0;}// измерения начинаются с 0,005 В и с 0,005 А
   u_0=u_0-(a_2/100);// компенсация напряжения шунта
  }
   lcd.setCursor(0,0);if(u_0<=9.999){lcd.print(" ");}lcd.print(abs(u_0),3);lcd.print(" B");
   if(millis()-time<3000){lcd.print("  REG    ");}
   lcd.setCursor(0,1);lcd.print(" ");lcd.print(abs(a_2),3);lcd.print(" A  ");lcd.print(i_reg,2);lcd.print(" A ");
   if(stop==1){lcd.setCursor(9,0);lcd.print(" 10sOFF ");stop=0;delay(10000);}
   if(stop==0&&millis()-time>3000){lcd.setCursor(9,0);lcd.print(" ON    ");}
 
   if(w==1){EEPROM.update(0,(int)i_reg);EEPROM.update(1,i_reg*100-(int)i_reg*100);w=0;}
}

Библиотека — https://github.com/addicore/ADS1115/archive/master.zip

Добавить комментарий

Войти с помощью: 

Случайные статьи

  • Драйвер светодиода белого свечения с напряжением 1,5В

    Для свечения диода белого свечения необходимо напряжение 3…4В, что не позволяет использовать одну батарею на 1,5В, но если применить схему показанную на рисунке то можно использовать светодиод белого свечения от напряжения 1,2…1,5В. На микросхеме МАХ1722 собран повышающий преобразователь, на микросхеме МАХ4073Т собран регулятор с обратной связью который позволяет регулировать выходной …Подробнее...
  • НЕКОТОРЫЕ ВОПРОСЫ ЭКСПЛУАТАЦИИ АККУМУЛЯТОРНЫХ БАТАРЕЙ

    При эксплуатации аккумуляторных батарей следует всегда четко помнить следующее: • после покупки батареи находятся в разряженном состоянии и перед началом эксплуатации их необходимо зарядить; • напряжение на заряженном элементе аккумуляторной батареи составляет 1,2 В; • напряжение конца разряда (напряжение, ниже которого элемент разряжать не следует) составляет 1,0…1,05 В; • емкость …Подробнее...
  • Фазоинвертор (ламповый усилитель)

    В двухтактный ламповый усилитель входит каскад фазоинвертор, его назначение — разделение входного сигнала на две противофазные полуволны . Так как любой каскад с нагрузкой анодной цепи инвертирует сигнал, часто применяется простая схема фазоинвертора на двух усилительных каскадах. Фазоинвертор — это два усилительных каскада с общим катодом, сигнал с выхода первого …Подробнее...
  • ЭЛЕКТРОННЫЕ ИГРОВЫЕ КОСТИ

    ЭЛЕКТРОННЫЕ ИГРОВЫЕ КОСТИ

    На рисунке показана простая схема «Электронные игровые кости», состоящая из простых недорогих элементах. Схема «Игровые кости» состоит из таймера, счетчика и нескольких светодиодов. При нажатии переключателя S1, таймер 555 вырабатывает импульсы, которые поступают на счетчик. Из-за быстроты переключений счетчика человек не может отследить момент зажигания светодиодов, поэтому данную схему можно …Подробнее...
  • Семиполосный эквалайзер с активными фильтрами

    Ниже приведен вариант эквалайзера с 7-ю полосами регулирования и глубиной регулирования ±15дБ на всех частотах. Номинальная величина входного сигнала — 250мВ. ОУ DA1 выполняет роль нормирующего усилителя. В цепи ОС ОУ DA2 включены фильтры F1-F7 с центральными частотами40, 100, 270, 700, 2000, 5000, 12500 Гц. Ширина полосы фильтра определяется параметрами …Подробнее...