|
|
  |
Преобразователь из 5V в 12V на ATtiny461, работает, но нет стабилизации |
|
|
|
Oct 4 2007, 20:39
|

Профессионал
    
Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807

|
Собрал испытательный стенд по нижеприведенной схеме:
Выходное напряжение не стабилизируется при изменении тока нагрузки, хотя нормально регулируется вручную при разомкнутой петле обратной связи. Привожу листинг программы микроконтроллера. По осциллографу видно, что с увеличением тока нагрузки время откр сост ключа увеличивается, но амплитуда импульсов все же уменьшается. При этом дроссель в насыщение не входит (измерялось на резисторе 1 Ом): форма тока линейно нарастающая, без "скривлений". Подозреваю логическую ошибку в программе. Подскажите, что не так: Код __C_task void main (void) { // инициализация таймера 1 Tmr1Stop; CLRBIT(PRR,PRTIM1); // включить модуль таймера 1 SETBIT(PLLCSR,LSM); // PLL = 32MHz SETBIT(PLLCSR,PLLE);Delay(200*us);do{}while(!CHKBIT(PLLCSR,PLOCK));// запуск PLL SETBIT(PLLCSR,PCKE); // разрешить тактирование таймера от PLL TCCR1A = BIN(00110011); TCCR1B = BIN(01000000);do{}while(CHKBIT(TCCR1B,PSR1));// сброс прескалера TCCR1C = BIN(00110000); TCCR1D = BIN(00000000); TCCR1E = BIN(00000000); DT1 = 0x00; Reg10write(TCNT1reg,0x000); Reg10write(OCR1Areg,0x3FF); Reg10write(OCR1Breg,0x3FF); Reg10write(OCR1Creg,0x3FF); Reg10write(OCR1Dreg,0x3FF); SETBITS(TIFR,BIT(OCF1A)+BIT(OCF1B)+BIT(OCF1D)); SETBITS(TIMSK,BIT(OCIE1A)+BIT(OCIE1B)+BIT(TOIE1)); Tmr1Start; Work: // инициализация ADC ADMUX = BIN(10011001); ADCSRA = BIN(10010110); ADCSRB = BIN(00000000); ADC = 0; SETBIT(DIDR0,AREFD); SETBITS(DIDR1,BIT(ADC8D)+BIT(ADC9D)); // запуск преобразования SETBIT(ADCSRA,ADSC);do{}while(CHKBIT(ADCSRA,ADSC));ADCdata = ADC; // запись результата if(ADCdata < ADCmin) ADCdata = ADCmin;// мин. время Тoff ключа(обычно 20%) PreIntState = __save_interrupt(); __disable_interrupt(); AS4value = ADCdata; __restore_interrupt(PreIntState); goto Work; }
// Timer/Counter1 Compare Match B #pragma vector = TIM1_COMPB_vect __interrupt void TIM1_COMPB(void) { unsigned int AStmp = AS4value; TC1H = ((AStmp >> 8) & 0x0003); OCR1B = (AStmp & 0x00FF);// загрузка величины сравнения для след. цикла } Краткое описание к программе. В основной имеем непрерывное измерение с делителя, усиление сигнала ошибки происходит с Кус = 20 внутр инструмент усилителем. Далее цифровой код используется как величина сравнения для таймера 1, работающего в режиме FastPWM. Итак, увеличение напряж на выходе => увеличение кода ADC => увелич. величины сравнения => уменьшение времени откр сост транзистра, что и требуется для PWM. Может, просто Кус = 20 недостаточно для регулирования?
|
|
|
|
|
Oct 4 2007, 21:33
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Что значит Цитата(ivainc1789) Выходное напряжение не стабилизируется при изменении тока нагрузки Напряжение падает или увеличивается или наблюдается колебательный процесс? Вы переходную характеристику вашего стабилизаторы снимали? Может у него фазовая задержка в цепи ООС слишком большая?
|
|
|
|
|
Oct 4 2007, 23:09
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(ivainc1789 @ Oct 5 2007, 04:09)  Напряжение однозначно падает при увеличении тока нагрузки несмотря на увеличение времени накопления. Тогда пожалуй я соглашусь с Muxa, коэффициент усиления ошибки рассогласования мал. Цитата(ivainc1789 @ Oct 5 2007, 04:09)  Прилагаю две осциллограммы: на левой при нагрузочном резисторе R1=500 Ом, а на правой при R1=300 Ом. Цены делений: 2вольта/дел по вертикали, 10мкс по горизонтали. По данным осц видно, что таймер инициализирован верно. Частота преобразователя 31250 кГц (32мкс). Ээээ... а что по ним можно понять-то? Что длительность импульса ШИМ изменяется при изменении нагрузки? Цитата(ivainc1789 @ Oct 5 2007, 04:09)  Поясните, как правильно снять переходную характеристику в данной схеме? Дык а как вы снимали характеристику при разомкнутой цепи ООС? Переходная характеристика это отклик БП на ступенчатое изменение сопротивления нагрузки. Переключайте нагрузку (подключайте к одной нагрузке другую) с небольшой частотой каким-нибудь полевиком и синхронно наблюдайте как ведет себя выходное напряжение при этом (форму импульса отклика).
|
|
|
|
|
Oct 5 2007, 05:31
|

Йа моск ;)
     
Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610

|
Конечно, тут мал коэффициент усиления. Есть 2 варианта. Первый - поставить TL431, на управляющий вывод поставить делитель с выхода, анод в землю, катод через резистор скажем 1кОм в +5. И на катоде измерять напряжение при помощи АЦП (без усиления, с Uопороное=Vcc) и результат с АЦП использовать следующим образом: int i=ADC; i-=512; if (i<0) i=0; if (i>200) i=200; OCR1B=i;
Причем, хватит 8-разрядного шима.
Вариант второй. Достаточно компаратора, на один вход опорное напряжение (например 1/2 VCC, кстати и просто VCC сойдет), на другой - напряжение с делителя. Проверка выполняется на прерывании от переполнения таймера шима (например). Проверка следующая - если напряжение на делителе больше опорного, то OCR1B--, иначе OCR1B++. Конечно, с проверками выхода за диапазон.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|
|
|
|
|
Oct 5 2007, 06:19
|

Профессионал
    
Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807

|
Цитата(Rst7 @ Oct 5 2007, 09:31)  Конечно, тут мал коэффициент усиления. Есть 2 варианта. Первый - поставить TL431, на управляющий вывод поставить делитель с выхода, анод в землю, катод через резистор скажем 1кОм в +5. И на катоде измерять напряжение при помощи АЦП (без усиления, с Uопороное=Vcc) и результат с АЦП использовать следующим образом: int i=ADC; i-=512; if (i<0) i=0; if (i>200) i=200; OCR1B=i;
Причем, хватит 8-разрядного шима.
Вариант второй. Достаточно компаратора, на один вход опорное напряжение (например 1/2 VCC, кстати и просто VCC сойдет), на другой - напряжение с делителя. Проверка выполняется на прерывании от переполнения таймера шима (например). Проверка следующая - если напряжение на делителе больше опорного, то OCR1B--, иначе OCR1B++. Конечно, с проверками выхода за диапазон. Rst7, большое спасибо. Попробую оба варианта. Про компаратор тоже думал как про запасной вариант. Вот бы еще уметь произвести РАСЧЕТ для коэфф усиления в цепи ООС. Может есть какой-нить документ на эту тему?
|
|
|
|
|
Oct 5 2007, 08:59
|
Частый гость
 
Группа: Свой
Сообщений: 140
Регистрация: 24-10-05
Пользователь №: 10 028

|
Цитата(ivainc1789 @ Oct 5 2007, 12:35)  Опорное для ADC выбрано как 1.1 вольт (см. настройки регистров). Измерение происходит в униполярном режиме (бит 7 в ADCSRB равен нулю). Сам двувходовый режим выбран мультиплексором. Это понятно. Я имел ввиду, что ADCres=20*(ADC8-ADC9)=k*Uout, и здесь нет как-будто разности с опорным напряжением.
|
|
|
|
|
  |
3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0
|
|
|