一、电机驱动
要想驱动电机,就需要知道电机驱动的几个参数:
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、方向---DIR
DIR=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