SlideShare a Scribd company logo
【ロボコン勉強会向け】
STM32Nucleoを使い
マスタ〜スレーブシステムを作る
ミイシステム株式会社) 稲玉 繁樹
Rev.)2018/09/10
いなたま しげき
Mii system Co.,Ltd.
まえがき
本日はSTM32-Nucleoを使って,ロボコン向けに流⽤できる技術を紹介したいと思います。
かなり⾼度なことができる反⾯,ハマりやすく,コツと経験が求められるSTM開発ですが
サンプル事例を通じて,テクニックやワンポイントを踏まえ紹介させていただきます。
本日の概要
2
〜 Contents 〜
 はじめに
 STM32を勧める理由
 マスタースレーブシステムの例
 システム概要〜開発⼿順
 ロボコンっぽい活⽤例
 テクニック
 組込やSTMのテクニック紹介
 開発ボードの紹介
Mii system Co.,Ltd.
マイコン教育
 ミイシステム株式会社(Mii System Co.,Ltd.)
Mie intellectual information System
代表取締役社⻑︓ 稲玉 繁樹 (イナタマ シゲキ)
 主な事業
 組込,モータ制御を中心としたコンサルティング
 電子機器+組込ソフトの開発
 組込 / IoT 関連の支援,教育
※ST Micro様とは,教育/セミナー関係で支援頂いております。
スピーカー紹介
3
IoT製品 データ収集システム
ESP32/ IBM Cloud Linux STM32
Mii system Co.,Ltd.
近年,流⾏している多数の開発ボードの中から,STM32を勧める訳は…
具体的に比較してみましょう。
STM32を勧める理由
44
Function/Board Raspberry Pi3 Arduino STM32-Nucleo
Clock 1.2GHz 16MHz 48MHz
ROM/RAM 16G/1G 32k/2k 64k/8k
Price 39$ 20$ 15$
GPIO/AD/PWM 25 / x / x 14 / 8 / 6 22 / 10 / 14
Tick OS依存 Interrupt Interrupt
Compile/Debug Free Free Free
USER Group Many Many Little
Matome ◯⾼性能なLinux-PC
◯速いがOS依存周期
◯多機能とネットに強い
✕GPIO3.3V
✕起動/終了遅い
◯簡単言語
◯ユーザ&情報多い
✕マルチタスク弱い
✕メモリ少ない
✕処理パワー弱い
◯USBデバッグ強い
◯安価,⾼性能
◯CPU変更が容易
✕情報が少ない
✕3.3Vと5Vが混在
⾼性能だが
タイミング制御
厳しい
単機能は十分
Debug⾯倒
⼤〜⼩まで
同じ技術で
カバーできる
PRO向けに技術支援
Mii system Co.,Ltd.
 システム概要
 マスターとスレーブをRS485にて接続し,分散型システムの基礎を作る
 マスターからの問いかけ(SD)に,スレーブが応答(RD),CPU間をリンクさせ
MasterのSWによりSlaveのLEDを点灯させてみる
 ボーレート,周期を調整し,どれくらいの性能が出せるか試してみる
 考慮すべき仕様
 マルチスレーブを考慮したプロトコルを設計する
 スピードアップには送受信の切り替えスピードが重要
マスタースレーブシステムの開発例
5
Master
(F303)
TX
RS
485RX
5V
GND
Slave
(F303)
TX
RS
485 RX
5V
GND
SW LED
SD
RD
Mii system Co.,Ltd.
 RS485とは(wiki,Netより)
 2線式、半二重、マルチポイントシリアル接続を特徴とする。
 差動信号によりノイズに強く,⾼速,⻑距離を得意とする
 複数の端末とディジーチェーン接続にて拡張でき,電源も同時に配線しやすい
RS485のメリット
6
UART
0
1 RS485
A
B
H
L
A
B
余裕が無い 電位差変わらず
A>B=1
A<B=0
0.2Vまで
たくさん繋がる
kmもいけるよ
LSB MSB
 信号の例
 ノイズが乗ると
Mii system Co.,Ltd.STM開発⼿順とツールの紹介
7
STM32開発⼿順の例
 システム設計
 回路開発
 CPU周辺設計
 アナログ設計
 基板設計
 筐体設計
 ソフト開発
 プロジェクト生成
 コンパイル
 デバッグ
 書込
 調整作業
WORD/Excel
Nucleo
LT Spice
KiCAD
3Dプリンタ
CubeMX
MDK-ARM
MDK-ARM
ST-Link/V2-1
・仕様書,図⾯にちゃんと残そう
・設計書で設計する
MDK-ARM
STM-Studio
・回路図は仕様書や計算書で
設計根拠を残そう
・Simulator活⽤しよう︕
・CAD毎の操作方法は諦める
Point
・PackのVersionにハメられる
・MDKは安定だけど制約あり
・時々かたまるST-Link/MBED
・Printf-Debugからレベルアップ
Tool
Mii system Co.,Ltd.CubeMXの設定1
8
Pinout
・Peripheralsで機能を有効化
・Hardware flow control(RS485) を有効
・右クリックでLabel名をつけよう
main.h に#defineされるので活⽤する
Clock Configuration
・HCLK でメイン周期を決める
・UART1のクロックはSYSCLKから作ると64MHz
・CLKが早いと消費電⼒が上がるので,機器に
よって最適にするのも⼤切(⼤⼈になったら)
Mii system Co.,Ltd.CubeMXの設定2
9
USART Configuration
・Over Sampling(16:8) 16の方が安定する
8 に変更すると 8Mbpsが選べるようになる
・Parity使うときは Word Lengthが9bitになる
USART DMA
・DMAの設定はAddして選択するだけ
#昔はUARTと割込とDMAの連動とか何日も‥
・Channelはレジスタ呼ぶ時に使う場合がある
Mii system Co.,Ltd.CubeMXの設定3
10
コラム︓bpsの計算方法
今回のように限界までボーレートを上げ
るためには,仕組みを理解しよう。
bps = CLK / O.S. / BRR
O.S. :Over sampling
BRR :Baudrate Reg.
BRR = (CLK / O.S.) / bps – 1
= (64M / 8) / bps – 1
Project Setting
・Defaultではファイルサイズ⼤きくなるので,
図のセッティングがおすすめ
・必要なライブラリだけ組み込む
・デバイス毎に.c/.h を作る
bps CLK O.S. BRR
1M 64M 16 4 – 1 = OK
4M 64M 16 1 – 1 = OK
8M 64M 8 1 – 1 = OK
10M 64M 8 0.8 – 1 = NG
8M 72M 8 1.125 – 1
Mii system Co.,Ltd.実際の開発内容(Debug)
11
MDKによるコンパイル〜Debug
STM-Studioによるデバッグ
 Packの設定はハマりやすい
 USB Debugで楽々
 Break / Run / Step
 Watch / Dump
 Peripherals / Clock count
MDK-ARMをうまく使いこなそう
 変数をリアルタイム表示するツール
 デバッグ情報から変数を選択
周期設定,ログなども簡単
 メモリ書込とグラフ表示ができるので,
フィードバック調整とか楽になる
 Printf-Debugからレベルアップ
Mii system Co.,Ltd.
 書き込み(Nucleo-MBED)
 通常はUSB接続した状態にて,デバッガ/ST-Linkから書き込みができます。
 fromelf.exe を使うと,binファイルが作成でき,Nucleoのドライブ(Ex:”D:¥”)に
Copyする事で書き込みできます。動作が速いのでおすすめ
MK.BAT の例
書き込み方法の例
12
SET Project=RS485M-F303
C:¥Progra~1¥Keil_v5¥ARM¥ARMCC¥bin¥fromelf.exe --bin -
o ..¥ROM¥%Project%.bin ..¥MDK-ARM¥%Project%¥%Project%.axf
copy %Project%.bin D:
方法 コンパイル 書込 実⾏ トータル時間
MDK 数秒 デバッガ起動 実⾏ボタン 30〜60 [s]
bin 数秒 MK.BAT 自動 5 [s]
いらいら! いらいら!
ここが⼀瞬︕
書込方法の比較
Mii system Co.,Ltd.
 マスタースレーブ通信を最速でリンクさせてみる(1M/4M/8M [bps])
動作状況,性能確認
13
動作状況
・マスタ,スレーブとも受信後,即返答するソフト
・無事,1-8Mbpsまでリンク成功
・⾼速になるとオーバヘッドが重く,影響する
性能結果
・1Mbps 200us周期 = 5.0 [kHz]
・4Mbps 66us周期 = 15.1 [kHz]
・8Mbps 46us周期 = 21.7 [kHz]
簡単に十分な性能が出せました@F303K8/64M
1Mbps1Mbps 4Mbps4Mbps 8Mbps8Mbps
Mii system Co.,Ltd.
 とあるロボットのブロック図
 左右モータドライバ
 発射装置の制御ボード
 アーム先端制御とセンサ
ロボコンっぽい活⽤例
14
Master
(F4/F7)
MTR DRV.
センサ
AD
センサ
AD
センサ
I2C
IO Slave
485
MTR
ENC
MTR DRV.
MTR
ENC
Air
Valve
Sensor
Slave SW
arm
 設置場所が離れている場合や
アナログ信号の減衰対策に効果的
 センサ程度は電源も合わせて繋げる
GND / 5V / A / B の4線式でOK
Mii system Co.,Ltd.
 マルチスレーブに拡張できるプロトコルを使おう
 RS485のプロトコル例
通信プロトコルの例
15
PAD PAD ST ID CMD DATA ED SUM PAD
55 55 AA 01 xx xxxxxxxx AA xx 55
 Technic
 PAD ⾼速信号の⽴ち上がりが悪いので,HL振って回線を安定させる
 ST PADは捨てて,STにて電文始まりを検知
 ID ボード毎の局番 (Ex.:01=MTR 02=Sensor 03=IO)
 CMD コマンドにより処理を分けるなどができる
 DATA コマンド毎に固定⻑で処理すると楽
 ED 終了判定コード
 SUM 電文のエラーチェック,チェックサムやCRCなど
 PAD とりあえず,おやくそく
Mii system Co.,Ltd.利⽤効率を⾼めるプログラムの例1
16
こんなプログラム書いてませんか…
Loop{
センサ1送信→受信→処理
センサ2送信→受信→処理
センサ3送信→受信→処理
ロボット軌道計算→司令決定
モータ1送信→受信→処理
モータ2送信→受信→処理
アーム信号読出→AD待ち→処理
アーム司令→動作完了待ち
PCコマンド受信→処理
PCコマンド送信→送信完了待ち
}
Loop に5 – 10 [ms] かかる︖
STMは 1 [ms] 周期で十分回せます
悪いプログラム,あるある(組込編)
・Delayで調整
・for文でwaitしてる
・if〜break;でループ抜けてる
・if文が5段6段に増殖
・返答待ち/処理待ちがあちこちに
・毎回,全部の処理を実⾏
・受信タイムアウトが無い
・⼩数の割り算してる
・変数が全部float
・変数名が適当,関数名がkansu1()
・コメントが無い/謎のコメントがある
・・・
Mii system Co.,Ltd.利⽤効率を⾼めるプログラムの例2
17
LOOP
・main()内はコード書かず,サブルーチンの
呼び出しだけが良い
・処理の順序を再確認
・LOOPは時間のかかる処理だけ
定時割込で⼤事な処理を実⾏
・割込レベル間の変数書込は要注意
Sequence
・1状態,1処理が基本
・1処理内でif文による処理分け禁⽌
処理分けしたければ状態を増やす
Interrupt
・無駄な待ち,エラーによる待ちが無いこと
・優先順位,多重割込,しっかり設計
GPIO
・複数回読みしてチャタリング除去しよう
・SWとかは20ms毎とかで十分
AD変換
・変換開始→他の処理→読出し
・DMA使い裏で変換させる
・複数回変換して平均など
・⼊⼒インピーダンスと変換時間は正確に
Serial通信
・送信はDMAが楽
・送信完了割込で受信開始
・受信数をチェック,⼀定時間でタイムアウト
Mii system Co.,Ltd.
 +5Vへ電源つないでも動きません
 SB16/SB18 によるポート制約
 File System 故障による起動不良
 ⼊⼿タイミングにより品薄に
 systick の初期化タイミング,ハマった
 ADの初期設定が最速,おすすめしない
 UARTの再初期化、パリティの説明
 MDK無料化すると,F3/F4デバッグの際は注意
 Version UPでProjectが混乱しやすい
 Packの更新は要注意
STM/Nucleo開発の注意点とコツ
18
→ はまると情報量が少なく時間がかかる
→ 詳しい⼈,教えてくれる⼈がいると助かる...切に願う...
Mii system Co.,Ltd.HAL関数の例
19
よく使うHAL関数
Function Description
HAL_Delay() ⼀定時間待つ
HAL_GetTick() 時刻(TickCount)取得
HAL_GPIO_ReadPin() Port⼊⼒
HAL_GPIO_WritePin() Port出⼒
HAL_ADC_Start_DMA() AD変換(DMA)開始
HAL_UART_Abort() 通信停⽌(初期化)
HAL_UART_Transmit_DMA() UART-DMA送信
HAL_UART_Receive_DMA() UART-DMA受信
HAL_UART_TxHalfCpltCallback() 送信完了割り込み
HAL_TIM_PeriodElapsedCallback() タイマー割り込み
HAL_I2C_Master_Transmit() I2C送信
→ 上記のHAL関数にてSOFTはほぼ完成,HALの使⽤例が少なく苦労しました
→ 時々,レジスタ参照する必要があり,ハマりどころでした
Mii system Co.,Ltd.
 STM32日本語情報
 「STM32日本語情報」で検索 →
STM32/STM8 マイクロコントローラ リファレンス マニュアル(日本語)
https://www.stmcu.jp/design/document/reference_manual_j/
 STM32マイコン マンスリー・アップデート
 STM情報が送られてくるメールマガジン
https://www.stmcu.jp/monthly-update/
 この中に,STM32の日本語データシートのリンクがあります
 登録は直接,またはリスト貰えれば当社から取次できます
 セミナー情報
 当社にて「STM32フォローセミナー」 「IoT時代のものづくりセミナー」を提供中
 学校向けの授業,特別実習など,ご相談ください
STM情報
20
Mii system Co.,Ltd.開発ボードの紹介(IO-BASE)
21
Summary
マイコンの基本学習⽤
操作,表示機能
CPUのベースボード
Device
SW x 3
DIPP x 2
LED x 2
LCD(8x2)
Shield x 3
Peripheral
GPIO
A/D
I2C
Mii system Co.,Ltd.DC Motor Shield
Summary
DCモータ駆動⽤ x 2
電流検出回路付き
Device
H-Bridge x 2
45V/2A Max
Encoder(A/B)
Current(Shunt)
RS485 x 1
Peripheral
GPIO
PWM
TMR(Counter)
AD
UART
22
62.2x19.0[mm]
Mii system Co.,Ltd.RC Servo Shield
Summary
RCサーボ,ソレノイドを
PWM駆動できます
8ch同時駆動
Device
TD62783(Source)
50V/500mA Max
RS485 x 1
Peripheral
GPIO
PWM
UART
23
64.8x19.0[mm]
Mii system Co.,Ltd.RS485 Shield
Summary
シリアル通信基板
RS485によるネットワーク
自作回路⽤エリア
Device
Half Duplex
RS485 x 1
Peripheral
UART
24
60.9x49.9[mm]
Mii system Co.,Ltd.
 STM-Nucleoを使ってマスタースレーブシステムの例を紹介
簡単に⾼性能な通信ができることがわかりました。
 ロボット向けに分散システムを作る例を紹介しました
⾼速リンクを習得すれば,機能毎に効率よく分散配置できます。
 ST開発のテクニック,ポイントを紹介しました
効率良いプログラムを作れるようになりましょう。
質問,ご相談は懇親会にて︕(デモ機展示します)
資料/サンプルソースも公開します︕
ご清聴ありがとうございました︕
まとめ
25
ミイシステム株式会社) 稲玉 繁樹
2018/09/10
いなたま しげき

More Related Content

PDF
学ロボの制御
PDF
Cartographer を用いた 3D SLAM
PDF
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
PDF
Gitの便利ワザ
PDF
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PDF
いつやるの?Git入門
PDF
きつねさんでもわかるLlvm読書会 第2回
PDF
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer
学ロボの制御
Cartographer を用いた 3D SLAM
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
Gitの便利ワザ
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
いつやるの?Git入門
きつねさんでもわかるLlvm読書会 第2回
オブジェクト指向プログラミング入門 -- Java object-oriented programming primer

What's hot (20)

PDF
Python入門 : 4日間コース社内トレーニング
PDF
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
PDF
SLAM開発における課題と対策の一例の紹介
PDF
いまさら聞けない!CUDA高速化入門
PDF
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
PPTX
MikanOSと自作CPUをUSBで接続する
PPTX
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
PDF
こんなに使える!今どきのAPIドキュメンテーションツール
PDF
Gitはじめの一歩
PDF
エンタープライズアジャイル内製プロジェクトを立ち上げる前に考慮すべき3つのこと
PDF
C++ マルチスレッドプログラミング
PDF
Juceで作るオーディオアプリケーション
PDF
Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜
ODP
pixiv サイバーエージェント共同勉強会 solr導入記
PDF
BA-Net: Dense Bundle Adjustment Network (3D勉強会@関東)
PDF
条件分岐とcmovとmaxps
PDF
20230216_Python機械学習プログラミング.pdf
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
PPTX
Git 入門ちょい手前
PDF
RDRA DDD Agile
Python入門 : 4日間コース社内トレーニング
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
SLAM開発における課題と対策の一例の紹介
いまさら聞けない!CUDA高速化入門
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
MikanOSと自作CPUをUSBで接続する
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
こんなに使える!今どきのAPIドキュメンテーションツール
Gitはじめの一歩
エンタープライズアジャイル内製プロジェクトを立ち上げる前に考慮すべき3つのこと
C++ マルチスレッドプログラミング
Juceで作るオーディオアプリケーション
Apple Watchを使い倒す 〜Watchから取れるデータとその活用法〜
pixiv サイバーエージェント共同勉強会 solr導入記
BA-Net: Dense Bundle Adjustment Network (3D勉強会@関東)
条件分岐とcmovとmaxps
20230216_Python機械学習プログラミング.pdf
ARM CPUにおけるSIMDを用いた高速計算入門
Git 入門ちょい手前
RDRA DDD Agile
Ad

Similar to ロボコン勉強会向けStm32を用いてマスタースレーブシステム (20)

PDF
組み込み入門
PDF
組み込み入門
PPTX
ロボットシステム学2015第2回
PPTX
無線LANでロボットを動かす話
PDF
ネットワーク通信入門
PDF
JAWS-UG IoT専門支部 - ここにもFreeRTOS ~STM32で使ってみる~
PDF
無線LANでロボットを動かす話
PDF
IkaLog20170316pynq_dist
PDF
Dev kobe 2 マイコン入門 20151130
PDF
Dp tf stm32_cubemx0418j
PDF
OSC 2012 Hokkaido でのプレゼン資料
PPTX
2014 1018 OSC-Fall Tokyo NETMF
PDF
SICE 2020 Rtm tutorial 2_online_en
PDF
組込エンジニアにも役立つ!Node-RED活用術(for Node-RED Con. Osaka)
PDF
131106 01 i-rex2013
PDF
RTミドルウェアサマーキャンプ資料2022.pdf
PDF
レガシーフリーOSに必要な要素技術 legacy free os
PDF
Rtミドルウェアサマーキャンプ資料2021_菅佑樹
PDF
高機能ルータを利用したDMR実行メニーコアにおける効率的なタスク配置手法の検討 (IPSJ SIG-ARC 2012-03-27)
KEY
Androidロボットサミットin名古屋
組み込み入門
組み込み入門
ロボットシステム学2015第2回
無線LANでロボットを動かす話
ネットワーク通信入門
JAWS-UG IoT専門支部 - ここにもFreeRTOS ~STM32で使ってみる~
無線LANでロボットを動かす話
IkaLog20170316pynq_dist
Dev kobe 2 マイコン入門 20151130
Dp tf stm32_cubemx0418j
OSC 2012 Hokkaido でのプレゼン資料
2014 1018 OSC-Fall Tokyo NETMF
SICE 2020 Rtm tutorial 2_online_en
組込エンジニアにも役立つ!Node-RED活用術(for Node-RED Con. Osaka)
131106 01 i-rex2013
RTミドルウェアサマーキャンプ資料2022.pdf
レガシーフリーOSに必要な要素技術 legacy free os
Rtミドルウェアサマーキャンプ資料2021_菅佑樹
高機能ルータを利用したDMR実行メニーコアにおける効率的なタスク配置手法の検討 (IPSJ SIG-ARC 2012-03-27)
Androidロボットサミットin名古屋
Ad

ロボコン勉強会向けStm32を用いてマスタースレーブシステム