google-site-verification: google3bd66dd162ef54c7.html
fc2ブログ

Arduinoで作るパルスジェネレーターを「居酒屋ガレージ日記」バージョンに改造

◆まえがき
「居酒屋ガレージ日記」さんがArduinoで動かすパルジェネの新しいソフトを公開されていて、その性能が凄いのでうちのパルジェネも改造してそのソフトを入れることにしました。
該当記事はこちら→ パルスジェネレータを作ってみた:箱に入れた

・改造後の外観
Arduinoで作るパルスジェネレーター

◆過去のバージョン
このパルジェネは過去に以下のような順で改版しています。なお、パルスジェネレーターのカテゴリをたどっていただくと全貌が判りますが、主なものは下記です。

1)最初のバージョン
Arduinoを使ったパルスジェネレーターの製作、(ソフト解説編)(2016/03/13)
ソフトで割込みをキャッチボールさせてパルスを作っているため、ジッタが大きいです。
ロータリーエンコーダーを廻すだけ、つまりレンジ切り替え無しで広い周波数範囲をカバーしようとしました(実はHP3314Aというファンクションジェネレーターの真似です)。
実際には出力可能な波形(デューティー)の制限から、ツマミを廻すだけでは大幅なレンジ変更は出来ない物になっていました。

2) vabenecosiさんバージョン
Arduinoで作るパルスジェネレーターの改良(ソフト入れ替え) (2018/02/14)
ハードウエアタイマーカウンタでタイミングを決めているのでパルスの品質(ジッタ)大幅に良くなっています。最大周波数500kHz.

3) 居酒屋ガレージ日記さんバージョン
今回のバージョンです。クロック周波数切替と、カーソル移動で設定する方式になっています。デューティ一定モードがあるので、ツマミを廻すだけで広い周波数範囲の出力が可能です。最大周波数8MHz

◆内容説明
まえがきに記載したURLと、その記事内のリンクを参照ください。

◆回路図
公開されている回路図を私のパルジェネの回路に合わせて書き直したものが下図です。(クリックで別窓に拡大)
パルジェネ回路図V2

【9/8追記】動作の安定化のため初版の回路にR10,R11を追加しました。理由はこの記事のコメント欄参照ください。初版の回路図はこちら

液晶などの接続ピンの変更とタクトスイッチの追加が変更内容です。オリジナルではロータリーエンコーダーのピンとGNGの間に1000pFが入っていますが、無くても支障無かったので省略しました。(元々入れてなかった)

◆基板
・部品面
パルジェネの基板
緑矢印部でコネクタを1ピン増設しています。

・配線面
パルジェネの基板
緑色の線が今回修正を行った箇所です。

基板以外は既存のままですが、操作パネルはタクトスイッチが一つ増えたので簡単な改造では済まなくなり、既存のケースの上に薄いアルミ板を貼り付けることで作り直しました。文字もパワポで紙に印刷した物を貼り、表面は透明テープで保護しています。

◆ソフト
前掲の「居酒屋ガレージ日記」さんの記事で公開されている物をそのまま使います。現時点の最新版の p_gen16c.inoを使いました

このコードはプロが作られただけあって、ものすごく勉強になります(マクロの使い方、構造化変数、PROGMEM、ポートの初期化、等々)

◆動いている様子
・8MHzを出力して周波数カウンタで確認
周波数精度
8MHz設定で出力は8.000015MHzでした。なお、TC1でぴったり合わせ込むことが出来ます。ちなみにTC1は最初のバージョンを作った時に合わせたので、数年で15Hz(1.9ppm)の経時変化があったことになります。
これ以外の周波数やパルス幅の精度も調べましたが、いずれもクロック周波数誤差の範囲で時間精度の高いパルスが出ていました。

・ツイッターの動画
この動画が判り易いです
「居酒屋ガレージ日記」さんのパルジェネを作ってみた。中身はArduinoで動いていてMax8MHzまで出力可能で使い易いです。https://t.co/KiiGsDytaS

◆まとめ
すばらしい性能のソフトを開発してくださった「居酒屋ガレージ日記」さんには感謝しかありません。愛用させていただきます。

Arduinoで作るパルスジェネレーターの改良(ソフト入れ替え)

 前回の記事でvabenecosi さんが作られた高精度版のパルスジェネレーターのソフトの動作確認が完了しましたが、今回はこれを以前私が作ったハードに組み込みます。

 まずは回路図から、

▼高精度版パルスジェネレーターの回路図(クリックで別窓に拡大)
Arduinoで作ったパルスジェネレーターの回路図
 これは、vabenecosi さんが 簡易パルスジェネレータの製作(ハード編) で公開されている修正内容を私の回路図に反映させたものです。(水魚堂さんのBsch3V用のファイルも置いておきます。回路図(bsch3v用ファイル)

【変更点】
 1) Timer1を使うために、出力ピンとロータリーエンコーダーのピンアサインを変更
 2) 周波数調整用にTC1追加、C3容量変更(22→10pF)
 3) R6、C7追加

▼基板
基板
 トリマコンデンサの調整ネジがGND側になるように取り付けます。

▼配線面
配線面
 青色の線が今回修正した部分です。

▼基板を本体へ取り付け
取付完了
 ファームはv4r7を入れました。

▼周波数調整穴
周波数調整穴
 ケースの底に穴を開けてトリマコンデンサが調整できるようにしました。freq.ADJ.と書いておくと、なんだかかっこいいです。

 なお、トリマの調整範囲を調べると、パルス幅100μsに設定した状態で下記の結果でした。
 TC1最大 : 100.0008μs ( +8ppm)
 TC1最小 : 99.9898μs ( -102ppm)
 調整可能な範囲がマイナス気味なので、C3の容量をもう少し大きくしておいた方が良かったかも知れません。なおこの結果は私が使った部品と配線方法に強く依存しているはずなので、参考程度にお考え下さい。また、前の記事で「あちゃんでいい」のを使って大きな誤差が出ていましたが、その時とは違う水晶発振子を使っています。

▼精度確認の様子
周波数微調整と精度確認
 パルス幅10msに設定してユニバーサルカウンタで精度を確認している様子です。 

 測定に使ったユニバーサルカウンタ(アドバンテスト TR5822)は上に乗っているルビジウムオシレーターで校正しています。またこのルビジウムはGPSと比較して誤差を補正しているので測定の確度は大丈夫だと思います。

◆まとめ
 以前私が作った物は、ジッタが大きくてパルスジェネレーターとしてははなはだ頼りない物だったのですが、今回 vabenecosi さんが作られたソフトに入れ替えることで、見違えるように高精度のパルスジェネレーターに変身しました。すばらしいソフトを公開してくださっている vabenecosi さんに感謝します。

 改良版のソフトを使うことでパルスの周波数は500kHzまで出せるようになりました。このあたりの周波数の信号が出せると、受信機のマーカーとして使うことが出来ます。ちなみに旧ソフトでは12.5kHzが限界、しかもジッタまみれです。
 出力端子にアンテナ代わりにミノムシクリップの線でもつないでおいて、受信機で受信すれば正確な周波数間隔でキャリアを確認出来て面白いです。変調かけるともっと面白そうですが、遊びすぎでしょうね。

Arduinoで作るパルスジェネレーターの高精度化ソフト

 アキバ通いと旅のサイトの vabenecosi さんが、以前私が作ったパルスジェネレーターの高精度版のソフトを作られました。

▼以前作ったパルスジェネレーター
以前作ったArduinoで動くパルスジェネレーター

 高精度版ソフトに関する vabenecosi さんの記事はいくつかに別れていますが、下記URLとその周辺の記事で詳しく解説されています。
 最初の記事はこちら→ 簡易パルスジェネレータの製作(速報版)
 ソフト解説がこちら→ 簡易パルスジェネレータの製作(ソフト編)

 詳しくは vabenecosi さんの記事を参照していただくとして、改良のポイントとしては、
 私のプログラムではタイマー割り込みのキャッチボールでパルスを発生させていたのに対し、vabenecosi さんのプログラムではCPUに内蔵されているタイマー (timer1) でパルスを発生させています。

 私のやり方では、タイマー割り込みの処理時間がオーバーヘッドになるため、周期1ms以下では誤差が目立ってきます。またArduinoの環境の制約から、時間の粒度が4μsと粗いため最小パルス幅は40μsまでしか設定できませんでした。一方で、vebenecosi さんのプログラムではハードウェアタイマーを使っているので、小さなパルス幅まで正確なタイミングでパルスの発生が可能になっています。

 ということで、公開されているプログラムを動かしてみました。

▼まずは Arduino UNOで動かしてみた
Arduino UNO でテスト
 上は液晶シールドで、その下にArduino UNO があります。

 この状態でとりあえずソフトのテストは出来ます。でも、Arduino UNO のクロックオシレーターはセラロックなので周波数精度が悪く、ユニバーサルカウンタでパルスを測定しても中途半端な値が出て気持ち悪いです。

 そこで、水晶オシレーターで動く「あちゃんでいいの」で動くように組み替えました。

▼あちゃんでいいのでテスト
あちゃんでいいのでテスト
 現時点で3種類のファームが公開されているので、それぞれ3つのCPUに焼いてテストしているところです。

▼周波数カウンタの値と比較
周波数精度の確認
 この写真はパルス周期 100μsに設定した状態です。ユニバーサルカウンタの測定結果は、99.9849μsなので、誤差は0.015%しかありません。私の作ったプログラムでは誤差が0.8%もあったので、すばらしく改善されています。ちなみに、この誤差はあちゃんでいいのの基板の水晶の周波数精度が原因です。
 それと、ユニバーサルカウンタの値は1LSBがちらちら」と変化するだけなので品質の高い波形が出ていると思います。ちなみに、私が作った割込み方式だと、下3桁くらいは値がフラフラしていました。

◆まとめ
 いろいろ条件を変えて試してみましたが、素晴らしい精度でパルスが出ていることが確認出来ました。ということで、この記事の最初の写真の私のパルスジェネレーターのプログラムは、vabenecosi さんの書かれたものに入れ替える予定です。すばらしいプログラムを書いてくださったvabenecosi さんに感謝します。

 あと、ソフトは v3 v4 v5 の3種類が公開されていますが、私はv4系で行こうかと思います。理由はvabenecosi さんのブログに書くのが正しい作法かと。

 それとソフトの入れ替えのためにはハードの配線も少し変更しないといけません。せっかく精度の高いパルスが出せるので、周波数を微調整出来るように、トリマを追加するのも悪くないかなと思います。このあたりは進展があったらまた記事で紹介したいと思います。
カレンダー
05 | 2023/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。
記事の内容のご利用は読者の自己責任でお願いします。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード