智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 16166|回复: 46
打印 上一主题 下一主题

飞思卡尔智能车S12XS128PWM控制程序编写

  [复制链接]

11

主题

54

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1434
威望
572
贡献
432
兑换币
0
注册时间
2011-3-1
在线时间
215 小时
跳转到指定楼层
1#
发表于 2011-6-3 13:16:10 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

[size=+0]对于飞思卡尔智能车,电机和舵机的控制通常使用的都是以PWM脉冲宽度调制的方法实现的,其可行性基于电机可以由占空比控制转速,而舵机也由脉宽控制摆动。PWM 调制波有 8 个输出通道,每一个输出通道都可以独立的进行输出。每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。每一个 PWM 输出通道都能调制出占空比从 0—100% 变化的波形。

PWM控制程序的编写一般按照以下的一种流程:

1,禁止PWM模块;//这是由于改变周期和脉宽等操作需要在PWM禁止的情况下才能被设置

2,PWM级联选择,是否级联通道67,45,23,01;//最多单独使用8个8位和级联使用4个16位

3,给通道选择时钟源控制位;//0,1,4,5通道可选择ClockA和ClockSA;2,3,6,7通道可选择ClockB和ClockSB

4,给时钟源A\B预分频;//可对总线时钟进行预分频,确定ClockA和ClockB,满足1,2,4,8,16,32,64,128这8个分频量

5,根据时钟源A\B确定时钟源SA\SB;//由ClockA和ClockB、分频设值来确定ClockA和ClockB,满足1-255的分频量

6,输出极性的选择;//也就是选择输出极性先低后高还是先高后低

7,对齐方式的选择;//可设置为左对齐或者中间对齐方式

8,实际通道频率的计算;//也就是周期的设定

9,占空比寄存器的设置;//占空比常数的设定,可以以此决定占空比

10,使能PWM模块。//你已经首尾呼应了,有木有!!!

接下来通过寄存器的介绍,以上面流程为大纲,详细地说明一下该如何操作~~

【PWME】寄存器

PWME = (PWME~7 | PWME~6 | PWME~5 | PWME~4 | PWME~3 | PWME~2 | PWME~1 | PWME~0)

将每一位设置为1即可使能该位,0对应的既是禁止。要注意的是,当选择了级联方式输出的话,1,3,5,7分别是级联单元的控制字,也就是接下来的操作需要对应这些位才可生效。

现在把8个通道都禁止,得到语句 PWME = 0x00;

【PWMCTL】寄存器

PWMCTL = (CON67 | CON45 | CON23 | CON01 | PSWAI | PFRZ | 0 | 0)

若CON67 = 1,那么通道6和7即是级联输出,新单元由通道7的控制字决定属性。若CON67 = 0,那么两者还是相互分立的8位输出通道。其他级联通道操作也是同理。

为保持简洁性,对某些位的赋值略过,PSWAI和PFRZ通常设为0。

现在将8个通道两两相级联,得到语句 PWMCTL = 0xF0;

【PWMCLK】寄存器

PWMCLK = ( PCLK~7 | PCLK~6 | PCLK~5 | PCLK~4 | PCLK~3 | PCLK~2 | PCLK~1 | PCLK~0)

其中0,1,4,5通道可选择ClockA和ClockSA;2,3,6,7通道可选择ClockB和ClockSB。

若将某位设值为1,则该位选择的是ClockSA或ClockSB时钟。

现在全部选择ClockSA或ClockSB时钟,则得到语句 PWMCLK = 0xFF;

【PWMPRCLK】寄存器

PWMPRCLK = (0 | PCKB2 | PCKB1 | PCKB0 | 0 | PCKA2 | PCKA1 | PCKA0)

PCKA2 PCKA1 PCKA0分别对应ClockA预分频系数的三个数位,假设其分别为1 0 0,则对应十进制数是4,也就是分频系数为2~4=16,若总线频率16MHz,则ClockA = BusClock/(2~4) = 16MHz/16 = 1MHz;

PCKB2 PCKB1 PCKB0分别对应ClockB时钟,设值方法同上。

ClockA = BusClock/(2~na)

ClockB = BusClock/(2~nb)

现在设值预分频系数都为1,得到语句 PWMPRCLK = 0x00;

【PWMSCLA&PWMSCLB】寄存器

可以认为是纯数值寄存器,一共八位。如果ClockA为24MHz,现需要600KHz的ClockSA,则通过ClockSA = ClockA / (2*PWMSCLA)可得,PWMSCLA = ClockA/(2*ClockSA)= 24MHz/(2*0.6MHz) = 20;

PWMSCLB的设值也同上,二者的公式相同:

ClockSA = ClockA / (2*PWMSCLA)

ClockSB = ClockB / (2*PWMSCLB)

上面例子可以得到语句 PWMSCLA = 20;

【PWMPOL】寄存器

PWMPOL = (PPOL~7 | PPOL~6 | PPOL~5 | PPOL~4 | PPOL~3 | PPOL~2 | PPOL~1 | PPOL~0)

分别对每个通道的极性进行设置。若置1则先输出高电平,遇到触发置位变为低电平;置0则相反。

现在设置所有通道为先低后高极性,则得到语句 PWMPOL = 0x00;

【PWMCAE】寄存器

PWMCAE = (CAE~7 | CAE~6 | CAE~5 | CAE~4 | CAE~3 | CAE~2 | CAE~1 | CAE~0)

分别对每个通道进行输出方式设置。输出方式分为两种:左对齐和居中对齐。

这里的区别将在占空比寄存器之后详细地说明。

【PWMPERXX】寄存器

共有八个这样的寄存器,名字PWMPER0 - PWMPER7;若级联使用,则为PWMPER01,PWMPER23,PWMPER45,PWMPER67。


【PWMDTYXX】寄存器

共有八个这样的寄存器,名字PWMDTY0 - PWMDTY7;若级联使用,则为PWMDTY01,PWMDTY23,PWMDTY45,PWMDTY67。

上面提到的对齐方式区别在于:

左对齐方式:计数器PWMCNT从0开始对时钟信号递增计数,当PWMCNT = PWMDTY时,比较器1输出有效,触发器置位,输出电平翻转。当PWMCNT = PWMPER时,比较器2输出有效,触发器复位,输出电平翻转。同时PWMCNT复位,一个周期结束。

输出周期 = 通道周期*PWMPERx

居中对齐方式:计数器PWMCNT从0开始对时钟信号递增计数,当PWMCNT = PWMDTY时,比较器输出有效,触发器置位,输出电平翻转。当PWMCNT = PWMPER时,PWMCNT从当前值开始递减计数,当再次满足PWMCNT = PWMDTY时,比较器输出有效,触发器复位,输出电平翻转。

输出周期 = 2*通道周期*PWMPERx

同时占空比的计算方法:

PPOL = 0(先低后高):占空比 = [(PWMPERx-PWMDTYx)/PWMPERx]*100%

PPOL = 1(先高厚):占空比 = [(PWMDTYx)/PWMPERx]*100%



30

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2063
威望
1008
贡献
633
兑换币
600
注册时间
2013-3-9
在线时间
211 小时
毕业学校
杭州电子科技大学
47#
发表于 2013-12-12 09:11:03 | 只看该作者
回复 支持 反对

使用道具 举报

4

主题

60

帖子

0

精华

高级会员

Rank: 4

积分
783
威望
384
贡献
227
兑换币
251
注册时间
2013-12-3
在线时间
86 小时
46#
发表于 2013-12-11 00:04:21 | 只看该作者
回复 支持 反对

使用道具 举报

2

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
222
威望
124
贡献
56
兑换币
64
注册时间
2013-5-27
在线时间
21 小时
45#
发表于 2013-11-17 18:35:29 | 只看该作者
高人呀
回复 支持 反对

使用道具 举报

28

主题

999

帖子

0

精华

杰出人士

Rank: 12Rank: 12Rank: 12

积分
13356

论坛元老奖章在线王奖章优秀会员奖章活跃会员奖章

威望
2521
贡献
705
兑换币
1631
注册时间
2012-11-24
在线时间
5065 小时
44#
发表于 2013-10-30 20:15:24 | 只看该作者
:D:D:D:D:D:D:D:D:D:D:D
回复 支持 反对

使用道具 举报

3

主题

563

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3808

优秀会员奖章活跃会员奖章论坛元老奖章在线王奖章

QQ
威望
1710
贡献
906
兑换币
1148
注册时间
2013-8-24
在线时间
596 小时
43#
发表于 2013-10-22 18:08:16 | 只看该作者
好人啊啊,,感动,,希望能继续其他模块
回复 支持 反对

使用道具 举报

1

主题

81

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2753
威望
1296
贡献
835
兑换币
859
注册时间
2013-3-28
在线时间
311 小时
42#
发表于 2013-10-16 23:31:54 | 只看该作者
强大啊!!!!!!
回复 支持 反对

使用道具 举报

1

主题

184

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1686
QQ
威望
792
贡献
472
兑换币
517
注册时间
2013-4-12
在线时间
211 小时
41#
发表于 2013-9-5 20:03:51 | 只看该作者
谢谢,正好用到呢。
回复 支持 反对

使用道具 举报

20

主题

93

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2510
威望
1135
贡献
701
兑换币
727
注册时间
2013-7-27
在线时间
337 小时
40#
发表于 2013-8-16 11:55:18 | 只看该作者
回复 支持 反对

使用道具 举报

30

主题

333

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2063
威望
1008
贡献
633
兑换币
600
注册时间
2013-3-9
在线时间
211 小时
毕业学校
杭州电子科技大学
39#
发表于 2013-7-29 07:52:59 | 只看该作者
感谢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 03:00 , Processed in 0.052309 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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