注釈

こんにちは。 Facebook の SunFounder Raspberry Pi & Arduino & ESP32 愛好者 コミュニティ へ ようこそ! 仲間 の 愛好者 と 一緒 に Raspberry Pi、 Arduino、 ESP32 を さらに 深く 探求 しましょう。

なぜ 参加 する の です か?

  • 専門的 な サポート : コミュニティ と チーム の 支援 に より、 購入 後 の 問題 や 技術的 な 課題 を 解決 できます。

  • 学習 と 共有 : ヒント や チュートリアル を 共有 し、 スキル を 向上 させましょう。

  • 限定 プレビュー : 新製品 の 発表 や 先行 情報 に いち早く アクセス できます。

  • 特別 割引 : 最新 製品 を 対象 に した 限定 割引 を 利用 できます。

  • イベント プロモーション と プレゼント : プレゼント 企画 や 祝日 キャンペーン に 参加 できます。

👉 私たち と 一緒 に 探求 と 創作 を 始める 準備 は できました か? [here] を クリック して、 今すぐ 参加 しましょう!

オンボード MCU

Fusion HAT+ には GD32E203C8T6 マイクロコントローラ が 搭載 されています。 これは 最大 クロック 周波数 72MHz の ARM Cortex-M23 プロセッサ です。 マイクロコントローラ は 64KB の Flash メモリ と 8KB の SRAM を 搭載 しています。

オンボード の PWM と ADC は マイクロコントローラ に よって 駆動 されます。 Raspberry Pi と マイクロコントローラ 間 の 通信 は I2C インターフェース を 介して 行われます。 通信 に 使用 される I2C アドレス は 0x17 です。

ADC

レジスタ アドレス は 1 バイト です。 0x10~0x19 は ADC チャンネル 0~3 に 対応 します。 ADC の 分解能 は 12 ビット で、 値 の 範囲 は 0~4095 です。 詳細 は fusion_hat.adc.ADC を 参照 してください。

アドレス

説明

0x10

ADC チャンネル 0 H

0x11

ADC チャンネル 0 L

0x12

ADC チャンネル 1 H

0x13

ADC チャンネル 1 L

0x14

ADC チャンネル 2 H

0x15

ADC チャンネル 2 L

0x16

ADC チャンネル 3 H

0x17

ADC チャンネル 3 L

0x18

ADC 4 H( バッテリー 残量 )

0x19

ADC チャンネル 4 L

PWM

周波数 と 周期 の 設定

PWM 周波数 は、 周期 値( ARR ) と プリスケーラ( PSC ) に よって 決まります。 原理 として は、 マイクロコントローラ の 内部 クロック は 72 MHz で 動作 します。 プリスケーリング に よって クロック を 分周 して 周波数 Fp を 得て、 さらに 周期 カウント で 分割 する こと で PWM 出力 周波数 F を 得ます。 したがって、

F = 72,000,000 / (PSC + 1) / (ARR + 1)

一般 に、 目的 の 周波数 と 周期 を 指定 する こと で、 必要 な プリスケーラ を 計算 できます。 たとえば、 サーボ モーター を 駆動 する に は 50 Hz の 周波数 と、 12 ビット の 分解能( つまり 2¹² = 4096 の 周期 )が 必要 です。 プリスケーラ PSC は 次 の ように 計算 できます:

PSC = 72,000,000 / F / (ARR + 1) - 1
= 72,000,000 / 50 / (4095 + 1) - 1
= 350.5625
≈ 351

PSC は 整数 で なければ ならない ため、 351 に 近似 します。 したがって、 PSC = 351 と ARR = 4096 を 設定 すると、 実際 の PWM 周波数 は 次 の とおり です:

72,000,000 / 352 / 4096 = 49.937 Hz ≈ 50 Hz.

デフォルト では、 PWM プリスケーラ( PSC ) と 周期( ARR ) は それぞれ 351 と 4095 に 設定 されて おり、 約 50 Hz の 既定 周波数 に なります。

パルス 幅 は、 周期 内 の デューティ 比 の 値 に 対応 します。 たとえば、 上記 の 設定 で 周期( ARR ) が 4096 の 場合、 パルス 幅( CCR ) を 2048 に 設定 すると 50% の PWM 出力 に なります。

Duty Cycle = CCR / (ARR + 1)

パルス 幅

チャンネル の パルス 幅 を 制御 する の は とても 簡単 で、 値 を レジスタ に 書き込む だけ です。

しかし 、 値 は いくつ に すれば よい のでしょう か? PWM を 50% の パルス 幅 に 設定 したい 場合、 周期 が 正確 に いくつ か を 知る 必要 が あります。 上記 の 計算 に 基づく と、 周期 を 4095 に 設定 した 場合、 パルス 値 を 2048 に 設定 すると 約 50% の パルス 幅 に なります。

アドレス

説明

アドレス

説明

0x60

PWM0_CCR_H

0x6C

PWM6_CCR_H

0x61

PWM0_CCR_L

0x6D

PWM6_CCR_L

0x62

PWM1_CCR_H

0x6E

PWM7_CCR_H

0x63

PWM1_CCR_L

0x6F

PWM7_CCR_L

0x64

PWM2_CCR_H

0x70

PWM8_CCR_H

0x65

PWM2_CCR_L

0x71

PWM8_CCR_L

0x66

PWM3_CCR_H

0x72

PWM9_CCR_H

0x67

PWM3_CCR_L

0x73

PWM9_CCR_L

0x68

PWM4_CCR_H

0x74

PWM10_CCR_H

0x69

PWM4_CCR_L

0x75

PWM10_CCR_L

0x6A

PWM5_CCR_H

0x76

PWM11_CCR_H

0x6B

PWM5_CCR_L

0x77

PWM11_CCR_L

プリスケーラ

0x40 から の レジスタ は、 PWM プリスケーラ( 範囲 : 0~65535 ) を 設定 する ため に 使用 されます。

アドレス

説明

0x40

PWM_TIM0_PSC_H

0x41

PWM_TIM0_PSC_L

0x42

PWM_TIM1_PSC_H

0x43

PWM_TIM1_PSC_L

0x44

PWM_TIM2_PSC_H

0x45

PWM_TIM2_PSC_L

周期

0x50 から の レジスタ は、 PWM 周期( 範囲 : 0~65535 ) を 設定 する ため に 使用 されます。

アドレス

説明

0x50

PWM_TIM0_ARR_H

0x51

PWM_TIM0_ARR_L

0x52

PWM_TIM1_ARR_H

0x53

PWM_TIM1_ARR_L

0x54

PWM_TIM2_ARR_H

0x55

PWM_TIM2_ARR_L

ボタン と LED の 制御

項目

アドレス

説明

USR ボタン( r/- )

0x24

USR ボタン の レベル 状態 を 読み取ります:

0 : Low レベル

1 : High レベル

LED( r/w )

0x30

LED を 読み取り または 制御 します:

0 : off

1 : on

2 : toggle

ブザー スイッチ の 制御

項目

アドレス

説明

ブザー スイッチ( r/w )

0x31

ブザー スイッチ を 読み取り または 制御 します:

0 : off

1 : on

サーボ ゼロ 調整

  • ボタン を 2 回 押す と、 すべて の PWM 信号 が パルス 幅 1500us、 周期 20000us に 設定 されます。 つまり、 サーボ は 中央 位置 に なります。 この 状態 で サーボ アーム を サーボ に 固定 してください。

  • もう一度 ボタン を 2 回 押す と、 すべて の PWM 信号 は 0 パルス に 設定 されます。

充電 状態

アドレス

0x25

0 : 充電 して いません

1 : 充電 中

安全 な シャットダウン

Fusion HAT+ には 内蔵 の 安全 シャットダウン 機構 が あります。 I2C を 介して マイクロコントローラ の レジスタ 状態 を 読み取り、 ソフトウェア ベース の シャットダウン を 実行 します。

アドレス

0x26

0 : 要求 なし

1 : バッテリー 残量 低下、 シャットダウン 要求

2 : 電源 ボタン に よる シャットダウン 要求

Raspberry Pi の シャットダウン 信号 を 設定 する に は、 詳細 な 手順 として シャットダウン 動作 の 設定 を 参照 してください。