Диммер IGBT или попытка сделать Регулятор мощности
Почему, стабилизация по питанию ШИМ, R3, R5 - распространенное решение для этой микросхемы. Тем более с таким количеством выходов их застабилизировать проблематично.
- Реклама
- Сообщения: 303
- Зарегистрирован: Ср май 03, 2017 03:22:26
Так как сегодня не успел дорисовать всю схему целиком(очень мало свободного времени) пока допиливаю прошивку и вытравил плату.
Завтра продолжу.
Насчет ОС предполагаю сопротивлением R3 выставить нужное мне напряжение т.к ток потребление по 15V очень малый 1-2ма. а по 5вольтам это 7мая вторичная обмотка пусть будет завышена по напряжению а роль стабилизации отвел для L7805.
Завтра продолжу.
Насчет ОС предполагаю сопротивлением R3 выставить нужное мне напряжение т.к ток потребление по 15V очень малый 1-2ма. а по 5вольтам это 7мая вторичная обмотка пусть будет завышена по напряжению а роль стабилизации отвел для L7805.
andrei23061996@gmail.com
.................................................................................................................
.................................................................................................................
- Сообщения: 303
- Зарегистрирован: Ср май 03, 2017 03:22:26
Прошивка дописана)
Реализовано:
-Сохранение данных в ЕПРОМ
-Плавный пуск.
А вот и схемки.


Добавлено after 5 minutes 23 seconds:
Уважаемые модераторы форма, если есть возможность скопировать данный пост в первый, был бы благодарен вам.
Реализовано:
-Сохранение данных в ЕПРОМ
-Плавный пуск.
Спойлер
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
//-------------------------------------------///init_pwm///-----------------------------------------------------------------//
void init_pwm()
{
TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (1<<WGM01) | (1<<WGM00);
TCCR0B=(0<<WGM02) | (0<<CS02) | (1<<CS01) | (0<<CS00);
OCR0A=0x00;
OCR0B=0x00;
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (1<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);
OCR1AL=0x00;
OCR1BL=0x00;
TCCR2A=(1<<COM2A1) | (0<<COM2A0) | (1<<COM2B1) | (0<<COM2B0) | (1<<WGM21) | (1<<WGM20);
TCCR2B=(0<<WGM22) | (0<<CS22) | (1<<CS21) | (0<<CS20);
OCR2A=0x00;
OCR2B=0x00;
}
//--------------------------------------------------------------------------------------------------------------------------//
void init_int0()
{
//настраиваем на срабатывание INT0 по переднему фронту
EICRA |= (1<<ISC01)|(0<<ISC00);
//разрешаем внешнее прерывание INT0
EIMSK |= (1<<INT0);
}
//--------------------------------------------------------------------------------------------------------------------------//
void init_io()
{
DDRB=(0<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(0<<PB5)|(0<<PB6)|(0<<PB7);
PORTB=0x00;
DDRC=(1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6);
PORTC=0x00;
DDRD=(1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7);
PORTD=0x00;
}
//--------------------------------------------------------------------------------------------------------------------------//
//настройка параметров работы функций
#define BTN_LOCK_TIME 30 /*время обработки дребезга в милисекундах (10-100)*/
#define BTN_LONG_TIME 1000 /*время фиксации длинного нажатия в милисекундах (1000 - 2500)*/
//настройки портов
/*порт чтения кнопок*/
#define BTN_PORT PORTB
#define BTN_DDR DDRB
#define BTN_PIN PINB
/*пины чтения кнопок*/
#define BTN_LINE_UP (1<<7)
#define BTN_LINE_DN (1<<6)
#define BTN_LINE_POWER (1<<5)
#define BTN_LINE_SW (1<<0)
//глобальные переменные
volatile uint8_t BtnFlags; //байт флагов нажатия кнопки
#define BTN_SHRT_UP (1<<0) /*бит короткого нажатия кнопки up*/
#define BTN_SHRT_DN (1<<1) /*бит короткого нажатия кнопки dn*/
#define BTN_SHRT_POWER (1<<2) /*бит короткого нажатия кнопки POWER */
#define BTN_SHRT_SW (1<<3) /*бит короткого нажатия кнопки SW*/
#define BTN_LONG_UP (1<<4) /*бит длинного нажатия кнопки up*/
#define BTN_LONG_DN (1<<5) /*бит длинного нажатия кнопки dn*/
#define BTN_LONG_SW (1<<6) /*бит короткого нажатия кнопки SW*/
//-------------------------------------------------------------------------------------------------------------------
//Функция настройки библиотеки работы с кнопками
void BtnInit (void)
{
BTN_DDR &= ~(BTN_LINE_UP| BTN_LINE_DN| BTN_LINE_POWER|BTN_LINE_SW);//на ввод
BTN_PORT |= (BTN_LINE_UP| BTN_LINE_DN| BTN_LINE_POWER|BTN_LINE_SW);//подтяжка вкл
}
//--------------------------------------------------------------------------------------------------------------------
//Функция чтения данных о нажатии кнопок
char BtnGet (void)
{
cli();
char temp = BtnFlags;
BtnFlags = 0;
sei();
return temp;
}
//-----------------------------------------------------------------------------------------------------------------------
//ФУНКЦИЯ ОБРАБОТКИ НАЖАТИЙ КЛАВИШ (вызывать в прерывании с частотой 100 Гц)
//короткое нажатие устанавливает бит BTN_SHRT_X глобальной переменной BtnFlags
//длинное нажатие устанавливает бит BTN_LONG_X глобальной переменной BtnFlags
void BtnExe (void)
{
static unsigned char BtnLockBit; //защелка (защита от дребезга)
static unsigned char BtnLockCoun; //счетчик защелки (защита от дребезга)
static unsigned char BtnLongCoun; //счетчик длинного нажатия
static unsigned char BtnLastState; //последнее состояние кнопок перед отпусканием
char mask = 0;
if (! (BTN_PIN & BTN_LINE_UP)) mask = BTN_SHRT_UP;
if (! (BTN_PIN & BTN_LINE_DN)) mask = BTN_SHRT_DN;
if (! (BTN_PIN & BTN_LINE_POWER)) mask = BTN_SHRT_POWER;
if (! (BTN_PIN & BTN_LINE_SW)) mask = BTN_SHRT_SW;
if (mask){ //опрос состояния кнопки
if (BtnLockCoun < (BTN_LOCK_TIME/10)){ //клавиша нажата
BtnLockCoun++;
return; //защелка еще не дощитала - возврат
}
BtnLastState = mask;
BtnLockBit =1; //нажатие зафиксировано
if (BtnLongCoun >= (BTN_LONG_TIME/10))
return; //возврат, т.к. счетчик длинн нажат досчитал до максимума еще раньше
if (++BtnLongCoun >= (BTN_LONG_TIME/10))
BtnFlags |= (BtnLastState<<4); //счетчик досчитал до максимума - устанавливаем биты длинного нажатия
}
else{ //клавиша отжата
if (BtnLockCoun){
BtnLockCoun --;
return; //защелка еще не обнулилась - возврат
}
if (! BtnLockBit) //СТАТИЧЕСКИЙ ВОЗВРАТ
return;
BtnLockBit =0; //отжатие зафиксировано
if (BtnLongCoun < (BTN_LONG_TIME/10))
BtnFlags |= BtnLastState; //установка бита короткого нажатия
BtnLongCoun = 0; //сброс счетчика длительности нажатия
}
}
//------------------------------------------------------****7SEG****----------------------------------------------------------
#define SEGA 6
#define SEGB 5
#define SEGC 1
#define SEGD 2
#define SEGE 3
#define SEGF 4
#define SEGG 0
#define ANOD1 4
#define ANOD2 7
#define ANOD3 4
//-------------------------------------------------------------------------------------------------------------------------
void segchar (unsigned char seg)
{
switch (seg)
{
case 0:
PORTC=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(0<<SEGD)|(0<<SEGE)|(0<<SEGF)|(1<<SEGG);break;
case 1:
PORTC=(1<<SEGA)|(0<<SEGB)|(0<<SEGC)|(1<<SEGD)|(1<<SEGE)|(1<<SEGF)|(1<<SEGG);break;
case 2:
PORTC=(0<<SEGA)|(0<<SEGB)|(1<<SEGC)|(0<<SEGD)|(0<<SEGE)|(1<<SEGF)|(0<<SEGG);break;
case 3:
PORTC=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(0<<SEGD)|(1<<SEGE)|(1<<SEGF)|(0<<SEGG);break;
case 4:
PORTC=(1<<SEGA)|(0<<SEGB)|(0<<SEGC)|(1<<SEGD)|(1<<SEGE)|(0<<SEGF)|(0<<SEGG);break;
case 5:
PORTC=(0<<SEGA)|(1<<SEGB)|(0<<SEGC)|(0<<SEGD)|(1<<SEGE)|(0<<SEGF)|(0<<SEGG);break;
case 6:
PORTC=(0<<SEGA)|(1<<SEGB)|(0<<SEGC)|(0<<SEGD)|(0<<SEGE)|(0<<SEGF)|(0<<SEGG);break;
case 7:
PORTC=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(1<<SEGD)|(1<<SEGE)|(1<<SEGF)|(1<<SEGG);break;
case 8:
PORTC=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(0<<SEGD)|(0<<SEGE)|(0<<SEGF)|(0<<SEGG);break;
case 9:
PORTC=(0<<SEGA)|(0<<SEGB)|(0<<SEGC)|(0<<SEGD)|(1<<SEGE)|(0<<SEGF)|(0<<SEGG);break;
case 99: //OFF Все сегменты
PORTC=(1<<SEGA)|(1<<SEGB)|(1<<SEGC)|(1<<SEGD)|(1<<SEGE)|(1<<SEGF)|(1<<SEGG);break;
}
}
#define CONFIG_AMOUNT 6
typedef struct
{
char FlagPower;
char ValuePWM;
}ConfigurationLamp;
EEMEM ConfigurationLamp E_ConfigLamp[CONFIG_AMOUNT];
ConfigurationLamp ConfigLamp[CONFIG_AMOUNT];
//-----------------------------------------------------------------------------------------------------
void LoadingEEPROM()
{
eeprom_read_block((void*)ConfigLamp, (void*)E_ConfigLamp, sizeof(ConfigLamp));
}
void SaveEEPROM()
{
eeprom_update_block((void*)ConfigLamp, (void*)E_ConfigLamp, sizeof(ConfigLamp));
}
//Функция записи значения PWM
void WriteValue(unsigned char Zona,unsigned char ValuePWM)
{
switch (Zona)
{
case 0:OCR0A=ValuePWM*2.56;break;
case 1:OCR0B=ValuePWM*2.56;break;
case 2:OCR1AL=ValuePWM*2.56;break;
case 3:OCR1BL=ValuePWM*2.56;break;
case 4:OCR2A=ValuePWM*2.56;break;
case 5:OCR2B=ValuePWM*2.56;break;
}
}
//Функция считывания значения PWM
char ReadValue(unsigned char Zona)
{
static unsigned char ValuePWM=0;
switch (Zona)
{
case 0:ValuePWM=OCR0A;break;
case 1:ValuePWM=OCR0B;break;
case 2:ValuePWM=OCR1AL;break;
case 3:ValuePWM=OCR1BL;break;
case 4:ValuePWM=OCR2A;break;
case 5:ValuePWM=OCR2B;break;
}
return(ValuePWM/2.56);
}
//Функция вывода значений на 7SEG индикатор.
unsigned char ZoneNumber=0;
unsigned char count = 0;
void WriteSeg(unsigned char NumberZon,unsigned char ValuePWM)
{
unsigned char data1=ValuePWM%10;
unsigned char data2=ValuePWM/10;
PORTB |=(1<<ANOD1);
PORTD |=(1<<ANOD2);
PORTD |=(1<<ANOD3);
segchar(99);
if(ConfigLamp[NumberZon].FlagPower==1)
{
count++;
if (count==1){
PORTB &= ~(1<<ANOD1);
segchar(data1);
PORTD |=(1<<ANOD2);
PORTD |=(1<<ANOD3);
}
if (count==2){
PORTD &= ~(1<<ANOD2);
segchar(data2);
PORTB |=(1<<ANOD1);
PORTD |=(1<<ANOD3);
}
if (count==3){
PORTD &= ~(1<<ANOD3);
segchar(NumberZon+1);
PORTB |=(1<<ANOD1);
PORTD|=(1<<ANOD2);
}
if (count==3){count=0;}
}
}
/*****************************************Обновление Значений PWM********************************************************/
float TempValuePWM=0;
void UpdateValue()
{
for (unsigned char ZonaCount = 0; ZonaCount < CONFIG_AMOUNT; ZonaCount++)
{
TempValuePWM=ReadValue(ZonaCount);
if (ConfigLamp[ZonaCount].FlagPower==1)
{
if (TempValuePWM==0)
{
//Плавный Запуск
TempValuePWM=1;
while(TempValuePWM<ConfigLamp[ZonaCount].ValuePWM)
{
TempValuePWM=TempValuePWM+TempValuePWM/40;
WriteValue(ZonaCount,TempValuePWM);
WriteSeg(ZonaCount,TempValuePWM);
_delay_ms(13);
}
}
WriteValue(ZonaCount,ConfigLamp[ZonaCount].ValuePWM);
}
else
{
WriteValue(ZonaCount,0);
}
}
}
char Stop=1;
ISR(INT0_vect)
{
WriteSeg(ZoneNumber,ConfigLamp[ZoneNumber].ValuePWM);
UpdateValue();
BtnExe();
}
void BtnUpdate(void)
{
char BtnMask = BtnGet ();
if (BtnMask == BTN_SHRT_POWER)
{
ConfigLamp[ZoneNumber].FlagPower++;
if (ConfigLamp[ZoneNumber].FlagPower>1)
{
ConfigLamp[ZoneNumber].FlagPower=0;
}
SaveEEPROM();
}
if ((BtnMask == BTN_SHRT_SW))
{
ZoneNumber++;
if (ZoneNumber==6)
{
ZoneNumber=0;
}
}
//одиночное нажатие +
if ((BtnMask == BTN_SHRT_UP)& (ConfigLamp[ZoneNumber].ValuePWM < 99)&(ConfigLamp[ZoneNumber].FlagPower==1))
{
ConfigLamp[ZoneNumber].ValuePWM++;
SaveEEPROM();
}
//одиночное нажатие -
if ((BtnMask == BTN_SHRT_DN)& (ConfigLamp[ZoneNumber].ValuePWM > 0)&(ConfigLamp[ZoneNumber].FlagPower==1))
{
ConfigLamp[ZoneNumber].ValuePWM--;
SaveEEPROM();
}
//Удержание +
if ((BtnMask == BTN_LONG_UP) & (ConfigLamp[ZoneNumber].ValuePWM < 99)&(ConfigLamp[ZoneNumber].FlagPower==1))
{
while ((!(PINB&0b10000000))& (ConfigLamp[ZoneNumber].ValuePWM < 99))
{
ConfigLamp[ZoneNumber].ValuePWM++;
_delay_ms(50);
}
SaveEEPROM();
}
//Удержание -
if ((BtnMask == BTN_LONG_DN) & (ConfigLamp[ZoneNumber].ValuePWM > 0)&(ConfigLamp[ZoneNumber].FlagPower==1))
{
while ((!(PINB&0b01000000))& (ConfigLamp[ZoneNumber].ValuePWM > 0))
{
ConfigLamp[ZoneNumber].ValuePWM--;
_delay_ms(50);
}
SaveEEPROM();
}
}
int main(void)
{
cli();
LoadingEEPROM();
init_io();
BtnInit();
init_int0();
init_pwm();
sei();
while(1)
{
BtnUpdate();
}
return 0;
}

Добавлено after 5 minutes 23 seconds:
Уважаемые модераторы форма, если есть возможность скопировать данный пост в первый, был бы благодарен вам.
Последний раз редактировалось 7seg Пн окт 23, 2017 10:40:19, всего редактировалось 1 раз.
andrei23061996@gmail.com
.................................................................................................................
.................................................................................................................
МОИ ПОЗДРАВЛЕНИЯ похоже всеже довели проект ДО УМА имено КАК ХОТЕЛИ и не долго мало кто может этим похвастатся
обычно хотят одно, а получается ..."НУ КАК ВСЕГДА"
обычно хотят одно, а получается ..."НУ КАК ВСЕГДА"
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
- Сообщения: 303
- Зарегистрирован: Ср май 03, 2017 03:22:26
) сейчас полным ходом идет макетирование ) и борьба с ИИП . вроде и работает но стабилитрон не очень хорошо себя ведет.
andrei23061996@gmail.com
.................................................................................................................
.................................................................................................................
- Реклама
- Сообщения: 303
- Зарегистрирован: Ср май 03, 2017 03:22:26
В схему пришлось внести изменения)
По питанию драйверов были поставлены 7815. Также был исключен детектор нуля , в место него внешний тактовый генератор на 150Hz.
Добавлено after 3 minutes 30 seconds:
Испытания с нагрузкой 21КВт еще не проводились , пока нет подходящей сети под рукой (
По питанию драйверов были поставлены 7815. Также был исключен детектор нуля , в место него внешний тактовый генератор на 150Hz.
Добавлено after 3 minutes 30 seconds:
Испытания с нагрузкой 21КВт еще не проводились , пока нет подходящей сети под рукой (
andrei23061996@gmail.com
.................................................................................................................
.................................................................................................................
- Сообщения: 303
- Зарегистрирован: Ср май 03, 2017 03:22:26
Провел первые испытания с мощной нагрузкой.
Схема включения:
И заметил странную вещь греются кондеры С9,C10,С11(они стоят по питанию). они на 630V.Может быть подскажет кто почему ?
Схема включения:
Схема включения:
И заметил странную вещь греются кондеры С9,C10,С11(они стоят по питанию). они на 630V.Может быть подскажет кто почему ?
Схема включения:
Спойлер

andrei23061996@gmail.com
.................................................................................................................
.................................................................................................................
Так а что ты хотел? Через них протекает практически весь ток нагрузки. Для такого тока нужно с десяток конденсаторов в параллель ставить.
Тем кого не устаревает наличия ошибок в моем тексте, оставляю права не пользоваться моими советами или просто не читать мои сообщения.
- Сообщения: 303
- Зарегистрирован: Ср май 03, 2017 03:22:26
а как узнать(рассчитать) какой макс ток может пропустить через себя кондер, просто раньше не было даже причин этим интересоваться.
andrei23061996@gmail.com
.................................................................................................................
.................................................................................................................
вабщето там должны стоять кондеры спецовые расчитаные на реактиф постояно...( бумага в масле) пленка не рулит-выгорает быстро
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
- Сообщения: 303
- Зарегистрирован: Ср май 03, 2017 03:22:26
Первые запуски делал без этих кондеров, кондеры решил поставить для подавления помех.
А если совсем без кондеров при нагрузки 6-7.2кВт чем данное решения может осложнить жизнь (кроме грязной сети)
А если совсем без кондеров при нагрузки 6-7.2кВт чем данное решения может осложнить жизнь (кроме грязной сети)
andrei23061996@gmail.com
.................................................................................................................
.................................................................................................................
Из за индуктивности подводящих проводов на транзисторах могут быть выбросы превышающие максимально допустимую величину. Это надо смотреть осциллографом.
Тем кого не устаревает наличия ошибок в моем тексте, оставляю права не пользоваться моими советами или просто не читать мои сообщения.
- Сообщения: 303
- Зарегистрирован: Ср май 03, 2017 03:22:26
Пока оставлю этот проект до внедрения в прошивку модбаза.
Транзисторы слава богу от перенапруги не пробивает))
Добавлено after 1 hour 23 minutes 14 seconds:
добавлю еще при мощности 22кВт (12 транзисторов) водяное охлаждение радиатора обязательно.
Добавлено after 4 minutes 17 seconds:
В сумме получается что помех на соседню фазу 0, а в сети(по фазе) не так много как при использовании симисторов.
Мб кто подскажет какие транзисторы лучше использовать нагрузка на канал 3.6кВт 220В ,Чтоб поменьше грелись.
Частота ШИМ 4kHz хочу поднять до 20( что бы не было слышно свиста).
Транзисторы слава богу от перенапруги не пробивает))
Добавлено after 1 hour 23 minutes 14 seconds:
добавлю еще при мощности 22кВт (12 транзисторов) водяное охлаждение радиатора обязательно.
Добавлено after 4 minutes 17 seconds:
В сумме получается что помех на соседню фазу 0, а в сети(по фазе) не так много как при использовании симисторов.
Мб кто подскажет какие транзисторы лучше использовать нагрузка на канал 3.6кВт 220В ,Чтоб поменьше грелись.
Частота ШИМ 4kHz хочу поднять до 20( что бы не было слышно свиста).
andrei23061996@gmail.com
.................................................................................................................
.................................................................................................................
Что бы меньше грелись надо использовать симисторы, я об этом говорил в начале темы. Помех от них не может быть больше, они открываются с частотой 100Гц. А ваши транзисторы открываются 4000 раз в секунду и столько же раз закрываются. Значит излучают пачки помех 8000 раз в секунду, они просто менее заметны так как сливаются в общий фон.
Тем кого не устаревает наличия ошибок в моем тексте, оставляю права не пользоваться моими советами или просто не читать мои сообщения.
- Сообщения: 303
- Зарегистрирован: Ср май 03, 2017 03:22:26
У симисторов есть проблема они ограничиваются 40А (BTA41-800).
andrei23061996@gmail.com
.................................................................................................................
.................................................................................................................
http://asenergi.com/catalog/tiristory-silovye/t151.html
http://asenergi.com/catalog/tiristory-s ... 1-200.html
Который может выдержать ударный ток в 2 000 Ампер.
Есть и мощнее.
Тем кого не устаревает наличия ошибок в моем тексте, оставляю права не пользоваться моими советами или просто не читать мои сообщения.


