Bauplan Schaltplan StepUp Schaltregler mit Atmel
Für ein Projekt benötigte ich eine einstellbare Gleichspannung von 10-20 Volt, die ursprüngliche Schaltung lief mit 3V

Nachdem es keine leicht erhältlichen Schaltregler gab, die meinen Anforderungen genügten, nahm ich einfach einen Atmel Tiny 24 (aber nahezu jeder ande Atmel wäre wohl auch gegangen) und bastelte mit meinen Schaltregler selbst.

Da an die Spannung keine hohe Anforderung bezüglich der Regelgenauigkeit bestand, wurde folgendes Funktionsprinzip gewühlt:

Timer 0 erzeugt ein PWM Signal von ca 20uS Dauer, mit ca 5uS Einschalttdauer

Dieses PWM-Signal steuert einen kleinen Transistor an, der wiederum eine 330uH Spule schaltet,

Die Induktionsenergie der Spule wird über eine Diode in einen Elko geführt.

Über einen Spannungsteiler wird die Spannung am Elko gemessen. Steigt sie über einen gewissen Wert, wird Timer0 abgeschaltet. Fällt sie unter einen bestimmten Wert, wird Timer0 wieder eingeschaltet.

Der ADC wird ca 7 mal pro Sekunde ausgelesen, getriggert durch den Timer 1 Interrupt

Das Programm ist relativ einfach, aber es beinhaltet eine Reihe von Codebeispielen, die man auch an anderer Stelle benutzen kann

- PWM zur Signalerzeugung

- Timer Interrupt

- ADC im Free Running Modus

- Sleep Modus

- Techniken zur Energieeinsparung

Dass der Tiny mit einem Quartz betrieben wird, hat den Grund, dass der Quellcode noch erweitert werden soll, so dass per RS232 die Ausgansspannung eingestellt werden kann. Dazu ist ein genauer Takt erforderlich. Ansonsten funktioniert die Schaltung auch mit dem internen RC Oszillator.

Hier der Schaltplan:

Hier der Quellcode

include "tn24def.inc"


.def temp1 = r16
.def temp2 = r17


.org $0000

rjmp reset


.org OVF1addr
rjmp OVF1Handler

.org $0020

reset:
ldi temp1,low(ramend)
out spl,temp1

sbi ddra,5

//usi Module OFF
sbi prr,1


//wdt off
rcall init_wdt


rcall init_timer_0

rcall init_timer_1
rcall init_adc

sei


endless:

//sleep enable
ldi temp2,0b00100000
out mcucr,temp2

sleep


rjmp endless

OVF1Handler:


in temp1,adch

cpi temp1,$80
brlo turnon

cpi temp1,$81
brsh turnoff

rjmp exit_ovf1


turnoff:
//Stop Timer0 and turn it off
sbi prr,2
//Port ebenfalls abschalten, denn der könnte HIGH sein...
cbi ddra,7

rjmp exit_ovf1

turnon:
//Start Timer in Fast PWM mode
cbi prr,2
sbi ddra,7


exit_ovf1:
reti


init_timer_0:

//Periodendauer in OCR0A
ldi temp1,$40
out ocr0a,temp1

//Pulslänge in OCR0B
ldi temp1,$10

out ocr0b,temp1

//Fast PWM mode
ldi temp1,0b00100011
out tccr0a,temp1

//Start Timer in Fast PWM mode
ldi temp1,0b00001001
out TCCR0b,temp1

//Turn off Timer 0
sbi prr,2

ret

init_timer_1:


//Enable Timer_Interrupt
ldi temp1,0b00000001
out TIMSK1,temp1

//Start Timer in Free Running Mode, Prescaler 8
ldi temp1,0b00000010
out TCCR1b,temp1
ret


init_adc:

//internal reference, input auf PA3
ldi temp1,0b10000011
out admux,temp1


//all digital_input_off
ldi temp1,0b11111111

out didr0,temp1

//left adjust
ldi temp1,0b00010000
out adcsrb,temp1


//free running, clc/128
ldi temp1,0b11100111
out adcsra,temp1
ret


init_wdt:
//wdt off, lt Datenblatt
ldi temp1,(0<<WDRF)
out MCUSR,temp1

in temp1,WDTCSR
ori temp1,(1<<WDCE)|(1<<WDE)
out WDTCSR,temp1
ldi temp1,(0<<WDE)
out WDTCSR,temp1
ret

Bauteile für dieses Projekt - Anzeigen:
Aktive Bauelemente

Passive Bauelemente


Weitere Informationen,Grundlagen,Bauanleitung,Schaltplan, Links zum Thema
Anzeigen:

Neueste Artikel
Anzeigen:
Aktuelle Newsbeiträge
Sie sind Besucher Nr. 1212317