PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : simples ADC Program für Schaltnetzteil ähnliche Anwendung



The Man
19.03.2007, 14:44
Hallo zusammen,

ich habe hier einen ganz simplen Code zum einlesen von zwei ADC Werten. Dabei ist der eine der Sollwert und der andere der gemessene Istwert. Die Schaltung ist ähnlich einem Schaltnetzteil mit FET`s als Schalter und einem Optokoppler als Potentialtrennung versehen. Ich verwende hier einen ATmega 8 ohne externen Quarz, also die 3,6864 MHz.


mainloop: wdr
;zum clearen von ADCH und ADCL
;AVcc-left_adjusted-channel 1 => Taster
out ADMUX,r16
out ADCSRA,r31 ;adc-enable/start_conversion/clk:32
bis_convertet1:
sbic ADCSRA,6
rjmp bis_convertet1
in r17,ADCH
nop
nop
nop
out ADMUX,r18
out ADCSRA,r31
bis_convertet2:
sbic ADCSRA,6
rjmp bis_convertet2
in r19,ADCH
cp r17,r19 ;VERGLEICH-VERGLEICH-VERGLEICH
brcc an
ldi r21,0b11111111
out PORTB,r21
rjmp mainloop
an:
ldi r21,0b00000000
out PORTB,r21



;Hier den Quellcode etztztintragen.
rjmp mainloop

Das Problem ist, dass das Program extrem langsam ist, man kann aslo die Schaltimpulse mitzählen. Woran liegt das?

Danke,
The Man

wkrug
30.03.2007, 18:06
Ich bin jetzt nicht der Schaltnetzteil Crack, aber ich vermute, das deine Schaltung zu langsam reagiert.
Das heisst, wenn der Transistor eingeschaltet ist braucht es zu viel Zeit um die A/D Werte zu generieren, die den Transistor wieder abschalten lassen.
In dieser Zeit schießt die Spannung über den Sollwert hinaus und es dauert eine gewisse Zeit bis der Einschaltpegel wieder erreicht ist.

Das würde bedeuten, das deine Ausgansspannung um den Sollwert herum pendelt.

Schau Dir mal die Spannung mit dem OSZI an.

Vieleicht kriegst Du mit dem Analog Komparator eine schnellere Regelung gebacken ? Da dieser ja keine A/D Wandlung durchführen muß und somit sofort einen Interrupt auslösen kann.
(Nur ein Gedankenspiel - Ausprobiert hab ich sowas noch nicht !).