|
发表于 2016-4-8 13:03:15
|
显示全部楼层
本帖最后由 RAMILE 于 2016-4-9 08:53 编辑
分享一个技巧,
定时器设定为连续自由计数,从0000~FFFF,
定时器比较通道CH1的CCR设定为,“相等输出反转,且相等触发DMA加载CCR”,
对应的DMA通道指向一个64字的数组,并且设置循环发送,设置半数发送完成中断,和全完成中断
DMA指向的64字数组是这样的,{10,20,30,40,50,60,70,80,.......630},这样的话输出的是宽度为10个timer-tick的方波,如果设成倒数等差的话,就是梯形加减速脉冲了
这个64字的数组在启动发脉冲时候计算好,在DMA半数完成中断时候计算前面一半32个个数值,在DMA全完成中断时候计算后面一半数值
这种动态脚本方式是我想到的生成变周期序列的最佳方式,每若干脉冲中断一次在中断中有足够时间(需要验证)计算下一步的脚本。
另外,这种方式输出脉冲通道的数量是由DMA通道数决定的,一般来说只使用一个定时器就可以输出3路脉冲,每路脉冲和每个脉冲都是由动态脚本决定,好不好控制脉冲步数就看你怎么演算脚本了
DMA脚本方式可能面临的问题有,脚本生产速度跟不上,两个DMA同时发生的请求面临的优先次序问题,不过脉冲频率不高的环境下,这些都不是事,一个103C8完全胜任
实际上还是用FPGA做脉冲好点,频率高脉冲步进更细,会用FPGA做DDS生产脉冲,就应该会做这种加减速脉冲 |
|