急!stm32PWM主从模式控制步进电机,调了50多小时没调出来,急求代码例程

啊啊啊11223344 2014-03-28 12:08:26
打算做个小车,用的步进电机控制,用IO口置位复位可以控制,但是太占CPU资源了,除了行走干不了别的,网上搜了一下,有说用定时器主、从模式,设置TIM2作为TIM3的主,TIM3作为TIM2的从,同时TIM3作为TIM4的主,TIM4作为TIM3的从,往下递归

作为主的定时器在PWM模式下输出比较成功的触发脉冲,作为从的定时器使用这个触发脉冲启动它的操作,这样接力即可实现多路的PWM输出,频率占空比不变相位相差90度。

这样可以实现四拍,8拍却是不行,8拍有重叠的。
请问大神们是怎么解决的?

哪位仁兄能借代码参考一下,能控制两个步进电机,且不占CPU资源的。
...全文
411 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
啊啊啊11223344 2014-03-28
  • 打赏
  • 举报
回复
while ( 1 ) { GPIO_SetBits(GPIOB, GPIO_Pin_5); GPIO_SetBits(GPIOB, GPIO_Pin_6); GPIO_SetBits(GPIOB, GPIO_Pin_7); GPIO_ResetBits(GPIOB, GPIO_Pin_8); GPIO_ResetBits(GPIOB, GPIO_Pin_12); GPIO_ResetBits(GPIOB, GPIO_Pin_13); GPIO_SetBits(GPIOB, GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); delay_ms(T); //1 GPIO_SetBits(GPIOB, GPIO_Pin_5); GPIO_ResetBits(GPIOB, GPIO_Pin_6); GPIO_SetBits(GPIOB, GPIO_Pin_7); GPIO_ResetBits(GPIOB, GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_12); GPIO_ResetBits(GPIOB, GPIO_Pin_13); GPIO_SetBits(GPIOB, GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); delay_ms(T); //2 GPIO_SetBits(GPIOB, GPIO_Pin_5); GPIO_ResetBits(GPIOB, GPIO_Pin_6); GPIO_SetBits(GPIOB, GPIO_Pin_7); GPIO_SetBits(GPIOB, GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_12); GPIO_ResetBits(GPIOB, GPIO_Pin_13); GPIO_ResetBits(GPIOB, GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); delay_ms(T); //3 GPIO_SetBits(GPIOB, GPIO_Pin_5); GPIO_ResetBits(GPIOB, GPIO_Pin_6); GPIO_ResetBits(GPIOB, GPIO_Pin_7); GPIO_SetBits(GPIOB, GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_12); GPIO_SetBits(GPIOB, GPIO_Pin_13); GPIO_ResetBits(GPIOB, GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); delay_ms(T); //4 GPIO_SetBits(GPIOB, GPIO_Pin_5); GPIO_SetBits(GPIOB, GPIO_Pin_6); GPIO_ResetBits(GPIOB, GPIO_Pin_7); GPIO_SetBits(GPIOB, GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_12); GPIO_SetBits(GPIOB, GPIO_Pin_13); GPIO_ResetBits(GPIOB, GPIO_Pin_14); GPIO_ResetBits(GPIOB, GPIO_Pin_15); delay_ms(T); //5 GPIO_ResetBits(GPIOB, GPIO_Pin_5); GPIO_SetBits(GPIOB, GPIO_Pin_6); GPIO_ResetBits(GPIOB, GPIO_Pin_7); GPIO_SetBits(GPIOB, GPIO_Pin_8); GPIO_SetBits(GPIOB, GPIO_Pin_12); GPIO_SetBits(GPIOB, GPIO_Pin_13); GPIO_SetBits(GPIOB, GPIO_Pin_14); GPIO_ResetBits(GPIOB, GPIO_Pin_15); delay_ms(T); // delay_ms(T); //6 GPIO_ResetBits(GPIOB, GPIO_Pin_5); GPIO_SetBits(GPIOB, GPIO_Pin_6); GPIO_SetBits(GPIOB, GPIO_Pin_7); GPIO_SetBits(GPIOB, GPIO_Pin_8); GPIO_ResetBits(GPIOB, GPIO_Pin_12); GPIO_SetBits(GPIOB, GPIO_Pin_13); GPIO_SetBits(GPIOB, GPIO_Pin_14); GPIO_ResetBits(GPIOB, GPIO_Pin_15); delay_ms(T); //7 GPIO_ResetBits(GPIOB, GPIO_Pin_5); GPIO_SetBits(GPIOB, GPIO_Pin_6); GPIO_SetBits(GPIOB, GPIO_Pin_7); GPIO_ResetBits(GPIOB, GPIO_Pin_8); GPIO_ResetBits(GPIOB, GPIO_Pin_12); GPIO_SetBits(GPIOB, GPIO_Pin_13); GPIO_SetBits(GPIOB, GPIO_Pin_14); GPIO_SetBits(GPIOB, GPIO_Pin_15); delay_ms(T); //8 } 开始就是这样驱动l298控制电机的,但是这样CPU除了控制电机干不了别的了,所以想用不同相位PWM控制
lr2131 2014-03-28
  • 打赏
  • 举报
回复
别搞那么复杂了兄弟,你要是不那么懂单片机外设的使用的话,另外也不怎么熟悉步进电机的驱动时序,还是先买一块驱动芯片试试吧。L298这些只是放大电流的,还是得需要你懂步进电机的驱动时序,IO需求也不会少,推荐A3988,。
啊啊啊11223344 2014-03-28
  • 打赏
  • 举报
回复
急!!!!!!

27,383

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧