« 富士通HR-3UTC(1900mAh) JIS C8708:2019充放電実験400サイクル目 | トップページ | 14pinのAVRマイコン、ATtiny24が動かん! »

2020年8月10日 (月)

オリンパス OM-D E-M1mk2の充電器の充電表示ランプを判別その2

2020年8月6日:オリンパス OM-D E-M1mk2の充電器の充電表示ランプを判別
コメントに記してましたように、これをさらに手直し。
R-2RのD/Aではなく、PWMで電圧出力を得ることにしました。
こんな回路。
L32
OC0B出力を使ってデューティー可変のPWMを出します。

内部クロック4.8MHz÷64÷75で1KHzを作っています。
この0~74/75でPWMのデューティサイクルを得て、LPFで直流化。
0.1Hz単位で計った周波数をそのままPWMの設定に使いました。
周波数で出力電圧を区分する必要がなくなっちゃった。

新プログラム:ダウンロード - em1_chg_pwm1.zip

前のR-2R D/A出力方式でのプログラム
D/A出力周波数を判断するルーチンが入っている

// フォトセンサー入力onエッジをチェックして周波数を算出
 if(f0.pson){       // onエッジあり?
  f0.pson = 0;
  cnt = cnt_1ms;     // エッジ間の周期
  cnt_1ms = 0;      // 1msクリア
  if((cnt != 0) && (ps_cnt >= 4)){ // 4発目以降のパルスで有効
   frq = 10000 / cnt;       // 0.1Hz単位の周波数
   if(frq < 8)     da = 0;   // 0.7Hz down
   else if(frq < 15)  da = 1;   // 0.8~1.4Hz 0.6V
   else if(frq < 25)  da = 2;   // 1.5~2.4Hz 1.3V
   else if(frq < 35)  da = 3;   // 2.5~3.4Hz 1.9V
   else if(frq < 60)  da = 4;   // 3.5~5.9Hz 2.5V
   else        da = 0;   // 6.0Hz up
   if(dax == da)    daout(da); // 前回値と同じならD/A出力
   else{              // 変化した
     dax = da;          // 前回値セット
     ps_cnt = 0;         // onエッジカウンタクリア
   }
  }
  if(ps_cnt < 255)  ps_cnt++;    // onエッジ回数+1 (max 255)
 }
 else{              // フォトセンサーonエッジなし
   if(cnt_1ms >= 2000){    // 2秒経過
     cnt_1ms = 0;      // 1msクリア
     ps_cnt = 0;       // onエッジカウンタクリア
     if(f0.psinp)  da = 5;   // LED on 継続 D/A = 3.1V
     else      da = 0;   // LED off 継続 D/A = 0V
     daout(da);         // D/A出力
     dax = da;          // 前回値も
   }
 }


今回のPWM方式。
1KHzを出すのに1/75してるんで、ちょうどうまいこと得られた周波数を
そのままセットすれば可変電圧が得られます。

// フォトセンサー入力onエッジをチェックして周波数を算出
// 2秒間エッジがないとスタンバイあるいは充電完了
 if(f0.pson){       // onエッジあり?
  f0.pson = 0;
  if(ps_cnt < 255)  ps_cnt++;   // onエッジ回数+1 (max 255)
  cnt = cnt_1ms;     // エッジ間の周期
  cnt_1ms = 0;      // 1msクリア
  if((cnt != 0) && (ps_cnt >= 4)){ // 4発目以降のパルスで有効
   frq = 10000 / cnt;       // 0.1Hz単位の周波数
   pwmout(frq);          // 周波数でPWM出力
  }
 }
 else{            // フォトセンサーonエッジなし
  if(cnt_1ms >= 2000){   // 2秒経過
   cnt_1ms = 0;      // 1msクリア
   ps_cnt = 0;       // onエッジカウンタクリア
   if(f0.psinp)  frq = 60;  // LED on 継続 6.0Hz相当(4V)で[充電完了]
   else      frq = 0;  // LED off継続 0Hz=0V出力[スタンバイ]
   pwmout(frq);        // 周波数でPWM出力
  }
 }

|

« 富士通HR-3UTC(1900mAh) JIS C8708:2019充放電実験400サイクル目 | トップページ | 14pinのAVRマイコン、ATtiny24が動かん! »

カメラ」カテゴリの記事

電子工作」カテゴリの記事

ツール」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




« 富士通HR-3UTC(1900mAh) JIS C8708:2019充放電実験400サイクル目 | トップページ | 14pinのAVRマイコン、ATtiny24が動かん! »