Przeszukaj forum
Pokazywanie wyników dla tagów 'Armega8a'.
Znaleziono 1 wynik
-
Cześć! Zbudowałem na płytce stykowej taką przetwornicę typu Buck jak na zdjęciu i mam problem z regulacją napięcia. Równolegle z obciążeniem jakim jest rezystor 100om dołożyłem dzielnik napięcia z rezystora 51k i 10k do pomiaru napięcia wyjściowego. Dzielnik jest podpięty do wejścia ADC3 (PC3). Zadaję napięcie wyjściowe przetwornicy za pomocą potencjometru podpiętego do wyjścia ADC1 (PC1). I wszytko ładnie śmiga, napięcie na dzielniku jest równe zawsze napięciu na potencjometrze do czasu gdy nie włączę równolegle do opornika 100om drugi opornik 10om. Napięcie na wyjściu z zadanych 9V spada do 8V i napięcia na dzielniku i potencjometrze się nie zgadzają. Ale gdy zwiększę napięcie zadane na powiedzmy 10V to napięcie na wyjściu wynosi z powrotem 9V. Więc uważam że to jest problem ze złym sterowaniem PWMem Problemem raczej nie jest niedostatek mocy. Przetwornica jest zasilana z prostownika a prostownik ze 100W transformatora (12V, 8A). Gdy dokładam ten opornik 10om to napięcie na wyjściu prostownika wynosi ok 13V więc jest zapas mocy. Parametry przetwornicy L=3mH 2A Cwyj=2000uF Mosfet= IRF630 Cbootstrap=2,2uF Najbardziej mnie interesuje to czy uważacie że kod jest poprawny i tak zaprogramowana atmega może regulować napięcie #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> volatile uint8_t napiecie,pwm, kanal=3, zadane; int main(void){ //ADC ADMUX|=(1<<REFS1)|(1<<REFS0)|(1<<MUX1)|(1<<MUX0)|(1<<ADLAR); ADCSRA|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); // //TIMER DDRB|=(1<<PB3); TCCR2|=(1<<WGM21)|(1<<WGM20)|(1<<COM21)|(1<<CS20); TIMSK|=(1<<TOIE2); //OCR2=100; // sei(); while(1){ //pomiar napiecia na wyjsciu ADCSRA|=(1<<ADSC); while (ADCSRA&(1<<ADSC)); napiecie=ADCH; kanal=1;// zmiana kanalu napomiar napiecia z potenncjometru ADMUX&=(0xE0); ADMUX|=(kanal & 0x0F); //pomiar napiecia zadanego ADCSRA|=(1<<ADSC); while (ADCSRA&(1<<ADSC)); zadane=ADCH; kanal=3;//zmiana kanalu na wyjscie przetwornicy ADMUX&=(0xE0); ADMUX|=(kanal& 0x0F); } } ISR(TIMER2_OVF_vect){ // regulacja pwm // mosfet jest sterowany przez tranzystor bipolarny // gdy na wyjsciu pwm atmegi jest stan niski na bramce //jest stan wysoki if(napiecie>zadane){ if(pwm<255) pwm++; } if(napiecie<zadane){ if(pwm>0) pwm--; } OCR2=pwm; }