Источники питания и свет Актуальные вопросы и ответы по источникам питания, световому оборудованию. |
22.12.2012, 23:37
|
|
Почётный гражданин KAZUS.RU
Регистрация: 12.12.2007
Сообщений: 1,654
Сказал спасибо: 170
Сказали Спасибо 291 раз(а) в 215 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
Сообщение от anatol378
|
Зажмем себе яйца тисками и пищим что больно.
1. шкафы питания предназначены .....Остальное самопал.
2. требования к питанию 24В +-10% норма (отсюда 26,4).
3. по норме установите нормальный выпрямитель.
4. если начальство жадное и нагибает установите выпрямитель аналогичный установленному на малую мощность параллельно основному. 6 дополнительных маломощных тиристоров + фильтр+ схема управления и - головная боль.
|
но схема управления нехилая получится, наверное- все же полностью управляемый трехфазный мост и обратная связь. Да еще, как понял , АЦП имеется
|
|
|
|
22.12.2012, 23:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 04.12.2009
Сообщений: 5,455
Сказал спасибо: 73
Сказали Спасибо 2,510 раз(а) в 1,414 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
Сообщение от Impartial
|
Схема выпрямителя шестифазная
|
Где вы увидели шесть фаз?
О каком ПИДе здесь речь? При отключении нагрузки имеется энергия, которой один путь - в нагрузку. Элементарный энергетический расчёт показывает, что в дросселе накапливается 2 Дж, при 100 А и при условии, что индуктивность дросселя 400 мкГ и не снижается при таком токе. Этих 2 Дж достаточно, чтобы зарядить 20000 мкФ до 200 В. Если "набрасыванием" кучи электролитов удалось снизить импульс до 30 В, значит, либо куча велика, либо у дросселя при 100 А уже далеко не 400 мкГ.
Отсюда и следует плясать, а не отвлекаться на всякие ПИДы. Мне лень считать, какой длительности получится импульс, но зная ёмкость "кучи" и индуктивность дросселя, нетрудно и прикинуть и посмотреть, близко ли к расчётной получилось. Чтобы получить выброс не более 2 В, требуется ёмкость в 1 Ф. Т.е. 100 шт. по 10000 мкФ или 10 шт. по 100000 мкФ. Хороша кучка.
|
|
|
|
23.12.2012, 07:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.08.2010
Сообщений: 1,982
Сказал спасибо: 67
Сказали Спасибо 1,680 раз(а) в 554 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
Сообщение от Scadauser
|
Элементарный энергетический расчёт показывает, что в дросселе накапливается 2 Дж, при 100 А и при условии, что индуктивность дросселя 400 мкГ и не снижается при таком токе.
|
все верно.
Сообщение от Scadauser
|
Этих 2 Дж достаточно, чтобы зарядить 20000 мкФ до 200 В.
|
а вот тут имеется ошибка. забыли извлечь корень из 200 ...
итого получается всего 14 Вольт, и то, если емкость полностью разряжена.
у заряженной емкости будет уже гораздо меньше прибавка напряжения.
|
|
|
|
23.12.2012, 11:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 04.12.2009
Сообщений: 5,455
Сказал спасибо: 73
Сказали Спасибо 2,510 раз(а) в 1,414 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
Сообщение от Starichok51
|
забыли извлечь корень из 200
|
Точно. Ну, время позднее...
Сообщение от Starichok51
|
у заряженной емкости будет уже гораздо меньше прибавка напряжения
|
Утро вечера мудренее.
Если конденсатор был, допустим, заряжен до 20 В, то энергия в нём 20000мкф*20В*20В/2= 4 Дж. Из индуктивности добавится 2 Дж. Ведь больше им деваться некуда - нагрузка отключена? Итого 6 Дж. Тогда U=sqr (2*6Дж/20000мкФ)=17В...
Последний раз редактировалось Scadauser; 23.12.2012 в 11:08.
|
|
|
|
24.12.2012, 11:48
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
Сообщение от Scadauser
|
Утро вечера мудренее.
Если конденсатор был, допустим, заряжен до 20 В, то энергия в нём 20000мкф*20В*20В/2= 4 Дж. Из индуктивности добавится 2 Дж. Ведь больше им деваться некуда - нагрузка отключена? Итого 6 Дж. Тогда U=sqr (2*6Дж/20000мкФ)=17В...
|
Ну Вы насчитали.
Джоулями измеряется, в данном случае, энергия запасенная в индуктивности.
А это всего (1дж=1вт*сек) 2вт*сек.
Эта энергия переходит в конденсатор и провода за время меньшее 20мс увеличивая напряжение. (Видно из осцилограммы.) Это время определяется комплексным сопротивлением цепи заряда.
Если учесть, что остается нагрузка с током около 20 ампер и мощностью более 400 ватт, то длительность этого всплеска не должна превышать 10 мс.
Откуда берется переходной процесс длительностью более секунды?
|
|
|
|
24.12.2012, 12:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 03.08.2010
Сообщений: 1,982
Сказал спасибо: 67
Сказали Спасибо 1,680 раз(а) в 554 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
Сообщение от Scadauser
|
Тогда U=sqr (2*6Дж/20000мкФ)=17В...
|
не пошло утро на пользу...
корень из 600 равен 24,5, а не 17.
|
|
|
|
24.12.2012, 13:06
|
|
Частый гость
Регистрация: 20.12.2012
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
В общем, порылся в программе, нашёл кусок по АЦП и ПИД-у.
Нумер раз
Код:
|
void pid(void)
{
if (start_count != 0) //"мягкий" запуск
{
start_count--;
if (start_count == 0) //задержка истекла
{
//Установка рабочих коэффициентов
k_u = param_value[PID_K_U];
k_i = param_value[PID_K_I];
}
}
//Ошибка по выходному напряжению
if (param_value[MODE_COMP] == 0)
error_u = param_value[UOUT_CODE] - param_value[UUST_CODE];
else //режим "Компенсация"
error_u = param_value[UCOMP_CODE] - param_value[UUST_CODE];
//Ошибка по выходному току
error_i = param_value[IOUT_CODE] - param_value[IUST_CODE];
//Определение текущей ошибки
// error_u = param.uout - uout_ust;
// error_i = param.iout - iout_ust;
//Изменение угла управления пропорционально максимальной ошибке
if (error_u › error_i) //стабилизация напряжения
{
angle_pid += (long)error_u*k_u;
}
else //стабилизация тока
{
angle_pid += (long)error_i*k_i;
param_value[PRG_STATE] |= FLG_STAB_J2; //установить признак стабилизация тока
}
//Пропорциональная составляющая
//angle_pid += (long)error_curr*kp;
//Дифференциальная составляющая
//angle_pid += (long)(error_prev-error_curr)*kd;
//error_prev = error_curr;
//Ограничение диапазона
//if (angle_pid › MAX_ANGLE_PID)
// angle_pid = MAX_ANGLE_PID;
//if (angle_pid ‹ MIN_ANGLE_PID)
// angle_pid = MIN_ANGLE_PID;
//Масштабирование с округлением
angle = (angle_pid+0x8000) ›› 16;
//Масштабирование
//angle = angle_pid ›› 16;
//Ограничение диапазона
if (angle › param_value[PROTECT_ANGLE_MAX])
{
angle = param_value[PROTECT_ANGLE_MAX];
angle_pid = (long)angle ‹‹ 16;
}
if (angle ‹ param_value[PROTECT_ANGLE_MIN])
{
angle = param_value[PROTECT_ANGLE_MIN];
angle_pid = (long)angle ‹‹ 16;
}
param_value[ANGLE_CURR] = angle; //обновить текущее значение угла управления
} |
Здесь в общем, ошибка на коэффициенты Ku и Ki умножается, в зависимости от режимов стабилизации напряжения или тока, изменяются вручную в пределах от 1000 до 30000. Больше нет смысла ставить - автоколебания.
И со слов разработчика, задействованы только П- и И- составляющие ПИДа, когда он пытался ввести Д-, система входит опять же в те же автоколебания. Сам правда, наглядно только П- вижу, остальное закомменчено, видимо, еще с тех времен, когда разраб пытался что-то там колдовать...
Нумер 2, АЦП настройки:
Код:
|
void adc_init(void)
{
//Прерывание АЦП
IPC2bits.ADIP = 6; //приоритет 6 (инструкция DISI запрещает прерывания с приоритетами 0..6)
IEC0bits.ADIE = 1;
//Режим работы АЦП
ADCON1bits.ADON = 0; //запретить работу АЦП
ADCON1 = 0b0000000001000100; //формат выходных данных - целые; источник запуска преобразования - TMR3; автоматический запуск выборки после преобразования
ADCON2 = 0b0110010000100000; //внешние Vref+, Vref-; сканирование входов; прерывание каждые 9 преобразований; один буфер; всегда использовать MUX A
ADCON3 = 0b0000100000011101; //период тактовой частоты АЦП - 750 нс; время преобразования - 10,5 мкс; время выборки - 12,6 мкс
ADCHS = 0; //отрицательный вход MUX A к Vref-
ADPCFG = 0x0020; //вывод AN5 (сигнал KALIBR) - цифровой вход
ADCSSL = 0b1111111011000000; //сканирование каналов AN6, AN7, AN9...AN15
ADCON1bits.ADON = 1; //разрешить работу АЦП
adc_count = 0;
adc_mean[0] = 0;
adc_mean[1] = 0;
adc_mean[2] = 0;
adc_mean[3] = 0;
adc_mean[4] = 0;
adc_mean[5] = 0;
adc_mean[6] = 0;
adc_mean[7] = 0;
adc_mean[8] = 0;
//Частота запуска АЦП: 300*9*16=43200 Гц
PR3 = 463;
T3CON = 0x8000; //делитель 1:1 |
Собсно, параметры запуска АЦП...
Особо этого кода не понимаю, ибо, во-первых, не своя прога, во-вторых, нубас еще в этом (поколение АРДУИНО, можно сказать, хе-хе). Может, кому-то что-то сразу станет ясно, ну а если нет, буду искать верёвочку да мыльце потихоньку...
|
|
|
|
24.12.2012, 13:51
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
Решение возможно такое.
1. Перед дросселем поставить обратно включенный диод, например 150EBU-04.
Это для того, чтобы обеспечить протекание тока разряда индуктивности в момент, когда управление отключает тиристоры обнаружив перенапряжение.
2.В программе используется только И (интегральныя составляющая) ПИД.
Раскоментируйте строки П (пропорциональной)
//angle_pid += (long)error_curr*kp;
//Изменение угла управления пропорционально максимальной ошибке
if (error_u › error_i) //стабилизация напряжения
{
angle_pid += (long)error_u*k_u;
}
else //стабилизация тока
{
angle_pid += (long)error_i*k_i;
param_value[PRG_STATE] |= FLG_STAB_J2; //установить признак стабилизация тока
}
Здесь не правильно если angle_pid переменння управляющая углом открывания тиристоров.
Нужно вводить переменную накопления интегральной составляющей, потом суммировать с пропорциональной и это будет обобщенный угол, который нужно спроецировать на матрицу коммутации.
Найдите в программе эту матрицу и выложите. Без нее трудно ориентироваться.
3.На входе цепи питания КИП поставить фильтр, аналогичный L1C1. С постоянной времени большей, чем время сброса энергии с индуктивности фильтра.
|
|
|
|
24.12.2012, 14:27
|
|
Частый гость
Регистрация: 20.12.2012
Сообщений: 11
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
Сообщение от Impartial
|
1. Перед дросселем поставить обратно включенный диод, например 150EBU-04.
Это для того, чтобы обеспечить протекание тока разряда индуктивности в момент, когда управление отключает тиристоры обнаружив перенапряжение.
|
Поставил 150EBU02, результаты такие же, что и с Д161-250, который пробовали навесить до этого. Возрастают пульсации до целых 1.5-2В, хотя и выброс с 40В в среднем снижается до 32-33 В...
Сообщение от Impartial
|
2.В программе используется только И (интегральныя составляющая) ПИД.
Раскоментируйте строки П (пропорциональной)
//angle_pid += (long)error_curr*kp;
|
Расскоменчиваю, плюс ввожу ручной ввод с платы клавиатуры, завтра буду пробовать. ПРоблема-то в том, что коэффициентов я не знаю вовсе, потому и придется вводить в ручную и пробовать.
По поводу так называемой матрицы коммутации...
Хм, вроде бы вот оно.
Код:
|
//************************************************** ***//
//Модули Input Capture (IC), Output Compare(OC)
//************************************************** ***//
#define UU_PULSE 250 //длительность импульсов управления тиристорами (в тактах таймера 2): 0,4 мкс*250 = 100 мкс
#define ICxCON_DISABLE 0 //запрещение работы модуля IC
#define ICxCON_ENABLE 0b0000000010000011 //разрешение работы модуля IC: используется таймер 2, прерывание по каждому фронту сигнала
#define OCxCON_ENABLE 0b0000000000000100 // запуск модуля OC: используется таймер 2, начальное состояние - 0, генерация одного импульса
//Обработчик прерывания модуля IC5 (сигнал +FA)
void __attribute__((__interrupt__, no_auto_psv)) _IC5Interrupt(void)
{
if (param_value[DEV_STATE] & FLG_ENABLE)
{
//управляющий импульс VS1
OC2R = IC5BUF + angle + param_value[OFFSET_VS1];
OC2RS = OC2R + UU_PULSE;
OC2CON = OCxCON_ENABLE;
}
else
IC5CON = ICxCON_DISABLE;
IFS1bits.IC5IF = 0; //сброс флага прерывания
}
//Обработчик прерывания модуля IC6 (сигнал -FA)
void __attribute__((__interrupt__, no_auto_psv)) _IC6Interrupt(void)
{
if (param_value[DEV_STATE] & FLG_ENABLE)
{
//управляющий импульс VS2
OC5R = IC6BUF + angle + param_value[OFFSET_VS2];
OC5RS = OC5R + UU_PULSE;
OC5CON = OCxCON_ENABLE;
}
else
IC6CON = ICxCON_DISABLE;
IFS1bits.IC6IF = 0; //сброс флага прерывания
}
//Обработчик прерывания модуля IC4 (сигнал +FB)
void __attribute__((__interrupt__, no_auto_psv)) _IC4Interrupt(void)
{
if (param_value[DEV_STATE] & FLG_ENABLE)
{
//управляющий импульс VS3
OC6R = IC4BUF + angle + param_value[OFFSET_VS3];
OC6RS = OC6R + UU_PULSE;
OC6CON = OCxCON_ENABLE;
}
else
IC4CON = ICxCON_DISABLE;
IFS1bits.IC4IF = 0; //сброс флага прерывания
}
//Обработчик прерывания модуля IC3 (сигнал -FB)
void __attribute__((__interrupt__, no_auto_psv)) _IC3Interrupt(void)
{
if (param_value[DEV_STATE] & FLG_ENABLE)
{
//управляющий импульс VS4
OC3R = IC3BUF + angle + param_value[OFFSET_VS4];
OC3RS = OC3R + UU_PULSE;
OC3CON = OCxCON_ENABLE;
}
else
IC3CON = ICxCON_DISABLE;
IFS1bits.IC3IF = 0; //сброс флага прерывания
}
//Обработчик прерывания модуля IC2 (сигнал +FC)
void __attribute__((__interrupt__, no_auto_psv)) _IC2Interrupt(void)
{
if (param_value[DEV_STATE] & FLG_ENABLE)
{
//управляющий импульс VS5
OC4R = IC2BUF + angle + param_value[OFFSET_VS5];
OC4RS = OC4R + UU_PULSE;
OC4CON = OCxCON_ENABLE;
}
else
IC2CON = ICxCON_DISABLE;
IFS0bits.IC2IF = 0; //сброс флага прерывания
}
//Обработчик прерывания модуля IC1 (сигнал -FC)
void __attribute__((__interrupt__, no_auto_psv)) _IC1Interrupt(void)
{
if (param_value[DEV_STATE] & FLG_ENABLE)
{
//управляющий импульс VS6
OC7R = IC1BUF + angle + param_value[OFFSET_VS6];
OC7RS = OC7R + UU_PULSE;
OC7CON = OCxCON_ENABLE;
}
else
IC1CON = ICxCON_DISABLE;
IFS0bits.IC1IF = 0; //сброс флага прерывания
}
void ic_enable(void)
{
//Разрешение работы модулей IC1-IC6
IC1CON = ICxCON_ENABLE;
IC2CON = ICxCON_ENABLE;
IC3CON = ICxCON_ENABLE;
IC4CON = ICxCON_ENABLE;
IC5CON = ICxCON_ENABLE;
IC6CON = ICxCON_ENABLE;
}
void ic_init(void)
{
//Разрешение прерываний от модулей IC1-IC6
IEC0 |= 0x0012;
IEC1 |= 0xF000;
//Программирование таймера 2
T2CON = 0;
PR2 = 0xFFFF;
T2CON = 0b1000000000010000; //делитель 1:8, внутренний CLK (Fosc/4)
} |
Внешний кварц по частоте там 10МГц.
Сообщение от Impartial
|
3.На входе цепи питания КИП поставить фильтр, аналогичный L1C1. С постоянной времени большей, чем время сброса энергии с индуктивности фильтра.
|
Нереально, не будут же заказчик везде фильтр ставить.
|
|
|
|
24.12.2012, 18:29
|
|
Прописка
Регистрация: 09.02.2011
Сообщений: 164
Сказал спасибо: 1
Сказали Спасибо 27 раз(а) в 22 сообщении(ях)
|
Re: Проблема с ЭДС самоиндукции зарядных устройств
Сообщение от dr-kannibal
|
Поставил 150EBU02, результаты такие же, что и с Д161-250, который пробовали навесить до этого. Возрастают пульсации до целых 1.5-2В, хотя и выброс с 40В в среднем снижается до 32-33 В...
|
А этот фильтр считали или поставили что было? Уберите вообще эту катушку если так.
Сообщение от dr-kannibal
|
Расскоменчиваю, плюс ввожу ручной ввод с платы клавиатуры, завтра буду пробовать. ПРоблема-то в том, что коэффициентов я не знаю вовсе, потому и придется вводить в ручную и пробовать.
|
ПИД настраивается по реакции на единичный импульс побором коэффициентов.
А лучше смоделировать.
Процессор мне не знакомый, с настройкой аппаратной части не помогу.
Сообщение от dr-kannibal
|
Нереально, не будут же заказчик везде фильтр ставить.
|
Да прямо на эту линию в самом блоке.
Последний раз редактировалось Impartial; 24.12.2012 в 18:35.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:31.
|
|