組み込みシステムの開発において、バイブレーションモーターの制御は単純に見えて奥が深いものです。特に医療機器や産業機器、高品質なコンシューマー製品では、単に「動く」だけでなく、**「安全性(Security/Safety)」と「知覚的な心地よさ」**の両立が求められます。
本記事では、SEI CERT C Coding Standard を厳格に遵守した、STM32 HALベースのバイブレーション制御(バイブコーディング)の実装手法を詳細に解説します。
1. なぜ「CERT C」が必要なのか?
組み込み開発において、PWM値の計算ミスや型変換の不備は、単なるバグに留まらず、システムの未定義動作やメモリ破壊、あるいはハードウェアへの過負荷を招く恐れがあります。本設計では以下のCERT Cルールを軸に構築しています。
- INT30-C / INT32-C: 符号なし整数のオーバーフローを防止。デューティ比計算時の中間値での溢れを回避します。
- DCL30-C / DCL31-C: 変数の明示的な初期化とスコープの最小化により、不正なメモリ参照を防ぎます。
- EXP30-C: 副作用の順序を明確化し、コンパイラ依存の挙動を排除します。
- MSC07-C: マジックナンバーの禁止と名前付き定数化により、可読性と保守性を最大化します。
2. ソフトウェアアーキテクチャ
本システムは、ハードウェアの直接操作を抽象化し、知覚的な補正を加える3レイヤー構造をとっています。
主要な制御フロー
- 目標値設定: アプリケーションが「強度80%」と指定。
- フェード処理: 指定されたステップ(例: 2%ずつ)で現在値を目標値へ近づける。
- 非線形補正 (LUT): 人間の知覚(フェヒナーの法則)に合わせ、LUT(Lookup Table)を用いてPWMデューティ比を補正。
- ハードウェア出力: 補正後の値をタイマーレジスタ(CCR)に書き込む。
