注釈
こんにちは。 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 を 参照 してください。
アドレス |
説明 |
|---|---|
|
ADC チャンネル 0 H |
|
ADC チャンネル 0 L |
|
ADC チャンネル 1 H |
|
ADC チャンネル 1 L |
|
ADC チャンネル 2 H |
|
ADC チャンネル 2 L |
|
ADC チャンネル 3 H |
|
ADC チャンネル 3 L |
|
ADC 4 H( バッテリー 残量 ) |
|
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% の パルス 幅 に なります。
アドレス |
説明 |
アドレス |
説明 |
|---|---|---|---|
|
PWM0_CCR_H |
|
PWM6_CCR_H |
|
PWM0_CCR_L |
|
PWM6_CCR_L |
|
PWM1_CCR_H |
|
PWM7_CCR_H |
|
PWM1_CCR_L |
|
PWM7_CCR_L |
|
PWM2_CCR_H |
|
PWM8_CCR_H |
|
PWM2_CCR_L |
|
PWM8_CCR_L |
|
PWM3_CCR_H |
|
PWM9_CCR_H |
|
PWM3_CCR_L |
|
PWM9_CCR_L |
|
PWM4_CCR_H |
|
PWM10_CCR_H |
|
PWM4_CCR_L |
|
PWM10_CCR_L |
|
PWM5_CCR_H |
|
PWM11_CCR_H |
|
PWM5_CCR_L |
|
PWM11_CCR_L |
プリスケーラ
0x40 から の レジスタ は、 PWM プリスケーラ( 範囲 : 0~65535 ) を 設定 する ため に 使用 されます。
アドレス |
説明 |
|---|---|
|
PWM_TIM0_PSC_H |
|
PWM_TIM0_PSC_L |
|
PWM_TIM1_PSC_H |
|
PWM_TIM1_PSC_L |
|
PWM_TIM2_PSC_H |
|
PWM_TIM2_PSC_L |
周期
0x50 から の レジスタ は、 PWM 周期( 範囲 : 0~65535 ) を 設定 する ため に 使用 されます。
アドレス |
説明 |
|---|---|
|
PWM_TIM0_ARR_H |
|
PWM_TIM0_ARR_L |
|
PWM_TIM1_ARR_H |
|
PWM_TIM1_ARR_L |
|
PWM_TIM2_ARR_H |
|
PWM_TIM2_ARR_L |
ブザー スイッチ の 制御
項目 |
アドレス |
説明 |
|---|---|---|
ブザー スイッチ( r/w ) |
0x31 |
ブザー スイッチ を 読み取り または 制御 します: 0 : off 1 : on |
サーボ ゼロ 調整
ボタン を 2 回 押す と、 すべて の PWM 信号 が パルス 幅 1500us、 周期 20000us に 設定 されます。 つまり、 サーボ は 中央 位置 に なります。 この 状態 で サーボ アーム を サーボ に 固定 してください。
もう一度 ボタン を 2 回 押す と、 すべて の PWM 信号 は 0 パルス に 設定 されます。
充電 状態
アドレス |
値 |
|---|---|
|
0 : 充電 して いません 1 : 充電 中 |
安全 な シャットダウン
Fusion HAT+ には 内蔵 の 安全 シャットダウン 機構 が あります。 I2C を 介して マイクロコントローラ の レジスタ 状態 を 読み取り、 ソフトウェア ベース の シャットダウン を 実行 します。
アドレス |
値 |
|---|---|
|
0 : 要求 なし 1 : バッテリー 残量 低下、 シャットダウン 要求 2 : 電源 ボタン に よる シャットダウン 要求 |
Raspberry Pi の シャットダウン 信号 を 設定 する に は、 詳細 な 手順 として シャットダウン 動作 の 設定 を 参照 してください。