このルーチンのハードウェアはS32K142EVBをベースにしており、IDEはARM 2018.R1用のS32_Design_Studio、SDKバージョンはS32K1xx_RTM_3.0.0です。PTB12はホール・パルス出力をシミュレートするために使用されます。PTC12とPTC13はPTB12 ポートのフリップ周波数を変更するボタンです。また、PTB13は入力キャプチャ・ポートとして使用されます。この記事のデモ・プログラムを使用する場合は、PTB12ポートとPTB13ポートを接続する必要があります。
ここでは、ブラシ付きDCモーターを使用していると仮定します。
1.ホールセンサー
ホール・センサは磁気誘導センサです。磁気リングとホール素子は、誘導結合を形成します。磁気リングはローターとともに回転します。ホール誘導磁気リングはローターとともに回転します。3極ペア、4極ペアなど、各極のペアは2つのレベルのN.S.に分割されます。1ペアの磁極は1つのパルス信号を出力し、複数の磁極は複数のパルス信号を出力します。磁極段数によってパルス信号の数が決まり、数が増えるほど、精度が高くなります。
ホール・センサ
2.モーターの磁気リングシリーズと出力ホール波形の関係
5 pole pairs
3.モーターの回転方向の決定
モーターの方向は、2つのホール信号の位相差によって判断されます。下図に示すように、センサAの位相はセンサBより進んでいるため、モーターの現在の回転方向は時計回りであると考えられます。
4.モーター速度の計算
モーターの速度はパルスのパルス幅から計算でき、モーターの回転数はパルス数から計算できます。モーターのホール磁気リングに5ペアの極があると仮定すると、モーターの1回転に5つのパルスがあり、モータの回転数 = 60 / (t1 * 5) 回転数/分となります。パルス数は、FTMのエッジ・キャプチャ機能で求めることができます。
モーター速度とストローク
FTMのクロックが2MHzだと仮定すると、カウンタが1増えるのに1/2000000秒かかります。モーター速度の単位はrpmなので、モーター速度の計算式は次のようになります。 -> モーター速度 = 60 / (5 * a* (1 / 2000000))
この式では、「5」は磁気リングの極ペアの数で、「a」は連続する2つのパルスの立ち下がりエッジに対応するカウンタの差です。
テストを実行しましょう。下図の矩形波はPTB12の出力であり、出力パルスの周期は32.1msです。モーターが1回転するのに必要な時間は32.1ms × 5 = 160.5msであり、モーターの回転速度は60 × 1000 / 160.5 = 373.83rpmです。
PTB2出力方形波
下の図はデバッガによって直接取得されました。この時点でのモーターの速度は 373 であり、オシロスコープで測定された値373.83とあまり変わらないことがわかります。これは、プログラムの中で浮動小数点演算の結果を使用しなかったためです。要約すると、FTMモジュールの入力キャプチャ機能を使用して、モーター速度の計算を完了します。
デバッガ・モニターの結果
5.モーターの回転方向を計算する方法
上記ではモーターの速度を計算しましたが、モーターの回転方向については判断していません。前述のとおり、モーターの回転方向は2つのホール・パルス波形の位相差によって判断されます。通常、タイムスタンプを使用して位相の現在の状態を判断することを考えるため、2つの入力キャプチャを有効にし、パルスの立ち下がりエッジの2つのホールのタイムスタンプを計算します。
実際、もっと簡単な方法があります。一方のホール・パルスの立ち下がりエッジが中断されたときに、他方のホール・パルス・レベルの高低状態を読み取るだけです。要するに、1つの入力キャプチャを有効にし、もう1つをGPIOポートとして使用することになります。