SSブログ

dsPIC33 AD変換データ表示・保存装置

 音声入力でテレビにリモコンの消音コマンドを送る装置(消音リモコン - 経緯は「赤外線リモコン実験機」参照)を検討するために、音声入力をAD変換したデータを保存することが必要でしたので作ってみました。
ハードウェアは 「PICでグラフィックLCDとSDカードを使う」 で作ったものをベースにPICをdsPIC33FJ64G802に変更してアナログ入力、トリガー入力、ボタン入力を追加した図1に示すものと、図2に示すマイクアンプ及びトリガー回路とボタン回路で構成されます。

図1 ADC & データ表示・保存部回路
dsPIC33_ADC回路図1.jpg

図2 操作ボタン回路とアナログ信号回路例
dsPIC33_ADC回路図2.jpg


ソフトウェア、使用方法は以下で参照、ダウンロードできます。
ソフトウェア (dsPIC33FJ64GP802用)
ソフト修正内容 <2022.05.27追加>
<2022.05.25> XC16 v2.00 コンパイラではGFX_Libraryでエラーが生じました。解決できない場合はXC16 v1.70をお使いください。
<2023.10.02記>「PICライター(PICerFT)の製作」でPICライターの自作方法を紹介しています。

使用方法
Excelでのグラフ表示方法

 音声データは2秒間分ぐらい保存したいのですが、dsPIC33FJ64G802のデータメモリーは 16kBしかないのでサンプリング周波数を まずは1kHzにして2048個(必要なメモリーはx2 Byte)のデータをキャプチャーするようにしてみました。
サンプリング周波数はTimer3の設定を変えれば変更できますが、今回のソフトウェアではキャプチャー数は2048個で固定なので周波数を上げるとキャプチャー時間は短くなります。 
20kHz, 40kHzでも動作しましたが得られるのはそれぞれ約100ミリ秒、50ミリ秒分のデータです。 (データメモリーにはまだ余裕があるようなのでキャプチャー数を2048個より増やすことが可能だと思います。)

 ADCデータは12bitで、1KBのDMA(Direct Memory Access)バッファ2つにピンポンモードでデータを512個(1KB)ずつ交互に入れて行きます。
(仕様上DMAバッファは最大2KB なので1つのバッファあたりは1KBとなり、ADCデータはワードデータなのでバッファには最大512個の変換データを入れることができます。 
A、Bの2つのバッファでそれぞれ2回ずつ満杯にすれば2048個の変換データが得られることになります。)

 DMAピンポンモードなのでCPUはADCによる書き込みの行われていない方のバッファにアクセスしてデータを処理できます。
バッファを512個のデータで満たすのに必要な時間(ピンポンの切り替え時間)はサンプリング周波数によって異なり、例えば 1kHz, 20kHz, 40kHz の場合それぞれ512mS, 25.6mS, 12.8mSかかります。
今回は1kHz仕様なので512mSで、その間にグラフ表示用の配列にDMAバッファからデータ転送しています。
(この転送時間はデバイス動作クロックFcy (18.425MHz = 1/2 Fsoc) に依存して決まり、サンプリング周波数に関わらず約500uSでした。)
将来的にはこの時間にFFTなどの処理ができればいいなあと思うのですが、経験がなくてFFTにどのくらい時間がかかるのかわからないので可能かどうかは分かりません。
またこの間に外部メモリーにデータ転送できれば継続的なデータキャプチャーができるのですが、SDカードでは遅くて使えませんでした。(SPIのクロック周波数を上げても処理が追いつきそうにありません。)

次はFFT処理に挑戦します。


===== 関連記事 =====
PICでグラフィックLCDとSDカードを使う
dsPIC33 FFT変換とデータ表示・保存装置


>> ブログ記事一覧へ
nice!(0) 
共通テーマ:趣味・カルチャー

nice! 0