PIC regulovany zdroj
http://pandatron.sk/?140®ulovatelny_zdroj_s_pic
Regulovatelný zdroj s PIC
Tento zdroj sám o sobě má malé uplatnění, protože reguluje jen do 5V a i při zatížení 0,5mA napětí klesá o 1V. Použije-li se ale na výstupu PICu zapojení popsané níže, lze tímto nahradit celý zdroj 0-20V / 1A.
Samotné zapojení je zdroj napětí v rozsahu 0-5V ovládaný tlačítky UP a DOWN. Počet kroků je maximálně 256, ale já jsem ho v programu omezil na 50. To znamená, že napětí se reguluje po skocích 0,1V , což je myslím dostačující.
Princip funkce je jednoduchý. Na prakticky stejném principu pracuje v televizorech regulace hlasitosti, ladění a další.
Jak to tedy funguje: Na výstupu (v našem zapojení je to vývod RB0) je integrační člen tvořený R4 a C2. Napětí na tomto (výstupním) kondenzátoru je přímo úměrné počtu impulsů na RB0. V programu je tedy činnost procesoru na tomto vývodu rozdělena na jednotlivé, stejně dlouhé časové úseky. Výstupní napětí se pak rovná počtu kladných (log.1) impulsů (obecně vzato), které v tomto časovém úseku jsou, a zbytek je log. nula.
Chceme-li tedy na výstupu nulové napětí, nezařadíme do tohoto úseku žádný kladný impuls. Naproti tomu, chceme-li na výstupu plné napětí, je tento úsek složen prakticky celý z log.1.
Koho zajímá přesná funkce programu, jistě si ho sám rozebere a prozkoumá, případně upraví podle sebe.
Tak jen zkáceně: Jak jsem již psal, je potřeba určitá délka log.0 a log1 tak, aby jejich součet byl vždy stejný. Já jsem na to použil dva registry, z nichž jeden obsahuje délku log.1 a druhý log.0.
Na výstup se tedy zapíše log.1 a začne se postupně odečítat příslušný registr, pak se na výstup zapíše log.0 a odečítá se zase druhý registr. Poté se vývod RB0 od výstupu odpojí nastavením jako vstup a testují se tlačítka. Pokud nejsou stisknuta, RB0 se nastaví zpět jako výstup a proces se opakuje.
Je-li ale například stisknuto tlačítko UP, k registru s log.1 se přičte číslo 5 a od reg. S log.0 se naopak odečte.
Chcete-li tedy větší počet kroků, najděte v programu všechny čísla 5 a změňte je podle potřeby. Nejmenší možné je ale 1, v tom případě je počet kroků 256.
Komu se chce se zdroje experimentovat, může do zapojení přidat třeba tlačítko OFF, nebo MUTE, kdy se aktuální hodnota obou registrů přepíše do EEPROM a na výstupu impulsy ustanou. Procesor se může vypnout. Po jeho opětovném spuštění načte počet kroků z EEPROM a na jeho výstupu bude stejné napětí jako před vypnutím.
Nebo je možné do programu přidat automatické opakování při delším stisku tlačítka.
Na výstupní kondenzátor je možné podle druhého schématu připojit přes tranzistor LED a regulovat její svit, nebo ještě lépe přes dva tranzistory připojit malou žárovičku.
Ze školy mám zapojení, které je na třetím obrázku. To jsem ale nezkoušel.
Na vývodu RB0 je zapojen optočlen (pro oddělení a umožnění regulaci vyššího napětí než je 5V), tranzistor, pár dalších součástek a hlavně stabilizátor LM317. V tomto případě je možné stabilizátorem regulovat napětí až do asi 20V i při oděru kolem 1A aniž by při zatížení napětí na výstupu nějak kolísal. V tomto případě se totiž o stabilitu stará onen stabilizátor.
ZDE je ke stažení ovládací program pro PIC
; program k regulovatelnemu zdroji s dvemi tlacitky na RA0 a 1 a integracnim clenem na RB0
;
; Zdenek Novotny http://panda.unas.cz
LIST P=16F84, R=DEC ; typ procesoru a numericka dekadicka soustava
INCLUDE<P16F84.INC> ; vzorovy soubor s prikazy pro prekladac (je soucasti prekladace)
NULA EQU H'0C'
JEDNA EQU H'0D'
MOJE EQU H'0E'
MOJEE EQU H'0F'
KROK1 EQU H'10'
KROK2 EQU H'11'
#DEFINE OUT PORTB,0
#DEFINE TLUP PORTA,0
#DEFINE TLDO PORTA,1
BSF STATUS,RP0 ; IN / OUT
MOVLW B'00000000'
MOVWF TRISB
MOVLW B'00000011'
MOVWF TRISA
BCF STATUS,RP0
BCF OUT
CLRF MOJE
MOVLW B'11111110' ; uvodni nastaveni hodnot nuly a jednicky
MOVWF NULA
MOVLW B'00000001'
MOVWF JEDNA
ZNOVU BSF STATUS,RP0
BCF TRISB,0
BCF STATUS,RP0
MOVF JEDNA,0 ; vysle jednicky
MOVWF MOJE
BSF OUT
DECFSZ MOJE,1
GOTO $-1
MOVF NULA,0 ; vysle nuly
MOVWF MOJE
BCF OUT
DECFSZ MOJE,1
GOTO $-1
BSF STATUS,RP0 ; OUT nastav jako vstupni (odpojit od zateze)
BSF TRISB,0
BCF STATUS,RP0
CLRWDT ; reset WDT
BTFSC TLUP ; test tlacitek
GOTO PLUS
BTFSC TLDO
GOTO MINUS
GOTO ZNOVU
PLUS BCF STATUS,C
MOVF NULA,0 ; pricte jeden krok
ADDLW -5
MOVWF NULA
MOVF JEDNA,0
ADDLW 5
MOVWF JEDNA
BTFSC STATUS,C
GOTO NOPLU
ZPLU GOTO PUST
NOPLU MOVF NULA,0 ; pricte jeden krok
ADDLW 5
MOVWF NULA
MOVF JEDNA,0
ADDLW -5
MOVWF JEDNA
GOTO ZPLU
MINUS BCF STATUS,C
MOVF NULA,0 ; odecte jeden krok
ADDLW 5
MOVWF NULA
BTFSC STATUS,C
GOTO NOMIN
MOVF JEDNA,0
ADDLW -5
MOVWF JEDNA
ZMIN GOTO PUST
NOMIN MOVF NULA,0
ADDLW -5
MOVWF NULA
GOTO ZMIN
PUST BSF STATUS,RP0 ; zde se ceka na pusteni tlacitek
BCF TRISB,0
BCF STATUS,RP0
MOVF JEDNA,0 ; vysle jednicky
MOVWF MOJE
BSF OUT
DECFSZ MOJE,1
GOTO $-1
MOVF NULA,0 ; vysle nuly
MOVWF MOJE
BCF OUT
DECFSZ MOJE,1
GOTO $-1
BSF STATUS,RP0 ; OUT nastav jako vstupni (odpojit od zateze)
BSF TRISB,0
BCF STATUS,RP0
CLRWDT ; reset WDT
BTFSC TLUP ; test tlacitek
GOTO PUST
BTFSC TLDO
GOTO PUST
GOTO ZNOVU
END