はじめに
Simulink Support Package for Raspberry PiでSunFounderを動かす(1)の続き記事です。
前の記事では、Simulinkモデルの構造と実行制御部の説明をしました。
本記事では、初期化処理サブシステムについて説明します。
開発環境と想定読者については、前の記事をご確認ください。
PCA9685の初期化処理サブシステム
PCA9685の初期化を行うサブシステムを下図に示します。
各種レジスタ設定と待機処理をFunction-Call Subsystemで実行するようにモデリングしています。
「MATLAB Support Package for Raspberry PiでSunFounderを動かす」の記事で書いたMATLABプログラムと同等の処理をSimulinkでモデリングしています。
それぞれのFunction-Call Subsystemの内容について、順番に説明していきます。
ALL_LED_ON/OFFレジスタ設定
以下の4つのレジスタを順番に設定するため、本例ではFunction-Call Generatorブロックの反復回数を4に設定して、それぞれのレジスタを設定するFunction-Call Subsystemを実行しています。
レジスタを設定するFunction-Call Subsystem内では、Simulink Support Package for Raspberry Pi HardwareのI2C Master Writeブロックを使用し、I2C通信でPCA9685のレジスタを設定するようにしています。
I2C Master Writeブロックのパラメーター設定例を示します。
レジスタアドレスの値は、モデルワークスペースにMATLAB変数として定義しています。
MODE1とMODE2レジスタの設定
MODE1とMODE2のレジスタを設定するFunction-Call Subsystem内を以下に示します。
I2C通信で送信するデータ(OUTDRV、ALLCALL)は、モデルワークスペースに定義しています。
500ms待機処理
レジスタ設定を確定させるための待機処理を下図のようにモデリングしています。
時刻取得には、ROS ToolboxのCurrent Timeブロックを使用しています。
本記事内では行いませんが、ホストPCとRaspberry PiをROSネットワークに接続して、ホストPCからRaspberry Piを制御することも考えていたため、ROS Toolboxを使用しています。
Sleepモード設定
Sleepモードのレジスタを設定するFunction-Call Subsystemを以下に示します。
Mode1レジスタの値をI2C Master Readブロックで読み取り、ビット演算をした後、MODE1レジスタを更新しています。
プレスケール値の書き込み
Sleepモード解除
リスタート
リスタート部を以下に示します。
MATLAB変数RESTARTは、モデルワークスペースに定義しています。
次の記事に続きます。