Previous: 9.4.2. LED |
Up: 9.4. ソフトウェアと外付け回路の詳細 |
Next: 9.4.4. 自励式ブザー |
振動モータはモータの先に偏芯のおもりを付けたものです。モータを回転させるとおもりが「ぶん回されて」振動します。いろいろなものが出回っているようですが、筆者が入手できたのは電源電圧が3Vまでのものばかりでした。マイコンボードの3.3V出力を利用してもよいのですが、モータなので消費電流が大きいことが予想され、オンボードレギュレタの容量を考えるとためらわれます。そこで電池から直接電源を取り、PWM駆動でデューティー比を少なくして、3V相当の電圧を加えることにしました。こうすると振動の強い弱いも調整できます。
振動モータはモータとはいっても消費電流が小さいので小型のFET(2SK2231)を使用しました。このFETは4V駆動なので、5Vで駆動する74HCT245を介して接続しました。高周波でPWM駆動は行わないので、FETドライバを使用するまでも無いと判断しました。ゲートには過電流と発振を防止するため100Ωの抵抗を付けています。
振動にも一定のパターンを持たせたいのでタスクで駆動します。prvTask_Vibrator_Control関数(vibrator.c/vibrator.h)によるタスクがそれです。
キューxVibratorQueueにVibratorQueue_Type 型変数を送って指令を与えます。
typedef struct { ? uint8_t Instruction; ? uint8_t Pattern_Number; ? uint16_t Repetition_Number; ? VibratorPattern_Type* Pattern_Type; } VibratorQueue_Type; |
メンバInstructionはVibratorStatus_Type列挙型で指定します。
typedef enum {VIBRATOR_OFF = 0, VIBRATOR_ON = 1, VIBRATOR_PATTERN = 2} VibratorStatus_Type; |
ここでVIBRATOR_PATTERNを指定した場合、メンバPattern_TypeにVibratorPattern_Type型変数の配列を渡すことで、振動モータを一定のパターンで振動させることができます。
typedef struct { ? uint8_t Power; ? uint16_t Period; } VibratorPattern_Type; |
例えば下記のVibratorPattern1は30%の出力で200ms振動、400ms停止を繰り返します。VibratorPattern2は60%の出力で200ms振動、400ms停止の繰り返しです。タスク側でモータの電圧に合わせたデューティー比低下の計算を行っていますので(あらかじめマクロRESTRICTION_RATEで定義した百分率を乗じています)、ここで送信するパラメータは百分率で構いません。
const VibratorPattern_Type VibratorPattern1[] = ? { ????? {30,200}, ????? {0,400}, ????? {0,0} ? }; const VibratorPattern_Type VibratorPattern2[] = ? { ????? {60,200}, ????? {0,400}, ????? {0,0} ? }; |
Previous: 9.4.2. LED |
Up: 9.4. ソフトウェアと外付け回路の詳細 |
Next: 9.4.4. 自励式ブザー |