ATtiny26Lを使って「- △V検出」NI-MH 充電器の実験をして見ました。

  装置の説明
   この度 AVR マイコン ATtiny26Lを使用して、内臓のA/D コンバータを使いニッケル水素
 電池の充電をコントロールする装置の実験が終了いたしました。

 終了と言ってもまだまだ予期せぬ事もあるかと思われますが、取りあえず良い結果が出まし
 たので此処に紹介致します。

  ニッケル水素電池はリチュームイオンバッテリーと違って充電終期の状態がわかり易い特
 徴があります、充電中は次第に電圧が上昇して終期が来ると逆に電圧が下がりだします、こ
 の上昇して下がりだす事を検出出来れば充電率100% 付近の充電器が簡単に作れる事になりま
 す。

 この動作を検出できるICは秋月などから購入可能です、現在使用している装置も在ります、
 電池メーカー品も使っています、いずれもバッテリーの状態に左右され旨く充電できない場
 合も多く苦慮していました。

 何故充電が旨く出来ないのかといろいろ観察して分かった事は、バッテリーが新品のうちは
 旨く行くが長期間放置したバッテリーは失敗する場合が多い、またバッテリー、メーカーの
 違いでも状態に差異が多い事が分かって来ました、メーカー製の充電器は自社製の電池以外
 は充電を禁止などの表示がある事から電池各社の特性の違いがある物と感じています。

 今回のマイコン制御の充電器は充電中の電圧の状態を目視で観察でき上記特性の違いも良く
 分かる様になりました。

 充電失敗の状態は、長期間放置した電池では充電初期は電圧が急上昇し、その後じわじわと
 電圧が降下します、この降下する時間は30分弱で止まる場合が多い、一般の充電器はこの電
 圧降下の直後で充電完了!として停止する。

 この事から今回の充電器はスタート後約30分間は何が起きても強制的に充電するモードが自
 動的に選択されます、従って殆どの電池は此処での失敗はなくなりました。

 この電圧降下が終わると今度はじわじわと電圧が上昇して、ある電圧に到達するとそこから
 電圧が降下し始めますので14〜15mVの降下点で現在のプログラムは充電終了としていま
 す。

 実験中は、降下電圧の検出電圧は36mVで実験してましたが電池一本の充電ではちょっと
 無理っぽい感じてした、猛烈に熱くなりました、よって15mVに決定した次第です。

  検出方法は変数に入ってくる電圧数を+3してMAX数と比較して「0」になった時が15
 mV下がったと判定します。
 プログラムからもその場所は分かると思います。
 
 3でなぜ15mVかと言うと、1024/5V=204.8ですから0.015V*204.8=3.072です、小数点以下は
  無視して 3 とします、これで14〜15mVに成ります、ADCのビットが10ビットですから基
 準電圧 5V を1024に分割した数になります、よって 1024/5=204.8 になります。
 3/204.8=0.01465 で14〜15mV になるのが分かるとおもいます。 
 
 この事からLCDの表示の最小桁も4〜5mV ステップになっています上記計算をプログラムどう
 りCPUが実行しますので最小桁の端数処理で4〜5mV ステップになります。

 なお上記強制充電は手動で解除できますから追充電なども楽に出来ます、解除なしで追充電を
 すると約30分間は強制充電になるので過充電の危険もありますので注意が必要です。

 強制充電解除での追充電は殆どの場合ほどほどで停止してくれました。

  今回の実験はチップマイコンATtiny26Lに内臓されている A/D コンバータで電圧を監視し
 結果を「LCD 表示器」に表示させ目視でも動作確認が出来る物を目標にして作ってみました。
 
  当初マイコン部分をユニバーサル基板で組み上げ電源部はダイソーで購入した車用の携帯
 用充電器をちょっと改造した5V電源と改造無しの其のままを各一台を接続して実験しまし
 た、結果は意外な程良好でした、もちろんA/Dコンバータ部はノイズに弱い事は承知して
 いたので、各電源部の入出力部はトロイダルコアのコモンフィルターを付けてつかいました。

 試しにauの携帯用充電器を充電側に使って見ましたが全く問題なく使えました。

 当然ですがPCの配線はADCの部分とパルス回路の電源とグランドの引き回しなどはAD
 C側にパルスの帰還電流やVDDにパルス電流が入らぬ様充分な配慮が必要です。

 PCのAVCCピンは配線図からもわかりますがローパスフィルターを一段入れました、L
 は在り合わせ品を使いましたが効果が在った様です、LCDの電圧表示もデジタルテスター
 なみに安定しました。

  
   上蓋をとった内部の様子です、放熱器側に電源部を収めました。


配線図です。


  この配線図では小さい部分は良く分からないと思います、図面をクリックすると大きな図面に
 替わります、あまり変化無ければ、もう一度クリックするとカーソルが+-に変わり大きくしたり
 小さくしたり出来ます(IE7 の場合)ので確認して下さい。

  戻るときは左上にあるブラウザの戻るを使ってください。

 配線図にあるACアダプターは秋月より購入した「9V 1.2A」という物です、すべてこのACアダ
 プター1個で済みます、ADC部はノイズを嫌いますのでシリーズレギュレータLM338Tを
 定電流「0.84A」基準抵抗 1.5Ω でこの電流値になった、と、定電圧「5.0V」の2つを使って動
 作させますが充分使えます。

 「7V」タイプでは定電流が旨くなかったです。

 PCクロックは高速とか正確とかの制限があまり無い様ですから内蔵の1MHzをつかいあまっ
 たピンでLEDを表示させました。

 電池は2本直列ならそのまま接続、1本の場合は「2.6Ω3W」付近の抵抗を直列接続で良いです。

 配線図に関してはあまり難しい事は無いと思いますが、くどい様ですがマイコン自身のノイズが
 ADC側に回りこまない様グランドラインからのパルスのリターンが無い事や電源の残留パルス
 除去フィルターは必要ですが適当に在り合わせ品で良いと思いますので入れましょう。

 ADCの入力「PB-6」は「10KΩ+0.01μF」でのローパスフィルターを入れました。
 後はあまり問題を起こしそうな箇所は無いですが、「LM338T」の入力側にパスコンを適当に入れ
 ます、こんな感じで良いかとおもいます。

  プログラムリストは BASCOM-AVR よりメモ帳に、コピペして作りました、BASCOM-AVRは日本語
 をサポートしていませんのでBASCOM-AVRにプログラムをコピーするときは日本語の部分をすべて
 プログラム行番号とも削除して一括コピーをするか、一行ずつのコピーをすれば可能です。

 見た感じでは簡単そうに見えますが、変数が大きくまた LCD の部分などがコンパイル時にメモリ
 ーを多く使う様で現在99%のメモリー使用量になっています。

 LCD 関係部が無くなればかなりプログラム量が増えると思います、充電器としてだけ使う場合は
 もっと複雑なフログラムも可能かと思われます。

 実験が目的ですからLCD 関係部を温存させています、もし必要ならもっと上位のPCを使えば何
 か起きた時のさらなる目的の達成は可能かとおもいます。


      プログラムリスト 


  プログラムの概要をさらっと記述します。
 8行 〜 25行は擬似命令です、ベーシックコンパイラはこれがないと滅茶苦茶な英文のエラー
 メッセージをだすと思います、試していません。

 
 29行〜36行は変数の宣言です。
 37行の変数は使っていませんのでREM処理です。

 42行の変数Bに10776の数値をセットして109行〜117行で「0」になったかを調べ「0」で
 無ければB−1をします。
 このフログラムは高速で動く必要は無いのでLCD表示後約1秒のウエイトを掛けています、
 したがってB−1は途中の処理にも影響されますが約1秒ごと実行されて「0」になるのが約
 3時間少々掛かります、「0」でタイムオーバー停止となります。

 43行の変数CNTに1796の数値がセットされます、95〜107行のルーチンで強制充電から
 強制充電終了までの制御をおこないます。
 CNT=「0」で経過時間約30分少々となります、ここからの電圧上昇値は 86行〜91行の処
 理でMAXの表示変数 V3 と制御変数 A2 を更新して行きます。

 95行〜107行が強制充電解除と充電終了を判定します。
 強制充電中は変数 V3 と A2 は測定された電圧値で無条件で更新されます。
 強制充電解除後はそれぞれMAX値で更新されます。
 98行で充電終了判定を行います。

 51行からメインルーチンのループですが 52行〜66行が充電終了とタイムオーバー終了の無限
 ループですが 53行〜63行は53行のスタート釦を押されるまで実行されません、従って各終了
 時の表示変数は各終了判定の値を維持しています、表示された数値を確認すればどの様な感じ
 で終了に至ったかを直視する事が出来ます。

 69行〜67行で強制充電モード解除ルーチンです、此処も約一秒に1回のペースで通過しますか
 ら強制充電中のランプが消える迄ボタンを押し続ける必要があります。

 73行〜81行はADCとLCDに関するルーチンです。
 74行で取り込んだデータを変数 A に格納します。
 75行で変数 A の内容を 204.8 で割り算をして変数 V1 に格納。
 77行割り算したデータを "#.##" の形にして変数 V2 に格納。
 
 78行〜79行 "#.##" のデーターをLCDに表示する。
 80行〜81行でLCDの下段を選択して"#.##" の形になってるMAX値を表示。

 82行はこの表示結果を約1秒間維持してチラツキを防止する。

 86行〜91行 MAXのデーターより大きいと判定されたらMAXの表示データー V3 と A3 の
 コントロールデーターを更新する。

 以降はそれぞれの判定を行い必要な処理を行った後 51 行へ戻って処理を繰り返します。
 121行の End は普段は使いませんがプログラムが暴走した時の安全処理を勝手に行うお呪いで
 す。

 後はプログラムを解析すれば殆どの事は解決できますからご覧下さい。

 



  記
 充電器は何台か自作しました、充電終了サインを正確に取得する事が目標でした、OPアンプ
 でピークホールドを作って実験して見ようかとか、いろいろ考えていました。
 
 デジタル的にはA/Dコンバーターが良いかもと思い秋月からADC7820なんてのを買っ
 たり、結局これは AKI-80 とかのマイコンで使うしか方法がなく、パソコンのOSなとがどん
 どん変わって行き結局 AKI-80 の開発環境もなくなってしばらく忘れた感じになっていまし
 た。

 巷では「ピックマイコン」がかなり広まっていましたがZ−80で遊んでた私には勝手の違う
 プログラムはかなり違和感を覚え使う気がうせていました。

 今から3年ぐらい前になりますか、AVRマイコンが眼に付きました、アセンブラもZ−80
 とかなり似ている感じがしたのと無料で使えるベーシックコンパイラも魅力があり使う事に決
 めました。

 当初 ATtiny2313 を使って数種の物に挑戦して満足する結果が出ました、フログラムも何とか
 出来る様になって来ましたので念願だったA/Dコンバーターを使って見ようと思いいろいろ
 調べて ATtiny26L にADCが内臓されている事が判明しました、所有マイコンを調べたら何と
 ATtiny26L が2個ありましたので早速製作に掛かりました。

 実験結果は、良かったです、特にLCDを使って刻々変化する電池電圧を見て「秋月のキット」
 や「電池メーカーの充電器」でも旨く充電できなかった電池も難なく充電できる様になり挑戦
 して良かったと感じています。

 一番の収穫はLCDの表示データーから旨く充電できなかった訳が判明した事です。
 メーカー品の場合は自社の電池以外は使用不可で事足りると思いますか、使う立場からは、ニ
 ッケル水素充電池ならどんな会社の製品でも、また長期間放置されて充電受け入れ性能が低下
 した電池でも難なく充電出来た方が良いのは当たり前ですよね。

 特に古い電池の場合の強制充電時間が30分で良いかどうかですね、私所有の電池は特に古い
 のは秋月から購入したGP−1700が所持期間約5年ぐらいです、10本セットで使ってい
 て充電は定電圧充電(14V)でした、最近充電が旨く出来ていない感じがあり、ばらして2
 本ペアで使う事にして、箱はこの充電器を収めました。

 この10本はメーカー製の充電器では半数ぐらい充電不良でした、当然ですがこのAVR充電
 器ではスベテ難なく充電できました。

 以上でAVR充電器、実験記を終わります。

 AVRマイコンについて以下のサイトを参考にさせて頂きました、御礼申し上げます。
 
      AVRマイコン入門

  最後まで見て頂き真に有難う御座いました、また新作が出来ましたら掲載いたします。

                                               管理者