OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6188|回复: 5

关于定时器级联的运用,希望和大家交流,特别原子兄弟指教。

[复制链接]

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
发表于 2013-10-17 21:26:48 | 显示全部楼层 |阅读模式
一个项目落下很久,关于步进电机控制器。要实现的功能就是发指定数量、指定频率的脉冲。
由于以前做过单定时器驱动方案,出现速度瓶颈。如果有4路脉冲,每路100K ,中断频率就有400K 了.CPU啥都干不了。
于是就想用定时器级联的方式,实现几乎0%CPU占用的发送脉冲,方式如下:
TIM2工作在主模式下,配置成PWM1模式,TIM2->OC1到外部引脚并且送出OC1 为TRGO。 
TIM4工作在从模式下,配置成PWM1模式/单脉冲模式,TIM4->OC1到外部引脚。
TIM2->OC1、TIM4->OC1在外部与门相与输出。
流程:利用TIM2的TRGO触发计数(从0开始计数),同时用CCR1存放需要发送的脉冲数
当TIM4->CNT和CCR1匹配之前,TIM4->OC1为高:通过与门使能TIM2->OC1输出的PWM,
当TIM4->CNT和CCR1匹配,TIM4->OC1为低:通过与门失能TIM2->OC1输出的PWM

至此,已经完成脉冲输出。

鉴于以上结构,能很好的控制脉冲数量,脉冲频率也可以跟随TIM2->ARR轻易的改变。

碰到的问题是,如何把所谓的S加速曲线,指数曲线弄进去,实现动态的,实时的加减速?
















正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-17 23:12:42 | 显示全部楼层
没搞过S曲线,帮忙解释下,呵呵。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
 楼主| 发表于 2013-10-18 08:27:45 | 显示全部楼层
一切都从 S=V0*t+1/2at^2 开始,  如果a 为一个常数,则加速曲线为梯形
S曲线的做法是:a 不是一个常数,在加减速过程中,都是 从0 递增到一个最大值a_max(有可能不是从0开始),再递减的一个过程。
设a的变化量为K

对于前一段:a = k * t;
对加速度积分得到速度函数:
v = (1 / 2) * k * t * t + v0; v0是初速度
对速度积分得到位移函数:
s = (1 / 2)* (1 / 3) * k * t * t * t+ v0 * t + s0; s0是初始位移
对于v0 = 0, s0 = 0时:
a = k * t;
v = (1 / 2) * k * t * t;
s = (1 / 6)* k * t * t * t;

对于后一段,上面结论依然成立:
a = - k * t + a0;
v = - (1 / 2) * k * t * t + a0 * t + v0;
s = - (1 / 6)* k * t * t * t + (1 / 2)* a0 * t * t + v0 * t + s0;
假设前一段时间T1,后一段时间T2,则:
a0 = k * T1;
v0 = (1 / 2) * k * T1 * T1;
s0 = (1 / 6)* k * T1 * T1 * T1;

代入上三式:
a = - k * T2 + k * T1;
v = - (1 / 2) * k * T2 * T2 + k * T1 * T2 + (1 / 2) * k * T1 * T1;
s = - (1 / 6)* k * T2 * T2 * T2 + (1 / 2)* k * T1 * T2 * T2 + (1 / 2) * k * T1 * T1 * T2 + (1 / 6)* k * T1 * T1 * T1;

由于最后a = - k * T2 + k * T1 = 0;得出T1 = T2
a = 0;
v = k * T1 * T1;
s = k * T1 * T1 * T1;


得出来的曲线如下:
红的是速度,绿的是位移,蓝色是加速度




回复 支持 反对

使用道具 举报

1

主题

19

帖子

0

精华

初级会员

Rank: 2

积分
52
金钱
52
注册时间
2013-10-13
在线时间
3 小时
 楼主| 发表于 2013-10-18 08:29:04 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
方法就是上面写的。用MATLAB 可以整出来。
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-11-16
在线时间
0 小时
发表于 2014-12-3 11:22:12 | 显示全部楼层
‘外部与门相与输出’指的是硬件相与?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2014-9-8
在线时间
1 小时
发表于 2015-6-13 11:18:54 | 显示全部楼层
希望继续探讨该论题。貌似很高深。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 07:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表