[STM32F4] TIM1 高级定时器 4路控制信号 驱动步进电机

[复制链接]
 楼主| tcdbobo 发表于 2019-5-27 14:44 | 显示全部楼层 |阅读模式
控制板:NUCLEO-F410RB 驱动:DRV8833电机驱动模块 电机:驰海电机 2相4线 步进电机现在的问题是,单独IO发送脉冲,电机可以 正常转动。用的是网上现成的8拍方式,
四个引脚各一根控制线:A~H表示各线时序
         A     B     C    D     E     F     G     H
A       1     1     0     0     0     0     0     1
A-      0     0     0     1     1     1     0     0
B       0     1     1     1     0     0     0     0
B-      0     0     0     0     0     1     1     1
现在想的是,直接用STM32F410的TIM1 输出4路脉冲,但模式比较输出和PWM好像都不太对,我手画了一张时序图,请大佬帮忙提供些思路,有没有用高级定时器做过类似的脉冲输出。 时序.jpg 我用的HAL库 ,cubeMX,附两张网络视频中 ,使用cubeMX配置TIM1(高级控制定时器)比较输出模式,和PWM模式,在示波器中输出的波形,和我手画的波形图还是不太一样。不知道有没有人用过TIM1(高级控制定时器)输出4路时序不同的波形。
输出比较.jpg
PWM模式.jpg
conjunction 发表于 2019-5-27 16:37 | 显示全部楼层
加上软件干预的话会简单很多
 楼主| tcdbobo 发表于 2019-5-28 09:43 | 显示全部楼层
conjunction 发表于 2019-5-27 16:37
加上软件干预的话会简单很多

您能说的详细些吗?谢谢
香水城 发表于 2019-5-28 22:40 | 显示全部楼层
本帖最后由 香水城 于 2019-5-29 19:56 编辑

一共4路,用TIM1的四个通道。

/B路可以使用PWM输出就好,另外 A 、/A、 B 三路可以使用比较切换输出模式,最好结合DMA来完成比较方便。

实现这套波形是可以的。
 楼主| tcdbobo 发表于 2019-5-29 09:41 | 显示全部楼层
香水城 发表于 2019-5-28 22:40
一个4路,用TIM1的四个通道。

/B路可以使用PWM输出就好,另外 A 、/A、 B 三路可以使用比较切换输出模式, ...

谢谢!
香水城 发表于 2019-5-29 20:01 | 显示全部楼层

实现起来可能有点难度,实在不行的话私信给我。我发参考代码给你。
 楼主| tcdbobo 发表于 2019-5-31 08:56 | 显示全部楼层
香水城 发表于 2019-5-29 20:01
实现起来可能有点难度,实在不行的话私信给我。我发参考代码给你。 ...

您好,我现在的权限,私信不了。
无法私信.jpg
955385cf07b8ee8503.png
 楼主| tcdbobo 发表于 2019-5-31 09:05 | 显示全部楼层
香水城 发表于 2019-5-29 20:01
实现起来可能有点难度,实在不行的话私信给我。我发参考代码给你。 ...

请问,要同时输出这4路波形,光在cubeMX里设置好像不行,要在程序里修改哪些地方吧???有您的参考代码最好。可以对照参考一下。可是加不了您好友,也私信不了。
cubeMX 输出比较.jpg
tim.jpg
香水城 发表于 2019-6-3 12:06 | 显示全部楼层
tcdbobo 发表于 2019-5-31 09:05
请问,要同时输出这4路波形,光在cubeMX里设置好像不行,要在程序里修改哪些地方吧???有您的参考代码 ...

你可以到这个链接看看。

STM32定时器比较输出切换模式之应用实例STM32定时器比较输出切换模式之应用实例
 楼主| tcdbobo 发表于 2019-6-3 16:43 | 显示全部楼层
香水城 发表于 2019-6-3 12:06
你可以到这个链接看看。

STM32定时器比较输出切换模式之应用实例STM32定时器比较输出切换模式之应用实例 ...

收到,谢谢!
 楼主| tcdbobo 发表于 2019-6-4 14:24 | 显示全部楼层
香水城 发表于 2019-6-3 12:06
你可以到这个链接看看。

STM32定时器比较输出切换模式之应用实例STM32定时器比较输出切换模式之应用实例 ...

您好,我按照**中cubeMX里的设置后,输出代码,编译通过没有错误,但是加上**中2.2 2.3 2.4代码后,再编译就出错了,我按错误提示看,以为是少了个括号,或者是那个函数的大小写错了,但手敲代码后,keil前还是有红色小X,请帮助看一下,我把错误截图发上来了。谢谢!
另外,我以为是添加代码的位置不对,一开始我是在main.c里增加的代码,后来我又在tim.c里写了,还是一样错误。
关闭通道1的比较寄存器的预装功能.jpg
开启TIM1通道1的比较输出功能.jpg
允许相应通道比较事件的DMA请求并开启相应通道的DMA传输功能.jpg
参考代码.jpg
 楼主| tcdbobo 发表于 2019-6-4 14:34 | 显示全部楼层
本帖最后由 tcdbobo 于 2019-6-4 14:38 编辑
香水城 发表于 2019-6-3 12:06
你可以到这个链接看看。

STM32定时器比较输出切换模式之应用实例STM32定时器比较输出切换模式之应用实例 ...

另外一个问题,**中提到的 我们这里假设定时器的计数器采用向上计数模式,每记800个时钟单位为1个计数周期。【向上计数模式,ARR=800-1】在cubeMX里是不是相应的需要修改为0x31F.已附图,请老师看一下。
ARR值.jpg
香水城 发表于 2019-6-5 15:35 | 显示全部楼层
tcdbobo 发表于 2019-6-4 14:34
另外一个问题,**中提到的 我们这里假设定时器的计数器采用向上计数模式,每记800个时钟单位为1个计数周 ...

hi,我是基于STM32CUBE库生成的也验证过了。
30c1pwm.png
香水城 发表于 2019-6-5 16:23 | 显示全部楼层
 楼主| tcdbobo 发表于 2019-6-6 11:49 | 显示全部楼层
香水城 发表于 2019-6-5 15:35
hi,我是基于STM32CUBE库生成的也验证过了。

我按照您的截图,把代码加到 /* USER CODE BEGIN 2 */  和 /* USER CODE END 2 */后,编译后错误就剩6个了,都是相同类型的error,如下截图所示,我在网上查了一下,关于这个错误的原因,也截图如下,您帮忙看一下,是不是我在哪个文件里少定义了变量。
6个error.jpg
error 原因.jpg
香水城 发表于 2019-6-6 11:59 | 显示全部楼层
你使用最新的Cube库就好了。
 楼主| tcdbobo 发表于 2019-6-10 12:03 | 显示全部楼层
香水城 发表于 2019-6-6 11:59
你使用最新的Cube库就好了。

已经换成最新版本的cubeMX,编译后还是有变量未定义的错误,您可否把“hdma_tim1_ch1” “hdma_tim1_ch2” “hdma_tim1_ch3”变量是在哪里定义的发给截图给我。谢谢勒!!!
error.jpg
cube.jpg
 楼主| tcdbobo 发表于 2019-6-10 14:15 | 显示全部楼层
香水城 发表于 2019-6-6 11:59
你使用最新的Cube库就好了。

刚才又在keil里,编译了一下,选中三个变量然后右键(F12),go to define.是可以在tim.c文件中,找到变量定义的。另外DMA_handleTypeDef这个结构体也能在stm32f4xx_hal_dma.h中找到。关键是我在main.c里清楚的是能看到include"tim.h"的,那为什么编译后还是有错误。我把keil的版本也截了图。及其他变量的截图。发上来了。

1.jpg
2.jpg
3.jpg
4.jpg
DMA cubeMX.jpg
main.jpg
keil.jpg
香水城 发表于 2019-6-10 16:35 | 显示全部楼层

从你的截图看,你的工程文件似乎并不是从CUBEMX基于cube库生成的。

OCTOGGLE.png

 楼主| tcdbobo 发表于 2019-6-11 09:55 | 显示全部楼层
本帖最后由 tcdbobo 于 2019-6-11 10:30 编辑
香水城 发表于 2019-6-10 16:35
从你的截图看,你的工程文件似乎并不是从CUBEMX基于cube库生成的。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

83

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部