2021年9月26日日曜日

RS Pro トロイダルトランス(2x15/7.0VA)の動作確認

RS Proのトロイダルトランスを購入したので、動作確認しました。



基板取付型で2次側の定格は15V/233mAです。

テスト配線図

1次側を115Vとする場合は6-4ピン、5-3ピンを接続します。2次側は12-13ピンを接続して直列にしています。2次側にセンタータップが出ているトランスと同等になります。

ヒューズは誤配線の対策として、0.5A品を入れました。


※画像はRL=220Ωで測定しています。

2次側をオープンにした場合、負荷抵抗RL1=RL2=100Ωとした場合について出力電圧を測定しました。

2次側オープン

CH1:11-12(GND)ピン CH2:14-13(GND)ピン

無負荷の場合出力電圧は、17.83Vrms / 18.16Vrms

2次側 RL1=RL2=100Ω

CH1:11-12(GND)ピン CH2:14-13(GND)ピン

100Ω負荷の場合出力電圧は、15.23Vrms / 15.18Vrms

出力電圧 Vo = 15.2V とすると

I = Vo / RL = 15.2 / 100 = 152mA
P = Vo^2 / RL = 2.31W

2021年9月22日水曜日

PT2399 Echo (Eurorack仕様)の製作 その2

パネルに取り付けました。



PT2399 Echoを2台使ってピンポンディレイをやってみたいので、入出力はそれぞれ2系統にしました。出力は基板からは1端子しか出していないので、ジャックを2個並列に配線しています。

逆相出力


回路図

INV_OUTはPT2399のDelay音を逆相で原音とMIXするものです。原音は同相のままです。パルス波を入力してOUT(同相)、INV_OUT(逆相)出力を観測しました。

入力は5Vpp/2msのパルス波、Delay最小、DRY/WET最大です。

Feedback=最小

C1:OUT C2:INV_OUT

Feedback=3/4程度

C1:OUT C2:INV_OUT

Feedback=最大

C1:OUT C2:INV_OUT

0msの波形は原音でOUT、INV_OUT同相ですが、後続のDelay音は逆相になっています。

モノラルのシンセの出力をPT2399 Echoに入力し、PT2399 Echoの出力をPanで左右に振ってやるとステレオ効果が得られました。いままでずっとモノラルで聴いていたのでベタなステレオ化でも新鮮な感じです。

PT2399について参考


ELECTRO SMASH PT2399 Analysis

Princeton Technologyのデータシートは読んでもよくわかりません。こちらのサイトは動作機序について丁寧に説明されています。


外付けのコンデンサについて考察・実測されています。PT2399の互換品?についても触れられています。

トランジスタ技術 2015年8月号

PT2399やBBDについての記事があります。今回はこちらの記事を参考に製作しました。

2021年9月14日火曜日

PT2399 Echo (Eurorack仕様)の製作

共立のPT2399エコーキットを使っていますが、ギター用のエフェクターのため入力は振幅が小さくインピーダンスが高い信号を受けるようになっています。

アナログシンセで使うため新たにPT2399エコーを製作します。基本的にEurorackにマウントする仕様となっています。

回路図

※PT2399周りに記載している電圧は実測したもの。
※OPアンプはNJM072Dを使用。

製造したPCB

今回はfusionPCBに基板の製造を依頼しました。

エフェクト部


回路は大きくインターフェース部とエフェクト部に別れます。インターフェイス部では入力を分岐してPT2399の入力とし、PT2399の出力を原音とMIXして出力します。エフェクト部はPT2399をエコーとして使うための回路です。

電源周りとエフェクト部のみ実装しインターフェイス部を実装しない状態で、PT2399の動作を測定しました。

実験に使った基板

1Vppのパルス波を入力し、擬似的なインパルス応答を測定しました。Feedbackは最小にしてDelay1発のみです。

Delay(REPT)最小 Feedback最小

C1:FX_IN C2:FX_OUT

最小ディレイ・タイムは約35msです。

Delay(REPT)最大 Feedback最小

C1:FX_IN C2:FX_OUT

最大ディレイ・タイムは約480msです。

フィードバックを上げるとディレイが繰り返されエコー効果が得られます。

Delay(REPT)最小 Feedback適宜

C1:FX_IN C2:FX_OUT

インターフェイス部


原音は入力の反転増幅回路(増幅率 Av = 100k / 470k ≒ 0.21)と、出力の反転増幅回路(増幅率 Av = 220k / 47k ≒ 4.68)を通って同位相で出力されます。トータルの増幅率は0.21 * 4.68 ≒ 0.98でほぼ1となります。

実験に使った基板

ICソケットからPT2399を抜いて、インターフェイス部のみの特性を測定しました。インターフェイス部の動作とは関係ないと思いますが、WET/DRY、Feedbackは最小としています。

入力部の反転増幅回路の出力 ±1Vpp/1kHz入力

C1:IN1 C2:FX_IN

Av = 430mV / 2.01V ≒ 0.214

入力部の反転増幅回路の出力 ±5Vpp/1kHz入力

C1:IN1 C2:FX_IN

Av = 2.10V / 9.97V ≒ 0.211

±1Vppでも±5Vppでもほぼ設計値通りの増幅率となっています。

なお、増幅回路で+2.5V(VGND)のバイアスを掛けていますがこれは不要でした。反転増幅回路の非反転入力は普通にGNDに接続してかまいません。PT2399の入力端子に2.5Vのバイアスがかかっているため、ACカップリングすればOKです。

入力部の反転増幅回路の周波数特性

反転増幅回路なので基本的に位相は180度まわります。位相のグラフが大きく振れていますが、180度前後で少し位相が変化しているだけです。

周波数特性を見ると800kHz付近でピークが出ているので軽く位相補償を掛けたほうがよさそうです。

出力 ±1Vpp/1kHz入力

C1:IN1 C2:OUT

出力 ±5Vpp/1kHz入力

C1:IN1 C2:OUT

トータルでは増幅率はほぼ1となっています。

出力の周波数特性

逆位相出力

逆位相出力(INV_OUT)は原音に関しては同位相です。エフェクトを逆位相でMIXするものです。

逆位相出力 ±1Vpp/1kHz入力

C1:IN1 C2:INV_OUT

逆位相出力 ±5Vpp/1kHz入力

C1:IN1 C2:INV_OUT

逆位相出力の周波数特性

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で処理速度を測定できているようです。