ついに、Arduino R4 Minimaが日本でも販売開始されました🥳
今回は、ArduinoのPWM機能についてちょっと調べたことを書きます。
GPTはGeneral PWM Timerの略であり、Ch○tGPTなどのAIのことではありません。
Arduinoとは
Arduinoとは、イタリア発のオープンソースハードウェア・ソフトウェアプロジェクトであり、初心者からでも低コストで簡単に開発できるボードの開発をコンセプトにしています。
Arduino IDEはArduino UNOを中心とした開発環境ですが、オープンソースコミュニティがさまざまなボードに対応させており、ハードウェアを意識することない移植を可能にしています。
発売から10年、現在では1000万台以上のArduino UNOが出荷され、Arduinoコミュニティはマイコンコミュニティの中心として多くのプロジェクトを引っ張る存在となっています。
ルネサスduino!?
拡大を続けるArduinoに対して2022年6月、日本のルネサスが 13億円の投資を行うことを発表しました。
(どこかのメディアがアマチュア向けと書いて物議を醸しましたね)
オープンソース世界大手のArduinoに出資し、巨大な開発者コミュニティ向けの製品提供を実現へ | Renesas
ルネサスは車載・IoT向けマイクロコントローラの開発・販売を主力事業としています。
そこからおよそ1年満たない2023年3月末に、Arduino UNO R4シリーズが公表されました。早い。
Arduino UNO R4 is a giant leap forward for an open source community of millions | Arduino Blog
Arduino R4 Minimaの概要
Arduino R4 Minimaは、R4シリーズで最もシンプルなモデルです。
以下にスペックを示します。
スペック・数 | |
---|---|
マイコン | Renesas RA4M1(Arm Cortex-M4) |
USB | USB-C(プログラミングポート / HID) |
デジタルI/O | 14 |
アナログ入力 | 6 |
DAC | 1 |
PWM | 6 |
Misc(SWDコネクタ) | 1 |
UART | 1 |
I2C | 1 |
SPI | 1 |
CAN | 1 |
動作電圧 | 5 V |
入力電圧(VIN) | 6~24 V |
DC電流(各I/Oピン毎) | 8 mA |
クロック | 48 MHz |
フラッシュメモリ | 256 KB |
RAM | 32 KB |
(スイッチサイエンスより引用)
Arduino R4に搭載されているルネサスチップはARM Cortex-M4ですが、珍しく5VのI/Oに対応しています。
組み合わせでR3時代のシールドをつけたりR3と組み合わせようとしても壊れない親切設計?です。
また、24VのDC-DCがついていたり、CANコントローラが入っているのも使い勝手が良さそうに見えます。
ArduinoのPWMについて調べてみた
Arduino R4のチップの方のデータシートを眺めていたら、やたら「GPT」という文字が出てきていました。
https://www.renesas.com/us/en/document/dst/renesas-ra4m1-group-datasheet
え?ArduinoでLLM?と一瞬思いましたが、どうやら「General PWM Timer」の略のようでPWMの出力機能を指しています。
紛らわしすぎますが、ChatGPTが流行るよりも前から存在している言葉です。
Arduino UNO R3では最大6本のPWM(8bitタイマーx2と16bitタイマーx1)となっており、タイマー機能を使うとさらに限定されていました。
R4でも6本と書かれていますが、本当に6本しかないのでしょうか?
調べてみました。
回路図はこちら
https://docs.arduino.cc/resources/schematics/ABX00080-schematics.pdf
Pxxx(xxxに3桁の番号が入る)がRA4M1のデータシート上のピン番号と一致しています。
この回路図を見るだけですでに10本くらい使えそうな気がしますね…
次に、先ほどのRA4M1のデータシートと組み合わせてみます。
↓調べた結果です。
Arduino | RA4M1 | GPT num |
---|---|---|
D0 | P301 | GPT4B |
D1 | P302 | GPT4A |
D2 | P105 | GPT1A |
D3 | P104 | GPT1B |
D4 | P103 | GPT2A |
D5 | P102 | GPT2B |
D6 | P106 | GPT0B |
D7 | P107 | GPT0A |
D8 | P304 | GPT7A |
D9 | P303 | GPT7B |
D10 | P112 | GPT3B |
D11 | P109 | (GPT1A) |
D12 | P110 | (GPT1B) |
D13 | P111 | GPT3A |
A0 | P014 | x |
A1 | P000 | x |
A2 | P001 | x |
A3 | P002 | x |
A4 | P101 | GPT5A |
A5 | P100 | GPT5B |
(xはGPTなし、 ()
は機能が他のピンと被っているため除外されたもの )
なんと、14個もPWM出力があるではないですか!?
おめでとうございます。サーボモータ制御の定番PCA9685を買わずとも14個のサーボを回せます。
しかも、全部使ってもタイマー機能は残っているので、上手く使えばArduino R3のようにタイマーが枯渇することもなさそうです。
↓以下データシートから確認できるタイマーの個数
- General PWM Timer 32-Bit (GPT32) × 2
- General PWM Timer 16-Bit (GPT16) × 6
- Asynchronous General-Purpose Timer (AGT) × 2
- Watchdog Timer (WDT)
動作確認
M2MacにArduino IDE2をインストールして書き込みを行いました。
#define PWM_PIN A5 void setup() { pinMode(PWM_PIN, OUTPUT); } void loop() { for (int i=0; i<=255; ++i) { analogWrite(PWM_PIN, i); delay(10); } for (int i=255; i>-0; --i) { analogWrite(PWM_PIN, i); delay(10); } }
回路図に記載されていないA4・D0・D1でも動作を確認しました。