マイコン工作実験日記

Microcontroller を用いての工作、実験記録

DWM STM32基板で遊ぶ (その3)

2008-04-22 23:02:13 | Weblog
Q-STEERリモコンのソフトについて簡単に記録しておこうと思います。

Q-STEERで用いられている赤外線信号については公式な資料があるわけではありませんが、独自に調べられている方は何人もいらっしゃるようです。わたしは、Q-STEER赤外線信号解析abetuyo blogの記事を参考にさせていただきました。この仕様の信号を生成するにはTIM2とTIM4の2つのタイマを使っています。TIM4は38KHzの搬送波を生成するのに使っています。出力比較モードを使って13us毎に出力を反転(toggle)させることで38KHzを生成しており、TIM4_CH1の出力を2SC1815で電流増幅させて赤外線発光ダイオードをドライブしています。

TIM2では38KHzをオン/オフさせる時間を生成するための基準タイマとして425usを生成しています。Q-STEER赤外線信号解析では、0.5msとして説明されている部分の時間ですが、abetsuyoさんの調査結果とのあいだをとって425usとしています。ヘッダの時間も制御信号の時間も、この基準時間の倍数となっていますので、このタイマの満了時に、出力すべき信号のフォーマットに合わせて38KHzを生成開始させたり止めたりすることで信号波形を作成しています。

ADCは連続モードを使っていますが、加速度センサはX軸しかみないことにしたので、スキャンモードは使わずに1chだけを変換させています。変換終了時に割り込みをかけて、8サンプルの変換結果の平均値を使うことにしています。

タクトスイッチは、もちろんGPIO入力に設定したポートにつないでいます。ボタンが押されていない状態では、TIM2とTIM4の両方のタイマを停止してしまい、赤外線信号の生成を止めるようにしています。Q-STEERを停止させるためには、ほんとは 停止を指示するための制御コードを送った方がいいのですが、信号生成を止めてしまうことで間に合わせています。そのため、スイッチを話してもしばらくは、Q-STEERは動き続けてしまいます。

STM32では、タイマやADCが結構機能豊富な印象を受けました。DMAと組み合わせて使おうとすると色々な設定があるので、慣れるのにちょっと時間かかりそうです。2つのタイマをつなげて使い、片方の出力でもう片方の動作を制御することもできますので、この機能を使って38KHzの変調をかけてもいいかもしれません。