1

Тема: PWM 0-25V 3A

Основная статья - http://rcl-radio.ru/?p=131081

// 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(){ 
  if(((PIND >> PD3) & 1) == 0){u+=0.1;if(u>25){u=25;}w=1;w1=1;times=millis();delay(100);}
  if(((PIND >> PD4) & 1) == 0){u-=0.1;if(u<0){u=0;}w=1;w1=1;times=millis();delay(100);}
  if(((PIND >> PD5) & 1) == 0 && out==0){out=1;w=1;delay(300);}
  if(((PIND >> PD5) & 1) == 0 && out==1){out=0;w=1;delay(300);}
  
  while((ADCSRA & (1 << ADIF)) == 0);
   int u_data = (ADCL|ADCH << 8);
   u_iz = float(u_data)/1000.0*KALL_U;
  if(u_iz-u>5){reg-=100;}
  if(u-u_iz>1){reg+=10;} 
  if(u_iz-u>1){reg-=10;}
  if(u_iz<u){reg++;}
  if(u_iz>u){reg--;}
  if(reg<0){reg=0;}if(reg>4900 && out==1){reg=0;OCR1A=0;PORTB|=(1<<PB5);out=0;w=1;delay(3000);}
  PORTB&=~(1<<PB5);
  if(out==0){reg=0;} OCR1A = reg;
  if(w==1){w=0;tm_print(u*10,1,5);}
  if(millis()-times>5000 && w1==1){EEPROM.update(0,u*10);w1=0;}
  }

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: if(out==1){data = 12;}else{data=10;};break;
        case 1: if(u<10){data=10;}else{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);}  

2 (2023-11-01 09:51:21 отредактировано sanj76a)

Re: PWM 0-25V 3A

Доброе утро.
Вы писали:

      При при подачи питания на ШИМ регулятор, модуль реле подаст напряжение питания только после активации PWM
    выхода (D9), ...

Возможно на схеме ошибка. Как такое возможно, ведь питание на LGT подается после контактов модуля реле.
Нужно LGT запитать до контактов реле,с конденсатора 2200м?

3

Re: PWM 0-25V 3A

Возможно на схеме ошибка. Как такое возможно, ведь питание на LGT подается после контактов модуля реле.

Вы правы, буду править схему.

4

Re: PWM 0-25V 3A

Здравствуйте.
Собрал этот проект. Есть вопросы. Автор оказывает поддержку?

5

Re: PWM 0-25V 3A

Автор оказывает поддержку?

Да

6 (2023-11-03 18:43:18 отредактировано 44chsv)

Re: PWM 0-25V 3A

Спасибо.
Собрал по схеме из статьи, только резистор на входе 7812 уменьшил на порядок (до 27 Ом).
Применил китайскую плату вариант мини (без юсб моста).
Индикатор TM1637 вариант для часов (разделительными точками). Ну и остальное прочее на макетной плате.
Проект заинтересовал применением контроллера LGT8F328P как замена ATMega328. Хотелось попробовать этот контроллер. Установил LGT8FX для Arduino IDE от автора dbuezas. Ваш скетч компилируется и прошивается без проблем.
Сначала пробовал без силовой части, подав на вход А0 с делителя +12 В. Хотел посмотреть осциллографом сигнал ШИМ.
В исходном состоянии на выходе D9 высокий уровень с очень короткими импульсами. примерно 2-3 Гц.
При нажатии на кнопки управления на индикаторе загорается U. При удерживании UP прибавляется счёт и сбрасывается.
При этом на какое-то время появлялись импульсы ШИМ вроде около 61 кГц. Но добиться устойчивых импульсов с регулировкой длительности не удалось. Позже собрал схему полностью с силовой частью. Подавал +20 В включается реле
напряжение +12 В есть на вход Vin. Внутренний стабилизатор +5 В есть идёт на плату реле. На индикаторе 00, при нажатии ON/OFF не с первого нажатия появляется U и через несколько секунд гаснет. При нажатии UP прибавляется счёт, но сбрасывается. На выходе D9 периодически появляются импульсы и соответственно на базе КТ827 тоже есть. На эмиттере 827 появляется постоянное напряжение. При этом на индикаторе всегда 00. И ещё индикатор КЗ в моей плате стоит светодиод на выводе D13. На этом выводе периодически примерно 2 Гц идут пачки из трёх импульсов.
Вопрос к вам, как мне проверить и настроить это  устройство? Возможно закралась ошибка в скетче. Возможно контроллер не правильно работает (не нём нет маркировки). Возможно я допустил где-то ошибку. Поделитесь своим опытом. Буду рад вашему комментарию.

P.S. импульсы на выходе появились после того как в скетче в строке 29 OCR1A =0; поставил 127 при 0 нет вообще.

7

Re: PWM 0-25V 3A

Пока уберите реле, подайте питание напрямую.
На коллекторе КТ815 должен быть ШИМ амплитудой с напряжение питания.
Кнопки без резисторов, замыкание на землю.

8

Re: PWM 0-25V 3A

реле включается один раз при включении и больше не отключается. но сейчас подам прямую на коллектор 827.

9

Re: PWM 0-25V 3A

на коллекторе 815 короткие положительные импульсы с частотой около 1 герц. индикатор КЗ вспыхивает 2-3 герц.

10

Re: PWM 0-25V 3A

Срабатывает защита, уровень ШИМа выходит за пределы. Это может быть при отсутствии питания на КТ827, КЗ выхода, нет сигнала от делителя напряжения на А0.

11

Re: PWM 0-25V 3A

кз вспыхивает, но фактически шим нет. на входе А0 появляются всплески менее 100 мВ. такое ощущение что контроллер не выдаёт шим сигнал изначально.

12

Re: PWM 0-25V 3A

При включении контроллер берет из памяти ранее установленное значение, если у Вас 0 В на индикаторе, на выходе должно быть 0 В.
Если Вы установите 5 В, шим начнет прибавлять мощность до уровня пока на выходе не установится 5 В, обратная связь это сигнал с делителя напряжения поданный на А0.

Отключите D9 от базы КТ815
Если на базу КТ815 через резистор 1 кОм подать 0 В на эмиттере КТ827 должно появиться напряжение питания, если подать +5 В то на эмиттере КТ827 будет 0 В.
Если все так то силовая часть исправна.

13 (2023-11-03 19:44:54 отредактировано 44chsv)

Re: PWM 0-25V 3A

силовую проверил так. вынул плату с контроллером из макетной платы. На базу 815 подавал либо ноль либо плюс 5 вольт. Соответственно на эмиттере 827 либо макс либо ноль. силовой ключ работает нормально.

А вот прошитая голая плата не подключенная ни куда, моргает индикатором на ножке D13.

14

Re: PWM 0-25V 3A

Инверсия есть? Если подать 0 на выходе будет макс?

15

Re: PWM 0-25V 3A

А вот прошитая голая плата не подключенная ни куда, моргает индикатором на ножке D13.

Так и должно быть

16

Re: PWM 0-25V 3A

понятно. а может в скетче изменить выход на D10?

17

Re: PWM 0-25V 3A

Тест ШИМ

На выходе D9 меандр

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(){ 

  }

18

Re: PWM 0-25V 3A

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

19

Re: PWM 0-25V 3A

прошил. да есть чёткий меандр 12,8 кГц.

20

Re: PWM 0-25V 3A

Это мало, частота должна быть намного выше. У Вас верные настройки платы. контроллер должен работать на тактовой в 32 МГц

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

21

Re: PWM 0-25V 3A

https://raw.githubusercontent.com/dbuez … index.json
так подключил плату. может другую ссылку надо?
в настройках стоит internal 32 Mhz

22

Re: PWM 0-25V 3A

Тест аналогово входа, опорное 4,096, подайте 3,3 В с платы
Откройте монитор порта
Вход 12 бит, максимальное значение при 4,096 В 4095, при 3,3 будет примерно 3300

void setup(){
  Serial.begin(9600);
  ADMUX = 0b000;
  ADCSRD |= 1 << REFS2;
  ADCSRA |= 1 << ADEN | 1 << ADSC | 1 << ADATE | 0b111;
  delay(300);
  }

void loop(){  
  while((ADCSRA & (1 << ADIF)) == 0);
   int u_data = (ADCL|ADCH << 8);
   delay(1000);
   Serial.println(u_data);
  }

23

Re: PWM 0-25V 3A

прошил. да есть чёткий меандр 12,8 кГц.

Частота низкая, ШИМ будет работать на такой частоте. Возможно есть разница в контроллерах

24

Re: PWM 0-25V 3A

У меня

https://raw.githubusercontent.com/dbuez … index.json

Это та же ссылка

25

Re: PWM 0-25V 3A

спасибо. попробую Тест аналогово входа.
у меня так http://forum.rcl-radio.ru/uploads/images/2023/11/4ce763cccaa9bbf24b823a4aa2ac05c0.png