如何在LPC1768中使用PWM?LPC1768 PWM教程

在本教程中,我将向您展示如何在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的占空比确定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分辨率。

LPC1768中的PWM图像1

重新排列上述等式,我们可以获得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信号。

发表评论

您的电子邮件地址不会被公开。必需的地方已做标记*

电子机器Favicon.
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu
map