一、什么是PWMPWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%. 二、PWM信号输出输出和作用1. 如果要实现PWM信号输出如何输出呢?1)可以直接通过芯片内部模块输出PWM信号,前提是这个I/O口要有集成的pwm控制器,只需要通过对应的寄存器即可,这种自带有PWM输出的功能模块在程序设计更简便,同时数据更精确。 2)但是如果IC内部没有PWM功能模块,或者要求不是很高的话可以利用I/O口设置一些参数来输出PWM信号,因为PWM 信号其实就是一高一低的一系列电平组合在一起。具体方法是给I/O加一个定时器,对于你要求输出的PWM信号频率与你的定时器一致,用定时器中断来计数,但是这种方法一般不采用,除非对于精度、频率等要求不是很高可以这样实现。 2. PWM信号应用PWM信号把模拟信号转化为数字电路所需要的编码,现在基本是采用数字电路,因此在很多场合都采用PWM信号。 我们经常见到的就是交流调光电路,也可以说是无级调速,高电平占多一点,也就是占空比大一点亮度就亮一点,占空比小一点亮度就没有那么亮,前提是PWM的频率要大于我们人眼识别频率,要不然会出现闪烁现象。 除了在调光电路应用,还有在直流斩波电路、蜂鸣器驱动、电机驱动、逆变电路、加湿机雾化量等都会有应用。 三、蜂鸣器蜂鸣器广泛用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 蜂鸣器分为压电式及电磁式的二大类:
有源蜂鸣器, 只要给它加上恒定的电压, 就能发声;无源蜂鸣器, 必须给它加上一定频率的方波或正弦波才能发声 有源蜂鸣器内部带震荡源,所以一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。 有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。 【优点】无源蜂鸣器的优点是:
应用:电风扇、收音机的声音按钮、任何模拟值都可以使用PWM进行编码 四、fs4412电路图本例采用fs4412开发板,pwm外接了一个蜂鸣器BUZZER,电路图如下:从上面电路图可知:
继续查找MOTOR_PWM:由上图可知,MOTOR_PWM连接的是PWM的XpwmTOUT0,和LCD一起复用引脚GPD0_0, 去datasheet继续查看GPD0_0说明,由上图可知,GPD0_0配置由寄存器的GPD0CON[3:0]位控制,要想作为PWM输出,要设置为TOUT_0即0x2。 同时也可以看到,该引脚还可以设置为外部中断信号[EXT_INT6]功能即0xF。 五、Exynos 4412 PWM概述Exynos 4412 SCP有五个32位脉冲宽度调制(PWM)定时器。这些定时器产生内部中断对于ARM子系统。此外,定时器0、1、2和3包括驱动外部I/O的PWM功能信号。定时器0中的PWM有一个可选的死区发生器功能,以支持大量的设备。定时器4是一个没有输出引脚的内部定时器。 定时器使用APB-PCLK作为源时钟。定时器0和1共享可编程8位预分频器为PCLK提供第一级分频。定时器2、3和4共享不同的8位预分频器。每个计时器都有它自己的专用时钟分频器,提供第二级时钟划分频(预分频器除以2、4、8或16)。 每个定时器都有它的32位递减计数器;定时器时钟驱动这个计数器。定时器计数缓冲寄存器(TCNTBn)加载递减计数器的初始值。如果递减计数器达到零,它将生成计时器中断请求,通知CPU定时器操作完成。如果定时器下降计数器达到零,相应TCNTBn的值自动重新加载到下一个循环开始。但是,如果定时器停止,例如,在定时器运行模式下,通过清除TCONn的定时器使能位,TCNTBn的值将不会重新加载到计数器中。 PWM功能使用TCMPBn寄存器的值。定时器控制逻辑改变输出电平下计数器值与定时器控制逻辑中比较寄存器的值相匹配。因此,比较寄存器决定PWM输出的开启时间或关闭时间。 每个定时器都是双缓冲结构,带有TCNTBn和TCMPBn寄存器,允许定时器参数在周期中更新。新值在当前计时器周期完成之前不会生效。 Exynos PWM定时器的特性1)5个32位定时器; 2)2个8位PCLK分频器提供一级预分,5个2级分频器用来预分外部时钟;3)可编程选择PWM独立通道。 4)4个独立的可编程的控制及支持校验的PWM通道。 5)静态配置:PWM停止; 6)动态配置:PWM启动; 7)支持自动重装模式及触发脉冲模式; 8)一个外部启动引脚。 9)两个PWM输出可带Dead-Zone 发生器。 10)中断发生器。 PWM内部模块图工作的步骤:
举例下面我们举个实例来看下,
我们可以通过设置TCNTBn、TCMPBn来控制占空比,而每个pwm周期后都可以重新设置新的值到TCNTBn、TCMPBn,我们通过精确的计算来设置TCNTBn、TCMPBn的值并通过设置dead zone我们可以设计出各种复杂的矩形波。 如下图所示:本例我们只需要产生规则的举行方波即可,所以我们只需要设置占空比为50%即可。 六、寄存器由第四章可知,我们使用PWM控制器的timer 0,对应的寄存器组如下图所示: 1、TFCG0定时器配置寄存器0(TFCG0) ,主要用于预分频设置。 我们是timer 0,所以只需要设置该寄存器的bite【7:0】即可,最终的输出频率和value的公式如下: 参考24.3.1节: 其中方波的频率必须在音频范围内,也就是20Hz到20KHZ之间, 但是20Hz到20KHZ的频率送给蜂鸣器后, 只有某一点的频率是最响的, 这个频率称为蜂鸣器的谐振频率, 离它越远, 蜂鸣器发出的声音越轻。 所以Prescaler 0 value值应该设置为255,divider value 应该是1/16,值由TCFG1设置。 PWM.TCFG0 = PWM.TCFG0 & (~(0xff))|0xf9; 2、TCFG1定时器配置寄存器1(TCFG1) 主要用于PWM定时器的divider value设置。 由上一节分析,秩序设置TCFG1 bite【3:0】为0100即0x2即可。
3、TCONtimer控制寄存器TCON
针对不同操作,我们可以设置不同的值:
PWM.TCON = PWM.TCON & (~(0xff)) | (1 << 0) | (1 << 1) ;
PWM.TCON = PWM.TCON & (~(1 << 0)) ; 4、TCNTB0定时器计数缓冲寄存器(TCNTB0)根据测算,设置为100
5、TCMPB0定时器比较缓冲寄存器(TCMPB0 )设置为50,占空比为50% PWM.TCMPB0 = 50; 七、代码 |
|
来自: 西北望msm66g9f > 《电机控制》