LED调光之 PWM调光和CCR模拟调光的区别

PWM调光和CCR模拟调光的区别

编者:Romeo 

一:什么是PWM调光

1.1 PWM调光概念

PWM (Pulse Width Modulation)调光也称为脉宽调制调光,主要是通过在一个周期内通过控制占空比的方式来实现调光的效果。其不止应用于LED照明领域,也广泛应用于电机、阀门、温度等工业化的应用中。不过在这里我们只谈其在LED照明技术领域的应用。

1.2 PWM调光概述

先来理解三个名词: 1)周期 2)PWM频率 3) 占空比
周期(T):一个完整的高低电平的信号周期。 单位:秒/s。
PWM频率(f):f=1/T 单位:Hz
占空比(D):PW/T*100%
通俗的来理解就是在一个周期内通过反复的开关灯来实现调光的效果。且因为要做到不可视化的开关来进行调光,故这个PWM频率普遍应在200Hz以上。
例如:
在这里插入图片描述

当PWM频率为40Hz时,对应的一个周期就是25ms.
40Hz*T=1 即T为0.025s,即为25ms

而要想做到调光的效果,及可通过控制在一个周期内高电平(亮灯)的持续时间来实现。
例如&

### STM32F103 实现 PWM 调光 PWM(Pulse Width Modulation,脉宽调制)是一种常见的技术,用于通过改变信号的占空比来控制设备的工作状态。对于LED灯而言,可以通过调整PWM信号的占空比来实现亮度调节。 #### 使用 STM32F103 进行 PWM 输出的关键步骤 STM32 的定时器模块支持多种功能,其中包括生成 PWM 波形的功能。以下是基于 STM32F103 的 PWM 配置流程: 1. **初始化 GPIO 口** 将要使用的GPIO口配置为复用推挽输出模式,以便能够驱动外设(如TIMx_CHx)。这一步通常涉及设置 `GPIO_Mode_AF_PP` 合适的上下拉电阻[^2]。 2. **配置 TIM 定时器** - 设置预分频系数(Prescaler),决定计数频率。 - 设定自动重装载寄存器(ARR),定义周期长度。 - 初始化捕获/比较寄存器(CCR),设定初始占空比。 对于 STM32F103 来说,可以选择不同的定时器(如 TIM2, TIM3 等)作为 PWM 信号源。 3. **选择 PWM 工作模式** 根据需求选择具体的 PWM 模式。例如,在模式1下,当计数值小于 CCR 值时,通道会保持高电平;而在模式2中,则相反[^3]。 4. **启动定时器并使能中断(可选)** 启动相应的定时器实例,并开启其更新事件或捕获比较匹配中断服务程序(如果需要动态调整占空比的话)。 下面是一个简单的示例代码片段展示如何利用 HAL 库在 STM32 上创建基本的 PWM 功能: ```c #include "stm32f1xx_hal.h" void MX_TIM2_Init(void){ __HAL_RCC_TIM2_CLK_ENABLE(); // Enable clock for TIM2 TIM_HandleTypeDef htim; htim.Instance = TIM2; htim.Init.Prescaler = 83; // Set prescaler value (SystemCoreClock / Prescaler - 1) htim.Init.CounterMode = TIM_COUNTERMODE_UP; htim.Init.Period = 999; // Set period to get a frequency of approximately 1kHz. htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; if(HAL_TIM_PWM_Init(&htim) != HAL_OK){ Error_Handler(); } TIM_OC_InitTypeDef sConfigOC; sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 500; // Initial duty cycle is set at 50% sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_PWM_ConfigChannel(&htim,&sConfigOC,TIM_CHANNEL_1); } int main(){ HAL_Init(); MX_GPIO_Init(); // Initialize GPIO pins as required by your application MX_TIM2_Init(); // Call the timer initialization function defined above. HAL_TIM_PWM_Start(&htim,TIM_CHANNEL_1); while(1){}; } ``` 此代码展示了如何使用 TIM2 生成大约 1 kHz 的 PWM 波形,并将其分配给某个特定引脚以供外部硬件连接使用。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值