1 概要
ステッピングモーターは、オープンループシステムを備えた電気パルス信号で制御でき、電気パルス信号を使用して角運動または直線運動を実現します。ステッピングモーターの速度と位置は、パルスの頻度とパルス数によって決まります。ステッピングモーターは、低速エリアのアプリケーションで使用することができ、作業効率が高く、騒音が少ないです。
KE02は5V kinetis EシリーズMCUで、ARM Cortex M0+コアをベースとしており、KEシリーズは複雑な電気ノイズ環境と高信頼性アプリケーションに対して高い堅牢性を維持するように設計されています。これらの利点から、KE02はステッピングモータ制御アプリケーションに適合します。
このドキュメントでは、主にKE02を使用してステッピングモーターの速度、ステップ、および方向の制御を実現する方法について説明します。PCのUARTを使用して、ステッピングモーターの速度を制御できます。次の図は制御図です。
図1
2.モーター制御パラメータの計算
図1に示すように、KE02はモータードライバーへのEN、DIR、PWM信号を制御してから、ステッピングモーター制御を実現する必要があります。ENはモータードライバーのイネーブル信号、0はイネーブル、1はディセーブルです。DIRはステッピングモーターの方向制御、0、時計回り、1反時計回りです。PWMは、ステッピングモーターのステップと速度を制御するためのパルス信号です。
ステッピングモーターは1.8'で、ラウンドが360'/1.8'=であることを意味します200ステップ。しかし、モータードライバーには仕切りがあるため、32であるため、1つのステッピングモーターラウンドは200 * 32 = 6400ステップである必要があります。
KE02システムは、外部10Mhzクリスタルを使用し、コアとバスの両方を頻繁に20Mhzに構成し、モーターパルス生成モジュールとしてFTM0モジュールを使用し、FTM0クロックソースとして使用される32プリスケールのバスクロックは、カウンターを選択します。モーターの速度と制御ステップを変更する必要がある場合は、FTMPWMの頻繁な操作とPWMカウンターを制御するだけです。
ステッピングモーターの場合、1FTM周期は1モーターステップを意味します。KE02のリファレンスマニュアルから、アップカウントモードでのFTM期間は、(MOD-CNTIN+1)* FTMカウンタークロックの周期、モーターの頻度を変更したい場合は、FTMのMODを計算するだけでOKです、次にFTMサイクルの数を数え、CNTIN = 0を仮定します。
Tftm= (32/20Mhz)*(MOD+1)
ステッピングモーターとそのドライバーから、1ステップの時間は次のとおりです。
Tmstep= 60 /(V * 6400)
Vはモーターの速度で、単位は丸/分です。
Tftm=Tmstepなので、次のことが分かります。
MOD= (60/(V*6400))*(20Mhz/32)-1 (F1)
このドキュメントでは、(F1)に従って150ラウンド/分、110ラウンド/分、80ラウンド/分、50ラウンド/分、0.1ラウンド/分の速度を計算し、次のように各速度のMODを取得できます。
各速度が10ステッピングモーターラウンドを行う必要がある場合は、速度カウンター番号を10 * 6400 = 64000に制御するだけです。
3. MCUピンアサイン
PTF0 : DIR
PTF1 : EN
PTA0 : PWM
PTC6 : UART1_RX
PTC7 : UART1_TX
4. コードライティング
(1)FTM 初期コード
void STEEPMOTOR_PWM_Init(uint16 MODdata)
{
SIM_SCGC |= SIM_SCGC_FTM0_MASK;
FTM0_SC = 0;
FTM0_C0SC = 0 ;
FTM0_C0SC = FTM_CnSC_MSB_MASK |FTM_CnSC_ELSA_MASK ;
FTM0_C0V = 0;
FTM0_C0V = MODdata>>1;
FTM0_MOD=MODdata;
FTM0_SC |=FTM_SC_CLKS(1) |FTM_SC_PS(5) |FTM_SC_TOIE_MASK
enable_irq(17);割り込みの有効化
}
MODdataは、150ラウンド/分、MODdataは38など、さまざまなステッピングモーター速度を選択できます。
(2) 割り込みサービス機能
void FTM0_IRQHandler(void)
{
FTM0_SC &= ~FTM_SC_TOF_MASK;//TOF フラグをクリアします。
ラウンドカウント++;
if(roundcount >= 64000) {FTM0_C0SC = 0x00;FTM0_SC &= ~(FTM_SC_TOIE_MASK);}
}
ステップカウンターに使用でき、10roundに達するとモーターを停止します(FTM出力を停止します)。
(3)UART入力による速度選択
ボイドMotor_Speed_GPIO_CTRL_30round(ボイド)
{
char motormode=0;
uint32 COMPDATA=0;
printf("\n 1 で 150 ラウンド/分\n\r");
printf("\n 2 で 110 ラウンド/分\n\r");
printf("\n 3 で 80 ラウンド/分\n\r");
printf("\n 4 で 50 ラウンド/分\n\r");
printf("\n 5 で 0.1 ラウンド/分\n\r");
motormode = UART_getchar(PC_TERM_PORT);
switch(motormode)
{
case '1':
STEEPMOTOR_PWM_Init(38);//150ラウンド/分
break;
case '2':
STEEPMOTOR_PWM_Init(52);//110ラウンド/分
break;
case '3':
STEEPMOTOR_PWM_Init(72);//80ラウンド/分
break;
case '4':
STEEPMOTOR_PWM_Init(116);//50ラウンド/分
break;
case '5':
STEEPMOTOR_PWM_Init(58592);//0.1ラウンド/分
break;
デフォルト: break;
}
while( roundcount < 64000 ) {} //10 ラウンド
Disable_PWM;
printf("\n %c 10round PWMが終了しました", motormode);
ラウンドカウント=0;
}
5 デモ
テストコードについては、添付資料から探してください。