1

Тема: Регулируемый стабилизатор напряжения с управлением от Arduino

Кнопки изменены на энкодер
Основная статья - http://rcl-radio.ru/?p=57730

#include <Wire.h>
#include <DallasTemperature.h>
#include <EEPROM.h>
#include <OneWire.h>
#include <Encoder.h>  // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip
#include <MsTimer2.h> // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip
#include <Adafruit_ADS1015.h>
#include <LiquidCrystal.h>
   Adafruit_ADS1115 ads;
   OneWire oneWire(A2);// вход датчика 18b20
   DallasTemperature t(&oneWire);
   LiquidCrystal lcd(7, 6, 2, 3, 4, 5);// RS,E,D4,D5,D6,D7
   Encoder myEnc(8, 9);//CLK, DT

  unsigned long times,oldPosition  = -999,newPosition;
  int u_dig,i,u_reg,w,w1,I_r,menu;
  unsigned int i_iz;
  float u_max=26.3,I,temp,i_reg,I_old;
  unsigned long time,time1,time2;
  const float kalib2=1.000;// калибровка амперметра
 
void setup(){
 Serial.begin(9600);Wire.begin();Wire.setClock(400000L);
 lcd.begin(16, 2);
 MsTimer2::set(3, to_Timer);MsTimer2::start();
   pinMode(10,INPUT);//  SW энкодер MENU
   t.begin();t.setResolution(9);//9 бит 
   ads.begin();ads.setGain(GAIN_EIGHT);
   u_dig=EEPROM.read(0)*256+EEPROM.read(1);i_reg=(float)EEPROM.read(2)/10.0;
}
 
void loop(){  
  if(digitalRead(10)==LOW){menu++;if(menu>1){menu=0;}delay(200);}
  
  if(menu==0){
   if (newPosition != oldPosition){oldPosition = newPosition;
     u_dig=u_dig+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;
     w=1;time1=millis();
     if(u_dig>4095){u_dig=4095;}if(u_dig<0){u_dig=0;}
     }}
  
  if(menu==1){
   if (newPosition != oldPosition){oldPosition = newPosition;
     i_reg=i_reg+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;
     w=1;time1=millis(); 
     if(i_reg>30){i_reg=30;}if(i_reg<1){i_reg=1;}I_r=i_reg;
     }}
 
 
   MCP4725(u_dig-u_reg+16*I);
 
  ///////////////////////////////// амперметр /////////////////////////////////////////////
   i_iz = ads.readADC_SingleEnded(0);
   if(i_iz>65000){i_iz=0;}I = i_iz*0.015625*kalib2/100;
 
   ///////////////////////////////////////// защита от КЗ ////////////////////////////////// 
   if(I>3){MCP4725(0);lcd.setCursor(0,0);lcd.print(" SHORT CIRCUIT! ");delay(10000);} 
 
   //////////////////////////////////// стабилизация по току + ТЕРМОАЩИТА///////////////////////////////  
   if(w1==1){    if(I>i_reg&&u_dig>0){u_reg=u_reg+10;} if(I==i_reg){}
                 if(I<i_reg&&u_reg>0&&I>0.1){u_reg=u_reg-10;} if(I<0.08){w1=0;u_reg=0;}}
   if(I>i_reg&&u_dig>0&&w1==0){u_reg=u_dig-(u_dig*(i_reg/I));w1=1;MCP4725(u_dig-u_reg);}
   if(temp>85){MCP4725(0);lcd.setCursor(0,0);lcd.print("HIGH TEMPERATURE");delay(10000);} 
 
  ////////////////////////////////////// eeprom ///////////////////////////////////////////
   if(w==1&&millis()-time>1000){EEPROM.update(0,highByte(u_dig));EEPROM.update(1,lowByte(u_dig));
   EEPROM.update(2,I_r);time=millis();w=0;}
 
  if(millis()-time2>300){
    lcd.setCursor(0,0);lcd.print("U = ");lcd.print((u_dig-u_reg)*u_max/4096,1);lcd.print(" V  ");
    lcd.setCursor(0,1);lcd.print("I = ");lcd.print(abs(I),2);lcd.print(" A  ");
    time2=millis();} lcd.setCursor(11,1);lcd.print(i_reg,1);lcd.print(" A");
 
  ////////////////////// измерение температуры корпуса транзстора ///////
  if(millis()-time1>1000&&I_old==I){ t.requestTemperatures();
   temp=t.getTempCByIndex(0); lcd.setCursor(12,0);lcd.print(temp,0);
   lcd.print(char(223));lcd.print("C     ");time1=millis();}I_old=I;
}

void MCP4725(int data){  
  byte buffer[3];
  buffer[0] = 0b01000000;
  // data=0;
  // buffer[0] = 0b01100000; // запись в память ЦАП 0 В 
  buffer[1] = data >> 4;              
  buffer[2] = data << 4;
  Wire.beginTransmission(0x60);
  Wire.write(buffer[0]);
  Wire.write(buffer[1]);
  Wire.write(buffer[2]);
  Wire.endTransmission();
  }  

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

2

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

lm358 запитуется от 27в а  не от 5?

3

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

от 27 В

4

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

liman324 пишет:

от 27 В

почему от 27 а не от 5в?

5

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Напряжение на базе VT2 должно быть равно выходному напряжению стабилизатора.

6

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Компиляция проходит без ошибок.

7

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Все проходит без ошибок и компиляция и загрузка

8

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Без модулей возможно работать не будет.

9 (2021-02-27 12:14:54 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

модули подключены.
не т аналоговой части, входы модулей не подключены

10

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

А что не работает?

11

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

На лсд нет показаний , засвечена верхняя строка

12

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

не т аналоговой части, входы модулей не подключены

Уст-во собрано не полностью, без аналоговой части скетч попадает в бесконечный цикл, поэтому и не работает. для LCD я использую параллельное подключение, специально отказавшись от I2C, модули ЦАП и АЦП работают на шине I2C, экран с подключением по I2C сильно влияет на быстродействие этих модулей.

13

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

понял, верну обратно, результат выложу

14 (2021-02-27 13:14:38 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

исключил I2C, подключил LSD параллельно , картина та же.
да же при параллельном включении ЛСД, нужно собрать всю схему?
Попробую на входа модулей подать с делителей напряжения указанные на схеме, (мне надо цифровую часть проверить)
Что можно изменить в скетче чтоб запустить цифровую, типа симетировать

15

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Зачем на выходе диод и R9?

16

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

R9 - нагрузка стабилизатора, если нет Rн
Диод - защита стабилизатора при подключении индуктивной нагрузки

17 (2021-03-04 10:26:56 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

подключил силовую часть, появились показания,
почему то не работает энкодер

18

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

Вечером посмотрю, что не так, я переписал код с кнопок на энкодер, но не тестировал.

19 (2021-03-04 12:42:01 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

1.я быстро собрал утром, может ошибся в монтаже, вечером перепроверю и напишу.

2.возможно-ли измерять выходное напряжение? Если да, то есть предложение по
   кое каким изменениям, для удобства работы устройства.

20 (2021-03-04 15:07:26 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

liman324 пишет:

Вечером посмотрю, что не так, я переписал код с кнопок на энкодер, но не тестировал.

собираете схему тестировать на макете или моделируете (например Proteus)?

21

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

if(temp>85){MCP4725(0);lcd.setCursor(0,0);lcd.print("ВЫСОКАЯ ТЕМПЕРАТУРА");delay(10000);}
изменил на русский текс, вместо букв непонятные символы

22

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

По коду пока не вижу ошибок, энкодер должен работать.

изменил на русский текс, вместо букв непонятные символы

У Вас индикатор не русифицированный, только анг. шрифт.

23

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

кнопки работают, немного не корректно, я так считаю.
1. При нажатии " + , - "  меняются показания  в большую или меньшую сторону,
    в позиции на индикаторе " U=20 V ". (это правильно? устанавливается выходное напряжение?)
2. при удержании ТОК и нажатии - " + или - " , меняются показания в позиции 0.8 А,
    позиция " I = 0,08 А " остается без изменений
Я считал, что " U=20 V ", " I=0,08 А " - это отображения заданных тока и напряжения, это так?

24

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

1 . текущее напряжение
2.  установленное ограничение (стабилизация) напряжения
3. текущее напряжение и текущий ток

25 (2021-03-06 08:06:12 отредактировано sanj76a)

Re: Регулируемый стабилизатор напряжения с управлением от Arduino

liman324 пишет:

1 . текущее напряжение
2.  установленное ограничение (стабилизация) напряжения
3. текущее напряжение и текущий ток

не понял

ПОКАЗАНИЯ ИНДИКАТОРА:
" U=20.0 V " - заданное напряжение
" I = 1,00 А "- Заданный ток
  0.8 А          - показания выходного тока
  Так?

    КНОПКИ:(писал выше, не так работают)
1. при удержании ТОК и нажатии - " + или - " , меняются показания
    в позиции 0.8 А,
    позиция " I = 0,08 А " остается без изменений

2.мучился долго, энкодер не работает. Кнопки работают,

   Как работает энкодер?

   Нажатием SW переключаем установку тока или напряжения?