
実習・Armマイコン内蔵ペリフェラルを活用するためのC++プログラミング
実習・Armマイコン内蔵ペリフェラルを活用するためのC++プログラミング
|
![]() ![]() |
【開催日】2021年1月20日(水) 10:00-17:00 1日コース
【セミナNo.】ES20-0121 【受講料】26,000円(税込)
【会場】東京・巣鴨 CQ出版社セミナ・ルーム [地図]
【セミナNo.】ES20-0121 【受講料】26,000円(税込)
【会場】東京・巣鴨 CQ出版社セミナ・ルーム [地図]

マイコンのプログラミングでやっかいな点の一つが,汎用入出力(GPIO)やタイマなどマイコンに内蔵されているペリフェラルのプログラミングである.このセミナでは,ビギナでも簡単に使えることで定評のあるMbed(注1)というプログラム開発環境を使う.Mbedでは内蔵ペリフェラルを使うため,C++から使えるライブラリ(以下,「Mbedライブラリ」)が充実しており,使いたいペリフェラルの内部構成などを知らなくても,ペリフェラルを使うプログラムを開発できる.一方で,Mbedライブラリは汎用性を重視しているため,小回りがきかないという問題点もある.
一例を挙げれば,Mbedではタイマ割り込みを使うためのMbedライブラリが提供されているが,これを使ってステッピング・モータの回転速度を滑らかにコントロールするようなプログラムをうまく実現できない.その原因は,タイマ割り込みの時間間隔を変更しようとすると,タイマが再度初期化されることにある.
そこでこのセミナでは,Mbedライブラリは使いつつ,ペリフェラルのレジスタに対する直接の書き込み/読み出しを併用して,Mbedライブラリのみを使ったプログラムを越えるようなプログラムを開発する手法について解説する.さらに,そのプログラムをライブラリにする際に,C++のクラスとして作る方法についても解説する.
(注1) Mbedとは,インストール不要で,ネットにつなげれば簡単にプログラムを開発できる統合開発環境のこと.
※ このセミナでは,事前にブレッド・ボード上に組み立てた教材を使います.そのため,電子回路組立の経験がない方でも参加できます.
※ セミナで使用するマイコン・ボード(Nucleo-F446RE)とブレッド・ボード上に作った回路,セミナで使った講師作成のプログラム,および作成したプログラムはお持ち帰り可能です.
※マイコン・ボード Nucleo-F446RE をご持参の方は,受講費用を¥2,000-引きでご参加いただけますので,お申し込み時にメールでご連絡ください.
一例を挙げれば,Mbedではタイマ割り込みを使うためのMbedライブラリが提供されているが,これを使ってステッピング・モータの回転速度を滑らかにコントロールするようなプログラムをうまく実現できない.その原因は,タイマ割り込みの時間間隔を変更しようとすると,タイマが再度初期化されることにある.
そこでこのセミナでは,Mbedライブラリは使いつつ,ペリフェラルのレジスタに対する直接の書き込み/読み出しを併用して,Mbedライブラリのみを使ったプログラムを越えるようなプログラムを開発する手法について解説する.さらに,そのプログラムをライブラリにする際に,C++のクラスとして作る方法についても解説する.
(注1) Mbedとは,インストール不要で,ネットにつなげれば簡単にプログラムを開発できる統合開発環境のこと.
※ このセミナでは,事前にブレッド・ボード上に組み立てた教材を使います.そのため,電子回路組立の経験がない方でも参加できます.
※ セミナで使用するマイコン・ボード(Nucleo-F446RE)とブレッド・ボード上に作った回路,セミナで使った講師作成のプログラム,および作成したプログラムはお持ち帰り可能です.
※マイコン・ボード Nucleo-F446RE をご持参の方は,受講費用を¥2,000-引きでご参加いただけますので,お申し込み時にメールでご連絡ください.
1.マイコンを使うための第1歩
・セミナで使うマイコンの構成
・クラウド・ベースのプログラム開発環境Mbed
・「Lチカ」のプログラム
・MbedライブラリとC++とクラス
・printfとターミナル・ソフト
2.GPIO出力によるマルチカラーLEDの駆動回路とプログラミング
・GPIO出力部の電気的特性
・外付けマルチカラーLEDの点灯/消灯のプログラム
・GPIOのレジスタに対する直接の書き込み/読み出しの方法
3.GPIO入力回路とプログラミング
・GPIO入力部の電気的特性
・外付けスイッチを利用するプログラミング
4.シリアル・インターフェース(I2C)の使い方とセンサ,表示器のプログラミング
・I2C方式とSPI方式の比較
・MBED_ASSRTによるデバッグ
・I2C利用の温度センサのプログラミング
・I2C利用のLCDキャラクタ表示器のプログラミング
5.割込み処理とタイマのプログラミング
・割込み処理プログラミングの基礎
・割り込み処理で使うCMSIS(Arm社Cortex Mソフトウェア規格)の関数
・内蔵タイマを使うタイマ割込みのプログラミング
・割込み優先順位と多重割込み
6.タイマ割込みによるステッピング・モータ駆動
・動作中のタイマ周期の変更方法
・ステッピング・モータ駆動のプログラム
7.アナログ信号入出力のプログラミング
・A-D変換器を効率よく使うためのプログラミング
・Mbedライブラリを使わないMbedプログラミング
・ポーリング方式と割り込み方式のプログラミング
・高速(標本化間隔:1μs)A-D/D-A変換のプログラミング
●セミナで使用したキットがお持ち帰りできます!
マイコン・ボードに接続したインターフェース回路
※ 写真をクリックすると拡大できます
2.GPIO出力によるマルチカラーLEDの駆動回路の学習例

この回路では,緑(G)と青(B)を十分な明るさで点灯させるため,LEDのアノード側の電源をマイコンに供給している3.3 Vではなく,5 Vにしています.Mbedのオフィシャル・ライブラリでGPIOを出力ポートとして使う場合,この出力は必ずプッシュプル状態になり,オープン・ドレインの状態には指定できません.そのため,この回路では赤(R)のLEDを完全には消灯できず,薄明るく光ってしまいます.この状態を下記の動画で示します.
GPIOポートのオープン・ドレイン状態の有無によるLED点滅動作
赤(R)のLEDを完全に消灯するためには,GPIOの出力をオープン・ドレインの状態に設定する必要があります.しかし,Mbedのオフィシャル・ライブラリでは対応できないため,以下のようにGPIOをコントロールするレジスタに直接に書き込む必要があります.
*(uint32_t *)0x40020004 |= 1 << 10;
このほかに,定義済みのシンボルを使って書くこともできます.
5.割込み処理とタイマのプログラミングの学習例
マイコン内蔵タイマのカウントアップと他のレジスタとの関係を調べている様子
7.アナログ信号入出力のプログラミングの学習例
標本化間隔を1μsに設定してA-D変換器で標本化した100kHzの正弦波をそのままD-A変換器から出力している様子(オシロスコープは32回の平均を行うモードに設定)
※ 画像をクリックすると拡大できます
●対象聴講者
・マイコンを使ってみたいが,ハードルが高いと思っている方.
・マイコンのペリフェラルを使うプログラムをC++で簡単に作りたいと思っている方.
・Mbedライブラリでは提供されていない機能を使って,ペリフェラルを使うプログラムを作りたい方.
・Mbedではペリフェラルを自由に使えないと思い,他のプログラム開発環境に乗り換えを検討している方.
・ペリフェラルを使う自作のライブラリをC++のクラスとして作りたい方.
●講演の目標
・マイコンの基本的なプログラムをつくれるようになること.
・ペリフェラルの機能の中で,Mbedライブラリでは直接サポートされていない機能を使えるようになること.
・Mbedライブラリではサポートされていないマイコン内蔵のペリフェラルを使えるようになること.(たとえば,Nucleo-F446は多数のタイマを内蔵しているがMbedライブラリは一部のタイマしか使っておらず,多くのタイマが遊んでいるので,それらを有効に使えるようになること.)
・ペリフェラルを使う自作のライブラリをC++のクラスとして作れるようになること.
●参考文献
・三上 直樹; Mbedを使った電子工作プログラミング,工学社,2020年.
・セミナで使うマイコンの構成
・クラウド・ベースのプログラム開発環境Mbed
・「Lチカ」のプログラム
・MbedライブラリとC++とクラス
・printfとターミナル・ソフト
2.GPIO出力によるマルチカラーLEDの駆動回路とプログラミング
・GPIO出力部の電気的特性
・外付けマルチカラーLEDの点灯/消灯のプログラム
・GPIOのレジスタに対する直接の書き込み/読み出しの方法
3.GPIO入力回路とプログラミング
・GPIO入力部の電気的特性
・外付けスイッチを利用するプログラミング
4.シリアル・インターフェース(I2C)の使い方とセンサ,表示器のプログラミング
・I2C方式とSPI方式の比較
・MBED_ASSRTによるデバッグ
・I2C利用の温度センサのプログラミング
・I2C利用のLCDキャラクタ表示器のプログラミング
5.割込み処理とタイマのプログラミング
・割込み処理プログラミングの基礎
・割り込み処理で使うCMSIS(Arm社Cortex Mソフトウェア規格)の関数
・内蔵タイマを使うタイマ割込みのプログラミング
・割込み優先順位と多重割込み
6.タイマ割込みによるステッピング・モータ駆動
・動作中のタイマ周期の変更方法
・ステッピング・モータ駆動のプログラム
7.アナログ信号入出力のプログラミング
・A-D変換器を効率よく使うためのプログラミング
・Mbedライブラリを使わないMbedプログラミング
・ポーリング方式と割り込み方式のプログラミング
・高速(標本化間隔:1μs)A-D/D-A変換のプログラミング
●セミナで使用したキットがお持ち帰りできます!

マイコン・ボードに接続したインターフェース回路
※ 写真をクリックすると拡大できます
2.GPIO出力によるマルチカラーLEDの駆動回路の学習例

この回路では,緑(G)と青(B)を十分な明るさで点灯させるため,LEDのアノード側の電源をマイコンに供給している3.3 Vではなく,5 Vにしています.Mbedのオフィシャル・ライブラリでGPIOを出力ポートとして使う場合,この出力は必ずプッシュプル状態になり,オープン・ドレインの状態には指定できません.そのため,この回路では赤(R)のLEDを完全には消灯できず,薄明るく光ってしまいます.この状態を下記の動画で示します.
GPIOポートのオープン・ドレイン状態の有無によるLED点滅動作
赤(R)のLEDを完全に消灯するためには,GPIOの出力をオープン・ドレインの状態に設定する必要があります.しかし,Mbedのオフィシャル・ライブラリでは対応できないため,以下のようにGPIOをコントロールするレジスタに直接に書き込む必要があります.
*(uint32_t *)0x40020004 |= 1 << 10;
このほかに,定義済みのシンボルを使って書くこともできます.
5.割込み処理とタイマのプログラミングの学習例

マイコン内蔵タイマのカウントアップと他のレジスタとの関係を調べている様子
7.アナログ信号入出力のプログラミングの学習例

標本化間隔を1μsに設定してA-D変換器で標本化した100kHzの正弦波をそのままD-A変換器から出力している様子(オシロスコープは32回の平均を行うモードに設定)
※ 画像をクリックすると拡大できます
●対象聴講者
・マイコンを使ってみたいが,ハードルが高いと思っている方.
・マイコンのペリフェラルを使うプログラムをC++で簡単に作りたいと思っている方.
・Mbedライブラリでは提供されていない機能を使って,ペリフェラルを使うプログラムを作りたい方.
・Mbedではペリフェラルを自由に使えないと思い,他のプログラム開発環境に乗り換えを検討している方.
・ペリフェラルを使う自作のライブラリをC++のクラスとして作りたい方.
●講演の目標
・マイコンの基本的なプログラムをつくれるようになること.
・ペリフェラルの機能の中で,Mbedライブラリでは直接サポートされていない機能を使えるようになること.
・Mbedライブラリではサポートされていないマイコン内蔵のペリフェラルを使えるようになること.(たとえば,Nucleo-F446は多数のタイマを内蔵しているがMbedライブラリは一部のタイマしか使っておらず,多くのタイマが遊んでいるので,それらを有効に使えるようになること.)
・ペリフェラルを使う自作のライブラリをC++のクラスとして作れるようになること.
●参考文献
・三上 直樹; Mbedを使った電子工作プログラミング,工学社,2020年.
【受講者が持参するもの】
・ 作成したプログラムなどを持ち帰るためのUSBメモリなど.
・ 作成したプログラムなどを持ち帰るためのUSBメモリなど.
【講師】
三上 直樹 氏〔職業能力開発総合大学校 名誉教授 〕
1977~1987年北大助手.1987~2017年職業能力開発総合大学校講師,助教授,教授.工学博士.「はじめて学ぶディジタルフィルタと高速フーリエ変換」などの書籍やインターフェース誌,トランジスタ技術誌の記事多数.ディジタル信号処理を専門とする.
三上 直樹 氏〔職業能力開発総合大学校 名誉教授 〕
1977~1987年北大助手.1987~2017年職業能力開発総合大学校講師,助教授,教授.工学博士.「はじめて学ぶディジタルフィルタと高速フーリエ変換」などの書籍やインターフェース誌,トランジスタ技術誌の記事多数.ディジタル信号処理を専門とする.