1/nカウント方式とDDS方式の2相パルス発生回路
Arduino UNO R3を使った2相パルス発生回路、
・1/nカウント方式:タイマ1の分周器を制御
・DDS方式:クロック80kHzでDDS処理
のスケッチ、バックアップがわりに置いておきます。
・ダウンロード - cw_ccw.zip
2つの回路図は同じ。
Arduino UNO R3で試すならこちらを。
ATmega328Pで手組みするならこんな感じ。
※関連
・2024年10月5日:DDS方式の2相パルス発生回路、周波数スキャン機能を付ける
・2024年9月24日:秋月のI2C接続液晶 AQM1602XAを基板に直付け
※1/nカウント方式2相パルス発生回路の概略
・出力周波数範囲 0.1Hz~9990.0Hz
ロータリ・エンコーダで周波数を設定
周波数により設定できる最小桁が変化
0.1~299.9Hz : 0.1Hz単位で設定
300~ 2999Hz : 1Hz単位で設定
3000~ 9990Hz : 10Hz単位で設定
・指定した数のパルスを出力する機能を持つ
1~999999の範囲で指定した数のパルスを出力して停止
・タイマ1のクロック入力周波数÷目的周波数で分周比(16bit整数)を
計算しているので、周波数が高くなると誤差が出る
・設定周波数に対する実出力周波数の誤差を液晶表示
・1/nで出力周波数を得ているのでジッタは発生しない
・電池電圧低下で警報表示
・スイッチ機能(短押し)
SW1 設定した数のパルスをCCWで出力
SW2 パルス出力を停止
SW3 設定した数のパルスをCWで出力
SW4 周波数とパルス数の設定入力の切り替え
・スイッチ機能(長押し)
SW1 CCWでパルスを連続出力
SW2 設定値をEEPROMに保存
SW3 CWでパルスを連続出力
SW4 パルス・カウント・エッジ↓↑の切り替え
※DDS方式2相パルス発生回路の概略
・出力周波数設定範囲 0.10Hz~9999.99Hz
0.01Hz単位
入力位置はカーソル移動で
ロータリ・エンコーダで設定
・DDSの基準クロックは80kHz
・ジッタが発生するが平均すると設定周波数が得られる
・電池電圧低下で警報表示
・画面を切り替えて周波数スイープ機能のパラメータを設定
周波数の下限,上限
rise,fall時間
上限,下限でのwait時間
・スイッチ機能(短押し)
SW1 パルス出力on/off
SW2 周波数入力カーソル位置を左へ
SW3 周波数入力カーソル位置を右へ
SW4 sweep開始
・スイッチ機能(長押し)
SW1 設定値をEEPROMに保存
SW2 CCWでパルスを連続出力
SW3 CWでパルスを連続出力
SW4 sweep機能のパラメータ設定
出力パルスを「周波数」で設定できます。
1/nカウントは「整数分の1」ですんで誤差が生じます。
(液晶に設定値と出力値の誤差を表示)
DDS方式のは0.01Hzを可変できるようにしたんで
ちょい面白いかも。 ただし、ジッタが出ます。
※追記
1/nパルス方式もDDS方式も2相パルスを出しますが、
その1相だけ(単発パルスとして)を使っても便利です。
・1/nパルス方式なら「60Hzのパルスを120発出して停止」。
何て機能、これを備えたツール、なかなかありませんよ。
パルス数の最大が99999発と16bit越え。
・DDS方式のスイープが便利。
59Hz~61Hzを10分かけてup/downという設定も可能。
最小桁が0.01Hzですんで、59.01、59.02、59.03・・・
と周波数が変化します。
一定周期で周波数が振る信号、たまに欲しい時があります。
・・・このツールでは方形波ですが
| 固定リンク
「Arduino」カテゴリの記事
- Arduino UNO R3で周波数を計る(2025.05.16)
- Arduino UNO R3のクロック精度を1MHzパルスで確かめる(2025.04.28)
- Arduino、analogWriteは捨てちゃえ。ちゃんとしたPWMの例(2025.03.22)
- パルスジェネレータをI2C液晶で動かす(2025.01.28)
- EEPROMを使ったシリアル受信バッファ 512kバイトに増設(2024.12.26)
コメント