うまく動かないテストプログラム(mbed-cli)
https://github.com/ryood/Nucleo_DCO/tree/master/mbed/Nucleo_DCO_Test06
MCP3008によるPOT値の読み取り
単体のテストプログラムを書いてMCP3008から読み取る時間を計測しました。
オンラインからライブラリ(mcp3008)を追加
> mbed add https://os.mbed.com/users/ryood/code/mcp3008/
MCP3008のテストプログラム(mbed-cli)
https://github.com/ryood/Nucleo_DCO/tree/master/mbed/MCP3008_Test01
ch1:D4 ch2:D5
ch1は16ch分、ch2は1ch分でH/Lしています。1ch分で48.3usかかっていて100kHzのサンプリング周期の10usより長くなっています。
はっきりとは言えませんが、Nucleo_DCO_Test06がうまく動作しないのは、MCP3008とのSPI通信中に何かが競合して処理が戻ってこない可能性が高いためだと思います。
内蔵ADCによるPOT値の読み取り
NucleoF767ZIは12bit ADCが24chあり、ZIOヘッダにも18ch分引き出されています。そのうち2chはDACと共用されています。
内蔵ADCのテストプログラム(mbed-cli)
https://github.com/ryood/Nucleo_DCO/tree/master/mbed/InternalADC_Test01
ch1:D4
内蔵ADCの読み取りは7.88usです。これもかなり遅いですが100kHzのサンプリング周期の10usよりは短いです。内蔵ADCの読み取り中に割り込み(Ticker)が優先されればOKです。
内蔵ADCでNucleo DCOのPOT入力を読み取り
前回の3オシレーターMIXするテストプログラムに結合しました。
u8g2-mbed + DDS(3OSC) + 内蔵ADCの結合テストプログラム(mbed-cli)
https://github.com/ryood/Nucleo_DCO/tree/master/mbed/Nucleo_DCO_Test07 (69e60db6bbf20065a08d25b653dfb63fc732724e)
処理時間の計測
メインループのタイミング
周波数は7.752Hzになっています。OLEDに表示させているFPSも7.8fps程度になっています。
波形出力の割り込み処理のタイミング
サンプリングレート100kHz程度で(ジッターあり)、処理時間は2usです。まだ余裕がありそうですが、サンプリングレートを倍の200kHzにするとメインループに処理が戻らず、割り込みも処理落ちしてしまいました。
波形出力
POTで周波数がだいたい200Hz、100Hz、50Hzになるようにして波形出力しました。
UART_TRACEを有効にして読み取ったパラメーターを表示
OSC1:drate OSC1:phase OSC1:PulseWidth OSC1:amplitude OSC2:drate OSC2:phase OSC2:PulseWidth OSC2:amplitude OSC3:drate OSC3:phase OSC3:PulseWidth OSC3:amplitude 201.648364 0.012698 0.012943 0.159463: 98.107455 0.012698 0.011233 0.155800: 50.439564 0.012454 0.010745 0.157265: 201.453004 0.012943 0.012943 0.160684: 97.912095 0.009524 0.010745 0.157265: 50.439564 0.013919 0.012698 0.159707: 201.501844 0.012210 0.008547 0.160928: 97.912095 0.012210 0.010745 0.156532: 50.390724 0.012698 0.012210 0.156288: 201.697204 0.012943 0.012454 0.161416: 97.912095 0.010745 0.010989 0.156777: 50.341884 0.012210 0.012454 0.156777: 201.892564 0.011722 0.012454 0.159707: 97.814415 0.008059 0.010989 0.155556: 50.293044 0.011477 0.011966 0.156288:
読み取り値はfloat型で、結構ふらついています。
出力波形はUART_TRACE、CHECK_PINを無効にして計測しました。
3オシレーター合成(OSC1 + OSC2 + OSC3)
他のチャンネルのLevel POTを最小にして1chだけのオシレーターの波形出力を計測しました。
OSC1のみ
OSC2のみ
OSC3のみ
特にOSC3の波形が歪んでいますが、POTの読み取り値がふらついているためだと思います。ADC読み取りを抑止して、プログラム上でパラメーターを決めて(OSC1、OSC2のamplitude=0.0、OSC3のamplitude=0.3にした)出力すると以下のように比較的きれいです。
メモ:
波形を増やす。波形切り替え。
Range切り替え。
ADCの読み取りは内蔵でもかなり時間がかかる。
Freq POTを回すと周波数の変化がトビトビ。Phase POT、Level POTを回すとブチブチ。→補完する?
0 件のコメント:
コメントを投稿