360度グルグル回したろ
360度グルグル回したいで紹介しました旭化成のAK7401、これで「アレレ?」な事態に遭遇しました。
※先に言っておきます・・・チップは悪くない
12bitの数値で角度データが読み出せるという仕様で、8pinのチップの中にこんな回路が詰まっています。
マイコンとは3線で接続します。
チップセレクトとクロック(この2つは入力信号)、そしてSIN/SOUT信号。
SIN/SOUTは双方向の信号です。
制御はこんなタイミング。
CSをHにしてからクロックに同期したコマンドを与え、クロックに同期して出てくる12bitの角度データを読み取ります。
このとき、途中でマイコンポートの入出力を切り替えます。
マイコンとはこんな接続。
※ICクリップの絵の説明は後述
R2とR3はマイコン起動前の状態を安定させるためのプルダウン抵抗。
R1はPort02とSIN/SOUT信号の衝突よけ。
正常に運転しているときは大丈夫ですが、何か異常がおこったとき、出力同士が衝突したときの短絡電流を減らすためのもの。
「片方がH、もう一方がLで制御が止まってしまったら怖いかも」を避けるための抵抗です。
Port02はマイコンの内蔵プルアップ抵抗をオンしてフローティング状態を避けます。
制御プログラムはマイコンI/Oポートの直叩き。
CSとSCLKをHにしたりLにしたり。
出力データと入力データをシフトしてパルスの数を数えて・・・
これの繰り返し。
しかし・・・最近のマイコンは高速。
何もしないと出てくるパルスは「ン十nS」のタイミング。
命令のプリフェッチもあるしで、「Z80」の頃のようにはいきません。
※微妙な時間調整、「NOP」命令頼りなんは同んなじか・・・
AK7401で規定されているタイミングは守ってるつもりでプログラムを仕上げていました。
ところが・・・「もういっぺん確認しておこう」っと上図の「テストクリップ」の絵のようにオシロのプローブをつないで制御波形を観察した所、出てくる角度データが狂いだしたのです。
それまで、安定に動いてましたんで「なんで?」です。
こんな時は冷静にならなくてはいけません。
ついつい、よけいなことをしてしまいます。
発端はオシロのプローブ接続なんですから、プローブ(GNDラインも含めて)がどっかに接触でもしてない限り、「プローブが負荷になったんじゃ?」と考えるのが真っ当。
プローブの代わりに「小さなコンデンサを信号-GND間に入れるとどうなるか」あたりが検証手法でしょう。
今回も大当たり。
SIN/SOUT信号につないだプローブTP3、TP4が悪さをしてました。
どっちか片方でもつなぐと×。
オシロのプローブ直当てじゃなく、ICクリップ+ミノムシクリップを10cmばかりのリード線でつないだ延長コードを使っているのでこれも関係します。
短絡保護に入れた抵抗100Ωでよけいに遅延してるようです。
今回は、制御プログラムのタイミングをちょいといじって解決です。
過去、この手のトラブルというかトラブル解決の手法、いろいろありました。
『基板のこのあたりを指で触ってたらS/Nが上がる』
『下間はんの指をもらって標準添付品で出荷やなぁ』
などなど。
最近のコメント