Qumcum Lab. の標準構成は二つの MCUを搭載します。複数の MCU間で通信を行いロボット全体として動作をおこないます。
◀ この記事の前に: 複数のMCUをつなぐ
▶ この記事の次に:
MCU間接続の概要
MCU間は SPI Busにより通信が行えます。この機構を M-Linkと呼びます。
標準構成は Body MCUをマスタとし、Peripheral MCUをスレーブとした構成です。オプションで Body MCU2と Head Assyを追加できます。Body MCU2を追加搭載したときは、Body MCUと Body MCU2の間は I2C接続で通信できます。この機構を M-Link2と呼びます。M-Linkと M-Link2は独立していて同時に使用することができます。
M-Link / SPI通信による接続

M-Link2 / I2C通信による接続

Design Considerations M-Link2の目的
Qumcum Lab.のメインMCUである Body MCUと、オプションで追加搭載する Body MCU2 はともに Leafony Blockです。
Body MCU2は利用者により多彩な活用方法が考えられます。Body MCUや Peripheral MCUは周辺回路が多く接続していてこれらの制御を行う必要があります。リアルタイム制御のため MCUの多くのリソースを使います。計算などの CPUを中心にした処理や エッジ AIを使用した場合に十分なリソースを割くことができない場合もあります。Body MCU2 は周辺回路の接続を少なくすることもでき、計算などの CPUを中心にした処理に特化したり、オリジナルの Leafを拡張したりできます。
この場合、メイン MCUとの通信は大切でありまた頻繁に行われることもあります。そのため、多用途に使用される M-Linkと別に専用の通信を行うことを目的に M-Link2を設けました。
Technical Considerations SPI はマスタ主体
よく使われる UARTは通信の両端末ともほぼ対等で接続しています。SPI( Serial Peripheral Interface )による通信は両端末が対等でなく、主従関係があります。通信の主導権を握る端末が「マスタ」、従属する端末が「スレーブ」です。
どちらからの送受信もマスタから発するクロックで動作します。スレーブの有効化もマスタからの信号で行います。マスタが送信や受信を行う場合は、自らが主体となります。必要なタイミングに必要なデータを送信できます。スレーブは別な手段でマスタに送信したいことを伝えます。その通知によりマスタが何らかの(ダミーも可能)データをスレーブに送信すると同時にスレーブ側がマスタにデータを送信することができます。
通信は送信と受信を同時に行います。送信だけの場合や受信だけの場合でも送受信が行われます。マスタ主体であることと送受信が必ず同時に行われることが UARTと異なります。プログラムの設計ではこの特徴に従う必要があります。
データの多くは複数バイトですので、そのバイト数だけ送信を行う必要があります。そのため、データ長は固定の場合が多いのですが M-Linkは可変長のデータを送受信できます。通信のプロトコルでデータ長を伝えるようにしているためです。
回路構成の概要
回路構成の概要は以下のとおりです。

MCU間は スイッチにより柔軟な構成ができます。Body MCUをマスタとしてスレーブを変更します。また、デイジーチェーンで複数のスレーブを接続することもできます。
オプションの MCUの有無や、通信の高速化を目的に柔軟な回路構成にできます。回路構成の変更は各 MCUの SPI通信線にあるスイッチで行います。
スイッチを接続することにより MCUを経由しない回路構成になります。例えば、標準構成の場合は Body MCUとPeripheral MCUだけで Body MCU2と Head Assyはありません。この場合は M-B2swと M-Hswを ON(接続)にして Body MCUと Peripheral MCUだけの回路構成となります。
詳細は以下をご覧ください。
スレーブ MCU から通信要求
M-Linkの実体は MCU間の SPI通信です。SPI はマスタ側から通信を始めることができますが、スレーブ側から通信を始めることはできません。Body MCUがマスタとなり他の MCUがスレーブとなるため、スレーブからの通信要求をマスタ側に伝える必要があります。スレーブからマスタへの通信要求は MCUのスリープから復帰するためのウエイクアップの信号線を使用します。この信号線は各 MCUがスリープ時使用するため、スリープ時以外は使用していません。
ウエイクアップの信号線は以下のとおりです。
ウエイクアップの信号線をスレーブからマスタへの通信要求に使用したときの構成は以下のとおりです。
スレーブ MCUの選択
プログラムの概要
DAC出力回路( 発音・発話回路 )の電力は +5Vアナログ系として独立しています。この電源はスイッチ IC( TPS22918DBVR )により ON/OFFができます。発音、発声をする場合は事前にこの回路の電源を有効( PS-AMP( IO26 )をHigh )にしておきます。使用していない場合はこの回路の電源を遮断することにより消費電力を低減できます。
省電力制御の詳細はこちらをご覧ください。
名 称 | ESP32 Pin | ESP32 ポート | 使 途 |
---|---|---|---|
PIN_PS_SA | 11 | IO26 / GPIO | 省電力制御 High: 電源 ON Low: 電源 OFF |
ライブラリ
発音はライブラリを使用していません。
発話は ESP32向けの音声合成ライブラリである AquesTalk-ESP32 Ver.2.0( 株式会社アクエスト )を使用しています。発音に関してはこちらをご覧ください。
参考情報
参考になる情報は以下のとおりです。
このホームページ内
- 発音・発声( DAC出力 / ハードウエア ): MCUの DACを使用して発音や発声を行うハードウエアを説明します。
- Speak interpreter ( 概要 ): 発声処理の最上位、Speak interrupter の概要です。
- Speak interpreter( 操作説明 ): アプリケーションからの操作方法です。( API )
- Speak interpreter( コード ): コードの詳細を説明します。
- Voice driver( 概要 ): 発音そのものの処理です。( API )
- Voice driver( 操作説明 ): 個々のサーボモータを制御する方法です。
- Voice driver( コード ): コードの詳細を説明します。
- 音声合成ライブラリ: ライブラリの概要や導入方法を説明します。
- 省電力制御( DAC出力増幅回路 ): DAC出力増幅回路の電力制御を行います。