nobcha23の日記

PICマイコンやArduinoを使う電子回路遊びを紹介します

Arduino+LCDでAD8307電力測定表示


AD8307を使った電力測定LOGアンプ中国製基板を以前買いました。

nobcha23.hatenablog.com

 

テスターで電圧を計り、グラフ参照し換算する代わりアルディーノで計算やらせることにします。

まずはWEBで情報集めると、電圧dB換算係数とスライス値をスケッチにされているページがありましたので、ありがたく引用させてもらいます。
(TNX! 氾濫原)

 

今までArduinoはUNOを使ってましたが、今回Pro Miniにしました。表示はPCF8574基板利用の2c LCDです。デバッグ接続USB UARTはFTDIにしました。

ここに並べた基板をケーブルでつなぎます。

f:id:nobcha23:20210424160452j:plain

 

 

次に測定に入ります。AD8307の無入力オフセット電圧が150mVぐらいあります。

ADC値30以下は注意喚起することにしました。

次にRF特性をnano VNAで見てみます。

f:id:nobcha23:20210424160553j:plain

Nano VNAでAd9307入力端をみてみる

 

S11が円弧描いてます。そこで中華製基板の終端抵抗を良く見てみると101となってます。
ECページの写真でも101でした。メーカー推奨回路図では52.3Ωだったはず。


パラに110Ω付けないといけませんね。とりあえず使うのにATTを入れてこの問題を避けることにしました。

 

10dBのPAD入れると全く問題なくなりますが、低いレベル測定したいので、6dBPADを入れて使うことにしました。

f:id:nobcha23:20210424160709j:plain

 

 

ケースに入れて、ちょっと使ってみて改良を考えます。

ーーーーーーーーーーーーーースケッチ 参考に ーーーーーーーーーーーーーー
// AD8307 RF Power Meter V1.0 by nobcha © 04/23/2021
// i2c LCD Pro mini @ nano (old boot)
// Thanks JH1UMV of Hanrangen
// https://lowreal.net/2016/03/14/1
//
#include <Arduino.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

static const float SLOPE = 26.367;
static const float INTERCEPT = -63.51879243;

LiquidCrystal_I2C lcd(0x27, 16, 2);

String formatWatts(const float watts) {
if (watts < 1e-3) {
return String(watts * 1e6) + "uW";
} else
if (watts < 1e-1) {
return String(watts * 1e3) + "mW";
} else {
return String(watts) + "W ";
}
}

void setup() {
Serial.begin(9600);
Serial.print("AD8307 RF Power Meter V1.0 ");
Wire.begin();

pinMode(13, OUTPUT); // LED pointing

lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("AD8307 RF Power");
lcd.setCursor(0, 1);
lcd.print("Meter V1.0");
delay(1000);
}

boolean k = 0;

void loop() {
k = !k;
digitalWrite(13, k); // LED on/off

uint16_t adc_raw = analogRead(0); // Get AD8307 output voltage via ADC
Serial.print("ADC value = "); Serial.println(adc_raw);
float adc = static_cast<float>(adc_raw) / 1024 * 5; // Operating on 5V

Serial.print("ADC Voltage = "); Serial.println(adc * 1000);

float dBm = (adc * 1000 / SLOPE) + INTERCEPT; // from voltage to dBm
Serial.print("dBm = "); Serial.println(round(dBm));

float watts = pow(10, dBm / 10) / 1000; // from dBm to wattage
Serial.print("mW = "); Serial.println(watts * 1000);

lcd.setCursor(0, 1);
if (adc_raw <30 ) lcd.print("Under "); //
lcd.print(round(dBm));
lcd.print("dBm");


lcd.print(" ");

lcd.setCursor(0, 0);
lcd.print(formatWatts(watts));
lcd.print(" @10MHz ");

delay(1000);
}

 

 

航空無線受信機キット エアバンドラジオ受信機キット DIYキット 高感度 118-136MHz AM PCB 快適性