2024年6月12日水曜日

出入り検知器をPCB化する(その5)

 ここで改めて何を作っているか要求項目を列挙すると、

  1. 人の出入りを検知して声でメッセージ(いらっしゃいませ、ありがとうございました、等)を出す。
  2. 電池で稼働できること(低消費電流)
  3. 専門知識が無くても使える事
  4. 気圧の変化を感じて何かのメッセージを喋る。
  5. 4.を処理するため時計が必要。
  6. 5. の機能を使って時刻に対応したメッセージを喋る。 
  7. 外部制御端子(発声時にONするなど)
  8. 電源電圧の監視と警告機能

といった ところであるが、これに付随して次のような機能を追加した。

  •  時刻、気圧(補正値)の設定
  •  喋る内容を設置環境に応じて変える(家庭用、店舗用など)。
  •  時刻、曜日を指定して喋る機能(毎日、週末、週末以外)
  • 定期的に時刻と気圧、気圧変化傾向を喋る機能
  •  夜間モード(夜間は発声抑止、LEDを暗くする、など)
  •  LEDの明るさを設定する機能
  •  

また次のような機能も実装を予定している

  •  時には声ではなくメロディを流す。

 これらを実現するため、コア部分には低消費電力のPICを使うが、PICに足りない機能は別途実装する。精密時計、気圧計、EEPROMなどである。

 これらのうち大部分はこれまで説明した内容であるが、LEDの明るさを制御するにはPWM(パルス幅変調)を使いデューティ比を変化させる。CLC(プログラム可能なロジックセル)を使ってこれとLEDのON信号とのANDをとったものをLEDに与える。この理屈は簡単であるが実際にこれをPICの機能を組み合わせて実現するには面倒臭いプログラミングが必要である。PIC18F27Q43には8つのCLCを内蔵するがそのうち4つをLED制御に使った。また3つ内蔵するPWM(パルス幅変調器)のうち2つを使って、1つを明るさの調整に、他をLEDのブリンク(点滅)に使った。

CLCを使う上での第一の関門はInput Data Selection on Gates である。ここではPIC内部の数十ある信号の中から4つ、及びその反転信号を選択して取り出すことが出来(つまり8つの入力信号ができる)、4つの出力はそれぞれ8つの入力信号の中から任意の信号を選んでORをとりその正論理又は負論理を取り出すことが出来る。つまりNAND、OR、それにロジック1の何れか及びその反転出力(AND,NOR,0)を実現できる。この出力が上図のkxg1~4である。

次にLogic Functionではあらかじめ設定された4入力の8つの回路(機能)のうちの1つを選択できる。そのうち4-AND、AND-OR、OR-XORを使った。それぞれ負論理で使うと4-OR、OR-AND、AND-XORとして機能させることもできる。次図は8つの機能の内の最初の4つである。

これらを使って赤LEDは次の様に点灯させている(図は分かり易いよう簡略化している)。

このなかのXOR(OR-XORを除く)の2つの入力は等価ではなく上が何らかの信号入力、下がソフトウェアでセットするビットである。即ち輝度はCLC2でBrightnessのPWMとANDを取っているが、警告信号は赤の連続点灯、電圧低下は赤のブリンクで示し、警告と電圧低下が重なった場合にはブリンクの明と暗の時間比を逆転させている。ここで信号名の前の「/」は負論理を表す。

(その6へ続く)

2024年6月10日月曜日

出入り検知器をPCB化する(その4)

 その3に引き続き次のバージョンに向けた開発を進めている。SPIインターフェイスをUARTやI2Cインターフェイスに変更するため、基板を少し手改造した。具体的にはボイスシンセサイザはUART接続に、気圧計、時計、それに新たに追加するEEPROMはI2Cインターフェイス接続に変更した。

 また音階を出したいという要望があるので送信部と同じ8ピンのPIC16F18313を使いUARTで通信する事を前提に回路を設計した。音階はICを追加しないでPIC18F27Q43自体でも対応できると思うが割り込みを使っている関係上不規則に音にブツブツとノイズが入りそうなのでとりあえず安全策をとった。I2Cインターフェイスのデバッグでは安価(\1.5K程度)な中華製ロジックアナライザが活躍した。これはPulseViewというフリーソフトを使うと単にデジタル信号を見るだけでなくプロトコルの解析もできるので非常に便利で有効であった。次図は気圧センサー(LPS-25HB)の0x0F番目のレジスタにあるwho am i 値(0xBD)を読み出しているところ。

 I2Cインターフェイスで一番の問題だったのは時々クロックがローレベル(スレーブからの応答待ち)になったままハングアップする事である。一度ハングアップするとソフトの再起動では解決せず(I2Cデバイスにはリセット端子も無いため)一度電源を落とすしかない。 この点はスレーブからの応答待ちのないSPIが優れており、これに戻す事も検討した。そんな中でEEPROMの説明の中にソフト的にI2Cをリセットする方法が書かれていたのでこれを実装した(下図)。EEPROMはきちっとリセットしておかないと(内部状態が中途半端な時にコマンドを送ると)不正な書き込みが起こる事があるらしい。これでハングアップの問題が解決したのか分からないが必要な機能だろう。

 I2Cインターフェイスのデバッグが済んだ所でKiCADで3世代目のPCBの設計を始めたが、色気を出して最新の KiCAD 8.0 をインストールしたのが運の尽き。バージョン7.0で使っていたフットプリントの一部が使えなくなってしまった。が、いろいろ弄っているうちに何とか使えるようにできた。理由は不明。

 これを使って新しい基板を設計した。基板のサイズは前と同じである。

 前バージョンよりICが2個増えているのでこれらを詰め込めるか心配し、PICのピンの割り当てを配線がしやすいように変更したが実際にパターンを作ってみたらまだ面積に余裕があるようである。いざとなったら表面実装部品を裏面に配置する裏技もある。

 ボイスシンセサイザICにはこれまでATP3011を使っていたが、知らずに(ATP3011だと思って)ATP3012を買い、音が出なくて色々調べているうちにATP3012である事を知った。同時に両者が一部ピンコンパチブルではない事、またATP3012はサンプリング周波数が高く音質が良い事、外付けの発振子(セラミック発振子)が必要な事を知り、新しい基板は両者に対応できるよう設計しなおした(切り替え用のはんだジャンパーは基板裏面に配置した)。

 (その5へ続く)


2024年5月6日月曜日

夜中に異音が・・・

 ゴールデンウィーク中のとある3AM頃、カチャ・・・、カチャ・・・、カチャ・・・という間欠音で目が覚めた。

 音の出所を探ると、どうやらTVらしい。2秒程の間隔でカチャ・・・、カチャ・・・とリレー音がしている。電源の赤いLEDは点灯しているがリモコンで電源を入れようとしても反応がない。このTV は15年くらい前に買ったPanasonicのTH-L20R1という機種だ。録画しただけでまだ見ていない番組が多くあるので復活させたい。とりあえず主電源を切って夜が明けてから調べてみる事にした。

裏蓋を開けると15年分の埃が堆積していたので先ずこれを掃除した。電源基板は独立していたが、そこには操作スイッチやB-CASカードのコネクタも同居している。本体基板にはチューナやコネクタ類などが所狭しと押し込められている。前から気になっていたHDDは本体基板の2階にあり、日立製の2.5インチHDD、250GBのものが付いていてファンで冷却されている。毎日録画して15年も持ったのは凄い。

HDDのSATAケーブルが劣化していて触ると被覆がポロポロと剥がれ落ちた。ケーブルの長さは10cm程度だが、こんな短いSATAケーブル売ってるかな?


電源基板はAC100V、およびそれを全波整流したDC141V、それをスイッチングするMOS-FET等より構成される一次側(高圧部、HOT)と、トランスを介してTVの内部動作に必要な電圧を作る二次側(低圧部、COLD)に分かれ、その間は分離されている。


高圧部と低圧部の間はトランス、リレー、フォトカプラーで絶縁接続されている。カチャ音はこのリレーから出ているようだ。このリレーの役目は後述する。

基板全体を見ても脹らんだり液漏れしている電解コンデンサは無い。電源基板を取り出して電解コンデンサとダイオードのショートをチェックしてみるが、1個のダイオードを除いて異常は見られない。このダイオード(基板上の表記はツエナーダイオード)の両端をテスターで測ると方向性が無く抵抗値も0Ωに近く短絡しているように見える。そこでこのダイオードを基板から取り外し、単体で電圧をかけてみると正常であった(こういう場合電流制限付きの電源装置は便利だ。10mAに電流制限して電圧をかけるとツエナー電圧が分かる。このダイオードは10Vのツェナーダイオードのようだ。この手法はLEDの順方向電圧降下を調べるのにも使える)。

基板を見ると多くのテストポイントの印字があるが具体的な電圧の記載は全くないのでチェックの仕様がない。基板上にチェック用の電圧が記載されているメーカーは多いがPanasonicは相変わらず排他的である。

一次側ではDC141Vを制御する放熱板付きのパワーFET(2SK3869)も怪しいので取り外し、低い電圧をかけてテストしてみたが特に問題はないようだ。

全体的な回路の動作状況をチェックするため基板単独で電源を入れた状態で各電解コンデンサの電圧を測ってみると一次側のDC141Vはもちろん、二次側には24V、18V、8Vなどが出ており、一次側は機能しているようだ。ただし二次側で1個だけ0Vの物がある。こういった電源回路は保護回路が効いている場合は0Vになる事もあり、他のボードと切り離されている状態なので 保護回路が働いていることも考えられ、一概にこれが故障発見といえない事は残念である。デジタル回路に必要な5Vが無いがこれが0V落ちてるのか?或いは5Vは別の電圧からメインボードで作っているのか?

しかしこの0Vの電解コンデンサが繫がっているIC(SI-8105QL=降圧型のスイッチングレギュレータ)付近の基板が少し濃く変色している。

このICはかなり発熱しているようだ。入力に24Vが加印されているのに出力電圧が0V・・・怪しい。このICを取り外した後、スイッチング出力に2.0Vを加えてみて帰還電圧を測ると0.081V位あり、帰還率は1/24.6程度、これがICの基準電圧の0.5Vに相当するはずだから、即ち本来の出力は12Vに設定されている模様。とりあえずこのICを交換してみる事とした。値段は1個300円程度だがそれ以上の送料がかかるのは痛い。

なおこの電源回路は、たとえ主電源SWをOFFにした状態でも電源コンセントを差し込めば常にDC141Vを含め各電圧が出ている。このときAC100Vラインには120Ωのセメント抵抗が挿入されているので電源回路から大きな電力は取り出せないだろう。主電源をONにしてリモコンでTVをONにすると例のリレーによってこの120Ωの抵抗が短絡され電源がフルに稼働するようになっている。フォトカプラーは二次側から一次側への帰還に使われていて、負荷の変動に伴って一次側のスイッチングを制御しているようだ。

コンセントを抜いても電解コンデンサには暫く電荷が残っているので触って感電したり誤って回路をショートさせて壊さないよう取り扱いには細心の注意が必要である。とくに今回のように基板を取り出した状態では負荷が切り離されているので電圧が落ちるまで10分くらいかかる。急ぐ場合は100Ω程度の抵抗でを使って1個ずつ短絡させれば数秒で放電させることができる。

=====

ここで例のICが到着し、交換したが状況は変わらない。

こうなったら少し回路を追いかけてみる必要があろう。という事で SI-8105QLのイネーブル端子(7:EN)から手を付けてみた。直接細かいパターンを追いかけるのは老眼には辛いし、シルクスクリーン印刷に邪魔されて捗らない。こういう場合、私は次の様に写真を撮り
色調変換したパターンを印刷して追いかけている。

そうして雑紙の裏にこんな回路図を描いて検討する。

回路図を元に実際に電圧をかけたりして回路の動作を検証したが、単体では特に問題なく動いているようである。問題は本体基板側からの起動信号が来ていない事が分かった。そこで本体側の配線をトレースしたいが両面基板が物凄い密度(1mm幅に3~4本の配線を通してある)で配線されており電源部の比ではないし部品も両面実装、また部品名の印刷もない事から手が出せない。一応電解コンデンサやダイオードはチェックしたが特に問題はないようだ。

ここでギブアップとなった。ジ・エンド。


2024年4月22日月曜日

出入り検知器をPCB化する(その3)

  出入り検知器のソフトウェアであるが、最初はシリアルインターフェイスを通じてPCと対話する小さなモニターを作って、それを使ってPICの各ペリフェラルの機能を確認しながら次第に拡張していった。

 このやり方をこれからも続けるつもりである。昔、Intelの8ビットCPU(8080)のOS(Kernel)をアセンブラで書いたことがあり、PICでもOSを作った方が開発は楽だが、今更PICのアセンブラに手を出すつもりは無いのでKernelを作るのは無理だろう。

  現在のコンソール(モニター)コマンドは次の様になっている。


  そうこうしている内に次のバージョンのPCBの設計が終りに近づいている。それに合わせたソフトの設計も始めた。現バージョンで使っているSPIインターフェイスは設計やデバッグがやり易い反面PICの足(PIN)を多く使うのでPINが足りなくなる。新バージョンではそこをI2CやUARTに変えることで拡張性を担保するつもりである。またDMAやベクター割り込みを組み込めれば良いなと考えている。

 という事でソフトの説明はもう少し先送りする。

(続く)


2024年2月1日木曜日

出入り検知器をPCB化する(その2)

 その1で説明したPCBであるが、必要な部品を搭載して次の様になった。

次はソフトウェアの番である。

1号機の場合、PICに16F15325を使い、メモリー容量やピン数の関係でモニターを搭載することが出来なかったが、今回の18F27Q43ではモニターを作って、動作を監視しながらプログラムを組み上げていくことができる。18F27Q43のブロック図を次に示す。使用したモジュールは赤で示した。18F27Q43はDMAを内蔵しているが、これを使いこなすところまでは行っていない。

18F27Q43ブロック図
 

 ソフトウェアといっても2023年末の段階でソースファイルが44個に分かれており(うち約半分はヘッダーファイル)簡単に説明できる内容ではないので、開発の概略を述べる。 なおソフトウェアの開発に伴ってハードウェアを修正した部分もあるので、その都度言及する。

プログラム開発の最初の段階では割り込みを使わないで、使う予定の個々のモジュールの設定と動作を確認した。18Fシリーズは機能が豊富で、16Fシリーズと同じモジュールよりも作りは複雑である。例えばPIC16F15325のSPI1とPIC18F27Q43のSPI1の制御レジスタは次の様に違っている。

PIC16F15325のSPI/I2C制御レジスタ構成

 PIC18F27Q43のSPI1制御レジスタ構成

16FシリーズではSPIモジュールはI2Cモジュールと共用になっていて、そのためのレジスタを含んでいる。16Fシリーズが1バイト毎に処理する必要があるが、18Fにはカウンタがあり、纏まった単位で転送できるようになっているようだ。ただし、この場合はDMAと併せて使う必要があろう。何が言いたいのかというと16Fシリーズのプログラムが18Fシリーズでは使えず、18Fシリーズの機能を調べて作り直す必要があるという事である。

信号に関わるプログラムを書くとき、その変更によって結果がどう変わるかを知りたい場合があるが、PIC内部にプローブを突っ込んで直接観測する手段はなく、PPSを使っていずれかのピンに取り出す必要がある。多くのデジタル信号はPPSでいずれかのピンに取り出すことが出来るが、PPSでのピンへのマッピングに制約がある。そこで全ての信号を扱うことが出来るCLCモジュールを使う事で任意の信号を1つのピンに選択的に取り出すことが出来るので、それをオシロスコープ等を使って観測する事ができ、このほ方法は初期のデバッグに役に立った。

 ・・・そうこうしているうちに、ソフトの開発に伴っていくつか変更点が生じたので次のバージョンの基板を発注した。この基板を最低要件の5枚発注して送料込みで3ドル以下である(基板は50%ディスカウント)。これなら毎週新バージョンを発注してもよいくらいである。

1週間ほど経って基板が届いたので早速部品を実装し動作を確認した。特に問題も無く、上手く出来たようである。


ソフトの話は次回以降に回す。

(続く)

 

 


 

 

2023年12月20日水曜日

LT-R6からIC-R6への書き込み方法を公開します

これまで多くにの方々にLT-R6をお使いいただきましたが、特に大きな問題もなく使っていただいているものと思います。

一方、作者はすでに古希を迎えており、(とくに健康を害している訳ではありませんが)今後とも利用者のお問い合わせに回答を続けられる自信がありません。そこでLT-R6からIC-R6への書き込みについて、以下の通り方法を公開する事としますので自由にご利用ください。

なおLT-R6についてのメールでのお問い合わせはこれまで通り受けますので、遠慮なくお問い合わせ下さい。

 【アップロードの方法】

LT-R6の起動スクリプト(LT-R6.bat)の中の起動オプションに「-OMG」を加えてください。例えば、

set LTR6_OPT=-JP -A -UF -OMG

といった感じです。
これでアップロードが出来るようになります。
 あくまで自己責任でお願いします。

なお、プログラムのダウンロードはこちらから。

作者

 

2023年11月22日水曜日

カーナビのハードディスク(HDD)をソリッドステートディスク(SSD)に換装

 壊れるとユニット交換で高額修理の対象となる純正カーナビのHDDをSSDに換装する事が流行っているらしい。一般に自家用車の使用時間はPCに比べると短いだろうが、温度変化や振動などを加味するとPCに比べて使用環境は過酷だ。元々機械的な機構を持つHDDはいずれ壊れる消耗品であり換装(或いは交換)は当然の流れである。これまで問題にならなかったことが不思議なくらいである。

換装で気になるのはコピーしたHDDをナビが認識し機能させられるか、という事である。HDDには製造段階で1台ごとに固有の番号を割り振ってあり、それをソフト的にチェックする事で交換した事が分かる。WindowsはHDDを交換した事を密かにチェックしているらしいがカーナビはどうなんだろうか?先人の実績を見ると特に問題は起きていないようではあるが・・・。

もう1つ気になる点は、コピーの方法である。一般的なHDDのコピーにはUSB-SATA変換ケーブルとTrue Image等のWindows用のバックアップツールを使うが、カーナビ用HDDでは記憶領域の管理方法や実際に使っている領域が異なっている可能性があるため、Windowsで利用している領域のみをコピーするようなツールを使うと失敗する可能性が高い。またHDDはエラーがある領域を検知して別の代替領域を割り当てる機能があるが、これに対応していないとコピーの途中でエラーで止まってしまい正常にコピーできない可能性がある。先人の実例では、エラーを回避しながら全領域をコピーするツールを使ってこの問題を回避しているようである。

わが愛車も無償メンテ期間を過ぎたのでSSDに換装する事にした。

何しろ本件は失敗したら高額修理になるので用心の上にも用心して取り組む必要があり、奮発して、といっても1諭吉もしないが、先人と同じSDDと地獄コピーマシン(クローンマシン)を用意した。これを使えば、コピーの方向が矢印で示されているので操作を誤ってオリジナルのHDDに上書きして壊す心配もない。

YouTubeを参考に車から取り出したHDDは東芝製のMQ01AAD-Cシリーズの200GBの物だった。用意した256GBのSSDに収まる容量だ。


東芝のHPによると「MQ01AAD-Cシリーズはディスク回転数4200rpmの2.5型HDDで、自動車や、工業用途に適している。高度仕様、温度範囲、耐振動性に優れており厳しい環境での利用可能です」とありヘビーデューティのHDDらしい。HDDにはAdvanced Format とラベルに書いてあるが、これは従来から使われてきた512Bのブロックサイズでなく通常4096Bのブロックサイズを使い512Bのブロックサイズをエミュレーションすることで10%程度の容量拡大が見込めるやり方らしい。これは今回の換装には関係無さそう。 

ちなみにHDDの取付ネジはにはロックタイト(緩み止め)処理されており、振動対策は万全だった。

このHDDをコピー器でSSDにデッドコピーして車に取り付ければ終わりである。スタートから1時間半程度経過してコピーは終わった。

これを車に戻して終り。エンジンキーをONにすると何事も無かったように立ち上がった。SSDに換装したことで動きがキビキビになったかと言えば、少し速くなったように感じたが極端な変化はない。しかしこれで、バックアップ用のHDDが確保できたことを含め、高額修理になる確率がかなり減った事で十分元は取ったと考えている。 

もし換装をやりたいと思う人がいたら、車のパネルの分解方法と必要な工具は予めよく調べておく必要がある。特に分解は下手をするとパネルに傷を付けたり固定用の爪を折ったりするからやっかいである。工具が足りないと分解の途中で元に戻したり、或いは無理な作業をやることで損傷を与えたり作業を途中で投げ出す事になる。

次の目標は、内蔵バッテリーがヘタってSDカードが壊れがちなドラレコの新調である。