EduController

🔧 03. 組み込み制御への展開(Embedded Control)

本節では、制御理論を マイコン・組込み環境(C/Arduino等) へ展開するための考え方と設計法を解説します。
離散時間制御・近似モデル・固定小数点演算など、実装面の注意点を押さえます。


🎯 学習目標


🧮 離散PID制御の実装形式

離散化の基本形(Tustin法)

連続時間PID制御器:

\[u(t) = K_p e(t) + K_i \int e(t)dt + K_d \frac{de(t)}{dt}\]

これをTustin近似で離散化すると:

// C/Arduino用の離散PID制御アルゴリズム
float e = ref - y;
integral += e * dt;
derivative = (e - prev_e) / dt;
u = Kp * e + Ki * integral + Kd * derivative;
prev_e = e;
•	ref:目標値
•	y:現在の出力
•	dt:サンプリング周期
•	Kp, Ki, Kd:各ゲイン

🔌 実装時のハードウェア構成(例)

以下は、Arduinoや組み込み環境でPID制御を行う際の一般的な構成例です。

構成要素 役割 具体例
Arduino UNO / STM32 制御演算の実行 PID計算・PWM出力
モータ+ドライバ アクチュエータ(動力) DCモータ、TB6612FNGなど
センサ類 状態観測(速度・角度など) ホールIC、ロータリエンコーダ
シリアル通信 PCとの連携・データ可視化 Serial.print() や Python連携

💡 センサからの入力 → 制御演算 → アクチュエータへの出力(PWM)という制御ループを形成します。


📏 タイミング設計の注意点

組み込み環境では、制御の「時間精度」が安定動作の鍵になります。

項目 推奨 / 注意点
サンプリング周期 通常 10ms〜100ms 程度(10Hz〜100Hz)
実行時間 制御計算+出力が周期内に収まる必要
割り込み制御 TimerInterrupt を用いると安定
delay()の使用 非推奨(タイミング精度が落ちる)
周波数選定 制御対象の応答速度に応じて決定

⚠️ 応答が速いモータでは 1kHz以上の制御周期 が必要になる場合もあります。


💡 Tips:固定小数点演算とスケーリング

Arduino UNO のような8bitマイコンでは浮動小数点演算(float)が遅い/重いため、
実装では以下のように固定小数点演算(int型+スケーリング)が推奨されます。

例:固定小数点近似(Cコード)

// 16bit整数でPID(Kp = 32, scale = 5 → 実効Kp=1.0)
int16_t e = ref - y;
int32_t p_term = (int32_t)(Kp * e) >> scale;
•	Kp = 32、scale = 5 ⇒ 実効ゲイン = 32 / 2⁵ = 1.0
•	>> scale は「除算より高速なビットシフト演算」

🛠️ Arduino/STM32への実装例(別ファイルで提供)

本教材では、以下のような組み込み制御実験用コード・ツールを別途提供します。

ファイル名 内容
pid_embedded.ino Arduinoによる離散PID制御ループの実装
sensor_plotter.py Python側でセンサデータをプロット表示
arduino_serial_logger.py シリアル通信ログ収集用の補助ツール

🔧 pid_embedded.ino は、DCモータ制御や温度制御などにそのまま適用可能です。
デバッグや可視化のために、Pythonとの連携が効果的です。


📡 シリアル通信によるPC連携例(センサプロット)

# sensor_plotter.py の基本構成例
import serial
import matplotlib.pyplot as plt

ser = serial.Serial('COM3', 9600)
data = []

for _ in range(200):
    line = ser.readline().decode().strip()
    data.append(float(line))

plt.plot(data)
plt.title("Sensor Output from Arduino")
plt.grid()
plt.show()

📘 制御対象例(応用)

組み込み制御技術は、多種多様な対象に応用可能です。
以下は、教育・実験・産業用においてよく利用される例です。

制御対象 内容・特徴 備考
DCモータ速度制御 エンコーダで回転速度を計測し、PWM制御 回転数の安定化・追従制御に使用
温度制御 サーミスタ+ヒーター制御 インキュベータ・恒温槽など
電流制御 シャント抵抗+スイッチング制御 電源・バッテリ充電系等
2輪自律移動体 左右モータを個別制御、姿勢安定化 倒立振子・ライントレース
LED輝度制御 照度センサとフィードバック制御 環境適応型照明に応用可

実験キットとしては、スイッチサイエンスや秋月電子などのDCモータセット、温度制御キットが利用できます。


📚 参考資料