STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (15) TimerでLチカしようの続きです。
https://qiita.com/usashirou/items/59410a385ac930e0f5b2
今回は、PWMを使用してモーターを回してみましょう。
##使用機材
マイコンでモーターを直接駆動させることは難しく、モータードライバーやMOSFETなどを使用します。
今回は、AlieExpressで売っていたMX1508を使用しました。
ただし、MX1508は1枚50円以下ですが、10Vまでの電圧にしか対応していないので今回はUSBの5Vで動作させます。
MX1508は入力電圧を調整することで回転数を変更することができます。
NucleのDAC(PWM)をそれぞれの入力に入れて動かします。
(モータードライバーによっては出力調整のピンが各方向1個のものと、それぞれのものなどがあります)
今回使用するモーターは、エンコーダーモーターを使用しました。
定格が12Vですが5Vで使用します。
DCモーター等でも使用可能です。
6本の端子がありますが、今回は、モーター駆動用の2ピンのみ使用します。
##設定
プログラムを作ってみましょう。
今回は、Timer1のCH1とCH2を使いモーターを駆動させます。
使用する周波数はServoモーターと同じ50Hzとします。
STM32CubeIDEを使ってみよう How To STM32CubeIDE 日本語版 (13) PWMでサーボモーター(SERVO)を動かしてみよう
を参考に設定しましょう。
https://qiita.com/usashirou/items/2d0fedf59a3cef083b87
ClockSource:InternalClock
Channel1:PWM Generation CH1
Channel2:PWM Generation CH2
Count Settings
Prescaler:840
Count Perioad:1000
クロック周波数:42MHz
これでPA8とPA9がPWM出力として使えるようになります。
##プログラム
プログラムです。
PWMスタート
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
停止
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
回転
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,200);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
##メインプログラム
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_2);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
/*Add Code*/
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
HAL_Delay(2000);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,300);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
HAL_Delay(2000);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,500);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
HAL_Delay(2000);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,0);
HAL_Delay(2000);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_1,0);
__HAL_TIM_SET_COMPARE(&htim1,TIM_CHANNEL_2,300);
HAL_Delay(2000);
}
##接続
それでは、最後に、マイコンとモータドライバ、モーター、電源を繋いでみましょう。
STM32Nuleoの5VとGNDを+-に
PA8とPA9をIN1、IN2に接続
Out1、Out2をモーターにつなぎます。
プログラムを実行するとモーターが回転すると思います。
以上でモーターを回す事が出来ました。