名張市つつじが丘おもちゃ病院

三重県名張市つつじが丘でおもちゃの病院を開院しています。年中無休で修理は無料、部品代のみ実費です。おもちゃの修理依頼は tutuji@cb4.so-net.ne.jp へメールにてご連絡下さい。なお、宅配便での受け付けは行っておりません。このブログにはおもちゃ等の修理事例やツール製作などを載せていきます。故障診断や修理方法の改善等、ご意見をお寄せ下さい。

ミミクリーペットの修理(ボイスレコーダー・チェンジャー換装)新バージョン

0.はじめに
①ミミクリーペットのCOBチップが故障している場合はPICマイコンで換装することで修理を実施してきた。その状況は当ブログ記事「 ミミクリーペットの修理(ボイスレコーダー・チェンジャー換装) 」で紹介している。その記事で公開している ファームウェア は他のおもちゃ病院様でもご利用いただいているようだ。

②しかし、記憶デバイスにSRAMを採用したため、PIC~SRAM間のバスラインの本数が多い上に、30mm四方の基板に納めるためにPICは28ピンQFN、SRAMは28ピンフラットハーフピッチを使わざるを得ず、視力が衰えてきたドクターには配線作業が難しいとの批判があった。

③当時はPIC16F887-I/PTが140円(2013年11月秋月価格5個700円)だったが、現在は230円(2016年7月秋月価格1個230円で数割無し)に値上がりしているので、他の廉価なデバイスへ変更したいと考えていた。

④そこで、記憶デバイスにシリアルEEPROMを使って配線本数を減らし、且つ、DIPパッケージを採用した構成に変更した。また、表面実装部品の使用を避けて、半田付けに慣れていないドクターにも作り易くした。

⑤本記事は実際に修理を行った事例ではないが、故障品の換装用基板と同等の評価基板を製作して動作確認と仕様の評価を行った。記事としては、過去の修理事例をバーチャルに再現した表現になっている。

1.患者
①タカラトミーアーツのミミクリーペットという小動物のぬいぐるみ系おもちゃ。
ミミクリーペット(マイコン換装新バージョン)外観

②メーカーサイトで確認すると、子どもが話しかけた言葉をロボット風の声に変えてオーム返しする、ボイスレコーダー+ボイスチェンジャーの機能を持つおもちゃである。

2.症状
電源を入れると「ピッピッピッ」と鳴り、その後はまったく動かない。

3.診察
ミミクリーペット(マイコン換装新バージョン)診察1

①基板上の能動部品は3.3Vレギュレータ、COBマイコン、モーター制御用Trのみである。レギュレータの入力と出力は正常である。
ミミクリーペット(マイコン換装新バージョン)診察2

ミミクリーペット(マイコン換装新バージョン)診察3

②マイコンには外付けのクロック発振子はなく、内部OSCを使っているようである。

③電源投入後「ピッピッピッ」と鳴った後、コンデンサーマイクに電源が供給される。この音が何を意味するのか不明。メーカーサイトやその他Web検索でも有用な情報が見付からなかった。

④メーカーサイトのデモ動画を見ると
・再生音は1オクターブ上げたようなロボット的な声になる。

・音声を検出したら録音開始し、音声が途切れたら再生に切り替わる。

・再生が終わると音声待ちになる。

・再生中は頭が上下に動く。

⑤マイクに話しかけても音声出力もモーター制御も動作しない。

⑥マイクの電源はCOBチップから供給されていて、COBからは電圧が出て来ている。

⑦COBチップの音声信号入力ピンに外部から信号を注入しても反応が見られない。COBチップの不良と判断した。

4.治療
①COBチップを1チップマイコン+外部メモリで換装することにした。

②【概要設計】
・PICマイコン+シリアル(I2C)EEPROMでボイスレコーダー・ボイスチェンジャーを実現する。

・4kspsで録音し、倍速の8kspsで再生することでボイスチェンジする。

・8ビットPCMとし、256kビットのEEPROMで8秒間の録音が可能。

・マイコンの条件は、ADC、PWMを内蔵し、ポート数は下記の6本が必要である。
 マイク入力(ADC)に1本
 音声出力(PWM)に1本
 EEPROM接続(I2C)に2本(SCL、SDA)
 モーター制御に1本
 マイクアンプの電源制御に1本

・上記のポート以外に、デバグ時にはシリアル通信ポート(TX)も持っておきたい。

・マイコン+EEPROM+周辺回路が30mm×30mmの基板に納まる大きさであること。これは、このおもちゃに内蔵するための絶対条件である。

・総コストは高々200円であること。これは、おもちゃの修理は無制限にコストを掛けるのではなく、創意工夫を凝らしてコストを抑えるべきという、当おもちゃ病院のルール。

・ピン数としては8ピンPICが使えそうだが、MCLRピンはデジタル入力専用でありアナログ入力には使えないので、実際にはポート数が足りない。そこで、音声出力をモーター制御に兼用させる。音声を出力している間にモーターが動けばよいので、元々音声出力とモーター制御を別ポートにする必然性は無かった。また、デバグ情報出力はマイクアンプの電源制御ポートと兼用させる。

・I2Cモジュールを内蔵していなければ、I2C通信はソフト処理でも構わない。ソフト処理でも300kbpsの性能は出る。

・EEPROMのページサイズが64として、1ページの書込みに対する転送バイト数は67バイトとなり、所要時間を概算すると

 データ転送 67バイト×9ビット/300kbps=2ms
 書込み時間:5ms

 合計7msに対して、音声サンプリング時間は

 64サンプル/4ksps=16ms

 であり、十分余裕がある。

・これらより下記のデバイスを選定した。
マイコンはPIC12F1501(2016年7月秋月価格70円)
EEPROMは24FC256(2016年7月秋月価格90円)

・SRAMと違って、EEPROMは消去/書込み回数に限度がある。それが、当初はSRAMを採用した理由の一つであった。24FC256のデータシートによれば100万回の消去/書込みサイクルが可能なので、1日に100回遊ぶとすれば1万日遊べることになる。これが換装後のミミクリーペットの寿命になる。

③【PWM】
・12F1501のPWMを使ってDACを行う。デジタルアンプを介してPWM信号のままでスピーカーを駆動させる。

・内部16MHzクロックでTMR2プリスケーラを1/1、PRを127に設定すると、PWM周期は32usとなり、可聴周波数外になる。ポストスケーラを1/4に設定することでTMR2割り込み周期を128usとし、再生時サンプリングレートの8kspsに合わせる。4倍オーバーサンプリングとなる。

・128us×128サンプル=16ms毎に再生を2回ずつ繰返して、しゃべるスピードは元のままにする。

④【ADC】
・12F1501のADCは変換時間が約70usで、サンプリング周期の250usに対して十分なスピードである。

・TMR2割り込み処理内でADCをキックすることでサンプリング周期の精度を担保する。録音中はPRを255にして、TMR2割り込み周期を256usとし、録音時サンプリングレートの4kspsに合わせる。なお、録音中もPWMは稼働したままにして、デューティサイクルを0に設定しておく。

⑤【モーター制御】
・モータードライバーとなるFETのゲート信号は、音声出力のPWMを整流して作る。

・当初はショットキーダイオードを使った単純な整流回路でやってみたが、Vddが3.5Vまで下がるとゲート電圧が3Vを割り込むようになり、FETが完全にはオンしなくなった。そのため、一般の高速スイッチング用ダイオードを使った倍電圧整流に代えた。結果、Vddが3.5Vでも5V超えのゲート電圧が確保できた。

⑥【付加機能】
・長時間(2分程度)音声入力が無いときはSleepし、電源の再投入で起動する。

⑦【回路設計】
・回路は、PIC~EEPROM間のI2C接続とマイクアンプ、スピーカアンプ、モーター制御のオーソドックスな構成である。
ミミクリーペット(マイコン換装新バージョン)回路図

・ICSP実行時にPICと周辺回路(モーター、スピーカー)を切り離さなくてもよいように、PWM出力はICSPピンと被らないようにする必要がある。また、マイクアンプからの音声入力はローパスフィルターのコンデンサが繋がっているのでICSPピンとの共用を避けたい。そのため、I2Cのどちらか1本はICSPピンと共用せざるを得ない。SDAがバタつくとスタートコンディションになってしまうので、SCLをICSPピンと共用すれば問題無い。

⑧【ファームウェア開発】
・ファームウェアの開発プロジェクト(MPLABX)は ここから ダウンロードできる。

・ファームウェアの詳細はダウンロードファイルを参照のこと。

⑨【評価基板】
・評価基板を製作し、動作検証した。

・実際に換装する基板のときは、おもちゃ内の基板設置スペースの制限でICソケットは使えない。
IMG_5396.jpg

IMG_5399.jpg

IMG_5403.jpg
・基板の部品配置と配線図はダウンロードファイルに含まれている。

⑩評価
・Sleep時の電源電流実測値は11uAだった。マンガン単4電池で500mAhとすると持続時間は下記となる。

 500mAh/11uA=45454h=1893日=5年

・稼働中で音声入力待ちのときの消費電流は1.7mAだった。

・再生時に音声の頭が欠ける。これは音声信号が録音開始レベルを超えたときに録音開始するため、音声の前兆部分が録音されないためである。前作のSRAM使用版では常に書込みを行っておき、録音開始レベルに達する少し前の時点から再生させているため、音声の前兆部分が欠けることがない。しかし、EEPROMの場合は常に書込みを行っていると記憶素子のダメージが進むため、それができない。また、PIC内部のデータメモリ(SRAM)は前兆部分を蓄えるほどの量が無い。使い方の工夫(しゃべる前にアーとかウーとか付ける)で補っていただくしかない。

⑪製作費用
PIC12F1501 70円
24FC256 90円
基板 30円
CR・Tr・FET・ダイオード等はジャンク再利用

合計190円

今回は表面実装部品を避けてリード部品を使ったことでジャンク部品の再利用がやり易くなり、結果としてコストを抑えられた。

⑫実際の音声
再生音はこれ
スポンサーサイト
  1. 2016/07/14(木) 23:18:06|
  2. 修理事例
  3. | コメント:2

XC8での内部OSCキャリブレーション値の設定

サーフボーイの修理(クローンリモコン製作)」 は依頼元の要件で12F509がご指定だったので、そのデバイスでファームウェアを開発したのだが、必要なポート数はたった3本であり10F222や10F322でも対応可能だ。2016年秋月価格は12F509が@50円、10F222と10F322は@45円となっている。10%もコストダウンできる。

ということで、10F222と10F322へのファームウェアの移植を行ったのだが、思わぬトラブルに遭遇してしまった。

サーフボーイの修理(クローンリモコン製作)」 の当初の開発環境はMPLABだったが、その後開発環境をMPLABXに変えていて、今回はXC8を使うことになった。

【問題点】
XC8では内部OSCのキャリブレーション値をOSCCALに設定してくれない。スタートアップに movwf OSCCAL が入っていないのだ。

XC8での内部OSCキャリブレーション値の設定1

ProjectProperties の XC8 linker の Calibrate oscillator にチェックを入れると、スタートアップに movwf OSCCAL が展開される。僕が知らなかっただけでMicrochip社が悪い訳ではない。デフォルトではチェックされていないので、12F509や10F222などOSCCALの設定が必要なデバイスを初めてXC8で使うときには注意が必要だ。

XC8での内部OSCキャリブレーション値の設定2

XC8での内部OSCキャリブレーション値の設定3

【対策】
正規の対策は 「プロジェクトを新規作成するときに Calibrate oscillator にチェックを入れること」 なのだが、おもちゃドクターにはPICのファームウェア開発の知識を持っている人は少ない(ここまでに書いたことがピンと来ない人は該当する)と思うので、Calibrate oscillator にチェックを入れてなくてもよいように、アプリケーション側でOSCCALを設定するようにした。

OSCCALの設定値はリセットベクタのコードでWレジスタに設定され、この値を速やかにOSCCALに設定しなければならない。

「速やかに」 というのはスタートアップでWレジスタが壊される前に、ということだ。そのためには、アプリケーションでのOSCCAL設定のコードを絶対0番地に配置しなければならない。そのコードが下記である。

XC8での内部OSCキャリブレーション値の設定4

これをアプリケーションの関数の外に置いておけばよい。場所はどこでもよいのだが、ソースコードの初めの部分に置いておくのが目立ってよいと思う。

HEXファイルを見ると0番地に 0x0025 (movwf OSCCAL) が入っている。

XC8での内部OSCキャリブレーション値の設定5

サーフボーイの修理(クローンリモコン製作)」 のダウンロードファイルには反映済みである。
  1. 2016/07/10(日) 17:55:47|
  2. PIC開発
  3. | コメント:0

Q-STEER送信機の修理(マイコン換装)

1.患者
Q-STEER 2台
Q-STEER送信機(マイコン換装)1

2.症状
①動かない。

3.診察
①2台とも送信機から赤外線が出ていない。

②COBチップの間際で、GND、Vcc、SW入力を確認したが異常を認めず。LEDへの出力は出て来ない。

③外付けの発振子は無い。

④1台はクロック発振の時定数と思われるCR部品があり、25kHz~30kHzで変動する矩形波が載っていた。放置しておくと時折赤外線が出てくるが、デタラメな信号である。

⑤送信機のCOBチップ不良と判断した。

⑥Q-STEERのクローン送信機から赤外線を送ると車は2台とも正常に動くので、車体の方に不具合はない。

【クローン送信機】
Q-STEERクローン送信機

4.治療
①COBチップをPICで換装する。

②Q-STEERのプロトコルは、多くの先達がWebに公開している。このブログでも 実機を調査した結果 を公開している。診察で使ったク ローン送信機は、 おもちゃドクター研修会の製作ネタ で作ったもので、そのファームウェアをベースに開発する。

③クローン送信機には、Sleep/WakeUpの機能は無かったので、今回はそれを実装して実用的なものに仕上げる。

【デバイス選定】
④入力は操作ボタンの前、後、左、右、ターボで5本。出力はLEDの1本。内蔵モジュールは必要無くて、I/Oポートさえあればよい。8ピンDIPの最安で12F509(2016年秋月価格@50円)を選定した。

⑤Q-STEER送信機はch切替え機能があり、スライドSWにてchA、chB、chC、chDの何れかが選択できる。しかし8PINのデバイスではもう空きポートが無く、このSWの読み取りに独立したポートを割り当てられないので工夫が必要だ。ピン数の多い16F1503(2016年秋月価格@80円)を採用すればよいのだが、コストが1.6倍に跳ね上がってしまう。それと送信機内部の空き空間が小さいので多ピンのデバイスは実装し難い。

【設計】
⑥操作ボタンを読み込んで、エンコードして、赤外線LEDを点滅させるだけなので、運転操作の機能を設計する上では特段の問題は無い。

⑦Sleep/WakeUpの設計では考慮すべき事項がある。12F509ではポートチェンジによるWakeUpが可能なのはGP0、GP1、GP3の3本なので、すべての操作ボタンでWakeUpさせることができない。そこで、左と右のボタンはWakeUpの対象から外した。前、後のボタンが押されないと車は走らないので、左と右の単独の操作で動かなくても実害はない。

⑧ch番号の設定は、電源オン後に最初に押された操作ボタンでchを決定することとした。その対応付けは以下のとおりとした。

 前:chA、後:chB、左:chC、右:chD

・Q-STEERの送信機には電源SWがないので、「電池を入れた後に最初に押された操作ボタン」ということになる。

・ch番号設定の具体的な手順は以下の通り。

1. 送信機に電池を入れる。このときターボボタンを押さないように注意する。

2. 前後左右のボタンの何れかとターボボタンを同時に押す。

・電源オン後にch番号が設定されるまで操作ボタンをポーリングをし続けると電池を消耗してしまうので、Sleepしてボタンが押されるのを待つことになる。しかしWakeUpできるのは3本だけなので、WakeUpの要因となったポートでchを決定することができない。そこで、ターボボタンと上記のch選択ボタン(前、後、左、右)を同時に押してch番号を決定する操作方法とした。

・ch番号を変更する際に電池を抜き差しするのが面倒なので、ターボボタンのみを2.5秒以上長押しするとch番号を含むすべてのデータを初期化するようにした。従って、通常の運転操作ではターボボタンのみの長押しを禁止する制約になる。元々ターボボタンは停止の信号が送信されるようになっていて、停止を長時間送信し続ける必要性はないので実害はないと考える。

・ch番号再設定の具体的な手順は以下の通り。

1. ターボボタンを3秒以上押す。

2. 前後左右のボタンの何れかとターボボタンを同時に押す。

・12F509はSleepからWakeUpするとResetされる。STATUSのGPWUFにPORかWakeUpかのReset要因が表示されているので、PORのときにはch番号設定を行い、WakeUpのときには設定済みのch番号を引継ぐ。

・隠し機能として、送信機に設定されたch番号を受信側へ通知する機能、所謂ペアリング機能を持たせた。受信側を8ピンPICで換装する必要が生じた場合に、ch番号設定SWを読み込むポートが残っていないので必要になる機能だ。正規製品では使われていないコマンドコードb’0000’でch番号を送信する。

⑨実装して判ったことは、電源を入れ直してもPORしないこと。12F509にはBORが無いのでVddが相当下がらないとリセットされない。と言って放電用の抵抗を付ける訳にもいかない。そこで、電源オン(電池セット)の前に左または右のボタンを3秒間押して貰うことにした。このボタンには外付けのプルアップ抵抗が付いているのでCPUの状態に関わらず、完全に放電させることができる。電源のパスコンは10uF、プルアップ抵抗は33kΩであり、時定数は330msになるので3秒あれば放電する。

・電池交換の具体的手順は以下のとおり。

1. 電池を外す。

2. 右ボタンを3秒以上押す。

3. 電池をセットする。

4. ch番号の設定を行う。

⑩ファームウェアと資料は ここから ダウンロードできる。

⑪回路図は省略(特殊な回路ではないので作っていない)。ポートの割り当てはソースコードのコメントを参照。

【実装】
⑫不良のCOBチップはエンドミルで基板から削り落とした。

⑬元々の基板では操作ボタンはハイサイドに配置されていて、正論理でCOBチップに入っていた。しかし、PICにはポートのプルダウン機能が無いので、負論理になるように配線を変えた。なお、GP2とGP4には内部プルアップ機能が無いので33kΩを外付けした。

⑭部品代

・12F509 50円
・セラコン106 5円
・抵抗33kΩ×2 2円
 合計57円(1台当たり)

Q-STEER送信機(マイコン換装)2

Q-STEER送信機(マイコン換装)3

Q-STEER送信機(マイコン換装)4


⑮実装後のファームウェア書換えはICクリップでプログラマーと繋いで行っている。これが一番簡便でコストが掛からない。
Q-STEER送信機(マイコン換装)5

Q-STEER送信機(マイコン換装)6
  1. 2016/07/05(火) 00:27:25|
  2. 修理事例
  3. | コメント:0

プロフィール

大泉茂幸

Author:大泉茂幸
名張市つつじが丘おもちゃ病院
名張市つつじが丘南3番町129
tutuji@cb4.so-net.ne.jp
090-5534-6494
連絡は上記のメール、またはSMSでお願いします。

子どもの頃から趣味は電子工作一筋でやってきました。理科離れが進む中で科学技術に興味を持つ子どもが少しでも増えて行くことを願って、子ども達に電子工作の活動の場を提供しています。

1981年からおもちゃ病院の活動を始め、2014年に三重県名張市への移住を機に「つつじが丘おもちゃ病院」を開院しました。自分でおもちゃを設計し製作する【おもちゃ工房】と、マイコンを応用した電子工作を楽しむ【マイコンクラブ】も併設しています。新規参加メンバーを募集しています。

本ブログで公開している技術情報や成果物のご利用および再配布はフリーです。読者様の技術活動のお役に立てば幸いです。ご利用いただいた結果や感想等を記事へのコメントやメールでフィードバックしていただけると有難いです。

最新記事

最新コメント

月別アーカイブ

カテゴリ

おもちゃ病院 (7)
技術情報 (9)
修理事例 (143)
製作記事 (77)
ドクター研修会 (2)
PIC開発 (9)
未分類 (9)

訪問者数

検索フォーム

RSSリンクの表示

リンク

このブログをリンクに追加する

ブロとも申請フォーム

この人とブロともになる

QRコード

QR