えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

Arduino UNO R4のGPTを試す(Arduino)

ついに、Arduino R4 Minimaが日本でも販売開始されました🥳

今回は、ArduinoのPWM機能についてちょっと調べたことを書きます。

GPTはGeneral PWM Timerの略であり、Ch○tGPTなどのAIのことではありません。


Arduinoとは

Arduinoとは、イタリア発のオープンソースハードウェア・ソフトウェアプロジェクトであり、初心者からでも低コストで簡単に開発できるボードの開発をコンセプトにしています。

Arduino IDEArduino 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でも動作を確認しました。