智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 12125|回复: 20
打印 上一主题 下一主题

关于智能车舵机控制周期问题

  [复制链接]

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
跳转到指定楼层
1#
发表于 2016-10-14 20:43:43 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
首先要声明下面的结论都是我和学长的猜想,也没有查看STM32的技术手册,另外我们也是猜想K60的情况和STM32F407的情况相同。如果大家有自己的见解的话那就尽情讨论吧!!

先问个问题吧:我们都知道一般舵机标准控制周期是20ms,但是大多数时候可能程序的控制周期远远小于20ms。换句话说可能在这20ms内给了舵机不同的值!那这时候舵机能反应过来么?
先来说说结论吧!
1,对于STM32F407芯片来说,在一个PWM周期没有结束之前是不会产生另外一个占空比不同的PWM信号的。
2,对于STMF407定时器的PWM模式来说,有一个预装载寄存器,这个预装载寄存器的值是可以被刷新。
3,对于PWM周期还没有结束,但是程序中又对PWM的占空比进行修改的情况来说。(简而言之就是当控制周期小于PWM的生成周期时。)预装载寄存器才能起作用,预装载寄存器里面的值也才有可能被刷新。
换句话说:每次PWM在产生的过程中是不会被打断的,如果有程序试图修改他的占空比,那么这个值会被存在预装载寄存器里面。而这个预装载寄存器的值也是可以被刷新的。


验证:
1,在中断对PWM的占空比进行修改。设置定时器中断为15ms。PWM的一个周期为20ms。

下面是实验现象:
可以看到每个PWM的周期都是完整的(都是20ms),也就是说PWM周期不会被中断打断。另外示波器显示的PWM的占空比是循环出现 12.5%75%50%。对应程序中的bb=50,bb=300,bb=200


过程分析:第一次肯定是显示bb=100(占空比25%)的PWM。一个完整的PWM周期是20ms。而定时器中断的时间是15ms。所以在第一次PWM产生的过程中进入了中断,并且程序试图改变PWM的占空比。但是这时候一个完整的PWM周期还没有产生完毕。所以这个占空比就被存到定时器的预装载寄存器里面。当一个完整的PWM产生完毕后(也就是20ms后)定时器自动将预装载寄存器的值取出并执行。(这个过程是硬件实现的)
程序里面不是四次对PWM的占空比进行修改么?为什么只示波器上值循环三种占空比?
答:首先我们推测,STM32的预装载寄存器只有一个。而且这个值可以被刷新。
    我们不妨观察第三个周期完毕后的那个时刻。这个时刻既是PWM周期完成的时刻,也是定时器中断的时刻。(对于这个点我们分析如下:首先PWM是要先于定时器中断完成的。PWM周期刚刚完成后,定时器迅速从预装载寄存器里面取值,产生新的PWM信号。完成这个动作后再进定时器中断,再向预装载寄存器里面装值。)但是很不幸,这个时刻装的值很快就被下个定时器中断中的赋值代码给刷新掉了(或者说替换了)。所以我们在示波器上是看不到bb=100(占空比为25%)的PWM的。(除了第一次程序刚刚执行的时候)
具体分析过程见下图!!!

下面是为了验证上面的猜想而设计的一个实验:
PWM周期不变还是20ms。定时器周期改变为10ms产生一次中断。


实验现象如下:可以看到pwm占空比一直在12.5%50%之间循环。

具体分析过程见下图:

这里再说一个问题:关于

评分

1

查看全部评分

回复

使用道具 举报

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
2#
 楼主| 发表于 2016-10-14 20:44:36 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
3#
 楼主| 发表于 2016-10-14 21:04:15 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
4#
 楼主| 发表于 2016-10-14 21:05:38 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
5#
 楼主| 发表于 2016-10-14 21:07:23 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
6#
 楼主| 发表于 2016-10-14 21:08:29 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
7#
 楼主| 发表于 2016-10-14 21:09:37 | 显示全部楼层

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
8#
 楼主| 发表于 2016-10-15 12:13:06 | 显示全部楼层
这个没有参见STM32的技术手册,并且我们猜想K60也跟STM32一样存在预装载寄存器
回复 支持 反对

使用道具 举报

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
9#
 楼主| 发表于 2016-10-16 12:12:42 | 显示全部楼层
肯定不是优先级的问题,我们猜想PWM发生器有一个预装载寄存器,里面存的是下次需要产生的PWM的占空比。
回复 支持 反对

使用道具 举报

5

主题

100

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1367
威望
710
贡献
421
兑换币
493
注册时间
2016-3-20
在线时间
118 小时
毕业学校
内蒙古科技大学
10#
 楼主| 发表于 2016-10-16 12:23:29 | 显示全部楼层
在一个PWM周期没有结束之前是不会产生另外一个占空比不同的PWM信号的。也就是说我们在设置控制周期的时候只要保证每次PWM的值都是从预装载寄存器里面取出的,那么这就是控制舵机的最高效率。假如说PWM的控制周期设置成20ms,那么我们的控制周期只要保证比20ms小就可以了。
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|亿加合和智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-5-5 19:43 , Processed in 0.068842 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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