DCマウス研修(移行中)

マイクロマウス研修(kora編)[34] モータ制御の実装

DCマウス研修(移行中)

こんにちは。koraです。

今回は、指示した通りにマウス本体を動かせるようにモータを制御するモジュールを追加します。

CubeMXの設定

左右のモータを制御できるように、2つのPWMを出力できるようにします。使用するタイマをTIM3として、チャンネル1と2をPWM出力に設定します。

PWMのクロックにはAPB1 Timer clockが供給されるらしいので、108MHzになります。

以前使用していたHM-StarterKitでは48MHzで240階調 = 200kHz周期のPWMを出力していました。同じモータとモータドライバを使っているので、周期を同じにするため108MHzで200kHzになるよう539(540階調 – 1)に設定します。

PWMを出力

HALを使ってPWMのパルス幅を変更するには、TIM_OC_InitTypeDefという構造体を使用します。この構造体のメンバPulseに0~539の値を設定してHAL_TIM_PWM_ConfigChannel関数に渡すことで、パルス幅が変わります。

    TIM_OC_InitTypeDef sConfigOC = {0};
    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 0;
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
    if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
    {
        Error_Handler();
    }
    if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_2) != HAL_OK)
    {
        Error_Handler();
    }

設定をするだけではPWM出力が開始されるわけではありません。開始するには以下のHAL_TIM_PWM_Start関数を呼び出します。

    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
    HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_2);

モータ制御モジュールの追加

指定される目標速度と目標角速度に対して、エンコーダとジャイロで測定される車体の速度と角速度を一致させるよう、モータに掛ける電圧を調整します。単純なPID制御を使って実装しました。

テスト

実際にスラロームの軌道に追従させてみました。あまりなめらかな動きとは言えませんが、一応意図した動作はしてくれているようです。

マイクロマウス研修(kora編)モータ制御テスト
タイトルとURLをコピーしました