11243|14

81

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

探讨一下高速脉冲输出设计 [复制链接]

项目要驱动步进电机,步进电机驱动芯片是脉冲输入的,实际项目最高的脉冲频率<20KHz,脉冲数要用32位长度。

计划用两定时器:

一个定时器根据频率计算出周期,然后设置预分频系数和计数值,由硬件引脚输出一个PWM(占空比50%)。

另一个定时器设置为ETP或外部TIx为计数时钟。32位脉冲长度,低16为作为一个捕获通道捕获值,计数器值为0xFFFF,发生捕获时,对一个变量从0开始累加,累计值和32位脉冲长度高16位相同时,停止发送脉冲。

PWM 输出引脚和和第二个定时器的ETR引脚硬件直接连接。

这个方案可行吗? 

另外 外部时钟模式1:外部输入脚(TIx) 外部触发输入(ETR) 有何区别? 是不是可以用内部触发输入(ITRx) 而不需要外部硬件触发引脚?

这个方案在输出频率高时脉冲精度好,而输出频率低,周期长时,由与预分频系数较大,精度反而变差了,如何解决?
此帖出自stm32/stm8论坛

最新回复

                                 即使加减速曲线不固定,也需要在开动电机时确定下曲线的形状,这是只需要把需要的参数通过程序计算出来,并把计算结果存放到DMA缓冲区即可。退一步说,如果不用DMA实现,你还是要程序计算出应有的参数,通过其它方法改变定时器寄存器,而使用DMA不过是方便了程序的操作。可见使用DMA同样可以适合加减速曲线不固定的情况。   详情 回复 发表于 2009-2-25 11:28
点赞 关注
 

回复
举报

75

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

理解一下你的意图

你希望输出一串脉冲,这串脉冲是占空比为50%的PWM波形,脉冲的频率最高为20kHz,你希望能够控制这串脉冲的数目,这个数目需要使用32位的变量控制。

如果我的上述理解正确,则有几个问题:
1)发出一串脉冲后,脉冲数目还未达到要求数目时,是否需要改变脉冲频率?
2)脉冲频率的低限是多少?
3)不同频率下要求的精度是多少?请以百分比表示。
4)从你的描述中看,好像不要求脉冲数目控制得很准,好像只要32位计数器的高16位相符时即可,是这样吗?

上述问题2和3是想试图计算可能的精度,回答你的最后一个问题:
  这个方案在输出频率高时脉冲精度好,而输出频率低,周期长时,由与预分频系数较大,精度反而变差了,如何解决?


关于你的另一个问题:外部时钟模式1:外部输入脚(TIx) 外部触发输入(ETR) 有何区别? 是不是可以用内部触发输入(ITRx) 而不需要外部硬件触发引脚?

TIx与ETR的区别是:1)使用的管脚不同;2)TIx是经滤波后没有预分频,而ETR是有滤波也有预分频。

可以使用内部触发输入而不需要外部硬件触发引脚,即使用产生PWM脉冲的定时器的更新事件,通过触发控制器向另一个定时器产生一个ITRx信号。


如果我上述问题1的答案是否定的,而问题4答案是肯定的,也许产生PWM脉冲的定时器可以使用门控从模式,在事先算好需要定时的时间后,通过另一个定时器控制它的启停。
此帖出自stm32/stm8论坛
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

谢谢香版主热心,细致的答复!

今天下午一直在看参考手册关于定时的使用部分,感觉熟悉了很多。

香版对我的意图的理解是对的。

我时希望输出一串脉冲,这串脉冲是占空比为50%的PWM波形,脉冲的频率范围为20hz-20kHz,你希望能够控制这串脉冲的数目,这个数目需要使用32位的变量控制。

1)发出一串脉冲后,脉冲数目还未达到要求数目时,是否需要改变脉冲频率?  否

2)脉冲频率的低限是多少? 20hz-50hz都可以

3)不同频率下要求的精度是多少? 本质上频率是要求精确的,但是因为单片机计时节拍是时钟的若干倍分频,不可能准确生成全部频率的半周期,特别是频率较高的。所以只能尽可能提高精度。

4)从你的描述中看,好像不要求脉冲数目控制得很准,好像只要32位计数器的高16位相符时即可,是这样吗? 

我对脉冲数目控制要求要很准的,因为步进电机,脉冲数是和旋转角度,传送长度对应的。 我的传送长度要求时准确的。

时钟模式和触发问题,你的答复明白,我清楚了。

这个项目时原来项目的一个更新,原来的方案使用一个VBT6,用定时器捕获中断,软件产生六路频率,同时软件计脉冲数,当频率高到10Khz时,中断占用cpu资源太多,开始影响通讯中断。

现在的项目用一个c6t6,只产生一个20hz-20Khz高速脉冲,应该容易多了。


现在通过看参考手册,熟悉定时器功能,感觉用32位变量准确测脉冲数不是问题,很容易实现。 

关键是尽量准确的宽范围的频率生成。

生成频率和测频率有相通之处。测频率在比较大的范围时,低频侧周期,高频测脉冲。

生成频率也一样,当频率在比较大的范围时,我计划生成频率较高时用硬件PWM输出,低CPU占用;当生成频率较低时,用定时器1分频设置0xFFFF自动装载值,开一个输出捕获,精确控制产生较长的半周期时间,然后软件翻转引脚。

生成频率对应半周期<65536/36 us 的,用硬件PWM,其余的用软件PWM。应该可以最大程度优化生成频率的精度吧。
此帖出自stm32/stm8论坛
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 

关于产生低频PWM波形的精度评估

楼主说:“输出频率低,周期长时,由于预分频系数较大,精度反而变差了”,我不知道你要求的精度是多少,所以才会有我在2楼的问题3,希望得到一个百分比的概念,但你没有给出这个精度级别。


下面通过计算,我们评估一下到底STM32定时器的PWM模式可以达到多高的精度。

假定你要求的最低频率为20Hz,因为STM32定时器的计数器是16位的,为了得到更高的精度,需要尽可能地提高计数器的输入频率。经过计算,为达到20Hz的定时,最高的计数频率应小于1310720Hz = 20Hz x 65536。

假定定时器的输入频率为72MHz,则预分频系数 = 72MHz / 1310720 = 54.932,取整后预分频系数=55。

按输入频率=72MHz,预分频系数=55,获得0.05秒的时间将需要计数65454或65455次(72000000/55/20)。

使用定时器的PWM模式时,需要设置ARR=65454、CCRx=32727,这样产生波形为:
    半周期 = (1/72MHz) x 55 x 32727 = 0.02499979秒

误差为 0.025 - 0.02499979 = 0.00000021,即0.00084%。

请问这个精度满足你的要求吗?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

5
 

这个精度是可以的,没有问题。谢谢

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 

够精确的...

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 

用一个计数器就应该能解决的吧

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

8
 

是的,用一个定时器可以控制产生脉冲的数目

实际上不需要真正地用计数器去计数脉冲的数目,只需要通过定时在需要的时候关闭产生PWM脉冲的定时器即可。


如果需要控制输出20Hz的脉冲12000次的话,则需要在产生第一个PWM脉冲之后600秒(0.05 x 12000)的时候停止定时器的输出。频率低时间长

如果需要控制输出10kHz的脉冲12000次的话,则需要在产生第一个PWM脉冲之后1.2秒的时候停止定时器的输出。频率高时间短

简单的做法就是用另一个定时器,结合软件计数,在时间到的瞬间关闭产生PWM脉冲的定时器。

更简单的做法是,让产生PWM脉冲的定时器在每输出一个脉冲时,产生一个中断,然后用软件对中断次数计数即可。这个方法适合于PWM频率较低的情况,而前一个方法适合于PWM频率较高的情况。

不管怎样,在收到最后一个中断需要关闭PWM输出时,软件必须在25us内关闭PWM输出,这个时间对STM32来说是非常宽裕的。
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

1

TA的资源

一粒金砂(初级)

9
 

LZ的步进电机不需要加减速吗?

                                 不需要加减速应该比较简单,我现在用了三个定时器,一个用来产生脉冲,一个计数器用来调节脉冲频率,还有一个计数器用来计总脉冲数。
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 

我的不需要连续变速。

                                 20Khz半周期25us,如果时72M频率运行,20khz以下频率时,用一个定时器发脉冲,中断里软件计数,调速,应该时可以的。
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

11
 

我也关注

我想实现脉冲频率的加减速度控制
即,给出脉冲数,最高频率,最低频率,加减速时间.
有没有好的思路?

(ps:发出一串脉冲后,脉冲数目还未达到要求数目时,是否需要改变脉冲频率?  需要)
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

12
 

加减速时,任意两个脉冲的频率都不同的,连续变化的

                                 所以每发一个脉冲就要计算更新脉冲的频率,就是半周期。
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

13
 

加减速时需要不断地调整频率,可以使用DMA在每个周期更新

                                 事先计算好要设置的定时器参数并存在DMA数据区,在需要时启动DMA在每个周期更新定时器的参数。
此帖出自stm32/stm8论坛
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

14
 

DMA不是很好用

                                 如果加减速曲线固定的话,用DMA比较管用,不同的时候加减速曲线不一样,不知道怎么实现,版主能不能给个例子?/
此帖出自stm32/stm8论坛
 
 
 

回复

88

帖子

0

TA的资源

一粒金砂(初级)

15
 

加减速曲线固定与不固定,和使用DMA没有什么关系

即使加减速曲线不固定,也需要在开动电机时确定下曲线的形状,这是只需要把需要的参数通过程序计算出来,并把计算结果存放到DMA缓冲区即可。

退一步说,如果不用DMA实现,你还是要程序计算出应有的参数,通过其它方法改变定时器寄存器,而使用DMA不过是方便了程序的操作。

可见使用DMA同样可以适合加减速曲线不固定的情况。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表