void AX_STEP_Init(void); //STEP 步进电机初始化 void AX_STEP_SetEnable(uint8_t en); //STEP 步进电机使能控制 void AX_STEP_SetSpeed(int16_t speed); //STEP 步进电机转速控制 |
/** * @简 述 STEP 步进电机转速控制 * @参 数 speed:电机转速,脉冲频率,单位20Hz,即1为20Hz,100为2000Hz,范围±5000 * 实际电机转速,与电机步距角,细分设置相关,例如1.8°电机,32细分,转动一圈需要200x32个脉冲。 * @返回值 无 */ void AX_STEP_SetSpeed(int16_t speed) { if (speed > 0) { //设置方向 GPIO_SetBits(GPIOE, GPIO_Pin_4); //计算速度 step_period = 50000 / speed; //20hz = 1S/ //初始化定时器 TIM1->ARR = step_period - 1; TIM1->CCR1 = step_period >> 1;//周期的一半 TIM_CtrlPWMOutputs(TIM1, ENABLE); //MOE 主输出使能 TIM_Cmd(TIM1, ENABLE); } else if (speed < 0) { //设置方向 GPIO_ResetBits(GPIOE, GPIO_Pin_4); //计算速度 step_period = 50000 / (-speed); //初始化定时器 TIM1->ARR = step_period - 1; TIM1->CCR1 = step_period >> 1;//周期的一半 TIM_CtrlPWMOutputs(TIM1, ENABLE); //MOE 主输出使能 TIM_Cmd(TIM1, ENABLE); } else { TIM_CtrlPWMOutputs(TIM1, DISABLE); TIM_Cmd(TIM1, DISABLE); } } |
int main(void) { int16_t i; //X-CTR100初始化 AX_Init(115200); printf("***X-CTR100 步进电机控制例程***rnrn"); //模块初始化及配置 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); AX_STEP_Init(); //初始化步进电机 AX_STEP_SetEnable(1); while (1) { printf("*步进电机正方向转动测试rnrn"); //加速 for (i = 0; i <= 2000; i += 2) { AX_STEP_SetSpeed(i); AX_Delayms(2); } //恒速 AX_Delayms(3000); //减速 for (i = i; i >= 0; i -= 2) { AX_STEP_SetSpeed(i); AX_Delayms(2); } AX_Delayms(1000); printf("*步进电机反方向转动测试rnrn"); //加速 for (i = 0; i <= 2000; i += 2) { AX_STEP_SetSpeed(-i); AX_Delayms(2); } //恒速 AX_Delayms(3000); //减速 for (i = i; i >= 0; i -= 2) { AX_STEP_SetSpeed(-i); AX_Delayms(2); } AX_Delayms(1000); printf("*步进电机零转速和关闭使能测试rn"); printf("*零转速,有维持力矩rn"); AX_Delayms(3000); printf("*关闭使能,无维持力矩rnrn"); AX_STEP_SetEnable(0); AX_Delayms(3000); AX_STEP_SetEnable(1); } } |
更多回帖