Re: Вольтамперметр для блока питания (Arduino)
10 мВ шунта = 1 А
float kalib2=1.000; - это калибровка для повышения точности
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → Вольтамперметр для блока питания (Arduino)
10 мВ шунта = 1 А
float kalib2=1.000; - это калибровка для повышения точности
Сделал на ADS1015 ампервольтметр с отображением заданных и реальных значений для одного канала ЛБП 
Здравствуйте! Можно ли поднять верхний порог измерения до 36-ти вольт? Конечно желательно до 50-ти.
Нужно подобрать делитель напряжения, чтобы при 50 В напряжение на делителе не превышало 4 В, далее просто подберите коэффициент:
const float kalib0=7.970;// калибровка вольтметра А0 по максимальному напряжению 30V I=0
Ув. liman324, благодарю! Буду пробовать.
Нужно подобрать делитель напряжения, чтобы при 50 В напряжение на делителе не превышало 4 В, далее просто подберите коэффициент:
const float kalib0=7.970;// калибровка вольтметра А0 по максимальному напряжению 30V I=0
Здравствуйте! Если я правильно Вас понял, сначала резисторы R1-R6 надо увеличить в 1,66 раза (50V:30V=1,66). Затем программная калибровка.
Да, все верно. Главное чтобы на входе АЦП напряжение не превышало 4 В
А какое минимальное значение тока можно замерить с шунтом 0.01 Ом ?
А какое минимальное значение тока можно замерить с шунтом 0.01 Ом ?
Думаю что не менее 0,01 А
ну я так и прикинул, протестировал.
У меня есть блок питания собран по схеме старичка
там тоже ( 0,01 А ) + - чуть чуть и это в начале диапазона измерения только нет АЦП стоит atmega8 всего.
а если использовать усилитель сигнала с резистивных датчиков тока MAX4372T
умножает в 20 раз при шунте в 0.01 Ом 10 амперах с него выйдет 2 вольта значит до 20 ампер можно измерять (4 вольта)
GAIN_ONE (4.096 В) для ADS1115. Не вижу смысла использовать MAX4372T, АЦП ADS1115 может измерить такое напряжение.
Собрал вольтамперметр почему то плавают показания
в чём может быть причина ?
#include <Wire.h> // SDA и SCL (А4 и А5)
#include <DallasTemperature.h>
#include <Adafruit_ADS1015.h> // Adafruit_ADS1X15-master.zip
Adafruit_ADS1115 ads;
#include <OneWire.h>
OneWire oneWire(A1); // вход для датчиков 18b20
DallasTemperature t(&oneWire);
#include <LiquidCrystal.h>
LiquidCrystal lcd(13, 12, 11, 10, 9, 8, 7);// RS, RW, E, D4, D5, D6, D7
int u0, u1, a2, a3, i ;
float u_0,u_1,u_ob0,u_ob1,a_2,a_3,a_ob2,a_ob3,i_reg;
const float kalib0 = 9.590 ; // калибровка вольтметра А0 по максимальному напряжению 30V I=0 const float kalib0=7.970;
const float kalib2 = 1.050 ; // калибровка амперметра А2 по максимальному току 10 А const float kalib2=1.000;
void setup(void) { lcd.begin(16, 2); ads.begin(); t.begin();
}
void loop() { {
// вольтметр
while(i<10){i++;ads.setGain(GAIN_ONE); u0 = ads.readADC_SingleEnded(0);u_0 = u0*0.125*kalib0/1000;
u1 = ads.readADC_SingleEnded(1);u_1 = u1*0.125*kalib0/1000;
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;
a3 = ads.readADC_SingleEnded(3); a_3 = a3*0.0078125*kalib2/10;
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); } // компенсация напряжения шунта
if(abs(u_0)>9.999){ lcd.setCursor(0,0); lcd.print("U="); lcd.print(abs(u_0),1); lcd.print("V"); }
else { lcd.setCursor(0,0); lcd.print("U="); lcd.print(abs(u_0),2); lcd.print("V"); }
if(abs(a_2)>9.999){ lcd.setCursor(9,0); lcd.print("I="); lcd.print(abs(a_2),1); lcd.print("A"); }
else { lcd.setCursor(9,0); lcd.print("I="); lcd.print(abs(a_2),2); lcd.print("A"); }
if((u_0 * a_2)>9.999) { lcd.setCursor(0, 1); lcd.print("P="); lcd.print( (u_0 * a_2), 1); lcd.setCursor(6, 1); lcd.print("W"); }
else { lcd.setCursor(0, 1); lcd.print("P="); lcd.print( (u_0 * a_2), 2); lcd.setCursor(6, 1); lcd.print("W"); }
t.requestTemperatures();
lcd.setCursor(9, 1);lcd.print("t="); lcd.print(t.getTempCByIndex(0)-1,1); lcd.print("C");
}
Поставьте конденсаторы 0,1 мкФ на входах АЦП относительно GND, возможно это поможет.
Пробывал уже ставил 1 мкФ эффекта нет
Где то наводки идут. Сама схема измерения делает по 10 измерений тока и напряжения и вычисляет среднее значение, что само по себе дает более стабильные показания.
А может АЦП глючная ?
брал 3 штуки одна вообще не работает вторая меряет только ток и то в примерно в половину третья стоит сейчас
проверьте ацп i2c сканером, по умолчанию адрес 0х48, адрес можно изменить, что в библиотеке, что на самой АЦП.
А может АЦП глючная ?
- маловероятно
я использовал модуль

А со скетче я ничего не намудрил ?
да вроде нет
ну придётся ждать новую АЦП там видно будет
Всё разобрался плавало из за компа
а как в эту строчку if(a_2<0.005){a_2=0;}if(u_0<0.005){u_0=0; } // измерения начинаются с 0,005 В и с 0,005 А
добавить мощность ?
float w = u_0 * a_2;
if(w<0.005){w=0;}
if((u_0 * a_2)>9.999) { lcd.setCursor(0, 1); lcd.print("P="); lcd.print(w), 1); lcd.setCursor(6, 1); lcd.print("W"); }
else { lcd.setCursor(0, 1); lcd.print("P="); lcd.print( (w), 2); lcd.setCursor(6, 1); lcd.print("W"); }
forum.rcl-radio.ru → Тестирование скетчей → Вольтамперметр для блока питания (Arduino)
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|
|