lxrqiyuan 2023-02-27 11:02 采纳率: 50%
浏览 78

STM32f103ZET6驱动42步进电机

STM32f103ZET6利用PWM输出和定时器中断来控制步进电机转动固定圈数有问题

具体配置:
采用TB6600步进电机驱动器,拨码细分为200个脉冲转一圈;
步进电机为42步进电机;
单片机PWM输出引脚为PA0,PC13来控制正反转
定时器使用的是TIM5,通道为TIM5_CH1;

这是定时器和PWM配置:

void TIM5_Init(u16 arr,u16 psc)
{ 
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
    
//1、使能时钟,此处使用的是TIM5,相关引脚为PA0:TIM5_CH1
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    
//2、设置GPIO口为复用功能
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA,&GPIO_InitStructure);

//3、初始化定时器TIM5
    TIM_TimeBaseStructure.TIM_Period = arr;
    TIM_TimeBaseStructure.TIM_Prescaler = psc;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure);


//4、初始化PWM
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; 
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; 
    TIM_OC1Init(TIM5, &TIM_OCInitStructure);
    
//5、使能PWM的预装载和重装载功能
    TIM_OC1PreloadConfig(TIM5, TIM_OCPreload_Enable);
    TIM_ARRPreloadConfig(TIM5,ENABLE);
    
//6、启动定时器
    TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);
    TIM_Cmd(TIM5,ENABLE);
    

}

这是定时器中断处理函数

void TIM5_IRQHandler(void)
{
    static int count = 1;
    if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) 
    {
        TIM_ClearITPendingBit(TIM5, TIM_IT_Update);  
        u1_printf("%d  ",count);

        count++;
        if(count == 200){             
            TIM_Cmd(TIM5,DISABLE);
        }
    }
}

这是主函数

int main()
{
    //使用的PC13来控制步进电机正反转
    PCout(13) = 1;

    //计数值为99+1,周期为719+1
    TIM5_Init(99,719);

    //设置占空比50%
    TIM_SetCompare1(TIM5,50); 
    NVIC_Config();
    
}

按理说200个脉冲转动一圈,但实际上电机转动了很多圈,实在是找不到哪里出了问题,求指教,谢谢!

  • 写回答

2条回答 默认 最新

  • Web Security Loop 2023-02-27 11:21
    关注

    我觉得是,你需要添加控制步进电机转动的代码

    评论

报告相同问题?

问题事件

  • 创建了问题 2月27日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络