超低速2相パルス発生回路・ケース入れ
2024年3月25日:超低速2相パルス発生回路 の続き。
こんな回路に落ち着きました。
・電池3本運用。
・秋月の昇圧DC-DCモジュール
AE-XCL102D503CR-G で5Vを発生。
ただし、ちょい改造(EN端子のプルアップを外す)
・電源スイッチと操作スイッチを共用。1つだけ。
長押しで電源のon/off操作。
短押しでCW/CCW/stop選択。
このためにあれこれややこしい回路に。(黄色部)
・最低周波数が0.1Hz。
最高周波数を(無理やり)9990.0Hzに。
・周波数によって設定できる最小桁が変化。
150Hzまでは0.1Hz。2800Hzまでが1Hz。それ以上が10Hz。
・1.5kHz程度までは、設定値から0.01%内の誤差。
10Hzステップになる2.8kHzあたりだと0.016%。
5kHzあたりまで上がると0.03%。
最高周波数に近づくと分周比が小さくなり誤差が目立ちます。
0.06%ほどの誤差が生じることがあります。
・例えば9810Hzの設定なら分周比が815で
出てくる周波数が9815.95Hzとなって+0.061%の差。
また、9970Hzも9980Hzも同じ分周比802になり
出てくるのはどちらも9975.06Hz。
でも、8000Hzの設定は誤差ゼロで出てきます。
バックアップがわりのスケッチ。
・ダウンロード - cw_ccw2k1b.txt
※inoではなくtxtにしてます。
箱はダイソーで買ったプラケース。
(電池保管用のものだったか・・・)
LowBat警報表示
電池電圧が3Vを切ると、空電池マークと半分電池
マークを交互に点滅表示します。
重要アラームは点滅させて欲しい
なんて記事も書いてますし。
内部処理でキツいのが周波数を上げたとき。
最高が9990Hzですので、その2倍の周波数
(トグルさせるので2倍に)でタイマー1の
コンペエマッチ割り込みが発生します。
周期が50μ秒ほどとなって、16MHzのATmega328P
にはなかなかキツい。
この割り込みの他に、システムタイマーであるタイマー0の
オーバーフロー割り込みを止めて、別の周期、
3.90625kHz=0.256msのタイマー割り込みを
使っています。
これの主目的はロータリーエンコーダのチャタリング除去。
2つの割り込み処理のタイミングを見てみます。
オシロの無限残光モードがありがたい
B相出力が変化する前にタイマー1のコンペエマッチ
割り込みを終えなければ、2つのパルスを正しい
タイミングで出力できません。
タイマー割り込みの処理時間がけっこう長いので、
これが問題。
シリアル出力すると、この割り込み処理による
遅延も入ってきます。
※I2C液晶制御でも割り込み絡むのか?
最高周波数になると、タイミングはなかなか
キビシイです。
ロータリーエンコーダの読み取りタイミング。
I2C液晶での文字表示(xxxx.xHzの8文字)に
いがいと時間がかかります。
| 固定リンク
「電子回路工作」カテゴリの記事
- 宮内 悠介 著『ラウリ・クースクを探して』(2025.04.09)
- EEPROMを使ったシリアル受信バッファ 512kバイトに増設(2024.12.26)
- 考察:提灯配線短絡箇所の発見方法(2024.11.14)
- AD620を使った計装アンプ+ノッチフィルタ(2024.11.08)
- ステッピングモータ駆動回路を24Vだけで #2(2024.10.31)
「ツール」カテゴリの記事
- マイコン型導通チェッカーの部品(2025.02.21)
- ピンセット、危うし!(2025.01.09)
- EEPROMを使ったシリアル受信バッファ 512kバイトに増設(2024.12.26)
- 充電器用AC100V電源電流モニター回路(2024.12.13)
- DDS方式の2相パルス発生回路、周波数スキャン機能を付ける(2024.10.05)
「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)
「割り込み処理」カテゴリの記事
- 1クロックでも速くしたい 割込を「ISR_NAKED」で(2024.09.30)
- 1クロックでも速くしたい DDS方式の2相パルス発生器(2024.09.27)
- 最適化処理のせいで悩んだぞ 呪文volatile再び(2024.06.06)
- I2C液晶のアクセス、割り込みで処理しないようにすると(2024.04.12)
- I2C液晶のアクセス、割り込み処理で遅れる原因らしきもの(2024.04.07)
コメント
おっと・・・
I2Cも割り込みを使こうとるゾ。
最高周波数9990Hzでの運用は、ほんとに微妙なところみたい。
オシロで見る限り、スカタンは生じてないようだけど、タイミングはギリギリ。
LowBat警報の表示、タイマー割り込みでタイムアップを検出。
その表示(I2C液晶だ)処理と「うまいこと」重なると、いちばん大事なOC1A割り込みの処理が遅れる。
けど、現状、なんとか間に合っているようでっす。
タイマー0割り込み(システム用)を殺した(オーバーフローさせない)状態でI2Cの液晶を使ったけど、どうなっているのか・・・
経過時間読み出しのmicrosはまともに動いていないはず・・・
I2Cに異常が起きたら・・・知らん
まぁ・・・エエか。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2024年4月 5日 (金) 19時43分
テストプログラムを書いてI2Cアクセスでの遅れを観察してみたら・・・
15μsほど遅れるタイミング(割り込みを受け付けてもらえない区間)が出現。
CW/CCW波発生の観察波形と合ってます。
微妙なタイミングが必要な処理で、I2Cアクセスの液晶を使うと、トラブルの要因になるかも。
投稿: 居酒屋ガレージ店主(JH3DBO) | 2024年4月 6日 (土) 11時31分