9軸センサーICM-42688 + MMC5983MA vs. ICM-20948

概要

ICM-20948はInvensense社の6軸IMUと、AKM社の3軸地磁気センサAK09916を組み合わせた9軸センサと知られている。ICM-20948の後継機種はICM-42688(ICM-42688-V、ICM-42688-P含む)で、但しICM-42688に3軸地磁気センサが実装されておらず、MEMSIC社のAMR方式3軸地磁気センサMMC5983MAを補足して、つまりICM-42688とMMC5983MAを組み合わせた9軸センサと、旧型機種ICM-20948の公開規格の比較を行ってみた。「未公表」とは、センサICメーカがデータ未公表ということを意味する。

測定レンジ

ItemICM-20948ICM-42688AK09916MMC5983
加速度±16g±16g--
角速度±2000dps±2000dps--
磁束密度--±4900µT
ホール方式
±800µT
AMR方式

※参考データ: 地磁気の強さは約50uTである。

分解能

ItemICM-20948ICM-42688AK09916MMC5983
加速度16-bits18-bits--
角速度16-bits19-bits--
磁束密度--16-bits18-bits

※ICM-42688、MMC5983MAの分解能・感度は優れるとされる。

ノイズレベル

ItemICM-20948ICM-42688AK09916MMC5983
加速度230µg/√Hz
@10Hz
70µg/√Hz
@10Hz
--
角速度15mdps/√Hz
@10Hz
2.8mdps/√Hz
@10Hz
--
磁束密度--8mG0.4-1.2mG
total RMS

※ICM-42688、MMC5983MAのノイズレベルは低減とされる。

MAX出力レート

ItemICM-20948ICM-42688AK09916MMC5983
加速度225Hz
FIFO
MAX
1000Hz
FIFO
MAX
--
角速度225Hz
FIFO
MAX
1000Hz
FIFO
MAX
--
磁束密度--70Hz
MAX
1000Hz
MAX

※ICM-42688、MMC5983MAのMAX出力レートは優れるとされる。

確度・精度

ItemICM-20948ICM-42688AK09916MMC5983
確度未公表YAW Error
<±1°
Dynamic
未公表未公表
精度未公表未公表未公表YAW
±0.5º
@BW=00
±1.0º
@BW=11

※ICM-42688の確度、MMC5983MAの精度は優れるとされる。

製品化について

以上公表データおよび、当社の実験データに基づいて、ICM-42688とMMC5983MAとのコンビネーションを製品化した。詳細スペックについては、以下関連記事をご参照ください。

参考資料

ICM-42688-V データシート
MMC5983MA データシート
ICM-20948 データシート

関連記事

9軸センサーICM-42688+MMC5983 6軸&9軸回転ベクトル&3軸オイラー角 MAX1000Hz同時出力 ROS/ROS2対応 USB接続

あとがき

今回開示したスペックデータは、センサメーカの開示資料からの摘要である。

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

STM32F4へmicro-ROSを実装してみる

micro-ROS

micro-ROS puts ROS 2 onto Micro-controllers = マイコン版のROS2と言って良い。これまで高性能SOCボードやPCをターゲットにするしかなかったROSは、一気に組み込みシステムまで広がりそうになる。stm32cubemx_utilsはSTM32CubeMX/IDEプロジェクトにとってmicro-ROSを容易に実装することを目的とするROSパッケージとなる。それでは、STM32CubeIDEプロジェクトでstm32cubemx_utilsを使ってmicro-ROSを、STM32ファミリーのミドル級マイコンSTM32F4に組み込む手順を確かめてみよう。

確認環境

・micro-ROS側 NUCLEO-F446RE(MB1136)、本文のターゲットボードとなる
・ROS2側 ROS2(humble) & STM32CubeIDE 1.12.0インストール済み@UBUNTU 22.04
・接続 micro-ROS側とROS2(humble)側と、通信用シリアルケーブル(UASRT TX/RX TTL-USBコンバータ付)で接続済み、別途NUCLEO-F446REへオンボードデバッガーよりUSB給電&プログラム書き込み

micro_ROS_stm32cubemx_utils_testset
micro_ROS_stm32cubemx_utils_testset

実装手順

以下Dockerインストール→プロジェクト作成→utils入手(humble)→ハードウェア設定→ソース手入れ→agent作成→接続確認の順で説明していく。

Dockerインストール

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce=5:24.0.1-1~ubuntu.22.04~jammy docker-ce-cli=5:24.0.1-1~ubuntu.22.04~jammy containerd.io docker-compose-plugin
sudo groupadd docker
sudo usermod -aG docker $USER
sudo chmod 666 /var/run/docker.sock

stm32プロジェクト作成

STM32CubeIDEでプロジェクトを作成しておく。

stm32cubemx_utilsクローン

上記プロジェクトフォルダの直下にmicro_ros_stm32cubemx_utilsを、Cloneしておく。

git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_stm32cubemx_utils

STM32CubeIDE設定

ピン、転送などハードウェアに関わる設定や、FreeRTOS、コンパイラ、リンカーに関わる設定については、参考資料2のいうとおりに設定しておく。コンパイルやリンクエラーの要因になる、とくに「絶対パス」の記述はミスないよう注意する。

コード生成&手入れ&ビルド&ラン

micro_ros_stm32cubemx_utils/sample_main.cと、main.cと比較して、その差分をmain.cに追加する。
ビルドの際にワーニングがいくつか出たが、前向きにOKにしておく。

micro_ros_setupビルド

source /opt/ros/$ROS_DISTRO/setup.bash
mkdir ~/uros_ws && cd uros_ws
git clone -b $ROS_DISTRO https://github.com/micro-ROS/micro_ros_setup.git src/micro_ros_setup
rosdep update && rosdep install --from-paths src --ignore-src -y
colcon build
source install/local_setup.bash

micro_ros_agentビルド

source ~/uros_ws/install/local_setup.sh
ros2 run micro_ros_setup create_agent_ws.sh
ros2 run micro_ros_setup build_agent.sh
source install/local_setup.sh

接続確認

source ~/uros_ws/install/local_setup.sh
ls -l /dev/ttyUSB*
sudo chmod 1666 /dev/ttyUSB0
ros2 run micro_ros_agent micro_ros_agent serial -b 115200 --dev /dev/ttyUSB0
ros2 topic list
ros2 echo /cubemx_publisher

蛇足:USBポートのデバイス名は、TTL-USBコンバータはFTDI/CP(Silicon Labs)/CH(Qinheng Microelectronics)製TTL-USB IC使用の場合、/dev/ttyUSB*となり、マイコン内蔵USBコントローラ使用、つまりCDC/HIDなどのバーチャルCOMポートの場合、/dev/ttyACM*となる。

以下のような結果が出てれば、micro-ROS@STM32F446REからのメッセージは届いたら確認完了とする。

micro_ROS_stm32_test_result
micro_ROS_stm32_test_result

プロジェクト

STM32プロジェクトはgithub.com/soarbear(ROBOSHO)に預かっておく。

参考資料

1・https://micro.ros.org
2・https://github.com/micro-ROS/micro_ros_setup
3・https://github.com/micro-ROS/micro_ros_stm32cubemx_utils

あとがき

micro-ROSは、設計要件次第、クロック周波数100〜200MHzのSTM32F4、STM32G4にも有用&可用であることが分かった。Docker、Micro XRCE-DDSは、ROS2とは少し違和感が感じさせられて、これからドンドン進化していくと思われる。

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

SWO/SWV with STM32CubeIDE

はじめに

SWV/SWV(Serial Wire Output/Serial Wire Output Viewer)は、デバッグの際にSTM32CubeIDEのコンソールにデータを表示することでいざとプロセスやデータを確認したいときに大変便利なツールである。

確認環境

・NUCLEO-F446RE(MB1136)
・STM32CubeIDE 1.12.0 @UBUNTU 22.04

確認手順

1・NUCLEO-F446RE CN2などのジャンパー接続は、以下写真のとおりとなっている。

NUCLEO-F446RE-JUMPER
NUCLEO-F446RE-JUMPER

2・SYS/Mode/Debug/Trace Asynchronous SWにするとSWOピンが設定される。

stm32cubeide_ioc
stm32cubeide_ioc

3・Generate Codeして、main.cへコードを追加する。

/* USER CODE BEGIN Includes */
#include "stdio.h"
/* USER CODE END Includes */

/* USER CODE BEGIN 0 */
int __io_putchar(uint8_t ch) {
	return ITM_SendChar(ch);
}
/* USER CODE END 0 */

  /* USER CODE BEGIN WHILE */
  while (1)
  {
	printf("Hello, SWO/SWV\r\n");
	HAL_Delay(1000);
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */

4・Debug実行する。

stm32cubeide_start_debug
stm32cubeide_start_debug

5・Debugger ConfigurationにSWVをEnableにする。

stm32cubeide_debug_cofigutration
stm32cubeide_debug_cofigutration

6・SWV ITM Data Consoleを表示させる。

stm32cubeide_open_tm_data_console
stm32cubeide_open_tm_data_console

7・SWV設定を行う。

stm32cubeide_config_trace
stm32cubeide_config_trace

stm32cubeide_swv_setting
stm32cubeide_swv_setting

8・Start Traceをプッシュして、押し込んだ状態にする。

stm32cubeide_start_trace
stm32cubeide_start_trace

9・Debugを再開させる。

stm32cubeode_f8_resume
stm32cubeode_f8_resume

10・SWV ITM Data Consoleでprintfの内容を確認する。

stm32cubeide_data_view
stm32cubeide_data_view

プロジェクト

STM32CubeIDEプロジェクトは、github.com/soarbear(ROBOSHO)に預かっておく。

参考資料

・「UM2609 User manual STM32CubeIDE user guide」、STMicroelectronics

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

FPGAでUARTシリアル受信機

Under construction, coming soon…

概要

状態マシン

Verilogソースコード

FPGAボード&EDA

論理合成&端子割当&配置配線

プログラムダウンロード

結果確認

参考資料

あとがき

1+

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア

STM32G4 FD-CAN in Normal Mode

はじめに

車載ネットワークの主流バスとしてCAN(Controller Area Network)とFD-CAN(FDCAN/CANFD/CAN-FD/CAN with Flexible Data rate)、IEEE11898で規格化されているCANの通信速度は最大で1Mbpsであり,同じくCAN FDでは最大5Mbps(ただし,IEEEの規格上では最大2Mbps)となっている。とはいえ、8MbpsはFD-CANの通信速度としても可能だという。今後CANはFD-CANに置き換えられると予想される。STM32ファミリーには、STM32G0、STM32G4、STM32H7、STM32L5、STM32MP1シリーズはFD-CANコントローラ内蔵で、別途FD-CANトランシーバだけを用意すると良い。今回はSTM32G474とMicrochip製FD-CANトランシーバのMCP2562FDを使ってFD-CANの送受信を確かめていこう。

テスト環境

・IDE環境 STM32CubeIDE 1.12.0 @UBUNTU 22.04(iMACの画面は大きく、スクリーンショットの字は小さく写るため予めご容赦ください)
・マイコン/評価ボード STM32G474(FD-CAN1&FD-CAN2) / NUCLEO-G474RE(MB1367C) x 1pcs
・FD-CANトランシーバ MCP2562FD x 2pcs
・差動線FD-CAN_H、FD-CAN_Lを跨ぐ抵抗器  120R x 2pcs
・デカップリング用コンデンサ  0.1uF x 4pcs
・差動波形観察 オシロスコープ

確認内容

・FD-CAN1、FD-CAN2と往復ピンポン送受信確立
・差動信号の波形、データスループット=2Mbps

配線関連

FD-CAN周辺の回路図は以下のとおり掲載しておく。

stm32g474-mcp2562fd-fdcan-schematic
stm32g474-mcp2562fd-fdcan-schematic

実の配線済みテストセットの写真を以下のとおり掲載しておく。

stm32g4-fdcan-test-connection
stm32g4-fdcan-test-connection

マイコン設定

STM32CubeIDEのioc/Pinout & Configuration/Sys Mode and Configuration、Pinout View、ioc/Clock Configrationを以下のとおり掲載しておく。

stm32g4-fdcan-ioc
stm32g4-fdcan-ioc

stm32g4-fdcan-clock
stm32g4-fdcan-clock

FD-CAN設定

FD-CAN関連パラメータの値は、唯一ではなくスループットとサンプリングポイントの兼ね合いを見ながら、STM32CubeIDEが受け入れるまで調整していく。実に使用したパラメータは、以下のとおり掲載しておく。パラメータの計算また調整は、KVASER(オンライン計算サイト)を利用すると便利になる。ただし、Frequency=FD-CANクロック周波数、上図から抽出して、Tolerance=FD-CANクロック周波数公差、本文ではHSIによる値でSTM32G474のデータシートから抽出して、Node Delay= FD-CANトランシーバ遅延(厳密ではない)、本文ではMCP2562FDのデータシートから予め抽出しておく。

stm32g474-fdcan-parameters
stm32g474-fdcan-parameters

決まったパラメータの値は、以下のとおり入力しておく。Nominal Field、Data Fieldに関わるパラメータは別々、FD-CAN2とFD-CAN1のパラメータは同じなので、コピペして良い。

stm32g4-fdcan-parameter
stm32g4-fdcan-parameter

stm32g4-fdcan-fdcan1-interrupt
stm32g4-fdcan-fdcan1-interrupt

リポジトリ

STM32プロジェクトはリポジトリとして、github.com/soarbear/stm32g4-fdcanに公開済み。

送受信データ

FD-CAN2においてFD-CAN1から送信した32バイトデータを受信して、それらのデータに1を足して、FD-CAN1に返す。FD-CAN1においてFD-CAN2から送信した32バイトデータを受信して、それらのデータに1を足して、FD-CAN1に返す。このようにやり取りを繰り返す。受信したデータは以下のとおり掲載しておく。NUCLEOにST-LINKデバッガはオンボードなので、別途ST-LINKデバッガ、シリアルケーブル使わなくても、SWV ITM ConsoleつまりSTM32CubeIDEコンソールにデータを表示させることにした。それに伴ってSWV/SWOの設定は必要になる。SWV/SWOの設定については、本サイトの関連記事「SWO/SWV with STM32CubeIDE」をご参考にしてください。

stm32g4-fdcan-normalMode-rxData
stm32g4-fdcan-normalMode-rxData

差動波形

FD-CAN_H、FD-CAN_Lの差動波形は以下のとおり掲載しておく。

stm32g474-fdcan-wave
stm32g474-fdcan-wave

データビットタイムは0.5usと確認できたので、データフィールドのスループットは2Mbpsと推定される。また、残件事項として他のパラメータAuto Retransmission、Transmit Pauseはとりあえず、Disableにしておいたので、他の機会で動作確認することにする。

参考資料

・「車載ネットワーク入門」、インターフェース2021年12月号
・「NUCLEO-G4 User Manual」、ST Electronics
・「MCP2561/2FD フレキシブル データレート対応高速 CAN トランシーバ」、MICROCHIP
・「Datasheet – STM32G474xB STM32G474xC STM32G474xE」、ST Electronics

あとがき

FD-CAN規格のパラメータは多く、開発に当たって決して短時間で決められるものではない、設計要件に合わせて実験を重ねて確認していく必要がある。

0

ロボット・ドローン部品お探しなら
ROBOT翔・電子部品ストア