26

Re: PWM 0-25V 3A

Вы не сможете открыть монитор порта. Поэтому выведу измерение на TM1637

// 0-25V 3A
#define KALL_U 7.405

#define CLK  PB4 // TM1637 D11
#define DIO  PB3 // TM1637 D12

#include <EEPROM.h>

float u,u_iz;
int reg;
bool w=1,w1,out=0;
unsigned long times;

void setup(){
  u = float(EEPROM.read(0))/10.0;
  Serial.begin(9600);
  // TIMER_1 D9 OUTPUT
  DDRB |= (1 << PB1)|(1<<PB5); // D9 output pwm | D13 led error 
  DDRD |= (1<<PD2); //  D2 RELE
  PORTD |= (1<<PD3)|(1<<PD4)|(1<<PD5);
  PORTB |= (1<<PB1); 
  
   noInterrupts();
  TCCR1A = 0;TCCR1B = 0;
  TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);
  TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS10);
  TCKCSR = 1 << F2XEN | 1 << TC2XS1;
  ICR1 = 5000;
  OCR1A =0;
  interrupts();
  ADMUX = 0b000;
  ADCSRD |= 1 << REFS2;
  ADCSRA |= 1 << ADEN | 1 << ADSC | 1 << ADATE | 0b111;
  delay(300);
  PORTD &=~ (1 << PD2);
  }

void loop(){ 
 
  
  while((ADCSRA & (1 << ADIF)) == 0);
   int u_data = (ADCL|ADCH << 8);
  
 
  tm_print(u_data,0,5);
  delay(1000);
  
  }

void tm_dec(byte dig){
       for(byte i = 0; i < 8; i++) {
         DDRB |= (1 << CLK);del();
       if (dig & 0x01)
         DDRB &= ~(1 << DIO);
       else
         DDRB |= (1 << DIO);del();
         DDRB &= ~(1 << CLK);del();
         dig = dig >> 1;
  }
         DDRB |= (1 << CLK);
         DDRB &= ~(1 << DIO);del();
         DDRB &= ~(1 << CLK);del();
 
       if (((PINB >> DIO) & 1) == 0)
         DDRB |= (1 << DIO);del();
         DDRB |= (1 << CLK);del();
  }  
 
void tm_stop(){
         DDRB |= (1 << DIO);del();
         DDRB &= ~(1 << CLK);del();
         DDRB &= ~(1 << DIO);del();
  }  
 
void tm_start(){
         DDRB |= (1 << DIO);del();
  }
 
void tm_print(int t, byte pd_t, int br){
        tm_start();tm_dec(0b10001000 + br);
        tm_dec(0x40);tm_stop();tm_start();
        int data0 = t / 1000 % 10;
        int data1 = t / 100 % 10;
        int data2 = t / 10 % 10;
        int data3 = t % 10;
 
      for(byte n = 0; n < 4; n++){
        int data;
      switch(n){
        case 0: data= data1;break;
        case 1: data = data1;break;
        case 2: data = data2;break;
        case 3: data = data3;break;
        }
 
      switch(data){    // XGFEDCBA
        case 0:  data = 0b00111111;break;     // 0
        case 1:  data = 0b00000110;break;     // 1
        case 2:  data = 0b01011011;break;     // 2
        case 3:  data = 0b01001111;break;     // 3
        case 4:  data = 0b01100110;break;     // 4
        case 5:  data = 0b01101101;break;     // 5
        case 6:  data = 0b01111101;break;     // 6
        case 7:  data = 0b00000111;break;     // 7
        case 8:  data = 0b01111111;break;     // 8
        case 9:  data = 0b01101111;break;     // 9
        case 10: data = 0b00000000;break;     // пусто
        case 11: data = 0b01000000;break;     // -
        case 12: data = 0b00111110;break;     // U
        }
 
        if(n == 0){data0 = data;}
        if(n == 1){data1 = data;}
        if(n == 2){data2 = data;}
        if(n == 3){data3 = data;}
        }
      switch(pd_t){
        case 1 : data2 = data2+0b10000000;break;
        case 2 : data1 = data1+0b10000000;break;
        case 3 : data0 = data0+0b10000000;break;
        }
      tm_dec(0xC0);tm_dec(data0);tm_dec(data1);tm_dec(data2);tm_dec(data3);tm_stop();
}  
void del(){delayMicroseconds(100);}  

27 (2023-11-03 23:49:44 отредактировано 44chsv)

Re: PWM 0-25V 3A

Проверил аналоговый вход, подал на вход А0 около 3,3 В. работает нормально.
http://forum.rcl-radio.ru/uploads/images/2023/11/0afda0e6ba4be935715d1dd29fe4324b.png

при замыкании А0 на землю показывает почему-то 5.

28

Re: PWM 0-25V 3A

Если схема собрана верно, то я больше не вижу причин почему регулятор напряжения не работает.

Делитель напряжения правильно работает, если на него подать 20 В на выходе делителя будет примерно 2,6 В?

29 (2023-11-04 00:10:44 отредактировано 44chsv)

Re: PWM 0-25V 3A

В вашем коде вставил строку Serial.println(u_iz);
И подал на верхнее плечо делителя 3,3 В. в мониторе порта примерно похожее показывает.

http://forum.rcl-radio.ru/uploads/images/2023/11/f26005a294d22468ac0f5ad80835a0c5.png

буду дальше копать...

При этом на индикаторе ТМ1637 были по прежнему 00.
Наверно на индикатор должно выводиться тоже что и в монитор порта.

30

Re: PWM 0-25V 3A

С помощью этого инструмента пробовал разные варианты настройки регистров.

https://dbuezas.github.io/arduino-web-t … p;OCR1A=85

Толком не разобрался, но похоже что с этим контроллером что-то не так.
Но в скетче с такими настройками удалось выставить частоту на выводе D9 - 62,7 кГц.

http://forum.rcl-radio.ru/uploads/images/2023/11/0ea070a0d70ba116d9fb00a850312d7c.png

Посмотрите, может в вашем скетче можно изменить настройки для моего контроллера.

31

Re: PWM 0-25V 3A

Этот режим Вам не подходит, нужен ШИМ 16 бит,давайте еще раз проверим ШИМ, но на этот раз подключите к D9 светодиод через резистор 200-400 Ом.

Силовая часть схемы регулятора инвертирует напряжение, поэтому чтобы убавить напряжение на выходе нужно увеличить уменьшить скважность ШИм и наоборот. Для упрощения работы с ШИМом я инвертировал его.

ICR1 = 5000; - максимальное значение ШИМ, от этого значения зависит частота ШИМ , а главное разрядность, ШИМ таймера 1 имеет разрядность 16 бит, тоесть  ICR1 может иметь максимальное число 65535, но при этом числе частота ШИМ заметно снизится, но ШИМ будет очень точным. Я ограничил ШИМ 5000 еддениц, частота выше и точность в пределах 12 бит.


OCR1A = регистр сравнения, его значение не должно выходить за пределы 5000. от OCR1A зависит скважность ШИМ. Чем больше число тем больше длительность импульса и меньше скважность. Но для регулятора я инвертировал ШИМ, поэтому подключив светодиод к выходу D9, указав OCR1A = 4500 у Вас светодиод должен почти погаснут, а напряжение на выходе регулятора должно быть почти максимальным.
Аналогично есть OCR1A = 10, светодиод будет гореть ярко, а напряжение на выходе регулятора будет близко к нулю.

Можно не подключать светодиод, а сразу контролировать на напряжение на выходе регулятора меняя OCR1A по алгоритму который я описал.

OCR1A = 10; // напряжение на выходе регулятора близко к нулю
OCR1A = 1000; // напряжение на выходе регулятора станет больше.
OCR1A = 2000; // еще больше

На выходе регулятора обязательно должна быть нагрузка 470-1000 Ом 2 Вт

void setup(){
  // TIMER_1 D9 OUTPUT
  DDRB |= (1 << PB1)|(1<<PB5); // D9 output pwm | D13 led error  
   noInterrupts();
  TCCR1A = 0;TCCR1B = 0;
  TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);
  TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS10);
  TCKCSR = 1 << F2XEN | 1 << TC2XS1;
  ICR1 = 5000;
  OCR1A = 2500;
  interrupts();
  }

void loop(){ 
  delay(1000);
  }

32 (2023-11-04 18:25:50 отредактировано 44chsv)

Re: PWM 0-25V 3A

Добрый день. С Праздниками! Спасибо за ваши ответы.
Чтобы определиться с терминами, в электронике я не новичок, в отличии от программирования.
Скважность увеличивается значит увеличивается длительность импульса (верхняя часть импульса), светодиод светит ярче.
Контролирую сигнал осциллографом ( цифровой ZEEWEII-154Pro) на D9 (PB1) своей платы.
Плата такая:   http://forum.rcl-radio.ru/uploads/images/2023/11/7b672c07a02594a02d99d45c18ac2d67.jpg
Сейчас важно понять правильно работает контроллер или нет. Отличается от вашего или нет.
Прошил крайний скетч c несколькими значениями OCR1A :
ICR1 = 5000; OCR1A = 2500; F=12,8 КHz, период Т=78,1 us, T+=39,0 us; T-=39,0 us; Duty=50%.
ICR1 = 5000; OCR1A = 250;   F=12,8 КHz; период Т=78,1 us; T+=74,1 us; T-=4,00 us; Duty=94,8%
ICR1 = 5000; OCR1A = 4000; F=12,8 КHz; период Т=78,1 us; T+=15,6 us; T-=62,5 us; Duty=19,9%

ICR1 = 2000; OCR1A = 1000; F=32,0 КHz; период Т=31,2 us; T+=15,6 us; T-=15,6 us; Duty=49,9%

Какая частота у вас?
Условия при прошивке вроде у нас одинаковые.
У меня стоит Arduino IDE 2.2.1

33

Re: PWM 0-25V 3A

У меня IDE 1.8.15

Частоту померить не могу, проект готовился для сайта, он разобран.

Частота 12.5 кГц вполне для ШИМ нормально.

Сделайте несколько замеров при собранной схеме

void setup(){
  // TIMER_1 D9 OUTPUT
  DDRB |= (1 << PB1)|(1<<PB5); // D9 output pwm | D13 led error  
   noInterrupts();
  TCCR1A = 0;TCCR1B = 0;
  TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);
  TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS10);
  TCKCSR = 1 << F2XEN | 1 << TC2XS1;
  ICR1 = 5000;
  OCR1A = 2500;
  interrupts();
  }

void loop(){ 
  delay(1000);
  }

при значениях

OCR1A = 10; // напряжение на выходе регулятора близко к нулю
OCR1A = 1000; // напряжение на выходе регулятора станет больше.
OCR1A = 2000; // еще больше

Это должно сработать, по крайней мере если все получится мне будет понятно куда двигаться дальше.

Контроллеры одинаковые, просто у Вас урезанная версия.

34

Re: PWM 0-25V 3A

Замеры получились такие, при входное 20,00 В нагрузка лампа накаливания 13,5 В 0,16 А
ICR1=5000  OCR1A=1000 Duty=79,8 Uвых=1,75 В
ICR1=5000  OCR1A=2000 Duty=79,8 Uвых=5,41 В
ICR1=5000  OCR1A=3000 Duty=49,8 Uвых=7,23 В
ICR1=5000  OCR1A=4000 Duty=19,9 Uвых=8,06 В
ICR1=5000  OCR1A=4500 Duty=9,89 Uвых=8,29 В
ICR1=5000  OCR1A=4900 Duty=1,90 Uвых=8,56 В

В принципе силовая часть работает.
Иногда в работе МК происходят какие-то сбои, частота сбивается в низ, при этом загорается индикатор на D13 и
восстанавливается в прежнее положение. Эти сбои не регулярные.
Даже не знаю что думать об этом МК.
Возможно у вас больше опыта работы с ним.
Какое у вас сложилось впечатление?

35

Re: PWM 0-25V 3A

Напряжение низковатое. Даже сильно.

Я проводил замеры, при 25 В на выходе ток доходил до 4 А прежде чем сработает защита, а защита стоит на OCR1A = 4900

а тут при 4900 всего 8,56 В, должно быть минимум 19 В при входном 20 В. Ток нагрузки ведь маленький.

Что то не то с напряжением. Может входное напряжение просаживается?
Источник входного я использовал блок питания 30 В 5 А.

Что с кнопками? Удается ли установить значение напряжения на выходе?

Иногда в работе МК происходят какие-то сбои, частота сбивается в низ, при этом загорается индикатор на D13 и
восстанавливается в прежнее положение. Эти сбои не регулярные.

Срабатывает защита, значение OCR1A превышает 4900

36

Re: PWM 0-25V 3A

Вы используете КТ827 и КТ815?

37

Re: PWM 0-25V 3A

По схеме

http://forum.rcl-radio.ru/uploads/images/2023/11/f86fc0fb1c56f10642d1bfd89d870c45.png

на коллекторе КТ815 напряжение должно меняться от 0 до напряжения питания (-1 В) при подачи на базу напряжения от 0 до 5 В.

38

Re: PWM 0-25V 3A

напряжение на входе контролирую поднял до 24 В, оно стабильно не просаживается.
использую КТ827 и КТ815. Дроссель неизвестно какой, от БП  ПК.
Сейчас поставил в основном скетче OCR1A = 2000
ШИМ регулятор пытается выйти на режим, но циклически сбрасывается. циклы не равномерные.
на входе А0 напряжение прыгает до 1,44 В и иногда до 1,84 В при этом задерживается дольше. и опять сброс.
При этом на индикаторе 00 и с кнопками тоже что-то не правильно.
Реагируют на нажатие, но не с первого раза и не стабильно.

39

Re: PWM 0-25V 3A

Вот в этом скетче

void setup(){
  // TIMER_1 D9 OUTPUT
  DDRB |= (1 << PB1)|(1<<PB5); // D9 output pwm | D13 led error  
   noInterrupts();
  TCCR1A = 0;TCCR1B = 0;
  TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);
  TCCR1B |= (1 << WGM13) | (1 << WGM12) | (1 << CS10);
  TCKCSR = 1 << F2XEN | 1 << TC2XS1;
  ICR1 = 5000;
  OCR1A = 2500;
  interrupts();
  }

void loop(){ 
  delay(1000);
  }

при OCR1A = 4900 на выходе должно быть напряжение питания -1 В

То что кнопки не работают, это пауза в 3 секунды которая срабатывает при защите не дает Вам изменить значение

40 (2023-11-04 23:54:53 отредактировано 44chsv)

Re: PWM 0-25V 3A

нет, тот скетч что в шапке.

вот эта защита срабатывает постоянно, вспыхивает индикатор на Д13.
вообще отключить ёё на пробу.

41

Re: PWM 0-25V 3A

Пока лучше загрузить этот, проверить выходное напряжение при OCR1A = 4900, если напряжение будет маленькое, то силовая часть неисправна.

42

Re: PWM 0-25V 3A

я проверял
ICR1=5000  OCR1A=4900 Duty=1,90 Uвых=8,56 В

43

Re: PWM 0-25V 3A

Это очень мало, так не должно работать


Вот простой скетч, он меняет выход D9 на 0 и 5В с интервалом 1 секунда, загрузите его. На выходе регулятора напряжение должно меняться (на нагрузке от 400 до 1000 Ом или лампа) от 0 до напряжения питания.

Если это не так то точно силовая часть не исправна.

void setup(){
 pinMode(9,OUTPUT);
  }

void loop(){ 
  digitalWrite(9,HIGH);
  delay(1000);
  digitalWrite(9,LOW);
  delay(1000);
  }

44

Re: PWM 0-25V 3A

Мля.. Вот блин. Зрение подвело. Впаял между базой и коллектором 827 вместо 510 Ом на 51 кОм.
Найду, перепаяю отпишусь. Спасибо. Но вопросы наверно ещё будут. smile

45

Re: PWM 0-25V 3A

Ну, вот. Теперь похоже, силовая часть работает как положено.
Замеры получились такие, при входное 24,00 В нагрузке две лампы накаливания 13,5 В 0,16 А
ICR1=5000  OCR1A=1000  Uвых=16,6 В
ICR1=5000  OCR1A=2000  Uвых=20,5 В
ICR1=5000  OCR1A=2500  Uвых=21,2 В
ICR1=5000  OCR1A=4900  Uвых=22,2 В
ICR1=5000  OCR1A=500    Uвых=11,0 В
ICR1=5000  OCR1A=400    Uвых=8,9 В
ICR1=5000  OCR1A=300    Uвых=6,5 В
ICR1=5000  OCR1A=200    Uвых=3,8 В

Ещё заменил КТ815 на КТ972Б короткие импульсы стали заметно лучше.

Однако полный скетч по прежнему пока не работает как надо.
Будем искать дальше...

46

Re: PWM 0-25V 3A

В основном скетче замените

u = float(EEPROM.read(0))/10.0;

на

u = 10.0;

Это для проверки EEPROM

47

Re: PWM 0-25V 3A

Добрый день.
Прошил скетч с изменением, заменил на u = 10.0;
После включения на индикаторе пусто.
кнопки не трогаю, примерно через минуту появляется число 100 (вероятно 10.0 у моего индикатора нет точек в низу)
на кнопки не реагирует ни как.
на выходе Д9 высокий уровень с очень короткими иголками вниз.

По поводу EEPROM у меня были сомнения, не знаю как его проверить.
может есть скетч для проверки EEPROM? кое что пробовал, но у меня не получилось скомпилировать.

48 (2023-11-05 17:13:18 отредактировано 44chsv)

Re: PWM 0-25V 3A

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

https://github.com/dbuezas/lgt8fx/blob/ … t/test.ino

хотел ещё спросить, что делает библиотека EEPROM.h в вашем коде?

49

Re: PWM 0-25V 3A

Удалите код защиты
if(reg>4900 && out==1){reg=0;OCR1A=0;PORTB|=(1<<PB5);out=0;w=1;delay(3000);}

хотел ещё спросить, что делает библиотека EEPROM.h в вашем коде?

при включении устанавливает ранее установленное значение напряжения.

50

Re: PWM 0-25V 3A

На гуглил это тест для проверки EEPROM.

https://mralb.ru/sections/programming/a … ue81237754

Моя плата тест проходит. 1020 ячеек.