HF Wattmeter
Na mijn positieve ervaringen met het programmeren van kleinere PICs (Peripheral Interface Controllers) zoals de 12F675 (CW-callgever) vond ik het weer eens tijd worden voor een nieuw PIC-projectje. Dit keer moest het iets worden met een (tekst) display, die tegenwoordig voor een prikkie op eBay te vinden zijn.
Ik wist er een, met fraaie blauwe achtergrondverlichting en witte karakters, voor een euro of 8 op de kop te tikken. Om een HD44780 display aan de praat te krijgen (…" Hello World "…) stuitte ik al snel op de 16F628A.
Een flinke, eerder gebouwde, HF dummyload (tot 150 Watt HF vermogen en grensfrequentie > 1 GHz) met gelijkrichter was nog niet voorzien van een meter. Een keramische 50 ohms weerstand van het type FLA-150-50, gemonteerd op een flink koellichaam, vormt het hart van het circuitje:
Zou het niet handig zijn om hier een digitale uitlezing aan te knopen? Natuurlijk zijn er kant-en-klare PIC RF power meters op het www te vinden, maar zelf een schakelingetje uitwerken en bijbehorende software schrijven is toch veel leuker.
Tot nu toe moest de gelijkspanning afkomstig uit de gelijkrichter in de dummyload gemeten worden om het gedissipeerde vermogen te kunnen berekenen volgens: P = (Vdc)2 / 100
Eerst maar eens een Veroboardje met PIC en display maken om te leren het display met commando's aan te sturen. Zie het schemaatje hieronder voor de aansluitgegevens.
Er was geen rocket-science nodig om het 4×20 character display tot leven te laten komen.
Nu kon ik naar hartelust spelen met de karakterset van het display; letters, cijfers, symbolen plaatsen en staafdiagrammetjes maken bleek allemaal niet zo moeilijk.
Het display aansturen was gelukt. Maar om zinnige info op het scherm te krijgen moet de PIC met data uit de analoge buitenwereld gevoed worden. Helaas heeft de PIC16F628A geen Analoog/Digitaal Converter aan boord.
Dus moest er een los ADC-boardje komen; geen probleem met een 8-bits ADC0804CN chip; zie het schema verderop.
Een NE555 is nodig om de ADC met ongeveer 4 Hz te laten sampelen. Via een simpele spanningsdeler kan de analoge spanning (die tot zo'n 125 Volt dc kan oplopen) uit de HF dummyload naar de ADC0804CN geleid worden. De weerstanden hebben vrij hoge waarden (2 x 1 Mohm en 1 x 100 Kohm) om de gelijkrichtschakeling na de dummyload zo min mogelijk te belasten.
De ingang van de ADC chip wordt beveiligd met een 5V1 diode. Het pull-up weerstanden netwerkje is als een blokje getekend. In werkelijkheid is dat ook zo, het is een weerstand array (8x 4k7) uit een oude computer diskdrive. 8 losse 4k7 weerstandjes werken natuurlijk ook. Het array is, net als de meeste weerstanden, aan de onderzijde van het board gesoldeerd en dus hier niet zichtbaar op de foto.
De LED flasht met de frequentie van het sampelen (4 Hz). Met de (meerslagen) instelpotmeter van 1M kan de schakeling afgeregeld worden.
De 8-bits databus van de ADC hoeft alleen nog maar aan een 8-bits brede A-poort van de PIC geknoopt te worden (flatcable).
Nu moet de gemeten ingangsspanning nog met een stukje software omgezet worden in een meetwaarde. Zoals hieronder te zien is dat uiteindelijk gelukt.
Een graphbar, die een grove indicatie geeft van de gemeten spanning mag natuurlijk niet ontbreken. De 3 verticale streepjes boven de bar geven ongeveer aan waar je 1W, 10W en 100W kunt vinden.
De maximaal te meten waarde is 150W.
De 8 bits resolutie van de ADC is niet super, maar met dit project kan toch op een snelle, redelijk nauwkeurige, manier gemeten worden hoeveel de HF eindtrap levert aan een 50 ohm belasting. Het resultaat wordt dan ook getoond in 1 decimaal achter de komma, meer getallen achter de komma geven slechts een schijnnauwkeurigheid aan.Voor mij is de meter in ieder geval een welkome aanvulling in de shack, daar ik tot nu toe alleen de beschikking hadover QRP-Watt meters. Tot slot, voor de liefhebbers, hieronder het stukje software:
Device 16F628A ;Gebruik een 16F628A type
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE ;Alle ingangen digitaal
;
;wattmeter1.bas
;
;HF Wattmeter tot 150 Watt HF ingangsvermogen
;
;Circuit opgebouwd met semiconductors
;ADC0804CN, PIC16F628A, NE555, 7805
;
;Design by Ron van den Brink
;PA2RF
;Copyright 18 september 2008
;
;Laatste wijziging: graphbar, dBm berekening toegevoegd als subroutine
;Logische constanten
Symbol AAN = 0 ;Geinverteerd AAN
Symbol Lengte = 20 ;Lengte streepjeslijn
;Poortnamen
Symbol ReactieToets = PORTB.1 ;De toets voor start dBm, dBW berekening
;Variabele declareren
Dim Cnt As Word ;Variabele om ADC-poort in te lezen
Dim Lang As Float ;Lengte graphbar
Dim Vdc As Float ;Gelijkspanning over 50 ohms weerstand
Dim Pwr1 As Float ;HF vermogen
Dim P As Float ;Hulpvariabele voor wortel uit Pwr1
Dim Q As Float ;Hulpvariabele
Dim T As Float ;Hulpvariabele om dBm te berekenen
Dim A As Float ;Hulpvariabele om dBm te berekenen
Dim B As Float ;Hulpvariabele om dBW te berekenen
Dim H As Float ;Hulpvariabele nodig indien Pwr1 = 0 Watt
Dim Teller2 As Byte ;Hulpvariabele voor iteratie Newton Raphson
Dim Teller As Byte ;Hulpvariabele voor iteratie Newton Raphson
; 76543210
TRISA = %11111111 ;PORTA. all input voor ADC
TRISB = %11111111 ;PORTB. all input
PORTB_PULLUPS On ;On-chip pull-up weerstanden actief (voor schakelaar)
Clear ;Wis alle RAM geheugen
DelayMS 500 ;LCD stabilisering
;Hoofdprogramma
Cls ;Eerste keer scherm wissen
Print At 1,1, " RF Watt Meter"
Print At 2,1, " Copyright PA2RF"
Print At 3,1, " Sep. 2008"
DelayMS 3000
Cls
While 1=1
Cnt = PORTA ;Lees ADC0804CN
If ReactieToets=AAN Then GoSub LOGARITME ;Bereken dBm, dBW
Vdc = (Cnt*122)/255 ;Bereken gelijkspanning over 50 ohm
Pwr1 = (Vdc*Vdc)/100 ;Bereken gedissipeerd HF vermogen
Print At 1,1, " RF Power " , DEC1 Pwr1, " Watt "
Print At 3,1, "| | | " ;GraphBar indicators voor 1, 10, 100 W
Lang = (Cnt/255)*20 ;Lengte Graphbar hangt af van ADC waarde
Print At 4,1, Rep "-"\20 ;Teken dashed lijn
Print At 4,1, Rep 255\Lang ;Teken GraphBar
Wend
LOGARITME: ;LOG van Pwr1 bereken
Cls
Teller = 1
Teller2 = 1
H = Pwr1
Print At 1,1, "Calculate dBm, dBW "
Print At 2,1, "RF Power " , DEC1 Pwr1, " Watt "
Repeat
P=10
Repeat
P = P + (Pwr1/P) ;Newton Raphson om wortel Pwr1 te benaderen
P = 0.5*P ;Xn=0.5*(Xn-1 + Pwr1/Xn-1)
Inc Teller
Until Teller = 4 ;3 x loop levert voldoende nauwkeurige waarde voor wortel Pwr1
Pwr1=P
Inc Teller2
Until Teller2 = 12 ;11x hoofdloop doorlopen want log(x) ~ (x^(1/2^11)-1)*889
T=(P-1)*889
A=T*10+30 ;A=10*log(Pwr1)+ 30 (dBm)
B=A-30 ;dBW = dBm + 30
Print At 1,1," "
Print At 3,2,DEC1 A, " dBm @ 50 ohms "
Print At 4,2,DEC1 B, " dBW @ 50 ohms"
If H < 1 Then Print At 3,2, " – dBm @ 50 ohms " ; log (0) is – oneindig !
If H < 1 Then Print At 4,2, " – dBW @ 50 ohms " ; idem
DelayMS 4000
TAG1:
If ReactieToets = AAN Then GoTo TAG1
Cls
Return
End