ST-MCSDKでPMSMモータを動かす

はじめに

NUCLEO STM32F446REとIHM07M1の組み合わせに、ST MCSDK(ソフトウェア)を組み込んで、ドローンに使用可能なA2208-1100KVモータを動かした。FOCに手入れなくても動作可能になった。確認環境、確認手順を以下にメモしておく。中間生成物のモータプロファイルとワークベンチに、結果物のSTM32CubeIDEプロジェクトを含めるリポジトリをGithubに公開済み。

確認環境

NUCLEO STM32F446RE
X-NUCLEO-IHM07M1
A2208-1100KV SM-PMSM Motor
DC Power Output 14.8V
X-CUBE-MCSDK_5.4.7(Motor profiler & Motor workbench含む)
stm32cubemx-win_v6-3-0
stm32cubeide_1.14.0_19471_20231121_1200_x86_64.
Windows 11

※何回かの試行錯誤から、MCSDK_5.4.7と、stm32cubemx-win_v6-3-0の組み合わせではエラーなく行けると確認された。

確認手順

以下、Motor Profiler→Workbench→STM32CubeIDE→WorkbenchMonitorの順でメモしていく。

Motor Profiler

12極=6ペア、3セル=14.8V、1100KV * 14.8V=16280RPM、永久磁石は回転子表面実装=SM-PMSMとして入力して、一度モータを馳せて、測定したモータプロファイルを書き出す。入力したMAX SPEEDまでモータを回転させるので、机に固定することに注意すること。

motor-profiler
motor-profiler

Workbench

Workbenchを立ち上げて、制御ボード、モータドライバ、モータプロファイルとともに、Workbenchプロジェクトを書き出す。

create-workbench
create-workbench

save-workbench
save-workbench

project-generation
project-generation

STM32CubeIDE

Workbenchプロジェクトを読み込んで、コンパイルして制御ボードに書き込む。

stm32cubeide-import-workbench
stm32cubeide-import-workbench

Workbench Monitor

Workbench Monitorを立ち上げて、Start/Stop Motorでモータを制御する。

workbench-monitor
workbench-monitor

リポジトリ

https://github.com/soarbear/stm32f446-ihm07m1に公開済み。

参考資料

STM32向けモータ制御ソフトウェア開発キット(MCSDK)
X-NUCLEO-IHM07M1
Three-phase brushless DC motor driver expansion board based on L6230 for STM32 Nucleo

NUCLEO-F446RE
STM32 Nucleo-64 development board with STM32F446RE MCU, supports Arduino and ST morpho connectivity

1+

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

stm32h750のdacとtimerでsine波を作る

はじめに

いよいよSTM32ファミリーのハイクラスに属する、Cortex-M7コアをもつ、stm32h750(クロック周波数480MHz)を新製品に組み込もうと、早速stm32h750の開発ボードでSine波を作ってみよう。今回はSine波のサンプリングデータを1周期当たり100データに、DACでアナログ波に、トリガをTimer6に、サンプリングデータをDMA転送に指定して、Sine波の周波数は、タイマクロック周波数240MHz / タイマのリロード最大カウンタ数(239+1) / Sine波1周期当たりタイマリロード数100 = 10KHzにしよう。

確認環境

・Windows 10 / STM32CubeIDE
・stm32h750 開発ボード
・ST-LINK V2 プログラマ/デバッガ
・オシロスコープ

STM32H750プログラマSTlLINK_V2を使用
STM32H750プログラマSTlLINK_V2を使用

パタメータ配置

RCC、Clock、DAC、Timer、DMA、Serial wireの順でパラメータ配置を行って、STM32CubeIDEにソースコード生成しよう。

Target MCU

TargetをSTM32H750VBに指定する。

STM32H750VBをターゲットとして指定
STM32H750VBをターゲットとして指定

RCC

RCCを外部HSEクリスタルに指定する。

stm32h750のRCC配置
stm32h750のRCC配置

Clock

HSEを25MHzオンボードに指定して、Timerクロックを240MHzにする。Timerクロックは他の値にしてもありうる。

stm32h750のクロック配置
stm32h750のクロック配置

DAC

DACのOutput2に指定する。

STM32H750のDACをOutput2に指定する
STM32H750のDACをOutput2に指定する

Timer

Timer6に指定する。

STM32H750のTimer6に指定
STM32H750のTimer6に指定

DMA

MCUの負担を軽減して、DMA転送方式に指定する。

STM32H750のDMAに指定
STM32H750のDMAに指定

Serial wire

プログラマ&デバッガをSWD(ST-LINK)に指定する。

STM32H750のデバッガをSerial wireに
STM32H750のデバッガをSerial wireに

ソースコード

Generate codeして、main.cへ以下ソースを追加する。

/* USER CODE BEGIN 0 */
uint16_t data[100];
void sine_wave(void) {
	for (uint16_t i = 0; i < 100; i++) {
		data[i] = (uint16_t)(2000 * sin(i * 2 * 3.14159 / 100) + 2000);
	}
}
/* USER CODE END 0 */

int main() {
...
/* USER CODE BEGIN 2 */
sine_wave();
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac1, DAC_CHANNEL_2, (uint32_t *)data, 100, DAC_ALIGN_12B_R);
/* USER CODE END 2 */
...
}

出力確認

BUILD & RUN、Sine波は予想通り、周期10KHzでPA5から出力されていることを確認済み。

STM32h750の出力Sine波を確認する
STM32h750の出力Sine波を確認する

プロジェクト

https://github.com/soarbear/stm32h750_dac_timer_sine_wave に公開済み。

2+

ロボット・ドローン部品お探しなら
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翔・電子部品ストア