スマホの充電は毎日のように行いますが、どれぐらいで充電されているのか疑問に思っていました。また、USBポートから給電される機器が増えてきていますのでこれらの機器がどの程度電力するのか知りたい場合が多いです。
そこでこれらを簡単に測定できる電圧電流計を製作したいと思いました。
稲崎弘次さんの「PICを使った簡易測定器の実験」の付録基板とソフトを使用することにしました。
この本の記事のソフトはmikroCを使用するもので、今入手できるmikroC PRO for PICにはそのまま使用できるものではありませんでした。
なんとか整合性をとりcompileもsacceedしましたが動作しませんでした。
その後も色々トライしましたがお手上げ状態でした。
そこで仕方なく普段使用しているCCSに移植することにしました。
これも当初succeedになるのですが、LCDに何も表示されず悩んでしまいました。
試行錯誤しながらCCSのlcd_lib.cと付録基板のlcdの配線に相違があり特にデータポートの配線が違うことが分かりました。
配線を変更することでうまく動作するようになりました。
・最大入力は25V2A
・AD変換のVrefは2.495V
・AD変換の分解能10ビット
・電圧分解能 2.495/1023=2.44mV*11(分圧比率)=26.8mV
・電流分解能 2.495/1023/0.1Ω/11(増幅度)=2.22mA
・AD変換したデータread_adc=data=x/Vref×1023
・x=Vref×deta/1023×11
#include <16f88.h>
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,BROWNOUT,NOLVP
#device ADC=10
#use delay(clock=8000000)
#use fast_io(B)
// LCD設定
#define mode 0 // 空きピンの入出力モード
#define input_x input_B
#define output_x output_B
#define set_tris_x set_tris_B
#define stb PIN_B1
#define rs PIN_B2
#include <lcd_lib.c>
void main()
{
float data; // long
setup_adc_ports(sAN2 | sAN4 | VSS_VREF);
setup_adc(ADC_CLOCK_INTERNAL);
set_tris_b(0); // 出力モード
output_B(0); // 0クリア
// LCDを初期化する
lcd_init();
lcd_clear();
while(1)
{
// 電圧の測定
set_adc_channel(4);
delay_us(50); // アクイジション
data = read_adc();
data = data * 2.44 * 11.0/1023;
lcd_cmd(0x80); // 1行目の先頭に移動
printf(lcd_data, "Voltage=%2.1f V",data);
// 電流の測定
set_adc_channel(2);
delay_us(50);
data = read_adc();
data = data * 2.44/ 11.0/0.1/1023*1000-2.1; //2.1はオフセット
lcd_cmd(0xC0); // 2行目の先頭に移動
printf(lcd_data, "Current=%2.1f mA",data);
delay_ms(500);
}
}
スマホ機器の場合5Vが多いのでDC INと回路の電源を直結して使用しています。
スマホの充電電流を測っている状態です。