Choď na obsah Choď na menu
 

PIC regulovany zdroj

http://pandatron.sk/?140&regulovatelny_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