76

Re: xl4015

MCP4725 2 шт

http://forum.rcl-radio.ru/uploads/images/2024/10/eb68c4b55252cd7768d00d2b711a73a6.gif

http://forum.rcl-radio.ru/uploads/images/2024/10/856321782aa4d3a7605d92f8f4c533be.gif


#define KALL_I_IZ 1.020 
#define KALL_U_IZ 0.970 

#define KALL_I_DAC 410.00 
#define KALL_U_DAC 395.00 

#define ADDR1 0x60 // I
#define ADDR2 0x61 // U

#include <EEPROM.h> 
#include <Wire.h> 
#include <U8glib.h>            // https://github.com/olikraus/u8glib/
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip   

  Encoder myEnc(6, 5);// DT, CLK
  U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);

  int n,m,m1;
  float i_dig,u_dig,i_dig1;
  float u_iz,i_iz,i_iz1;
  long i_sum,u_sum,i_sum1;
  bool w=1,w1,iu,power;
  long times,oldPosition  = -999,newPosition;
  int un,in;

void setup(){
  delay(200);
  Wire.begin();
  analogReadResolution(12);// АЦП 12 БИТ
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  un = EEPROM.read(0);in=EEPROM.read(1);
  analogReference(DEFAULT);
  pinMode(A0,INPUT); // Изм.I
  pinMode(A1,INPUT); // Изм.U
  pinMode(7,INPUT);  // SW ENCODER
  
  u8g.firstPage();  
   do {
  u8g.setFont(u8g_font_profont12r); 
  u8g.drawStr(30,10,"POWER SUPPLY");
  u8g.drawStr(30,25,"0-25V 0-2.5A");
  u8g.drawStr(30,55,"rcl-radio.ru");
  } while( u8g.nextPage() );
  delay(2000);
  I2C_write(0, true, ADDR2);
  I2C_write(0, true, ADDR1);
  }

void loop(){
  if(digitalRead(7)==LOW &&iu==0){iu=1;times=millis();w=1;w1=1;delay(200);}
  if(digitalRead(7)==LOW &&iu==1){iu=0;times=millis();w=1;w1=1;delay(200);}

  if(iu==0){
  if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
  un=un+newPosition;myEnc.write(0);newPosition=0;   
  if(un<0){un=0;}if(un>250){un=250;}times=millis();w=1;w1=1;}
  }
  if(iu==1){
  if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
  in=in+newPosition;myEnc.write(0);newPosition=0;   
  if(in<0){in=0;}if(in>250){in=250;}times=millis();w=1;w1=1;}
  }
  
  i_dig = analogRead(A0);
  i_sum = i_sum+i_dig;
  n++;if(n>9){n=0;i_iz=i_sum/10;i_sum=0;} 

  u_dig = analogRead(A1);
  u_sum = u_sum+u_dig;
  m++;if(m>9){m=0;u_iz=u_sum/10;u_sum=0;w=1;} 


  if(w==1){
    I2C_write(4095.00/KALL_U_DAC*un, false, ADDR2);
    I2C_write(4095.00/KALL_I_DAC*in, false, ADDR1);
    delay(10);
  u8g.firstPage();  
   do {
  u8g.drawLine(0, 16, 128, 16);//u8g.drawLine(0, 53, 128, 53);
  u8g.setFont(u8g_font_profont29r); 
  u8g.drawStr(0,40,"U");u8g.setPrintPos(35, 40);u8g.print(u_iz*KALL_U_IZ/100.0,1);u8g.drawStr(114,40,"V");
  u8g.drawStr(0,64,"I");u8g.setPrintPos(35, 64);u8g.print(i_iz*KALL_I_IZ/1000.0,2);u8g.drawStr(114,64,"A");
  u8g.setFont(u8g_font_profont15r);
  if(iu==0){u8g.drawStr(0,12,"U >");}else{u8g.drawStr(0,12,"U  ");}u8g.setPrintPos(25, 12);u8g.print(un/10.0,1);
  if(iu==1){u8g.drawStr(70,12,"I >");}else{u8g.drawStr(70,12,"I  ");}u8g.setPrintPos(95, 12);u8g.print(in/100.00,2);

  } while( u8g.nextPage() );
  }

  if(millis()-times>5000 && w1==1){EEPROM.update(0,un);EEPROM.update(1,in);w1=0;w=1;iu=0;myEnc.write(0);} 

  } 

void to_Timer(){newPosition = myEnc.read()/4;}  

void I2C_write(int data, byte eeprom, byte addr){  
  uint8_t cmd[3]; 
  if(eeprom==true){cmd[0]=0x60;}else{cmd[0]=0x40;}
  cmd[1] = (data / 16);    
  cmd[2] = (data % 16) << 4; 
  Wire.beginTransmission(addr);
  Wire.write(cmd[0]); 
  Wire.write(cmd[1]); 
  Wire.write(cmd[2]); 
  Wire.endTransmission();
  }       

77

Re: xl4015

Пытаюсь настроить первый вариант. Столкнулся с проблемами:
1. Показания тока без нагрузки 0,08А.
2. Если при подаче на вход 24В выставить ток ограничения меньше максимального, срабатывает защита (напряжение на выходе устанавливаю меньше максимального, например 11В).
3. Если ток и напряжение выставить максимальными(нагрузка 1,3А), то работает но мерцает дисплей.
4. Иногда зависает....

Использую голый МК, без кварца (ибо прошить  смог только через UNO и только при установленном внутреннем  осциляторе 32МГц).

Питание норм, шунтирующие конденсаторы в избытке.
В общем, что-то этот МК не впечатлил начиная с танцев с прошивкой.

78

Re: xl4015

Для наладки ШИМ преобразователя микроконтроллер пока можно убрать и проверить все мультиметром.

Напряжения входов "Измерение тока и напряжения" от 0 до 5 В.

Без нагрузки на выходе "измерение тока", должно быть 0 В. При замкнутом входе 5 на GND ОУ на выходе в любом случае должно быть 0В.

По напряжению - без нагрузки, установить на регулятор тока R2 в среднее положение. При регулировании напряжения резистором R1 выходное напряжение ШИМ преобразователя должно менять от 0 до напряжения питания-2В.

79 (2024-10-06 13:21:48 отредактировано Karl2233)

Re: xl4015

Регулировки, без МК, работают, вроде, как надо. Правда выходное  U  меняется от "0" до почти входного, на 1В меньше.
Без нагрузки на выходе ОУ 20-30мВ(на индикаторе без нагрузки "0,07А").


Запарился я с этим МК.
1. При входном 24В и с установленном  максимальным U, с нагрузкой 15 Ом работатет как надо. Выходное U проседает на 0,5 - 1 В.
Но как только устанавливаю выходное U меньше максимального,  срабатывает защита.
Так происходит с входным от 12В до 24В.

2. Если уменьшить нагрузку (ставлю 15 Ом+ 10 Ом), то работает как надо - установка выходного U не приводит к зависаниям и ребуту.
Правда выходное напряжение на пару вольт проседает.

3. Индикатор при подключеной нагрузке (если выходное U установлено меньше максимального) работает странно: подергивается изображение и подмигивает.

Подозреваю что фьюзы не прошились или МК глючный. Попробую подключить плату вместо голого МК, потом отпишусь.
З. Ы. Что подумал. Ведь МК выполняет функцию прказометра, значит имею две проблемы: подмигивание индикатора и неверную работу ОУ и компаратора. Пошел ковырять дальше.

80

Re: xl4015

Разобрался.
Проблемы сразу в двух местах:
1. При установке выходного напряжения меньше максимального и подключеной нагрузке, дикие всплески после LM317(вместо 7809). Это и приводило к срабатыванию защиты(=падению выходного U и морганию OLED и зависанию МК).
2. Разводка  общего(входящий GND ближе к XL, для ОУ и компаратора отдельная дорожка) и точки подачи Vin(должен быть ближе к XL; питать ОУ, компаратор и LGT8F328P надо через дроссель).
3. Силовой дроссель подальше(перпендикулярно) дорожке со 2 ноги XL.

Щас переразведу плату и выложу фото готового монстрика.

81

Re: xl4015

Теперь новая напасть - без нагрузки и при замкнутом шунте 0,08А показывает.

82

Re: xl4015

Поменяйте LM358 или просто введите программную поправку.

83 (2024-10-12 23:01:23 отредактировано Karl2233)

Re: xl4015

Lm менял, не помогло.
А где в коде нужно ввести поправку? Подскажите плз.
В начале кода, где надо ввести поправочный коэффициент, меняю с 1.0 до 1.6 изменений нет.

И ещё вопрос: вмкаком месте кода нужно добавить фрагмент чтения данных с терморезистора что б ШИМ управление вентилятора было?

84

Re: xl4015

Опубликуйте скетч который Вы используете

85 (2024-10-13 11:04:26 отредактировано Karl2233)

Re: xl4015

Скетч из статьи на главной странице.

Единственные изменения:
коэффициенты 1.6 вместо 1.200
и 0.65 вместо 0.730.
Может дело в отсутствующих нулях?

86

Re: xl4015

#define KALL_I_IZ 1.200  это коэффициент измерителя тока, он действует на текущее значение тока.

Вот строка вывода значения тока на дисплей
u8g.drawStr(0,50,"I");u8g.setPrintPos(35, 50);u8g.print(i_iz*KALL_I_IZ/1000.0,2);u8g.drawStr(110,50,"A");

Вы можете добавить поправочный коэффициент для калибровки тока нуля

u8g.drawStr(0,50,"I");u8g.setPrintPos(35, 50);u8g.print(i_iz*KALL_I_IZ/1000.0-0.08,2);u8g.drawStr(110,50,"A");

87

Re: xl4015

И ещё вопрос: вмкаком месте кода нужно добавить фрагмент чтения данных с терморезистора что б ШИМ управление вентилятора было?

Можно в начале цикла loop, но обращение к коду должно быть не частое, например 1 раз в 10 секунд

88 (2024-10-14 05:14:40 отредактировано Karl2233)

Re: xl4015

Понял. Спасибо Александр!
Проверить смогу позже - спалил МК(покупал голый камень).
На замену сдул с зеленой платы(типа Pro Mini), но в неё упорно не заливается скетч.
Пишет прошилось(блинк, Ваш тестовый для OLED) а по факту - нет.

Заказал ещё МК, а пока буду дальше пытаться прошить.

89

Re: xl4015

Всё победил.
Прошил программатор от Братца Яна, залил в UNO и вуаля!
Поправил коэффициент по току - вычел 0,06 в указанном Александром месте.
Правда не совсем понял как  сделать нечастое обращение, ну да ладно - всё равно половина LM358 свободна, вот на ней и забабахал управление кулером.

Спасибо, Александр, за разработку и помощь!