HOME >> 鉄道模型実験室 > Arduino Nano Every のPWMキャリア周波数を20kHzにするー再挑戦
先回より卓上レイアウトでの自動運転システムを再開したが、Arduino IDE をバージョンアップしたためクロック周波数を選択するメニューが出なくなってしまった。 このため、PWMキャリア周波数を15.7kHzから、20kHzにアップすることが出来なくなっていた。 そこでその方法を探って再び20kHzに再挑戦することにした。
■ いきさつ
.
鉄道模型の自動運転を制御するため、マイコンとして Arduino Nano Every を使用しています。 そして、PWM周波数を可聴域外の 20KHz にすることができ、キーンというモータ音から解放されました。 「Arduino Nano Every のPWMキャリア周波数を20kHzにする」(2020/4/6)を参照してください。
しかし、その後、「卓上レイアウトで楽しもう その26−1 周回パターン」(2020/11/12)で、Arduino IDE をバージョンアップしたためクロック周波数を選択するメニューが出なくなってしまった。 最新版の Arduino 1.8.13 にアップロードし、Arduino magaAVR Boards も 1.8.6 にアップロードしたためと判断し、先回と同様に細工するファイルを探しましたが見当たりません。 バージョウンアップによって環境が変わってしまったのです。 こうなるとこの新しい環境に合わせた方法を探す必要があります。
すぐには見つからなかったので、当面は20KHz化を諦めて、15.7KHzで我慢することにしていました。
■ MegaCoreX を使う方法 ・・・・・・・ ただし、失敗例です
まず 先回参考にさせていただいた「DEKOのアヤシいお部屋」の中の「Arduino Nano Every」ページを探り、関係するサイトを探した。 そして最下段の「Clock speed for Nano Every 」にアクセスした中で、下記の記述を発見した。 英語の記述を日本語に翻訳した状態で見ています。 翻訳はまだ完全ではないのですが、意味は充分に理解できますので便利になりました。
この中のアドバイスにあったサイト「MCUdude / MegaCoreX」にアクセスし、日本語に翻訳して読み込んでいくと下記の部分を発見しました。
インストールする方法
BoardsManagerのインストール
- ArduinoIDEを開きます。
- [ファイル]> [設定]メニュー項目を開きます。
- 追加のBoardsManagerURLに次のURLを入力します。
https://mcudude.github.io/MegaCoreX/package_MCUdude_MegaCoreX_index.json- 複数のURLがある場合は、コンマ(、)を使用してURLを区切ります
- [ツール] > [ボード] > [ボードマネージャー... ]メニュー項目を開きます。
- プラットフォームインデックスのダウンロードが完了するまで待ちます。
- MegaCoreXエントリが表示されるまで下にスクロールして、クリックします。
- [インストール]をクリックします。
- インストールが完了したら、BoardsManagerウィンドウを閉じます。
そこで早速実行してみました。 まず、 Arduino IDE を立ち上げて、 環境設定メニューを開きました。
そして、上記の部分にアドレスを追加しました。 このメニューを閉じて、[ツール] > [ボード] > [ボードマネージャー... ]メニュー項目を開きました。 MegaCoreX エントリが表示されるまで下にスクロールして行くと、最後にその欄を見つけ、インストールを実施しました。 下の状態はインストール済みの状態です。
そして、「ツール」メニューを開くと下記の様にメニューの項目が増えていました。 初めての項目もありますね。
準備が出来ましたので、各項目の設定を行っていきます。
● MCU の選択
まず、使用しているチップの指定を実施します。 Arduino Nano Every で使用している ATmega4809 を MegaCoreX のメニューの中から選択します。
ここで、Arduino megaAVR Boards の中にある Arduino Nano Every を選択すると、「ツール」の中の新しい項目が消えてしまい、もとの状態に戻ってしまいます。 こちらが通常の指定なのだろうと思います。
● クロック周波数の指定
目的とする指定です。 インターナルの発信器を使用しますので Internal 20 MHz を選定します。
● ピンモードを選択する
ピン配置は Nano Every を選択します。 他のモードもあるのですね。
● リセットピンの使用
リセットピンをGPIOピンとして使用できるとの事。 するとリセットはどうするのか理解できませんでしたので、リセット機能をそのままにしておきます。
● 他のメニュー項目について
この他に新たに増えたメニュー項目がありますが、前記の「MCUdude / MegaCoreX」ページに詳しく説明されていますので、参考にして下さい。
■ 確認テスト
卓上レイアウトのスケッチを上記の設定でコンパイルや書き込みを実施するが、それぞれのステージでエラー表示される。 順次エラーを克服していくも最後までたどり着けなかった。
この MegaCoreX ボードの記述は、C:\Users\xxxxx\AppData\Local\Arduino15\packages\MegaCoreX\hardware\megaavr\1.0.5 にありましたが、やはりオリジナルのボード記述とは別ファイルになっていました。 また、ネットにて検索するも内容を理解していない素人には解決策が見えず、諦めるしかなかった。 2020/11/13 時点です。
結論: 素人にはこの方法は使えない
***********************************************************************************************
.
■ Nano Every のボードを使う
しばらく諦めていた20KHz化のテーマですが、11月22日の夜、お風呂の中でふと気が付いことがありました。
と言う訳で、最初にボードマネージャの中から、 MegaCoreX のエントリーを削除しました。 すると、ボードのメニューの中は二つに減少し、 MegaCoreX の記述は思惑どうりに消えていました。 そこで意を強くして、今度はArduino megaAVR のボードを記述するファイルを探すことにしました。
そして、C:\Users\xxxxx\AppData\Local\Arduino15\packages\hardware\megaavr\1.8.6\boards.txt のファイルを見つけました。 このテキストファイルの記述には、狙いどうりの Nano Every に関する記述がありましたが、クロックに関する記述はありませんでした。
そこで、先回と同様に、下記の記述を追加してファイルを保存しました。
menu.clock=Clock
nona4809.menu.clock.2internal=2MHz
nona4809.menu.clock.2internal.build.f_cpu=2000000L
nona4809.menu.clock.2internal.bootloader.OSCCFG=0x01
nona4809.menu.clock.4internal=4MHz
nona4809.menu.clock.4internal.build.f_cpu=4000000L
nona4809.menu.clock.4internal.bootloader.OSCCFG=0x01
nona4809.menu.clock.8internal=8MHz
nona4809.menu.clock.8internal.build.f_cpu=8000000L
nona4809.menu.clock.8internal.bootloader.OSCCFG=0x01
nona4809.menu.clock.16internal=16MHz
nona4809.menu.clock.16internal.build.f_cpu=16000000L
nona4809.menu.clock.16internal.bootloader.OSCCFG=0x01
nona4809.menu.clock.20internal=20MHz
nona4809.menu.clock.20internal.build.f_cpu=20000000L
nona4809.menu.clock.20internal.bootloader.OSCCFG=0x02
すると、ツールメニューの中に、期待していたクロックを選択するメニューが表れていました! 大成功だ !!
// Every-20K-1 // 2020.11.23 // Arduino Nano Every を使用する。 // PWM周波数を15.7kHzにする。 #define F11 ?5 #define F12 ?6 void setup() { pinMode(F11,OUTPUT); pinMode(F12,OUTPUT); TCA0.SINGLE.CTRLA = 0b0101; //PWM周波数の変更 } void loop() { analogWrite(F12,0); analogWrite(F11,50); }
■ 確認テスト
本当にPWM周波数が 20KHz になっているのか確認することにしました。 テスト回路は予備の Nano Every を使用した簡単な回路とし、スケッチも右のように必要最小限にしました。
当然ながら、PWM周波数をアップさせるおまじないも記述しておきます。 この記述によって周波数は 15.7KHz までアップしますが、さらに Arduino Nano Every のクロック周波数を、16MHz から 20MHz に変更して、20KHz 化を達成しようとするものです。
スケッチをボードに書き込む時に、クロックの選択として 20MHz を選択して書込みました。 そしてPWM周波数の観測を実施した時の実験装置を下に示します。
オシロに現れた波形はねらいどうりであり、計測された周波数は 19.54KHz と以前と同様な結果を確認することが出来ました。
ヂューティ比も 50/256 = 19.5% とぴったりですね。 即ち、この方法で正解だったと判断出来ました。
***********************************************************************************
これで、今までのどに引っかかっていた小骨が取れた気がします。
2020/11/23 作成