PAGE1
PAGE1
LPC1768PWM脉宽调制
介绍
脉宽调制(PWM,PulseWidthModulation)是一种用于控制信号的常见技术,通过调节脉冲的宽度来控制输出信号的平均值。LPC1768单片机提供了多路PWM输出,可以用于各种控制应用,如电机控制、LED亮度调节、音频信号生成等。本节将详细介绍LPC1768的PWM功能及其在复杂娱乐设备中的应用。
LPC1768的PWM模块
LPC1768单片机的PWM模块是基于定时器/计数器(Timer/Counter)实现的。LPC1768有多个定时器/计数器,每个定时器/计数器可以配置为PWM输出。这些定时器/计数器包括:
Match寄存器:用于设置脉冲的宽度。
Capture寄存器:用于捕获外部信号。
PWM控制寄存器:用于配置PWM的模式和功能。
中断控制寄存器:用于配置中断。
PWM的基本原理
PWM的基本原理是通过改变脉冲的高电平时间(脉冲宽度)来控制信号的平均值。脉冲周期(周期时间)保持不变,而脉冲宽度可以在0到周期时间之间变化。脉冲宽度与脉冲周期的比值称为占空比(DutyCycle),占空比决定了PWM信号的平均值。
配置PWM
在LPC1768中,配置PWM需要以下几个步骤:
初始化定时器/计数器:设置定时器的时钟源和预分频值。
配置匹配寄存器:设置脉冲的宽度。
配置PWM控制寄存器:选择PWM模式和输出引脚。
启用PWM输出:启动定时器并使能PWM输出。
初始化定时器/计数器
LPC1768的定时器/计数器可以通过寄存器进行配置。以下是一个初始化定时器/计数器的示例代码:
#includeLPC17xx.h
//初始化定时器1
voidinit_PWM_Timer1(void){
//使能定时器1的电源
LPC_SC-PCONP|=(114);
//选择定时器1的时钟源
LPC_SC-PCLKSEL1=~(328);
LPC_SC-PCLKSEL1|=(128);//选择PCLK为定时器1的时钟源
//使能定时器1的时钟
LPC_SC-PCLKSEL1|=(114);
//设置预分频值
LPC_TIM1-PR=0;//预分频值为0,即不分频
//设置匹配寄存器
LPC_TIM1-MR0=10000;//设置脉冲周期为10000个时钟周期
LPC_TIM1-MR1=5000;//设置脉冲宽度为5000个时钟周期
//配置PWM模式
LPC_TIM1-MCR=(19)|(18);//MR0和MR1中断使能
//配置PWM输出引脚
LPC_PINCON-PINSEL0=~(34);//清除引脚选择
LPC_PINCON-PINSEL0|=(24);//选择P0.1作为PWM输出引脚
//启用PWM输出
LPC_TIM1-TCR=(10);//使能定时器
LPC_TIM1-TCR=(10)|(11);//重置定时器并启动
}
intmain(void){
init_PWM_Timer1();
while(1){
//主循环
}
}
配置匹配寄存器
匹配寄存器(MatchRegister)用于设置脉冲的宽度。通过设置不同的匹配寄存器值,可以实现不同占空比的PWM信号。以下是一个调整PWM占空比的示例代码:
//调整PWM占空比
voidset_PWM_DutyCycle(uint32_tdutyCycle){
LPC_TIM1-MR1=(LPC_TIM1-MR0*dutyCycle)/100;//设置脉冲宽度
}
intmain(void){
init_PWM_Timer1();
set_PWM_DutyCycle(50);//设置占空比为50%
while(1){
//主循环
}
}
配置PWM控制寄存器
PWM控制寄存器(PWMControlRegister)用于选择PWM模式和输出引脚。以下是一个配置PWM控制寄存器的示例代码:
//配置PWM模式
voidconfig_PWM_Mode(void){
LPC_PINCON-PI