Re: Вольтамперметр для блока питания (Arduino)
Больше похоже на наводку, замкните вход, будет ли ток равен 0?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
forum.rcl-radio.ru → Тестирование скетчей → Вольтамперметр для блока питания (Arduino)
Больше похоже на наводку, замкните вход, будет ли ток равен 0?
поменял А2 А3, проказания 0.16А
что нужно поменять в скетче при шунте 0.05
Коэффициент 0,200 вместо 1,000
почему-то А3 не работает, Вернул на А2 работает
Вот тест:
А3 в схеме просто изменяет напряжение GND, это сделано для устранения погрешности нуля, при измерении тока.
А3 в схеме просто изменяет напряжение GND, это сделано для устранения погрешности нуля, при измерении тока.
ясделал: А2-GND, А3-вход измерения
тек не работает
Возможно А3 неисправен, это можно проверить только тестовым скетчем, подав на него напряжение 1,5 В
Возможно А3 неисправен, это можно проверить только тестовым скетчем, подав на него напряжение 1,5 В
А1 А2 А3 монитор порта выдает при подаче 1.5в -24298
Значит А3 исправен
ясделал: А2-GND, А3-вход измерения
тек не работает
А скетч меняли?
что нужно поменять в скетче при шунте 0.05
Коэффициент 0,200 вместо 1,000
вы наверно не поняли я поменял входа и шунт 0.05
больше ничего не менял
Когда меняете А2 на А3 скетч тоже нужно менять
a2 = ads.readADC_SingleEnded(2);a_2 = a2*0.03125*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.03125*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;
менять сдесь а2 , а3
да
a2 = ads.readADC_SingleEnded(2);a_2 = a2*0.03125*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.03125*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;менять сдесь а2 , а3
как? не совсем понятно еще
a2 = ads.readADC_SingleEnded(3);a_2 = a2*0.03125*kalib2/10;
if(a_2>=i_reg){digitalWrite(10,LOW);stop=1;break;}else{digitalWrite(10,HIGH);}delay(20);
a3 = ads.readADC_SingleEnded(2);a_3 = a3*0.03125*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;
все хорошо работает и не плохо !
Окончательную настройку когда соберется устройство на плате!
Но еще попробую перенести на Мегу8
чем вы рисуете свои схемы которые размещаеете на сайте, ссылку дайте, иногда надо бывает
sPlan
пишет: ошибка для компиляции атмега8.
Вы писали что скетч большой. Как уменьшить?
Опубликуйте Ваш скетч
#include <Wire.h>
#include <Adafruit_ADS1015.h> // Adafruit_ADS1X15-master.zip
#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.650;// калибровка вольтметра А0 по максимальному напряжению 30V I=0
const float kalib2=0.200;// калибровка амперметра А2 по максимальному току 10 А
void setup(void){
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(12,INPUT);
pinMode(11,INPUT);
pinMode(9,INPUT);
pinMode(8,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(digitalRead(9)==HIGH){i_reg=i_reg+1.00;if(i_reg>=9.99){i_reg=9.99;}time=millis();delay(200);w=1;}
if(digitalRead(8)==HIGH){i_reg=i_reg-1.00;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(1);u_0 = u0*0.125*kalib0/1000;delay(20);
u1 = 0;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_FOUR);
a2 = ads.readADC_SingleEnded(3);a_2 = a2*0.03125*kalib2/10;
if(a_2>=i_reg){digitalWrite(10,LOW);stop=1;break;}else{digitalWrite(10,HIGH);}delay(20);
a3 = ads.readADC_SingleEnded(2 );a_3 = a3*0.03125*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),2);lcd.print(" B");
if(millis()-time<3000){lcd.print(" REG ");}
lcd.setCursor(0,1);lcd.print(" ");lcd.print(abs(a_2),2);lcd.print(" A ");lcd.print(i_reg,2);lcd.print(" A ");
if(stop==1){lcd.setCursor(9,0);lcd.print(" 5s OFF ");stop=0;delay(5000);}
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;}
}
В настройках платы укажите No bootloader
#include <Wire.h>
#include <Adafruit_ADS1015.h> // Adafruit_ADS1X15-master.zip
#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.650;// калибровка вольтметра А0 по максимальному напряжению 30V I=0
const float kalib2=0.200;// калибровка амперметра А2 по максимальному току 10 А
void setup(void){
lcd.begin(16, 2);
pinMode(12,INPUT);
pinMode(11,INPUT);
pinMode(9,INPUT);
pinMode(8,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;reg9_fun();;}
if(digitalRead(11)==HIGH){i_reg=i_reg-0.01;reg0_fun();}
if(digitalRead(9)==HIGH){i_reg=i_reg+1.00;reg9_fun();}
if(digitalRead(8)==HIGH){i_reg=i_reg-1.00;reg0_fun();}
if(millis()-time>3000){
////////////////////////////////// вольтметр ////////////////////////////////////////////
while(i<10){i++;ads.setGain(GAIN_ONE);
u0 = ads.readADC_SingleEnded(1);u_0 = u0*0.125*kalib0/1000;delay(20);
u1 = 0;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_FOUR);
a2 = ads.readADC_SingleEnded(3);a_2 = a2*0.03125*kalib2/10;
if(a_2>=i_reg){digitalWrite(10,LOW);stop=1;break;}else{digitalWrite(10,HIGH);}delay(20);
a3 = ads.readADC_SingleEnded(2 );a_3 = a3*0.03125*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),2);lcd.print(" B");
if(millis()-time<3000){lcd.print(" REG ");}
lcd.setCursor(0,1);lcd.print(" ");lcd.print(abs(a_2),2);lcd.print(" A ");lcd.print(i_reg,2);lcd.print(" A ");
if(stop==1){lcd.setCursor(9,0);lcd.print(" 5s OFF ");stop=0;delay(5000);}
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;}
}
void reg9_fun(){if(i_reg>=9.99){i_reg=9.99;};time=millis();delay(200);w=1;}
void reg0_fun(){if(i_reg<0){i_reg=0.01;}time=millis();delay(200);w=1;}
Скетч использует 7924 байт (96%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 368 байт (35%) динамической памяти, оставляя 656 байт для локальных переменных. Максимум: 1024 байт.
картинка стоит, и никаких реакций на внешние воздействия. кнопки работают
forum.rcl-radio.ru → Тестирование скетчей → Вольтамперметр для блока питания (Arduino)
Форум работает на PunBB, при поддержке Informer Technologies, Inc
|