在本教程中,我将向您展示如何在LPC1768 MCU中配置和使用PWM。PWM是控制通过引脚输送的功率量的常用技术之一。PWM技术允许您控制LED的亮度,电机的速度,伺服电机的位置等。使用此LPC1768 PWM教程,您可以实现简单的LED亮度控制应用。
重要的提示:我已经在上一个教程中提到过这个,但我会在每个LPC1768教程中重复它。伟德老虎机手机版从官方NXP网站下载LPC1768 MCU的数据表和用户手册。我无法详细解释/讨论每个主题。您必须在这些文件中查找讨论主题并收集其他信息。
介绍
PWM对于脉冲宽度调制很短。这是一种最简单的生产方式使用数字系统的模拟值。脉冲的宽度是在一段时间内保持脉冲保持持续时间。因此,它被称为脉冲宽度调制。
PWM周期的时期是脉冲高的持续时间和脉冲低的持续时间。这通常由t表示在和T离开。所以,PWM = T的时期在+ T.离开。
PWM信号的另一个重要参数是其占空比。占空比是脉冲高到PWM信号的总周期的持续时间的比率。
占空比= t在/(T.在+ T.离开的)
占空比也可以表示为百分比。
占空比%= t在* 100 /(t在+ T.离开的)
当脉冲的接通时间和关闭时间相等时,占空比为50%并且脉冲的形状是完美的方波。
一个重要的分类PWM信号是:
- 单刃PWM.
- 双刃PWM.
在单边PWM中,脉冲可以在周期结束时的时间段内。如果脉冲位于时段的开头,则它被称为左对齐的PWM或后缘PWM。如果脉冲在周期结束时,则称为右对齐的PWM或前缘PWM。
来到双边缘PWM,可以调制两个边缘,因此,脉冲放置在周期的任何地方。双边PWM通常用于多相电机控制应用。
PWM的重要应用之一是电力传递。PWM的占空比确定PWM信号的平均功率,并且使用以下公式计算。
V.Avg.=占空比* vH
其中V.H是PWM信号的最大电压电平。
LPC1768中的PWM
LPC1768 MCU中的PWM外设类似于定时器外围设备的PWM外设,因为它具有定时器计数器,预分频器匹配寄存器及其功能与LPC1768定时器教程中所讨论的功能完全相同。
有6个PWM输出称为PWM1.1,PWM1.2,... PWM1.6。使用这六个PWM通道,您可以生成6个单边缘PWM信号或3个双刃PWM信号。
共有七个匹配寄存器。匹配寄存器0即PWM1MR0用于设置PWM循环速率,而剩余的匹配寄存器I.E.PWM1MR1-PWM1MR6对应于相应的PWM输出通道。PWM1.1对应于PWM1MR1,PWM1.2对应于PWM1MR2等。
LPC1768 PWM引脚
下表显示了LPC1768 MCU中与PWM相关联的引脚。
PWM1.1. |
P1.18 / P2.0. |
PWM1.2 | P1.20 / P2.1 / P3.25 |
PWM1.3 |
P1.21 / P2.2 / P3.26 |
PWM1.4 | P1.23 / P2.3. |
PWM1.5 |
P1.24 / P2.4 |
PWM1.6 | P1.26 / P2.5 |
与LPC1768 PWM相关联的寄存器
在LPC1768中有21个与PWM相关的寄存器。如果您查看PWM寄存器的列表,您将在定时器外设中找到大量类似的名称。让我们现在看看PWM块的一些重要寄存器。
PWM1TCR - PWM定时器控制寄存器:用于控制PWM定时器计数器的操作。
位0. |
柜台使能 | 启用1时,启用PWM定时器计数器和预分析计数器。 |
第1位 |
计数器重置 | 当1时,PWM定时器计数器和预调用计数器在PCLK的下一个正边缘上重置。 |
第3位 | PWM使能 | 当1时,启用PWM模式。 |
PWM1PR - 预刻度寄存器:它用于控制PWM输出的分辨率。PCLK的每个PR + 1周期的TC增量。
PWM1MR0 - PWM1MR6 - 匹配寄存器:如上所述,这些匹配寄存器包含脉冲宽度的值(PWM1TC滴答声)。
PWM1MCR - PWM匹配控制寄存器:用于控制匹配寄存器之一与TC匹配时要执行的操作。每个匹配寄存器都有3位控制。因此,PWM1MCR寄存器中总共21位用于控制所有七匹匹配寄存器的操作。
让我们看看PWM1MR0的一组比特,并且可以基于该寄存器来理解所有其他寄存器。
位0. |
pwmmr0i. | 如果该位设置为1,则当PWMMR0与PWMTC匹配时会产生中断。 |
第1位 | pwmmr0r. | 如果该位设置为1,则当PWMMR0与PWMTC匹配时,将重置PWMTC。 |
第2位 |
pwmmr0s. | 如果该位设置为1,则停止PWMTC和PWMPC,当PWMMR0与PWMTC匹配时,PWMTC和PWMPC将被设置为0。 |
类似地,PWMMR1的比特[5:3],PWMMR2的比特[8:6]等
PWMLER - PWM锁存器启用寄存器:用于控制PWM匹配寄存器的更新。当值写入匹配寄存器时,它不会立即播放。只有当设置PWMLER寄存器中的相应的“锁存器”位时,匹配寄存器中的值将是有效的。
PWMLER的位0用于使PWM匹配0锁存,PWMLER的位1用于使PWM匹配1锁存器等于匹配寄存器6的位6。
PWM1PCR - PWM控制寄存器:用于启用PWM通道并选择PWM等的类型。单个边缘PWM或双边PWM。
位2称为PWMMEEL2,当该比特0时,PWM2输出是单边缘。当该位为1时,PWM2输出是双刃。类似地,PWM3的比特3,PWM4的第4位,直到PWM6为位6。
PWM1PCR中的位9称为PWMENA1,当此位为1时,启用PWM1输出,否则禁用。类似地,对于PWM2输出的比特10,用于PWM3输出的比特11等于PWM6输出的位14。
初始化PWM块
如果您观察PWM的寄存器,则可以找到具有计时器的大量相似之处。初始化也非常相似。此外,必须完成一些PWM相关初始化,如PWM引脚选择,启用PWM通道,选择PWM等类型等。
在此之前,让我们与PWM PR相关一些计算。
如果Pr是PWM预刻度值和PCLK是PWM外围时钟,然后可以使用以下公式计算PWM分辨率。
重新排列上述等式,我们可以获得PR的价值:
Pr =(PWMres.* PCLK) - 1
对于25 MHz和PWM的PCLKres.1毫秒,pr的价值是
Pr =(25 * 106.* 1 * 10-3) - 1 = 24999。
如果PWM.res.是1微秒,然后pr = 24。
例子
让我们使用上述PR值并为LED调光应用程序写一个程序。
#include
#define pwmprescale(25-1)
#define timprescale(25000-1)
void pwm_init(空白);
void pulsewidth_update(无符号int pulsewidth);
void delayms(无符号int毫秒);
void timer0_init(void);
int main(无效)
{
timer0_init();
pwm_init();
int count = 0;
而(1)
{
而(count <1000)
{
计数+ = 10;
pulsewidth_update(计数);
延迟(1);
}
而(计数> 0)
{
计数 - = 10;
pulsewidth_update(计数);
延迟(1);
}
}
返回0;
}
void pwm_init(void)
{
lpc_pincon-> pinsel3 | =(1 << 5);
LPC_PWM1-> PCR = 0x0;
lpc_pwm1-> pr = pwmprescale;
lpc_pwm1-> mr0 = 1000;
lpc_pwm1-> mr1 = 0;
lpc_pwm1-> mcr =(1 << 1);
lpc_pwm1-> ler =(1 << 1)|(1 << 0);
lpc_pwm1-> pcr =(1 << 9);
lpc_pwm1-> tcr =(1 << 1);
lpc_pwm1-> tcr =(1 << 0)|(1 << 3);
}
void pulsewidth_update(无符号int pulsewidth)
{
lpc_pwm1-> mr1 = pulsewidth;
lpc_pwm1-> ler =(1 << 1);
}
void delayms(无符号int毫秒)
{
LPC_TIM0-> TCR = 0x02;
lpc_tim0-> tcr = 0x01;
而(lpc_tim0-> tc
lpc_tim0-> tcr = 0x00;
}
void timer0_init(void)
{
lpc_tim0-> ctcr = 0x0;
lpc_tim0-> pr = timprescale;
LPC_TIM0-> TCR = 0x02;
}
结论
LPC1768 MCU中使用PWM的简单教程。使用此LPC1768 PWM教程,可以配置PWM块以为LED控制,电机控制等生成PWM信号。