Micro-Wattmeter (MW) endnu engang.

Hen over sommeren 2016, har jeg foretaget nogle eksperimenter, og lavet nogle ændringer i softwaren.
Eksperimenterne er primært gået på, at få MW til at blive så nøjagtig som det er mig muligt, og her mener jeg, at jeg har vundet en del, ved at lave det udvendige målehovede, som gør det muligt at have målehovedet helt tæt på måleobjektet.

Ikke fordi MW er unøjagtig, men fordi der er visse unoder i softwaren, som det er lykkedes mig at få fjernet, og derfor mener jeg, at denne dokumentation er nødvendig.

Idéen med, at bruge AREF(EXTERN) er faktisk god nok, og bibeholdes. Det har dog vist sig, at reference spændingen, som er superstabil med den monterede stabilitets-enhed AD1403N, er en knap så god idé... og hvorfor så det?

Arduino UNO's AD- converter´s standard-opløsning er 0-1023 v/ 5 Volt. Når vi ændre AREF- spændingen til f. eks. 2,5 Volt, kommer vi lidt under den spænding, som AD8307 leverer som MAX- spænding, ved ca +18 dBm, og regnestykket kommer til at sådan ud:

            2,5 / 1023 = 0,00244379...  og det ses, at vi her er lidt under AD8307´s opløsning pr. 0,1 dBm,

Hvis AREF sættes til en anden spænding, f. eks. 2,5575 Volt, ser regnestykket meget bedre ud:

            2,5575 / 1023 = 0,0025, og så har vi sammenfald med AD8307, med 1 decimal efter kommaet, og dette gør alting meget lettere.

Strømforbruget er mindre end 50 mA for hele MW.

Endelig diagram:
Her er så det ENDELIGE diagram med printudlæg i størrelse 60 x 100.

Bemærkning til diagrammet.
JP1 er forbindelse til 3-stillings omskifter med neutralt midterstilling. JP2 forbindels til et analogt måleinstrument 200 uA, og JP3 er forbindelse til PROBEN.

R6, 3,3 K Ohm er i printudlægget erstattet med en modstand på 1,8 K samt en trimmer på 2,2 K, for lettere justering og tilpasning af skalaen til MAX.
Husk at skalaen først bliver justeret på plads, når kontrolleren viser korrekt i display.

PRINTUDLÆG
Printet har målene 100 x 60 m.m., iøvrigt samme mål som display 4 x 16, og passer nogenlunde med, at det kan sidde lige bag displayet.


SOFTWARE ÆNDRING
Jeg har ved forsøg overbevist mig selv om, at AD8307 er utrolig præcis over de her 85-90 dB ++, så jeg IKKE nødvendigvis skal lave en kompliceret beregning, mellem AD8307´s udlæsning, over en spændings-beregning med justering for det fiktive "NULL-dBm"-punkt, men blot kan bruge ARDUINO IDE's "map-funktion".

AD8307-proben følger derefter denne linearitet: Bemærkninger:
dBm AD8307
18 1023

Hvis dBm er positiv:
dBm = map(AD_data,832,1023,0,180);  // udlæser dBm fra 0 (NULL) dBm til ca. 18 dBm.

Hvis dBm er negativ:
dBm = map(AD_data,832,132,0,-700);  // udlæser dBm fra 0 (NULL) dBm til ca -70 dBm.

Herefter deles dBm med 10 så vi får dBm med 1 decimal.

Denne udlæsningsmetode kan KUN benyttes, hvis der er sammenfald mellem det AD8307
læser, og processorens AD converters opløsning, som dokumenteret her.

Derfor vil det stille krav til stabilitet og nøjagtighed af AD converter´s refferancespænding AREF på 2,5575 Volt, med MINIMUM dobbelt stabiliseret spændingsregulator.

10 932
0 832
-10 733
-20 632
-30 532
-40 432
-50 332
-60 232
-70 133
 

Det ses af tabellen, at 10 dB springet stort set holde 100 punkter pr. 10 dB, og dermed kan præcisionen holdes med 0,1 dBm, bortset fra den sammentrykning, der er i hver ende af skalaen, men som tidligere nævnt, skal man ikke regne med skalaen under -70 dBm, og over +15 dBm. 

Misvisningen ved -10 dBm skyldes, med stor sikkerhed, min gamle målesender, en HP8601A Generator/Sweeper, som ikke er blevet kalibreret i mange år. 

Justering af AREF til 2,5575 Volt
Således blev det til, at AD1403n blev afmonteret (den sad i sokkel) og erstattet af et 10 turns, 4,7 K Ohm's kvalitets trimmepotentiometer, monteret mellem GND og den dobbelt stabiliserede  spænding, plus 5 volt, og midterbenet lagt til AREF, og justeret til 2,5575 Volt. 
Justering af denne spænding kan foretages med et præcitionsOHM-meter med mindst 4 decimaler, eller man kan aktivere den blå udskrivningslinje, som udskriver dBm. Potentiometeret justeres således, at med MAX input fra signalgeneratoren, skrives der i displayet 1023. NULL-dBm udskrives med tallet 832, og øvrige efter tabellen. Husk at de-aktivere udskrivningen efter justeringen.

For at ændringerne kunne gennemføres, blev routinen "omregn_dBm()" ændret til:

void omregn_dBm()
  {
                                  
//lcd.setCursor(13,0); lcd.print(AD_data);   // (udskriver dBm * 10 som heltal på første linje i displayet)
       if ( AD_data >= 0 ) {
       dBm = map(AD_data,832,1023,0,180);   
// udlæser dBm fra 0 (NULL) dBm til ca. 18 dBm.
       }
       if ( AD_data < 0 ) {
       dBm = map(AD_data,832,132,0,-700); 
   // udlæser dBm fra 0 (NULL) dBm til ca -70 dBm.  
       }
   dBm = (dBm/10) + att;  
  // "att" kan antage værdien -40 eller -60 hvis en tilsvarende POWERTAB tilsluttes

 
// "Komp" sættes med omskifter på forpladen med 6 stillinger - Se her under...
Kompensation();  

   dBm = dBm + Komp;
  }

Her kan ses en  DEMO-Video af linearitet

Kompensation for fejlvisningen på 1,8 dBm

Der er tilføjet en funktion til kompensation for frekvensvariationen mellem 0 og 525 MHz som udgør mindre end 2 dBm.
Funktionen er implementeret med en omskifter med 6 stillinger, som læses med analog-port A0, med 10 K Ohm mellem stillingerne, samme måde som vist her...

Med denne rutine indkoblet, er misvisningen ved frekvenser op til 525 MHz, mindre end 0,5 dBm.

Over 525 MHz vil misvisningen stige, og er ca 3 dBm ved 800 MHz, men er da stadig brugbar, også på højere frekvenser end 800 MHz.

Case-værdierne er fundet ved at aktivere udskrivnings-linien, ( den blå ), som vil skrive værdierne i displayets første linje, efter "dBm".

//****************************************************
// Kompensation for skiftende frekvens-område
//****************************************************
void Kompensation()
  {
  val = analogRead(analogPin);          // Læs den ANALOGE input pin
  nyval = int(val/10);                 // her vil værdien 515 f. eks. blive 51

                                                 //lcd.setCursor(13,0); lcd.print(nyval);
  switch(nyval) {
    case 48: Komp = 0.3; break;    //     0 -   50 MHz, Kompensationsværdi = 0.3 dBm
    case 65: Komp = 0.7; break;    //   50 - 100 MHz
    case 74: Komp = 1.2; break;    // 100 - 250 MHz
    case 79: Komp = 1.8; break;    // 250 - 350 MHz
    case 82: Komp = 1.8; break;    // 350 - 450 MHz
    case 85: Komp = 1.0; break;    // 450 - 525 MHz
    }
  }

Værdierne for Komp kan ændres, hvis man synes ved kontrollen med en målesender, at tallene skal være anderledes.

Nu må vi se om vi kan få produktions-modnet projektet til et byggesæt.
Idéen kom fra denne artikel:  Simpel RF-Power Measurement, (PDF), af Wes Hayward, W7ZOI, og Bob Larkin, W7PUA - QST 2001

August 2016, de OZ6YM