步进电机转速问题

2019-08-14 04:28发布

最近在研究步进电机,百度说步进电机的转速是脉冲频率决定的,于是在程序中不断更改arr的值,可是不管怎么改,步进电机转速还都是差不多,都很快,调细分器后也是一样,不知道如何才能实现步进电机转动时那种转一下顿一下那种感觉很慢的样子,还请论坛的各位大神指点!
以下是用细分器驱动步进电机的程序


int main(void)
{                         
        GPIO_InitTypeDef  GPIO_InitStructure;
           
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);       
//细分器 DIR 连接 PC2
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;       
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;               
        GPIO_Init(GPIOC, &GPIO_InitStructure);                                       
        GPIO_SetBits(GPIOC,GPIO_Pin_2);       

        TIM3_PWM_Init(1500,0);
        TIM_SetCompare2(TIM3,500);

         while(1);
}



void TIM3_PWM_Init(u16 arr,u16 psc)
{  
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
       
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;                                //TIM_CH2
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       

        TIM_TimeBaseStructure.TIM_Period = arr;                           //自动重装载寄存器的值
        TIM_TimeBaseStructure.TIM_Prescaler =psc;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
       
        TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High;
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OC2Init(TIM3, &TIM_OCInitStructure);

        TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);
        TIM_Cmd(TIM3, ENABLE);
       
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
allaqppq
2019-08-15 23:23
凯爷儿 发表于 2017-8-8 14:53
还是不太好
能否通过控制脉冲个数再加上延迟来实现呢?

试一下 TIM3_Int_Init(400,35999);
            TIM7_Int_Init(7000,35999);
                     if(KEY1==0) //支持连按模式
                {
               
                         GPIO_ResetBits(GPIOB,GPIO_Pin_5);
                         
                         GPIO_SetBits(GPIOB,GPIO_Pin_8);
                               
                         delay_us(1000);
              GPIO_ResetBits(GPIOB,GPIO_Pin_8);       
                       
                }  //一个引脚固定电平,一个引脚输出脉冲给PULSE引脚,(必须加微秒级延时)

一周热门 更多>