26

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Драйвер для Windows установили - https://www.holtek.com/productdetail/-/vg/42B534-x

27

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Установил драйвер.Один раз я прошил но второй не получилось!

28

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Извините за мой плохой русский язык!

29

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Какой чип стоит USB-UART преобразователя на плате микроконтроллера. Сделайте снимок настроек платы в Arduino IDE

30

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

CH9340C

31

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Установите другой драйвер https://khandishnetwork.com/dl/ch9340se … nload-zip/

32

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Добавлен датчик температуры ds18b20 на радиатор силового транзистора

отключение выхода источника питания при температуре больше 65 гр

http://forum.rcl-radio.ru/uploads/images/2023/03/bbeb0b53875b56f7f6c2ad1dbd789cb3.png

http://forum.rcl-radio.ru/uploads/images/2023/03/b25258175a3f09f0ab62ee0f2012ab51.png



#define ANALOG_I A3
#define ANALOG_U A6
#define U_OUT_K 418
#define I_OUT_K 1970
#define I_STAB_K 1210
#define U_OUT_IND 157

#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip 
#include <Wire.h>
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip    
#include <EEPROM.h>
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip  
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
Encoder myEnc(6, 5);// DT, CLK
OneWire  ds(8); // Вход датчика 18b20
 
long u_sum,i_sum,times,times0,oldPosition  = -999,newPosition,times1;
int u_,ads_i,i_,menu;
int u_out,i_stab;
bool w=1,w2,out=1;
long u_iz;
int t;
 
 
void setup(){
  delay(200);Wire.begin();lcd.init();lcd.backlight();// Включаем подсветку дисплея
  analogReadResolution(12);// АЦП 12 БИТ
  analogReference(DEFAULT);//INTERNAL4V096 DEFAULT(Uп)
  Serial.begin(9600);
  pinMode(7,INPUT);        // SW ENCODER
  pinMode(4,INPUT_PULLUP); // OUT_ON_OFF
  MsTimer2::set(3, to_Timer);MsTimer2::start();
  if(EEPROM.read(100)!=0){for(int i=0;i<101;i++){EEPROM.update(i,0);}}// очистка памяти при первом включении  
// TIMER_1 D9 OUTPUT
  DDRB = 1 << PB1;
  noInterrupts();
  TCCR1A=0;TCCR1B=0;
  TCCR1A = 1 << COM1A1 | 1 << WGM11;
  TCCR1B = 1 << WGM13 | 1 << WGM12 | 1 << CS10;
  OCR1A = 0;
  ICR1 = 10500;
// TIMER_3 D2 OUTPUT
  TCCR3A=0;TCCR3B=0;
  DDRF |= (1<<PF2);
  HDR = 1 << HDR3;
  TCCR3A = 1 << COM3B1 | 1 << WGM31;
  TCCR3B = 1 << WGM33 | 1 << WGM32 | 1 << CS30;
  OCR3B = 0;
  ICR3 = 2500;
  interrupts();
  lcd.setCursor(3, 0);lcd.print(F("Power unit"));
  lcd.setCursor(3, 1);lcd.print(F("0-25V 0-2A"));
  delay(1000);lcd.clear();
  u_out = EEPROM.read(0);i_stab = EEPROM.read(1);
  OCR1A = float(u_out)/10.00*U_OUT_K;
  OCR3B = I_STAB_K*float(i_stab)/100;
}
 
void loop() {
  if(millis()-times1>5000){t=dsRead(0);}
  if(t>60 && millis()>10000){OCR1A=0;OCR3B = 0;}
  if(digitalRead(7)==LOW){menu++;delay(300);times0=millis();w=1;w2=1;if(menu>1){menu=0;}}
  if(digitalRead(4)==LOW && out==1){out=0;;delay(300);OCR1A=0;OCR3B = 0;}
  if(digitalRead(4)==LOW && out==0){out=1;;delay(300);w=1;}
/////////////////////////////////////////////////////////////////////////////////////////////  
  if(millis()-times>100){times=millis();ads_i++;i_sum = i_sum + analogRead(ANALOG_I);u_sum = u_sum + analogRead(ANALOG_U);}
  if(ads_i>9){ads_i=0;i_ = i_sum/10;i_sum=0; u_ = u_sum/10;u_sum=0;
    Serial.print("I_out = ");Serial.println(abs(float(i_)/I_OUT_K),2);
    Serial.print("I_dig = ");Serial.println(analogRead(ANALOG_I));
    Serial.print("U_out = ");Serial.println(abs(float(u_)/U_OUT_IND),2);
    Serial.print("U_dig = ");Serial.println(analogRead(ANALOG_U));
    Serial.println(OCR1A);
    w=1;}
/////////////////////////////////////////////////////////////////////////////////////////////
if(menu==0){
  if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
  u_out=u_out+newPosition;myEnc.write(0);newPosition=0;
  if(u_out<0){u_out=0;}if(u_out>250){u_out=250;}times0=millis();w=1;w2=1;}
  if(u_out>200&&i_stab>100){i_stab=100;}}
/////////////////////////////////////////////////////////////////////////////////////////////
if(menu==1){
  if(newPosition != oldPosition){oldPosition = newPosition;if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}
  i_stab=i_stab+newPosition;myEnc.write(0);newPosition=0;
  if(i_stab<10){i_stab=10;}
  if(u_out>200&&i_stab>100){i_stab=100;}
  if(i_stab>200){i_stab=200;}times0=millis();w=1;w2=1;}}
/////////////////////////////////////////////////////////////////////////////////////////////
 
 
  if(w==1){w=0; 
  if(out==1){
  OCR1A = float(u_out)/10.00*U_OUT_K;
  OCR3B = I_STAB_K*float(i_stab)/100;
  }
  // U /////////
  lcd.setCursor(1, 0);lcd.print(float(u_out)/10,1);lcd.print("V  ");
  if(menu==0){lcd.setCursor(0, 0);lcd.print(F("*"));}else{lcd.setCursor(0, 0);lcd.print(F(" "));}
  lcd.setCursor(7, 0);lcd.print(F("> "));
  if(out==1){
  u_iz = (abs(long(u_))*10)/U_OUT_IND;
  lcd.setCursor(9, 0);lcd.print(float(u_iz)/10,1);lcd.print("V  ");}
  else{lcd.setCursor(7, 0);lcd.print(" OUT_OFF");}
  
  // I //////////
  lcd.setCursor(1, 1);lcd.print(float(i_stab)/100,2);lcd.print("A ");
  if(menu==1){lcd.setCursor(0, 1);lcd.print(F("*"));}else{lcd.setCursor(0, 1);lcd.print(F(" "));}
  long i_iz = (abs(long(i_))*100)/I_OUT_K;
  lcd.setCursor(7, 1);lcd.print(F(">"));
  //if(i_iz<=5){i_iz=0;}
  lcd.setCursor(9, 1);lcd.print(float(i_iz)/100,2);lcd.print(" ");
  lcd.print(t);

  }
//////////////////////////////////////////////////////////////////////////////////
 if(millis()-times0>10000 && w2==1){EEPROM.update(0,u_out);EEPROM.update(1,i_stab);menu=0;w2=0;w=1;}   
}
 
void to_Timer(){newPosition = myEnc.read()/4;}

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  for (byte i=0; i<9; i++) data[i]=ds.read();
  int raw=(data[1]<<8)|data[0];
  float value = (float)raw / 16.0; return value; // Расчет температуры и вывод
}

33

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Здорово, что сделали версию с экраном 1602!
"ОГРАНИЧЕНИЕ 1А ПОСЛЕ 20В, ДО 20В МАКСИМАЛЬНЫЙ ТОК 2А" - максимальный ток до 20В = 2А, свыше 20В = 1А? Это для того чтобы сохранить пассивное охлаждение радиатора выходного транзистора?
Схема на top25630 позволяет регулировать выходное напряжение? Если да, то в каком диапазоне?
Оф топ: часом не в Мире работаете?

34

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Все ограничения связаны с моим источником питания, он слабоват для 2 А выше 20 В, проседает напряжение.

Для снятия ограничения нужно просто удалить строчку:
if(u_out>200&&i_stab>100){i_stab=100;}}

Схема на TOP256 не позволяет регулировать напряжение.

35

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Привет! Почему напрежения регулеруется до 19,8V? Uin-30V, PWM D9 при 19,8V на изходе e 5V.

36

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Увеличьте на 20-30 % R7, повторите калибровку.

37

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Спасибо, я понял!

38 (2023-04-02 23:18:41 отредактировано Sergey-77)

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Собрал все заново, удалил строку if(u_out>200&&i_stab>100){i_stab=100;}} 
но ограничение осталось.
Где в коде меняется верхний предел напряжения?

39

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Какое максимальное напряжение Вы можете установить?

40

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

if(u_out<0){u_out=0;}if(u_out>250){u_out=250;}

41 (2023-04-02 23:24:44 отредактировано Sergey-77)

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

показометр показывает 25В, выставлено 28, по факту 28 вольт
после 25В напряжение на показометре не растет

42

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

liman324 пишет:

if(u_out<0){u_out=0;}if(u_out>250){u_out=250;}

эту строчку правил, может еще где то?

43

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

ICR1 увеличьте до 15000 или увеличьте значение R7

44

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Увеличил. Во время прошивки LGT подключена к ноуту , а сама схема обесточена... через 10 секунд из LGT пошел дымок. До этого перепрошивал при включенном основном питании. Платка не плохая, но очень "нежная".

45

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Что-то  замкнули по питанию 5 В, в платке стоит диод, скорее всего это он димил, возможно если его заменить то плата еще будет работать.

46

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Завтра попробую, плохо что заказал только одну такую. Есть еще такая без загрузчика, но она работает как то странно, через внешний адаптер FT232RL  прошивается без ошибок, но тестовый скетч с миганием встроенного светодиода, диодом не мигает.

47

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Привет!Можешь скомпилить скетч для atmega 328-uno,nano.....?

48

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Проект не совместим с Atmega328, нужно два 16-и битных таймера и 2 12-и битных аналоговых входа.

49

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

а можно скетч для такой lgt8f328 http://forum.rcl-radio.ru/uploads/images/2023/05/27e4430dbdee487c5e016a6dd2fe2084.jpg http://forum.rcl-radio.ru/uploads/images/2023/05/6ebd5d6599d8d8af4b043ddaa23d7399.jpg
ато сделал плату а у меня от скетча на сайте даже экран не загорается.

50

Re: ИП 0-25B 0-2A | СТАБИЛИЗАЦИЯ ПО ТОКУ

Вот плата в лекйке.Данный контент доступен только зарегистрированным пользователям.