ML620Q504の多機能タイマー(FTM0~FTM3)を使用し、2種類のモーターを制御するためのライブラリです。
HardwareHBridge、HardwareServo共に1usecの時間精度でパルス幅を制御することができ、また割込み処理などによる影響で信号幅がずれるようなことが無いために、モータ制御に最適な関数です。analogWrite関数も同じ多機能タイマーを使用するため、排他使用となるので注意してください。
Servo(サーボモータ)用ライブラリ HardwareServo
H-Bridge(Hブリッジ)用ライブラリ HardwareHBridge
※本関数はLazurite専用の関数です。
HardwareServo
HardwareHBridge
HardwareServoは、ML620Q504の周期を生成するためのタイマーとしてTM45を使用し、出力信号を生成するためにFTMを使用します。1つのFTMで最大2本の出力まで生成することができ、FTM0から順番に必要な信号の本数分だけFTMを使用します。上図の場合、3本のServo用信号を生成していますので、FTM0とFTM1を使用することになります。
また、上図ではFTM1は1本のPWM信号しか使用していませんが、FTM1の残りの1本を別の機能で使用することはできません。
HardwareHBridgeは、任意のFTMを指定することができ、1つのFTMで正/負のPWMパルスを生成します。
信号の出力先は、PIN番号の3~10を任意で指定することができます。
たとえば、Servoモータ制御 6本(FTM0-2を使用)、H-Bridgeモータ1個(FTM3を使用)の様に使用することができます。
関数 |
機能 |
|
HardwareServoの初期化を行います。numは出力する本数 1~8を、periodは周期(us)を指定します。 |
||
chで指定されたチャンネルのPWM信号を、pinで指定された端子から出力します。 |
||
端子をPWM信号から解放し、levelによって指定された信号を出力します。 |
||
Servo用PWM信号の出力を開始します。 |
||
Servo用PWM信号の出力を停止します。本関数を実行した周期内は信号出力が継続し、その次のタイミングから出力が停止します。 |
||
Servo制御に使用するタイマーへのクロック供給を停止し、スタンバイ状態にします。 |
||
指定されたchの時間を設定します。 |
||
動作中に値を更新するための関数です。hhb.update()関数と同じ機能のため、ServoとH-Bridgeモータの値を変更した後に1回、hhb.update()またはhsv.update()を実行してください。 |
関数 |
機能 |
|
HardwareServoの初期化を行います。numは出力する本数 1~8を、periodは周期(us)を指定します。 |
||
chで指定されたチャンネルのPWM信号を、pinで指定された端子から出力します。 |
||
端子をPWM信号から解放し、levelによって指定された信号を出力します。 |
||
Servo用PWM信号の出力を開始します。 |
||
Servo用PWM信号の出力を停止します。本関数を実行した周期内は信号出力が継続し、その次のタイミングから出力が停止します。 |
||
Servo用PWM信号のブロックをスタンバイします。 |
||
指定されたchの時間を設定します。 |
||
動作中に値を更新するための関数です。hhb.update()関数と同じ機能のため、ServoとH-Bridgeモータの値を変更した後に1回、hhb.update()またはhsv.update()を実行してください。 |
Servoモータ 3つ、H-Bridgeのモータを1つ使用する例です。
■motor_init
Servoは、22msの周期で3ch分のパルス出力を行います。これは多機能タイマーFTM0とFTM1を使用して機能が実現されます。端子は、3,4,5をアサインしています。
H-BridgeはFTM2を使用して実現しており、周期を100Hz(10,000us)に指定しています。出力は6と7から行われます。
■motor_update
Servoモーターは、最小駆動時間 1000us、最大駆動時間 2000usとし、その間を256分割して制御しています。
H-Bridge制御部分については、最小値-10ms~最大値10msを256分割して制御をしています。
最後に1度だけupdate関数を実行して、書き込んだ値を有効化します。hhb.update、hsv.updateは同じ機能のため、どちらを実行しても構いません。