PWM调光方法在LED亮度调节中的应用

LED 是一种固态电光源, 是一种半导体照明器件,其电学特性具有很强的离散性。它具有体积小、机械强度大、功耗低、寿命长, 便于调节控制及无污染等特征,有极大发展前景的新型光源产品。LED 调光方法的实现分为两种: 模拟调光和数字调光, 其中模拟调光是通过改变LED 回路中电流大小达到调光; 数字调光又称PWM 调光, 通过PWM 波开启和关闭LED 来改变正向电流的导通时间以达到亮度调节的效果。模拟调光通过改变LED 回路中的电流来调节LED 的亮度, 缺点是在可调节的电流范围内, 可调档位受到限制;PWM 波调光可通过改变高低电平的占空比来任意改变LED 的开启时间, 从而使亮度调节的档位增多。本文拟用两种方法共同作用, 以达到调节LED 亮度的效果。
  1 LED 调光方法
  模拟调光是通过改变LED 回路中电流大小达到调光, 电源电压不变, 通过改变R 的电阻值来改变回路中的电流, 从而达到改变LED 亮度的效果。很多其他模拟调光都是采用这种方法的延伸, 其优点是电流可连续, 但可调节电流的范围往往受到硬件的限制, 调节档位不多, 对于要求亮度感应敏感的高精度采光设备, 这种方法不理想。
  数字调光又称PWM 调光, 通过PWM 波开启和关闭LED 来改变正向电流的导通时间, 以达到亮度调节的效果。该方法基于人眼对亮度闪烁不够敏感的特性,使负载LED 时亮时暗。如果亮暗的频率超过100 Hz , 人眼看到的就是平均亮度, 而不是LED 在闪烁。PWM 通过调节亮和暗的时间比例实现调节亮度, 在一个PWM 周期内, 因为人眼对大于100 Hz 内的光闪烁, 感知的亮度是一个累积过程, 即亮的时间在整个周期中所占得比例越大, 人眼感觉越亮。但是对于一些高频采样的设备, 如高频采样摄像头, 采样时有可能恰好采到LED 暗时的图像。因此本文将模拟和数字相结合, 设计了LED 的驱动电路。
  2 采用电感的PWM 调节方法
  2.1 驱动电路
  电路中, 当电感上通有电流时, 电感会产生磁场, 即部分电流转换成磁能的方式“ 存储” 在电感中; 当不再向电感上通电流时, 电感会将磁能通过电流的方式在回路中释放出来。这也是电感上电流不能突变的原因, 基于电感的这种“ 充放电” 原理, 可以将它用来平均PWM 波调光中产生的不连续电流。式(1) 、式(2) 分别是LR 电路的充电和放电过程及电流与时间的关系。

其中,If是最终稳定电流,I0是放电初始电流,τ (τ=L/R,L 是电感值,R 是回路电阻) 是LR 电路的时间常数。
  图1 所示为驱动电路, 电感值的选择以及PWM 波的频率选择在此驱动电路中相当重要。选择C8051330 芯片作为PWM 波的输出, 采用定时器翻转控制高低电平的时间,从而控制PWM 波的占空比。

图1 驱动电路
要保证PWM 周期小于电感的τ 时间, 因为若PWM 的周期大于τ, 则极有可能出现在PWM 的占空比变化的情况下, 电路中电流都能达到电感的饱和直流电流, 影响了对LED 电流调节。当C8051330 的时钟频率是25 MHz ,PWM 的周期的选择对电流改变档位的影响很大。若周期越大, 则PWM 占空比的档位越多, 反之越少。拟用256 个档位的占空比, 因此PWM 波的频率应选择在100kHz 以下,即周期在10 μs 以上,直流电感为10Ω, 此时电感值应选择大于0.1 mH.图2 分别是PWM 频率为100kHz , 占空比为90%, 电感为0.1 mH、1 mH 和40 mH 时电路电流值的模拟结果。

(a)电感值为0.1mH 时电流随时间关系

b)电感值为1mH 时电流随时间关系

(c)电感值为40mH 时电流随时间关系

(d)图c 曲线局部放大图
  图2 不同电感值下电流随时间的变化。
  通过模拟可初步选择40 mH 的电感作为驱动电路所用, 图3 是用示波器采到的电压波形图, 此电压是电路中串联了一个20 Ω 的电阻上的电压, 稳定后电压为340 mV, 即电路中电流为17 mA.因为实际电路中电流有损耗, 所以实际电流值比模拟电流值偏小, 但整个电流的变化趋势与模拟基本一致。

图3 电感值40mH 电路中串联电阻的电压变化
  2.2 电流与PWM 占空比的关系
  图4 所示为LED 驱动电路充电以及放电曲线图,Imax是电路在直流情况下的最大电流。设在PWM 占空比为m 时电路中的电流值在充电曲线上的t1时刻的电流值附近波动, 此时应该满足以下条件:t 点的充电曲线斜率为k1,a 点处放电曲线斜率为k2, 应有k1mT=|k2 |(1-m)T,驱动电路中的电流因此维持在一个恒定值附近微小波动。

分析可知, 当启动驱动电路后, 经过若干个充放电周期电流达到一个相对稳定的值, 之后电流在这个稳定值附近波动。如图5 所示, 对每个周期而言, 充电时电流曲线的斜率在不断下降; 放电时电流曲线的斜率绝对值在不断增加; 满足图4 的条件时, 电流相对稳定。从而得出在LR 电路时间常数τ 一定时, 电感电流随PWM 占空比的关系为:

其中m 是PWM 占空比。
  图5 是电感电流随PWM 占空比变化的实验结果曲线, 该曲线是在电感值为40 mH 时, 电路中串联了一个22 Ω 电阻的情况下测得的。分析理论公式和实验结果,可发现在PWM 占空比为36%~86%区间, 电感上电流值随PWM 波占空比线性变化, 变化趋势与理论推导一致。
  对于高占空比的区间段, 由于充电曲线斜率已经趋近不变, 此时电流值也趋于最大值, 而在低区间段, 由于充电时间较短, 电路中损耗较大, 电感上电流值也趋近于零。

2.3 PWM 占空比调节方式
  采用电脑通过RS-485 在线控制PWM 占空比的变化, 根据需要在256 个档位中进行选择, 每次用电脑向RS-485 发送两个字节的十六进制命令, 从而改变C8051产生的占空比, 达到改变LED 亮度的目的。
  RS-485 接口电路的主要功能是: 将来自微处理器的发送信号TX 通过“ 发送器” 转换成通信网络中的差分信号, 也可以将通信网络中的差分信号通过“ 接收器”转换成被微处理器接收的RX 信号。任一时刻,RS-485收发器只能工作在“ 接收” 或“ 发送” 两种模式之一。因此, 采用了图6 所示电路, 由微处理器输出的R/D 信号直接控制SN75LBC184 芯片的发送器/接收器使能:R/D信号为“1 ” , 则SN75LBC184 芯片的发送器有效, 接收器禁止, 此时微处理器可以向SN75LBC184 总线发送数据字节;R/D 信号为“0 ” 则SN75LBC184 芯片的发送器禁止, 接收器有效,此时微处理器可以处理来自RS-485总线的数据字节。此电路中, 任意时刻SN75LBC184 芯片中的“接收器”和“发送器”只能够有一个处于工作状态。

不论从模拟还是实验角度来看, 在PWM 调光驱动电路中加入电感, 可成功将电路中大范围变化的电流“ 平均” , 使其稳定在一个可通过理论计算得出的值附近。本文综合了模拟调光和数字调光的共同优点, 且可以利用RS-485 , 通过PWM 波与驱动电路中LED 上电流的函数关系, 改变PWM 波的占空比, 即可让LED 有着理想的电流值, 并用计算机实时、细致地改变LED 的亮度。

(本文转自电子工程世界:http://www.eeworld.com.cn/LED/2011/1209/article_5921_1.html)
(本文转自电子工程世界:http://www.eeworld.com.cn/LED/2011/1209/article_5921_2.html)

 

1、PWM是脉冲宽度调制信号,注意其中的“宽度”,就是脉冲的高电平的时间。PWM信号调节LED亮度时,信号频率是不变的,改变的是脉冲的高电平的时间,即LED的导通时间。这种信号调节亮度相当于调节LED的平均电流,所以电流会变化。
2、从LED的V-I特性可知,其曲线是非线性的,0.1V的电压可造成100~200mA的If的变化,不易控制;另外,LED具有负温度系数特性,所以,一般将LED说成是电流控制型器件。至于你将LED串接在电源模块上,当输出电压恒定时,是恒压源驱动LED吧,这样调节LED亮度时,需要对输出电压进行分压,以降低LED的压降才能改变其亮度,恒压源的电流是有一个最大输出值的,不能调节的,不知你用什么方法调节其输出电流的?
3、用MCU比较方便,成本是稍高,也可以用模拟电子线路产生相应的PWM信号。
4、现在用得多的有CV/CC开关电源、还有部分非隔离的驱动电路...我自己就是做这个电路设计的哦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redhat rpmforge epel 安装源配置

参考阅读 epel 直接安装 RPMforge for CentOS 6 The default RPMforge repository does not replace any CentOS base packages. In the past it used to, but those packages are now in a separate repository (rpmforge-extras) which is disabled by default. You can fi…

知方可补不足~SQL2005使用ROW_NUMBER() OVER()进行数据分页

回到目录 数据分页是这个经常说的东西,无论在WEBForm还是WinForm中它都会被单独拿出来,或者是公用组件,或者是公用类库,反正对于数据分页这个东西,总是我们关注的一个话题,但事实上,数据分页归…

main函数的参数

main函数可以带参数,这个参数可以认为是 main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv)。C语言还规定argc(第一个形参)必须…

leetcood学习笔记-2-两数相加

题目描述: 方法一: # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val x # self.next Noneclass Solution:def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:cur…

AIX samba服务器配置

最简单的安装文件是。bff文件了,菜鸟的最爱。下载地址我找了很久,现在奉献出来:http://www.bullfreeware.com/一、下载samba-3.0.4.0.bff二、将文件放在AIX系统的临时安装目录下,如:/usr/samba三、 smit installp&…

Forward框架的逆袭:解析Forward+渲染

转载请注明出处为KlayGE游戏引擎,本文地址为http://www.klayge.org/2012/04/21/forward%e6%a1%86%e6%9e%b6%e7%9a%84%e9%80%86%e8%a2%ad%ef%bc%9a%e8%a7%a3%e6%9e%90forward%e6%b8%b2%e6%9f%93/ AMD在7900系列显卡发布的时候同时推出了Leo demo, 并说明它…

atoi()函数:将字符串转换成整型数

C语言有atoi、atol、atof等库函数,可分别把ASCII编码的字符串转化为int、long、float类型的数字。这里讲述atoi()函数的内容,另外两个类似。 函数原型 int atoi(const char* nptr); 函数功能 将字符串转换成整型数。 补充说明 atoi()函数会检查nptr所指向…

Java NIO学习系列三:Selector

前面的两篇文章中总结了Java NIO中的两大基础组件Buffer和Channel的相关知识点,在NIO中都是通过Channel和Buffer的协作来读写数据的,在这个基础上通过selector来协调多个channel以同时读写数据,本文我们就来学习一下selector。 Java NIO中引入…

android中的BitMap(二)从网络和资源文件中获得一个BitMap

//取得网络上图片资源的路径 String urlstring"http://img.wallba.com/Public/Upload/Image/qichebizi/ asidunmading7/134/20113151413962.jpg"; try { //建立网络连接 URL imageURlnew URL(urlstring); URLConnection conimageURl.openConnection(); con.co…

Java JTable3

预览: 代码 : /*** */ package com.han;import java.awt.Color; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; imp…

ov7725摄像头调试经验-寄存器配置

之前调过一款摄像头,是MT9V034, 最近在调的是OV7725摄像头,感觉OV7725摄像头比MT9V034要难,特别是寄存器配置,要想玩转一款摄像头,必须要熟悉它的寄存器配置,而且要亲自去调试,然后才…

关于ASCII字符的那些事儿

1、单字符一般用单引号加一个字符表示,比如字符1表示为‘1’,而数字1直接表示为1; char ch 1 ;int num 1;2、计算机用数字来存储字符,比如字符1,在计算机里面为49(十进制);而数字…

SQL Server Transactional Replication 中的 CommitBatchSize 和 CommitBatchThreshold 属性

最近遇到一个在SQL Server transactional replication 里关于CommitBatchSize 和CommitBatchThreshold设置的问题,BOL里面的解释很含糊:CommitBatchSize “Is the number of transactions to be issued to the Subscriber before a COMMIT statement is …

JqueryMobile学习之二---对话框

对话框 通过在链接中添加data-rel”dialog”的属性&#xff0c;可以使链接页面的显示方式变为对话框。给显示的对话框加入切换的效果也是一个不错的选择 例如我们将about的链接变成一个对话框并加入相应的切换效果。代码如下 <p><a href"#about" data-rel&q…

“leave the world behind”十一快乐出行

这个十一你打算怎么过&#xff1f;每天睡到自然醒&#xff0c;然后闷在家里埋头上网&#xff1f;选择晴朗好天气出去逛街&#xff0c;四处淘宝贝&#xff0c;淘美食&#xff1f;还是选择一个好的路线出去玩一周&#xff1f;其实行无论宅着还是选择出行&#xff0c;一定要让自己…

my_atio()代码出错原因,完全代码

1、//不明白这么简单的代码为什么会出错#includeint my_atoi(char *str);int main(void){char a[]" 12345";int b0;b my_atoi(a);printf("%d", b);getchar();return 0;}int my_atoi(char *str){char* p str;//char *p; p str;int inter_symbol 1;int …

分享一个文件上传工具类

文件上传状态枚举类&#xff1a; View Code 1 package com.hoo.enums;2 3 4 5 /**6 7 * <b>function:</b> 文件上传状态8 9 * package com.hoo.enums 10 11 * fileName UploadState.java 12 13 * createDate 2010-10-11 下午1…

静态库和动态库的区别

库是写好的&#xff0c;现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说&#xff0c;库是一种可执行代码的二进制形式&#xff0c;可…

257. Binary Tree Paths

1、问题描述 2、代码&#xff08;非本人所写&#xff0c;十分精彩的C代码&#xff09; int pathsNum(struct TreeNode* root); void Traverse(struct TreeNode* root, char** array, char* spre, int* pindex); char* stringAdd(char* s, int val);char** binaryTreePaths(stru…

项目中获取系统的用例的基本步骤

1、绘制关联图&#xff0c;用于定义系统与系统外部实体间的边界和接口的简单模型&#xff1b; 2、创建开发原型&#xff0c;当开发人员或用户不能明确某些需求时&#xff0c;开发一个系统原型&#xff0c;这样使得许多概念和可能发生的事更为直观明了&#xff1b; 3、分析可行性…