pwm的工作原理

s3c2440芯片中一共有5个16位的定时器,其中有4个定时器(定时器0~定时器3)具有脉宽调制功能,即他们都有个输出引脚,可以通过定时器来控制引脚周期性的高低电平变化,定时器4没有输出引脚。上次脱机运行PWM测试程序实验的时候就用到了这块,所以这次将PWM和定时器放在一起来学习。

      定时器部件的时钟源为PCLK,首先通过两个8位预分频器降低频率,定时器0和1共用第一个预分频器,2,3,4共用第二个预分频器。预分频器输出接入第二级分频器,可以生成5种分频信号(1/2,1/4,1/8,1/16,TCLK),其中8位预分频器是可编程,根据装载值来分频PCLK,值储存在TCFG0和TCFG1中。

      定时器内部控制逻辑工作流程如下:

      1.程序初始,先设置TCMPBn、TCNTBn这两个寄存器,分别表示定时器n的比较值和初始计数值。

      2.然后设置TCON寄存器启动定时器n,这时TCMPBn、TCNTBn值将被装入内部寄存器TCMPn、TCNTn。在定时器n的工作频率下,TCNTn开始减1计数,其值可以通过读取TCNTOn得知。

      3.当TCNTn值等于TCMPn值的时候,定时器n的输出管脚TOUTn反转;TCNTn继续减1计数。

      4.当TCNTn值为0,输出管脚TOUTn再次反转,并触发定时器n中断(中断使能)。

      5.当TCNTn值为0,如果在TCON寄存器中将定时器n设为自动加载,则TCMPBn、TCNTBn值将被自动装入内部寄存器TCMPn、TCNTn中,进入下一个计数流程。

      定时器n的输出管脚TOUTn初始状态为高电平,然后会两次反转,也可以通过TCON寄存器设定其初始电平,这样输出就完全反相了。通过设置TCMPBn、TCNTBn可以设置TOUTn输出信号的占空比,这样就是所谓的PWM。这里PWM的原理就不做介绍了。

      下面介绍定时器的几种重要寄存器,每一种我们都以定时器0为例。

1.     TCFG0寄存器

[7:0],[15:8]各8位分别被用于控制预分频器0,1,值为0~255。经过预分频器出来的时钟频率为:PCLK/(prescaler+1)。

 

2.     TCFG1寄存器

经过预分频器得到的时钟将进入2次分频,这个寄存器就是设置2次分频系数的。这样定时器的工作频率为:PCLK/(prescaler+1)/(dividervalue),其中prescaler=0~255,divider value=2,4,6,8。

 

3.     TCON寄存器

TCON寄存器位[3:0]、[11:8]、[15:12]、[19:16]、[22:20]分别用于定时器0~4,位[4]为死区使能位,[7:5]为保留位。除了定时器4没有输出反转位外,其他位功能相似,这里以定时器0为例加以说明。位[0]开启停止位:0停止定时器,1开始定时器。[1]手动更新位:0无用,1将TCNTBn/TCMPBn寄存器的值装入内部寄存器TCNTn\TCMPn中。[2]输出反转:0不反转,1反转。[3]自动加载:0不自动加载,1自动加载。

4.     TCNTBn/TCMPBn寄存器

 

5.     TCNTOn寄存器

     

下面就具体介绍如何实现PWM功能。

1、PWM是通过引脚TOUT0~TOUT3输出的,而这4个引脚是与GPB0~GPB3复用的,因此要实现PWM功能首先要把相应的引脚配置成TOUT输出。

2、再设置定时器的输出时钟频率,它是以PCLK为基准,再除以用寄存器TCFG0配置的prescaler参数,和用寄存器TCFG1配置的divider参数。

3、然后设置脉冲的具体宽度,它的基本原理是通过寄存器TCNTBn来对寄存器TCNTn(内部寄存器)进行配置计数,TCNTn是递减的,如果减到零,则它又会重新装载TCNTBn里的数,重新开始计数,而寄存器TCMPBn作为比较寄存器与计数值进行比较,当TCNTn等于TCMPBn时,TOUTn输出的电平会翻转,而当TCNTn减为零时,电平会又翻转过来,就这样周而复始。因此这一步的关键是设置寄存器TCNTBn和TCMPBn,前者可以确定一个计数周期的时间长度,而后者可以确定方波的占空比。由于s3c2440的定时器具有双缓存,因此可以在定时器运行的状态下,改变这两个寄存器的值,它会在下个周期开始有效。

4、最后就是对PWM的控制,它是通过寄存器TCON来实现的,当不想计数了,可以使自动重载无效,这样在TCNTn减为零后,不会有新的数加载给它,那么TOUTn输出会始终保持一个电平(输出反转位为0时,是高电平输出;输出反转位为1时,是低电平输出),这样就没有PWM功能了,因此这一位可以用于停止PWM。

变相器的开和关决定了初始状态和维持TOUTn的电平的高低。

      总的来说PWM功能其实就是对2440定时器的应用。

      下面我们来分析上次脱机运行PWM测试程序中没有分析的Buzzer_Freq_Set函数。函数如下:

      void Buzzer_Freq_Set( U32 freq )

{

      rGPBCON &=~3;                 

      rGPBCON |= 2;

      rTCFG0 &= ~0xff;

      rTCFG0 |=15;                 

      rTCFG1 &= ~0xf;

      rTCFG1 |=2;                   

      rTCNTB0 = (PCLK>>7)/freq;

      rTCMPB0 =rTCNTB0>>1;   

      rTCON &= ~0x1f;

      rTCON |=0xb;                

      rTCON &=~2;               

}

     

首先rGPBCON &=~3;其他位不变,只是把最低2位清0。

rGPBCON |=2;最低2位赋值为10。

这两句话的作用是让GPBCON寄存器最低两位为10,即配置GPB0为复用功能TOUT0作为PWM输出。

rTCFG0&= ~0xff; TCFG0寄存器低8位清0,即使用定时器0。

rTCFG0 |=15;赋值给TCFG0寄存器低8位,prescaler = 15。

rTCFG1&= ~0xf; TCFG1只是最低4位清0,使用定时器0。

rTCFG1 |=2;定时器0二次分频divider value=8。

rTCNTB0 =(PCLK>>7)/freq;这里是配置计时器的计数缓冲寄存器,让PCLK/2^7/freq得到完成一个PWM周期需要计数值。因为通过前面的设置,我们知道定时器的工作频率=PCLK/(15+1)/8=PCLK/(2^7),即PCLK>>7,所以定时器工作频率/PWM freq=计数值。(PWM周期/定时器计一次计数的周期) =计数值,因为计数值*定时器一次技术队周期=PWM的周期。

rTCMPB0 =rTCNTB0>>1; 这里是配置计时器的比较缓冲寄存器,让比较值为初始值的一半,即设定了PWM的占空比为50%。

rTCON&= ~0x1f; 和rTCON |=0xb;这两句同上,给TCON最低5位赋值,开启定时器,第一次使用定时器手动更新以便装入TCNTB0和TCMP0的值,关闭反相器,自动加载,disable 死区。

rTCON&= ~2;   清0手动更新位。

这就完成了PWM的设置。

当我们完成试验退出时用到Buzzer_Stop函数,我们来看这个函数:

voidBuzzer_Stop( void )

{

      rGPBCON &= ~3;

      rGPBCON |= 1;

      rGPBDAT &= ~1;

}

 

rGPBCON&= ~3;和rGPBCON |= 1;这两句上面已经分析过,是配置GPBCON的,不同是这次让GPBCON最低两位为01,即作为输出功能,不再作为PWM的TOUT了。

rGPBDAT&= ~1;即GPB0输出0,蜂鸣器不发声。

至此PWM蜂鸣器发声实验就分析完了。后面使用蜂鸣器唱歌等实验原理相似,只不过调整声音频率和对于声音频率的延时时长的控制,后面不做分析了。


具体的驱动实现代码:pwm驱动原理和代码实现


引自,http://blog.sina.com.cn/s/blog_8ad7bc620100xhzv.htmlhttp://blog.sina.com.cn/s/blog_8ad7bc620100xhzv.html

致以感谢。

<think>好的,用户想了解PWM工作原理和应用。首先我需要回忆PWM的基本概念,脉冲宽度调制,也就是通过调整脉冲的宽度来控制输出。根据系统指令,要使用行内数学表达式,比如占空比可以用$D = \frac{T_{on}}{T}$来表示,其中$T_{on}$是导通时间,$T$是周期。这里要注意用中文回答,并且结构清晰。 接下来,工作原理部分需要分点说明。可能包括定义、占空比的作用、调制方式等。还要引用相关的资料,比如用户提供的三个引用,其中引用[1]提到PWM的经济性和抗噪性能,引用[2]讨论了抗噪能力和通信应用,引用[3]涉及舵机的应用。需要确保每个引用都自然地插入到相关内容后面。 然后,应用部分要列举几个主要领域,比如电机控制、通信、电源管理和舵机控制。特别是引用[3]提到的舵机,需要详细说明PWM信号参数,比如周期20ms,高电平宽度范围。这部分可能需要独立公式,比如周期和频率的关系用$$f = \frac{1}{T}$$来表示。 生成相关问题的时候,要考虑用户可能进一步想了解的内容,比如PWM在通信中的具体应用、如何生成信号、占空比与电压的关系,以及舵机的控制细节。这些问题应该覆盖原理、实现和应用的不同方面。 最后检查格式是否正确,数学表达式是否用$和$$包裹,引用标识是否正确添加,确保没有使用Markdown,语言口语化,结构清晰。同时确保所有引用的内容都有对应的标识,比如在讨论抗噪能力时引用[2],在舵机部分引用[3]。</think>### PWM工作原理 脉冲宽度调制(PWM)通过调节信号的**占空比**来控制输出功率或信号强度。其核心原理如下: 1. **脉冲定义**:PWM 信号由固定频率的周期性方波组成,每个周期内包含高电平(导通)和低电平(关断)阶段,周期 $T$ 与频率 $f$ 的关系为 $f = \frac{1}{T}$。 2. **占空比控制**:占空比 $D$ 定义为高电平时间 $T_{on}$ 与周期 $T$ 的比值,即 $D = \frac{T_{on}}{T}$。通过调整 $D$,可改变输出的平均电压或功率[^1]。 3. **调制方式**:将模拟信号(如电压)转换为对应占空比的数字脉冲序列,例如通过比较器将参考信号与载波信号(如三角波)对比生成 PWM 波形[^2]。 ### PWM 的应用场景 1. **电机控制**:调节电机转速或扭矩,例如直流电机和无刷电机驱动。 2. **通信传输**:利用 PWM 的抗噪声特性,将模拟信号调制为高频脉冲进行远距离传输,接收端通过滤波还原信号3. **电源管理**:用于开关电源(如 DC-DC 转换器),通过调节占空比稳定输出电压。 4. **舵机控制**:舵机角度PWM 信号的脉冲宽度决定,例如输入周期为 20ms(50Hz)、高电平宽度为 0.5ms~2.5ms 的 PWM 信号可控制 180° 舵机的角度[^3]。 ### 示例:舵机控制信号 若需将舵机旋转至 90°,需生成高电平宽度为 1.5ms 的 PWM 信号: $$T = 20\,\text{ms}, \quad T_{on} = 1.5\,\text{ms}, \quad D = \frac{1.5}{20} = 7.5\%$$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值