製作モジュール一覧

2021年9月5日日曜日

STM32CubeIDE サイクル・カウンタ(CYCLECOUNTER)を使って処理速度を測定

STMicroのWebサイトで、CYCLECOUNTERレジスタを使ってマイコンの処理速度を測定する方法が紹介されています。

マイコンの演算速度を測る(その2)https://www.stmcu.jp/technical/hint/no-085/

GPIOをHigh/Lowさせて計測するよりスマートです。サイクル・カウンタとGPIO両方で処理速度を測定し、比較してみました。サイクル・カウンタの計測とGPIOの出力をオシロで観測した結果はほぼ同じ値になるはずです。

STM32CubeIDEのバージョンは1.7.0です。

MXの設定


Clock
HSE→PLL
HCLK:180MHz

Pinout & Configuration
System Core
  GPIO
    PA10
      GPIO mode: Output Push Pull
      Maximum output speed: Very High
      User Label: PIN_CHK1

ソースコード(main.cに追加)


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    HAL_GPIO_TogglePin(PIN_CHK1_GPIO_Port, PIN_CHK1_Pin);
  }
  /* USER CODE END 3 */

ConfigurationはDebugで、最適化なし(-O0)

最適化の設定方法は「STM32CubeIDE: 覚え書き」の「Buildの設定」で書きました。

サイクル・カウンタで計測


公式ページの説明は少し分かりづらかったので、注釈をつけてみました。


① Run-Debug(F11)でDebug開始


Debugを開始するとint main(void)のHAL_Init()で停止します。

② 希望の測定開始BreakPointまでコード実行(Resume,F8)


行頭をダブルクリックするとブレークポイントを切り替えられます。ブレークポイントを設定し、F8を押します。

③ Window-Show View-Memory Browserを選択し、0xE0001000番地に移動


Memory Browserのテキストボックスに「0xE0001000」と入力し「Go」をクリックします。

④ 0xE0001000のLSBビットを‘1’に変更(CYCLECOUNTERの開始)*初回のみ


Memory Browser内で右クリックしてメニューを表示→「Cell Size」で1byteを選択します。0xE0001000のセルをクリックし「01」と入力しEnter。



⑤ 希望の測定終了BreakPointまでコード実行(Resume,F8)


⑥ 0xE0001004の値を確認(= CYCLECOUNTERの値)


Memory Browser内で右クリックしてメニューを表示→「Cell Size」で2byteを選択、「Radix」でDecimal Unsignedを選択。16byte区切りで10進表示になります。



⑦ 以降の測定Pointについては、0xE0001004の値を‘0’に変えて、②⑤⑥の繰り返し(④の再設定は不要)


0xE0001004, 0xE0001005のセルに「00000」と入力し、Enter。


今回は、

HAL_GPIO_TogglePin(PIN_CHK1_GPIO_Port, PIN_CHK1_Pin);

にBreakPointを置いて実行しました。Resumeすると、Whileループ内で再び同じ行に戻ります。

私の環境では、whileループの1回目は54、2回目以降は50となりました。1回目は何か特別な処理が行われていると思います。

50cycleとすると、180MHz駆動なので、(1 / 180MHz) * 50cycle ≒ 277.7ns

オシロでD2(PA10)の出力を観測


BreakPointを外し、Run-Debug(F11)、Resume(F8)して計測しました


周期 T = 555.2nsなので、Toggle1回分は半分の277.6nsです。

CYCLECOUNTERでの計測の結果とオシロの観測結果がほぼ等しいので、CYCLECOUNTERで処理速度を測定できているようです。

2021年8月31日火曜日

FV-1テスト用基板の製作 その2

FV-1のアナログ入力ピン、PIN1、PIN2は1.65Vのバイアスがかけられているようです。したがって前回のように単に100kΩの抵抗と置き換えた場合とは入力保護用のダイオードによる歪み方が異なります。むしろ歪はほとんどなくなりました。

回路図

アナログ入力ピンへの入力信号


電源は3.3Vです。

入力信号なし(入力はGNDにショート)

C1:入力 C2:PIN1

無信号時、PIN1の電位は1.66Vです。

入力信号 1kHz/1Vppサイン波 GND~+1V

C1:入力 C2:PIN1

GNDから正側の1Vppの入力です。PIN1は1.66V付近のバイアスがかかっています。

入力信号 1kHz/1Vppサイン波 -0.5V~+0.5V

C1:入力 C2:PIN1

-0.5V~+0.5Vの1Vpp入力です。C6でACカップリングしているため入力信号のDC成分は取り除かれ、同じく1.66Vのバイアスがかかっています。

入力信号 1kHz/2Vppサイン波 -1V~+1V

C1:入力 C2:PIN1

2Vppの入力でも波形に歪みは見られません。

FV-1のデータシートに、Maximum input signal levelは2.6V/Min、3.0V/Maxとなっているのでこれぐらいの振幅で使うのがよさそうです。絶対定格はAVDD+0.5V(3.3V駆動だと3.8V)ですが振幅が大きすぎると内部演算で波形がクリップします。秋月のモジュールはClip LEDが実装されているのでLEDの点灯で判別がつきます。

出力波形


いくつかのプログラムで出力の波形を観測しました。入力は1Vpp/1kHzサイン波、パラメータ設定用のPOTは中点付近の設定です。

Prg#:0 Chorus-reverb


C1:LOUT C2:ROUT

Prg#:3 Pitch shift


C1:IN C2:LOUT

POT0を左いっぱいに回した状態。


C1:IN C2:LOUT

POT0を右いっぱいに回した状態。

Prg#:6 Reverb1


C1:LOUT C2:ROUT

Prg#:7 Reverb2


C1:LOUT C2:ROUT

Reverb1とReverb2はL/R chで出力が異なります。モノラル信号をステレオ化できますね。

2021年8月22日日曜日

FV-1テスト用基板の製作

FV-1のテスト用の基板を製作しました。FV-1は秋月のDIP化モジュールを使用しています。


回路図

FV-1 DIP化モジュールに掲載されている回路図をもとに、ピンヘッダをジャンパでショートすることで内蔵プログラムを選択できるようにし、パラメータ設定用のPOTも使えるようにしています(基板上では3pinのピンヘッダを出している)。

FV-1は3.3V駆動で、アナログ入力は -0.5/Min、AVDD+0.5V/Maxとなっているためショットキーバリアダイオードで過電圧保護しています。

入力保護のシミュレーション


入力部の特性をLTSpiceでシミュレーションしました。データシートにアナログ入力インピーダンスは、80kΩ/Min、120kΩ/Maxとあるので100kΩの抵抗で置き換えています。

シミュレーション回路図

実験ではSBDは1S4を使いましたが、Deviceが見当たらないのでシミュレーションでは1N5819を指定しています。

+1Vpp入力の過渡解析

正側の1Vpp/1kHzのサイン波を入力した場合の過渡解析です。下側が少し歪んでいます。

±5Vpp入力の過渡解析

±5Vppのサイン波を入力した場合の過渡解析です。-0.2V~+3.5Vで振幅が制限されています。

AC解析

秋月の作例から定数を決めたのですが帯域が少し狭いですね。3kHzで-3dBとなっています。

出力フィルタのシミュレーション


シミュレーション回路図

RC一次のLPFとHPFの組み合わせです。

AC解析

高域のカットオフ周波数は70kHz付近です。FV-1のサンプリング周波数Fs=48kHzなので少し広すぎですね。24kHzあたりで切りたいところです。

実験



+1Vpp入力

正側の1Vpp/1kHzのサイン波を入力した場合、やはり下側が少し歪むようです。

±5Vpp入力

±5Vppのサイン波を入力した場合、-0.21V~+3.54Vで振幅が制限されています。FV-1の絶対定格ではVDD=3.3Vの場合、-0.5V~+3.8Vなので振幅制限は十分でしょう。

入力部の周波数特性

実験でもカットオフ周波数は3kHz付近となりました。

出力部の周波数特性

高域のカットオフ周波数は70~80kHz付近です。

入力部の周波数特性の帯域を広げる


C7を0.047uFをFV-1のデータシートのアプリケーション・ノートの定数、1nF(1000pF)程度にすると改善します。

シミュレーション回路図

AC解析

このコンデンサ(C7)はピンソケットを使わず直にはんだ付けしてしまっているので交換しづらいです。どの定数がいいかは音出ししてみないとわかりません。入力バッファとDRY/WETを調節する出力ミキサ部を製作する予定です。