打印

探讨一下高速脉冲输出设计

[复制链接]
7312|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21ele|  楼主 | 2009-2-19 18:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
项目要驱动步进电机,步进电机驱动芯片是脉冲输入的,实际项目最高的脉冲频率<20KHz,脉冲数要用32位长度。

计划用两定时器:

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

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

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

这个方案可行吗? 

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

这个方案在输出频率高时脉冲精度好,而输出频率低,周期长时,由与预分频系数较大,精度反而变差了,如何解决?
沙发
香水城| | 2009-2-19 21:52 | 只看该作者

理解一下你的意图

你希望输出一串脉冲,这串脉冲是占空比为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脉冲的定时器可以使用门控从模式,在事先算好需要定时的时间后,通过另一个定时器控制它的启停。

使用特权

评论回复
板凳
21ele|  楼主 | 2009-2-19 23:28 | 只看该作者

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

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

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

我时希望输出一串脉冲,这串脉冲是占空比为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。应该可以最大程度优化生成频率的精度吧。

使用特权

评论回复
地板
香水城| | 2009-2-20 10:40 | 只看该作者

关于产生低频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%。

请问这个精度满足你的要求吗?

使用特权

评论回复
5
21ele|  楼主 | 2009-2-20 11:26 | 只看该作者

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

使用特权

评论回复
6
hqgboy| | 2009-2-20 13:01 | 只看该作者

够精确的...

使用特权

评论回复
7
zlf667788| | 2009-2-20 16:10 | 只看该作者

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

使用特权

评论回复
8
香水城| | 2009-2-20 16:43 | 只看该作者

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

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


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

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

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

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

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

使用特权

评论回复
9
violet520| | 2009-2-24 16:10 | 只看该作者

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

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

使用特权

评论回复
10
21ele|  楼主 | 2009-2-24 19:57 | 只看该作者

我的不需要连续变速。

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

使用特权

评论回复
11
JOHN78| | 2009-2-24 23:21 | 只看该作者

我也关注

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

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

使用特权

评论回复
12
21ele|  楼主 | 2009-2-25 00:31 | 只看该作者

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

所以每发一个脉冲就要计算更新脉冲的频率,就是半周期。

使用特权

评论回复
13
香水城| | 2009-2-25 08:45 | 只看该作者

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

事先计算好要设置的定时器参数并存在DMA数据区,在需要时启动DMA在每个周期更新定时器的参数。

使用特权

评论回复
14
violet520| | 2009-2-25 11:00 | 只看该作者

DMA不是很好用

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

使用特权

评论回复
15
香水城| | 2009-2-25 11:28 | 只看该作者

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

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

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

可见使用DMA同样可以适合加减速曲线不固定的情况。

使用特权

评论回复
16
28182900| | 2012-8-22 13:55 | 只看该作者
15# 香水城
楼上不可,如果加速过程很长呢

使用特权

评论回复
17
90chinazhu| | 2014-4-17 09:06 | 只看该作者
mark

使用特权

评论回复
18
mll5644| | 2014-5-21 19:58 | 只看该作者
此贴乃传说中的神贴

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

191

帖子

1

粉丝