google-site-verification: google3bd66dd162ef54c7.html

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 さんのブログに書くのが正しい作法かと。

 それとソフトの入れ替えのためにはハードの配線も少し変更しないといけません。せっかく精度の高いパルスが出せるので、周波数を微調整出来るように、トリマを追加するのも悪くないかなと思います。このあたりは進展があったらまた記事で紹介したいと思います。
関連記事

コメントの投稿

管理者にだけ表示を許可する

紹介有難うございます

こんにちは。

当方の記事の紹介有難うございます。
折に触れて当方の記事に有用なコメントをくださったことにも改めて感謝します。

この関係の記事ですが、確かに3つのスケッチのメリット、デメリットや使用感の情報が足りないと感じておりいますのでもう一回だけ続編を書くつもりです(これで最後にしたい)。

トリマの件は私も考えをめぐらせていました。まず秋月で16MHzのTCXOがあれば付けて取り替えようとも思いました(要ヒューズビットLOW書き換え)。
が、ラッキーにも現状の偏差が+0~1ppm(気温16℃、測定器の精度±2ppm)なのでそれこそ「Va bene cosi」として検討打ち切りでした。

ところで以前作られたパルスジェネレータはどうされているのしょうか?

私のコメント訂正です

以前作られたパルスジェネレータのプログラムはこれから入れ替えられるのですね。
読み飛ばしておりました。

誤差について

誤差が0.015%というのは当方のものと比べてかなり大きくありませんか?
ブレッドボードに組んだ場合、「あちゃん」の場合はXTAL1の隣がGNDになっているのでストレー容量の影響が少なからずあるのではないかと思われます。
トリマを付けてみる実験をやられる際はブレッドボードを使わない方が良いと思います。

re:誤差について

vabenecosiさん今晩は。

安物の水晶を使ったので精度が悪いのだと単純に思っていましたが、確かに0.015%の誤差は大きいですね。ブレッドボードの端子間の静電容量の影響もあるのかも知れません。


周波数の微調整の方法としては、水晶の両側に入っている22pFのどちらかをトリマコンデンサにしてみようかと思っています。
以前作ったパルスジェネレーターの配線を修正しないといけないので、その時に同時にやってみる予定です。

液晶への数値表示

液晶への数値表示に関し、ちょいと解説しました。
http://igarage.cocolog-nifty.com/blog/2018/02/vsprintf-d011.html

※アドレス訂正しました

re:液晶への数値表示

居酒屋ガレージ店主(JH3DBO) さん、今晩は。

記事拝見しました、アドバイスありがとうございます。この先はそちらのブログにコメント入れさせてもらいます。
カレンダー
03 | 2018/04 | 05
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コード