Kontrola ojačevalca

Pri zbiranju informacij o ojačevalcih, ki za ojačevanje uporabljajo klasične elektronke, sem večkrat naletel na informacijo, da se življenska doba elektronk podaljša, če se anodna napetost pojavi šele po tem, ko je katoda že segreta.
Odločil sem se izdelati preprosto zakasnilno vezje, ki je pa na koncu imelo cel kup težav z delovanjem in odločil sem se izdelati novo vezje, ki bo imelo nekaj pameti. Tako sem za osnovo vzel Microchip-ov mikrokontroler 12F625. Moje dosedanje izkušnje z mikrokontrolerji so bile le z legendarnim 16F84A. Malček 12F625 je na začetku kazal zobe, sa ima vgrajenih mnogo funkcij, ki jih je potrebno za uspešno uporabo imeti pod kontrolo.
Uporaba mikrokontrolerja vnaša v vezje tudi precejšnjo fleksibilnost, ter enostavnost spereminjanja, saj v določenih primerih samo zamenjamo program in vezje se obnaša popolnoma drugače.
Vezju sem tako dodal možnost detekcije predvajanje glasbe.
Kratek opis delovanja bi bil tak: Ob vklopu se prižge katoda, po 30s se prižge še Anoda. V kolikor v 30min ni signala se anoda in katoda ugasneta. Prižgeta se v pravilnem zaporedju šele, ko je prisoten signal ali pa če uporabnik ojačevalec ugasne in ponovno prižge. Delovanje je ponazorjeno z svetlečimi diodami. Rumena pomeni, da je ojačevalec pod napetostjo, ni pa prižgan (stand-by). Če Rumena dioda utripa potem se katoda segreva in čez 30s se bo prižgala anoda. Rdeča led dioda pomeni, da je ojačevalec pripravljen za poslušanje.

Slika 1: Vezje detekcije signala

Detekcija muzike - električna shema detajl
Na vhodu je ojačevalec z velikim ojačanjem. Signal ojačevalca potuje skozi polnovalni usmernik do tranzistorja, ki deluje kot stikalo. Če je prisoten signal bo tranzistor odprt in na kolektorju tranzistorja se bo pojavila nizka napetost . To napetost spremljamo z mikrokontrolerjem. Vhodna napetost pri kateri vezje še misli, da je signal prisoten je okoli 0,2V

Slika 2: Vezje detekcije vklopa

Detekcija omrežne napetosti  - električna shema detajl
Drugi podsklop je vezje, preko katerega mikrokontroler dobi informacijo, da je uporabnik ojačevalec prižgal.
Detekcija je narejena s pomočjo optičnega sklopnika, ki napajanje dobi preko kondenzatorja 630n 250VAC, 100K upora in dveh diod, ki se obnašati kot polnovalni usmernik. Kondenzator je uporabljen kot predupor za napajanje diode optičnega sklopnika. Upor 100K služi kot praznilni upor za kondenzator, ter za natančnejšo kalibracijo navidezne upornosti kondenzatorja.
Mikrokontroler uporablja interni RC oscilator z delavno frekvenco približno 4MHz. Ker ne potrebujemo zelo natančnih časov RC oscilator popolnoma zadostuje.

Napajanje vezja je izvedeno preko majhnega transformatorja, ki ravno še zadošča za napajanje vezja. Uporabljeni releji imajo občutljivo tuljavico in zaradi tega porabijo manj energije. Ker moči, ki jih preklapljajo niso velike bi po specifikaciji morali zdržati.
Vezje je izdelano tako, da se morata kondenzator 630nF250VAC in Upor 100K 1W pritrditi na vrh transformatorja. Povezava na TIV pa je narejena preko dveh vodnikov. Žal na TIV ni bilo prostora za ta dva elementa.
Sledila je še izdelava programa za mikrokontorler, ki pred prevajanjem z prevajalnikom izgleda takole:
;*****************************************************************************
; AVTOR: Primož Prinčič
; Program za zakasnitev vklopa anodne napetosti ojačevalnika za slušalke
; program ob vklopu ojačevalca vklopi napajanje katod čez 30s še napajanje anod
; če po vklopu anode ni muzike izklopi ojačevalec čez 1h
; Izhodi:
; GP0=Izhod=Vklop anode + Rdeče LED -1 = ON
; GP1=Izhod=Rumena_LED -1= ON
; GP2=Izhod=Vklop katode - 1=ON
; GP3=Vhod=Reset-> Pull up upor
; GP4=Vhod=Detekcija vklopa - 0=Vklop=ON
; GP5=Vhod=Detekcija muzike - 0=Muzika je
; Frekvenca kristala = 4MHz
; Opis delovanja:
; Za zakasnitev 1 minuto (59,904sekund) mora biti vrednost HI+LOcnt = .59904 (dec) oz EA00 (hex)
; Za zakasnitev 1s mora biti arg1= .1000 (dec) oz 03E8 (hex) ->HIcnt=0x03, LOcnt=0xE8
;
; Datum: 24.2.2005
; Verzija: 0.0.2 - Trenutna finalna verzija
; detekcija vklopa, ob pritisku na stikalo se prižge atoda,rumena led dioda utripa 30s nato se vžge še anoda
;*****************************************************************************
; Spremembe
; Datum:
; 24.2.2005 - spremenjeno vezje, detekcija delovanja ne daje več impulzov ampak ob vklopljenem stanju
; drži GP4 ves čas na 0, zato je program precej poenostavljen
;*****************************************************************************

PROCESSOR 12f675
#include "P12F675.INC"
; ERRORLEVEL -224,-302, -308
__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT
Cblock 0X20 ; Začetek RAM-a
;====================================================================
; Spremenljivke programa
;====================================================================
Flags ; register z zastavicami
; bit 0=>1=Anoda je prizgana
; bit 1=>1=prizgi rumeno led
; bit 2=>1=zmanjkalo je muzike
; bit 3=
; bit 4=
; bit 5=
; bit 6=
; bit 7=
;====================================================================
; Spremenljivke pauze
;====================================================================
HIGHcnt ; register, ki drzi višji bajt časa zakasnitve
Zakasnitev_vklopa
Zakasnitev_izklopa_low
Zakasnitev_izklopa_high
Stevec_ni_muzike_low
Stevec_ni_muzike_high
LOWcnt ; register, ki drzi nižji bajt časa zakasnitve
LOOPcnt ; register, ki drzi vrednost spremenljivke podprograma
endc ; konec spremenljivk
ORG 0x00 ; reset vektor
GOTO Main ; skok na Main
;====================================================================
; Inicializacija vhodov / izhodov, načina delovanja
;====================================================================
Main
BSF STATUS, RP0 ; izberemo banko 1
CALL 0x3FF ; preberemo kalibrirano vrednost oscilatorja
MOVWF OSCCAL ; kalibriramo oscilator
BCF STATUS, RP0 ; izberemo banko 0
CLRF GPIO ; GPIO=0
MOVLW 0x07 ; 00000111 ->W
MOVWF CMCON ; Comparatorji so izklopljeni
BSF STATUS, RP0 ; izberemo banko 1
CLRF ANSEL ; Analogni vhodi so izklopljeni -> deluje samo digitalno
MOVLW b'00111000' ; 00111000 -> W
MOVWF TRISIO ; RP0-3=izhodi, RP4-5=vhodi
BCF STATUS, RP0 ; izberemo banko 0
;====================================================================
; Sledi program
;====================================================================
Zacetek
BSF GPIO, 1 ; prižge rumeno led
MOVLW .25
MOVWF Zakasnitev_vklopa ; Zakasnitev_vklopa~30s (izmerjeno)
CALL Nastavi_zakasnitev_izklopa ; nastavi vrednosti Zakasnitev_izklopa_low in high
Preveri_vklop
BTFSC GPIO, 4 ; je na GPIO,4=0?
GOTO Izklop ; Ne
CALL Pocakaj_sekundo ; pauza 1s
BTFSC GPIO, 4 ; je na GPIO,4=0?
GOTO Izklop ; Ne
BCF GPIO, 1 ; Da ugasne rumeno led
GOTO Vklop
Izklop
BCF GPIO, 0 ; ugasne anodo, rdečo led
CALL Pocakaj_sekundo ; pauza 1s
BCF GPIO, 2 ; ugasne katodo
BSF GPIO, 1 ; prižge rumeno led
BCF Flags, 0 ; anoda je ugasnjena
BCF Flags, 2 ; resetira ni muzike
MOVLW .25
MOVWF Zakasnitev_vklopa ; Zakasnitev_vklopa~30s (izmerjeno)
CALL Nastavi_zakasnitev_izklopa ; nastavi vrednosti Zakasnitev_izklopa_low in high
GOTO Preveri_vklop
Vklop
BTFSC Flags, 2 ; Je muzike zmanjkalo?
GOTO Preveri_muziko ; Da
BSF GPIO, 2 ; Ne prižge katodo
BTFSS Flags, 0 ; je je anoda ze prizgana?
GOTO Zakasnitev_05s ; Ne -> zakasnitev
Vklop_anode ; Da
BCF GPIO, 1 ; ugasne rumeno led
BSF GPIO, 0 ; prizge anodo, rdečo led
BSF Flags, 0 ; Flags, 0=1
GOTO Preveri_muziko
Zakasnitev_05s
DECFSZ Zakasnitev_vklopa, f ; Zakasnitev-1; je Zakasnitev=0
GOTO Pol_sekunde ; Ne počaka 0,2s
GOTO Vklop_anode
Pol_sekunde
CLRF HIGHcnt
MOVLW 0xC8
MOVWF LOWcnt ; vpis časa 0,2s (500ms)
CALL Pauza ; klic pauze 0,2s
BTFSC Flags, 1 ; Je potrebno rumeno LED prizgati?
GOTO Ugasni_rumeno_led ; Ne
GOTO Prizgi_rumeno_led ; Da
Ugasni_rumeno_led
BCF GPIO, 1
BCF Flags, 1
GOTO Preveri_vklop
Prizgi_rumeno_led
BSF GPIO, 1
BSF Flags, 1
GOTO Preveri_vklop
Preveri_muziko
BTFSC GPIO, 5 ; Je muzika? 0=je muzika
GOTO Ni_muzike ; Ne -> ni muzike
GOTO Muzika_je ; Da
Ni_muzike
BTFSC Flags, 2 ; Muzike ni bilo?
GOTO Ni_muzike_izklop ; Da
DECFSZ Zakasnitev_izklopa_low, f ; Ne Je Zakasnitev_izklopa_low-1=0?
GOTO Preveri_vklop ; Ne
DECFSZ Zakasnitev_izklopa_high,f ; DA Je Zakasnitev_izklopa_high-1=0
GOTO Zakasnitev_low ; Ne
GOTO Ni_muzike_izklop ; Da Zakasnitev izklopa=0
Zakasnitev_low
MOVLW .60
MOVWF Zakasnitev_izklopa_low ; Zakasnitev izklopa če ni muzike
GOTO Preveri_vklop
Ni_muzike_izklop
BCF GPIO, 0
BCF GPIO, 2
BSF GPIO, 1
BSF Flags, 2
BCF Flags, 0
MOVLW .25
MOVWF Zakasnitev_vklopa ; Zakasnitev_vklopa~30s (izmerjeno)
GOTO Preveri_vklop
Muzika_je
BCF Flags, 2
CALL Nastavi_zakasnitev_izklopa ; nastavi vrednosti Zakasnitev_izklopa_low in high
GOTO Preveri_vklop
Pauza: ; Podprogram zahteva dva parametra: HIcnt, LOcnt
Zanka1 ;Zmanjšuje HIcnt in LOcnt za določeno število in nato pokliči podprogram Zakasnitev_1ms
MOVF LOWcnt, f ; Move contents of Locnt
BTFSC STATUS, Z ; Bittest skip if clear testira bit Z status registra Z = 1 če je rezultat računske operacije 0
GOTO desetica_HI ; če rezultat operacije ni 0 skoči sem kar pomeni, da še ni prišel na 0 (v tem primeru)
CALL Zakasnitev_1ms ; Call ->kliče podprogram Zakasnitev_1ms ko podprogram zaključi se izvrši naslednja vrstica
DECF LOWcnt, f ; Decrement LOcnt register rezultat shrani v LOcnt
GOTO Zanka1 ; skok nazaj
desetica_HI
MOVF HIGHcnt, f
BTFSC STATUS, Z
GOTO Konec
CALL Zakasnitev_1ms
DECF HIGHcnt, f
DECF LOWcnt, f
GOTO Zanka1
Zakasnitev_1ms:
MOVLW .100 ; Move literal to W 100->W (0xFA)
MOVWF LOOPcnt ; Move W to LOOPcnt
Zanka2
NOP ; nooperation
NOP ; nooperation
NOP ; nooperation
NOP ; nooperation
NOP ; nooperation
NOP ; nooperation
NOP ; nooperation
DECFSZ LOOPcnt, f ; Decrement LOOPcnt skip if zero LOOPcnt=LOOPcnt-1 odšteje 1 od vrednosti registra LOOPcnt
GOTO Zanka2 ; Če je LOOPcnt=0 potem ta stavek spusti saj je 1ms minila
RETURN ; skok nazaj
Konec
RETURN
Nastavi_zakasnitev_izklopa:
MOVLW .60
MOVWF Zakasnitev_izklopa_low ; Zakasnitev izklopa če ni muzike
MOVLW .30
MOVWF Zakasnitev_izklopa_high
RETURN
Pocakaj_sekundo:
MOVLW 0xE8 ; Da
MOVWF LOWcnt
MOVLW 0x03
MOVWF HIGHcnt
CALL Pauza ; počakaj 1s
RETURN
END
Program je napisan v zbirniku za Microchip-ove mikrokontolerje. Samih ukazov je relativno malo. Nekaj čez 30. Odvisno od samega kontrolerja. Tisti, ki imajo več vgrajenih funkcij imajo kakšen ukaz več. Program se nato prevede. Dobimo HEX datoteko, ki se jo preko vmesnika prenese v mikrokontroler. Tale izgleda takole:
:020000040000FA
:1000000001288316FF239000831285010730990091
:1000100083169F0138308500831285141930A200A1
:100020006D20051A18287220051A18288510222814
:100030000510722005118514201020111930A2001E
:100040006D20112820193B280515201C2B28851010
:10005000051420143B28A20B2E282728A101C83004
:10006000A7005320A018352838288510A010112883
:100070008514A0141128851A3E28502820194828D4
:10008000A30B1128A40B452848283C30A3001128B5
:10009000051005118514201520101930A200112813
:1000A00020116D201128A708031959286020A703E3
:1000B0005328A10803196C286020A103A703532823
:1000C0006430A800000000000000000000000000F4
:1000D0000000A80B6228080008003C30A3001E3076
:1000E000A4000800E830A7000330A1005320080056
:02400E00A43FCD
:00000001FF
Hex koda ukazov in podatkov, ki jo mikrokontroler izvaja, ko se nanj priključi napajanje.
Električna shema
TIV vse plasti 1:1
TIV samo spodnja plast (baker)
TIV samo zgornja plast (vezice)
TIV razpored elementov

P&P 12.6.2005