落叶 发表于 2010-11-13 11:08:42

关于 PWM 的一些困惑!

我们知道 定时器的输出时钟为 =PCLK/(prescaler+1) / (divider)
我想知道一下这个值和我们给 TCNTBn 的初始值有什么必然的联系吗??
希望能得到详细的解析,

天嵌_support1 发表于 2010-11-13 11:20:15

1# 落叶


PCLK/(prescaler+1) / (divider) 这个是用来决定输入频率而不是输出的PWM频率
你的PWM的输出频率是靠TCNTBn这个来影响绝对的,是两个不同方向和用途的频率

落叶 发表于 2010-11-13 11:33:48

回复2楼:
定时器的输入时钟为=PCLK/(prescaler+1) / (divider)   怎么会没关系呢?   这个值不是可以决定 1S 内对 TCNTn 做减操作的次数吗? 好像是有那么点关系吧?

天嵌_support1 发表于 2010-11-13 12:28:39

3# 落叶


硬件上的定时器,需要计算,也就是我们说的产生时间。
PCLK是它产生的源。

然而在内部:
TCNTBn 和 TCMPBn 是在时钟的基础上通过累积计算,对比来产生输出PMW。

“我们知道 定时器的输出时钟为 =PCLK/(prescaler+1) / (divider)
我想知道一下这个值和我们给 TCNTBn 的初始值有什么必然的联系吗??
希望能得到详细的解析,

也确实存在你说的关系。我的解释没有完全到位。只做了个用途说明。网友做了补充,好样的

吕氏春秋8266 发表于 2010-11-13 15:32:08

首先PCLK频率是外部频率(TQ2440为12M)经过PLL(锁相环)进行倍频处理后得到的,外部时钟源经过MPLL处理后能够得到三个不同的系统时钟:FCLK、HCLK和PCLK。FCLK是主频时钟,用于ARM920T内核;HCLK用于AHB总线设备,如ARM920T,内存控制,中断控制,LCD控制,DMA以及USB主模块;PCLK用于APB总线设备,如外围设备的看门狗,IIS,I2C,PWM,MMC接口,ADC,UART,GPIO,RTC以及SPI。这三个系统时钟(FCLK、HCLK和PCLK)是有一定的比例关系,这种关系是通过寄存器CLKDIVN中的HDIVN位和PDIVN位来控制的,因此我们只要知道了FCLK,再通过这两位的控制,就能确定HCLK和PCLK。在TQ2440上,外部晶振为12MHz,进过MPLL倍频以后得到400MHz的FCLK,而FCLK、HCLK、PCLK之间的比例关系为1:4:8,因此HCLK为100MHz,PCLK为50MHz
如何才能得到精确的定时呢?那就要靠TCFG0和TCFG1这两个寄存器来配置定时器的频率,即要确定TCNTOn每递减一个数所需要的时间,它们之间是倒数的关系。具体的计算公式为:

定时器输出时钟频率=PCLK ÷ (prescaler+1) ÷ divider
其中prescaler值由TCFG0决定,divider值由TCFG1决定,而prescaler只能取0~255之间的整数,divider只能取2、4、8和16。
比如已知PCLK为50MHz,而我们取prescaler为99,divider为16,则定时器频率为50000000/(99+1)/16=31250HZ,则TCNTOn每递减一个数所需时间为T=1000/31250MS
现在我们要得到0.5s的中断的话,TCNTOn=500/T=31250/2=15625
我们得到每递减一个数所需要的时间后,根据PWM输出波形要求,就可以计算出TCMPBN和TCNTBN的值,得到所需要的波形。
希望能对你有所帮助。

落叶 发表于 2010-11-13 21:52:25

谢谢你们对这问题的关注
页: [1]
查看完整版本: 关于 PWM 的一些困惑!