要想驱动电机,就需要知道电机驱动的几个参数:
1、脉冲---CP使用PWM波形来当脉冲
switch(Num) case MOTOR_1: //电机 1 HAL_TIM_Base_Start_IT(&htim5); // 开启定时器中断 HAL_TIM_PWM_Start(&htim5,TIM_CHANNEL_1); break; case MOTOR_2: //电机2 HAL_TIM_Base_Start_IT(&htim3); // 开启定时器中断 HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2); break; case MOTOR_3: //电机3 HAL_TIM_Base_Start_IT(&htim3); // 开启定时器中断 HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3); break; case MOTOR_4: //电机4 HAL_TIM_Base_Start_IT(&htim1); // 开启定时器中断 HAL_TIM_PWM_Start(&htim1,TIM_CHANNEL_1); break; case MOTOR_5: //电机5 HAL_TIM_Base_Start_IT(&htim4); // 开启定时器中断 HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4); break; case MOTOR_6: //电机6 HAL_TIM_Base_Start_IT(&htim8); // 开启定时器中断 HAL_TIM_PWM_Start(&htim8,TIM_CHANNEL_3); break; 2、方向---DIRDIR=1;//正转
DIR=0;//反转
HAL_GPIO_WritePin(DIR1_GPIO_Port,DIR1_Pin,GPIO_PIN_SET);//正转 HAL_GPIO_WritePin(DIR1_GPIO_Port,DIR1_Pin,GPIO_PIN_RESET);//反转 3、使能---ENA是否使电机运动
//电机的使能:使能的初始电平是低电平 //电机1 HAL_GPIO_WritePin(ENA1_GPIO_Port,ENA1_Pin,GPIO_PIN_RESET); //电机2 HAL_GPIO_WritePin(ENA2_GPIO_Port,ENA2_Pin,GPIO_PIN_RESET); //电机3 HAL_GPIO_WritePin(ENA3_GPIO_Port,ENA3_Pin,GPIO_PIN_RESET); //电机4 HAL_GPIO_WritePin(ENA4_GPIO_Port,ENA4_Pin,GPIO_PIN_RESET); //电机5 HAL_GPIO_WritePin(ENA5_GPIO_Port,ENA5_Pin,GPIO_PIN_RESET); //电机6 HAL_GPIO_WritePin(ENA6_GPIO_Port,ENA6_Pin,GPIO_PIN_RESET); 4、衰减---DECAY减少电机运行时产生的噪音
注:开启就行,不需要使用多余的代码来使其运行 5、细分---MODE控制电机多少个脉冲为一圈
//电机的细分 //电机1 ----8细分 HAL_GPIO_WritePin(MO1_0_GPIO_Port,MO1_0_Pin,GPIO_PIN_RESET); HAL_GPIO_WritePin(MO1_1_GPIO_Port,MO1_1_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(MO1_2_GPIO_Port,MO1_2_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(DIR1_GPIO_Port,DIR1_Pin,GPIO_PIN_SET); //电机2 ----8细分 HAL_GPIO_WritePin(MO2_0_GPIO_Port,MO2_0_Pin,GPIO_PIN_RESET); HAL_GPIO_WritePin(MO2_1_GPIO_Port,MO2_1_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(MO2_2_GPIO_Port,MO2_2_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(DIR2_GPIO_Port,DIR2_Pin,GPIO_PIN_SET); //电机3 ----8细分 HAL_GPIO_WritePin(MO3_0_GPIO_Port,MO3_0_Pin,GPIO_PIN_RESET); HAL_GPIO_WritePin(MO3_1_GPIO_Port,MO3_1_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(MO3_2_GPIO_Port,MO3_2_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(DIR3_GPIO_Port,DIR3_Pin,GPIO_PIN_SET); //电机4 ----8细分 HAL_GPIO_WritePin(MO4_0_GPIO_Port,MO4_0_Pin,GPIO_PIN_RESET); HAL_GPIO_WritePin(MO4_1_GPIO_Port,MO4_1_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(MO4_2_GPIO_Port,MO4_2_Pin,GPIO_PIN_SET); HAL_GPIO_WritePin(DIR4_GPIO_Port,DIR4_Pin,GPIO_PIN_SET); 二、细分的调节 1、如何实现步进电机细分驱动转载于道客:https://www.doc88.com/p-2324833064862.html
2、使用电机运行芯片进行细分的调节以 DRV8825 芯片为例
DRV8825细分表
MO0
MO1
MO2
细分类型
0
0
0
1
0
0
1
1/2
0
1
0
1/4
0
1
1
1/8
1
0
0
1/32
1
0
1
1/32
1
1
0
1/32
1
1
1
1/32
注: 1:表示高 0:表示低 细分: 1 --- 1 * 200 个脉冲一圈 1/2 --- 2 * 200 个脉冲一圈 1/4 --- 4 * 200 个脉冲一圈 1/8 --- 8 * 200 个脉冲一圈 1/16 --- 16 * 200 个脉冲一圈 1/32 --- 32 * 200 个脉冲一圈详细可以参考:
转载于总结所学:https://blog.csdn.net/u011878611/article/details/125574966
转载于小白study:https://blog.csdn.net/android_lover2014/article/details/53462089