在研发嵌入式产品时,往往会用到LCD(液晶屏)来显示图形界面,而液晶屏的显示亮度则需要背光系统去调节。

调光方法:

1.数字调光,又称波宽控制调光(Pulse Width Modulation,简称PWM): 通过PWM 波开启和关闭LED 来改变正向电流的导通时间以达到亮度调节的效果。

2.模拟调光 :通过改变LED 回路中电流大小以达到调光。

方法对比:

1.模拟调光:在可调节的电流范围内, 可调档位受到限制,并且较为复杂,

2.数字调光:可通过改变高低电平的占空比来任意改变LED 的开启时间, 从而使亮度调节的档位增多。

为了使用起来简单方便,节约成本,目前主流的背光亮度调节功能多采用PWM机制。

PWM机制

PWM是Pulse Width Modulation(脉冲宽度调制)的缩写,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,其本质是一种对模拟信号电平进行数字编码的方法。

在嵌入式设备中,PWM多用于控制马达、LED、振动器等模拟器件。

PWM调节背光亮度原理

一句话来说:就是将电源方波数位化,调节PWM方波的占空比,达到控制电流的目的,进而可调整背光亮度。

具体的说:比如LED背光闪烁1000次,其中500次开启和500次关闭,如果开启的时间停顿1秒,关闭的时间停顿0.5秒,这时的屏幕亮度就要比开启和关闭停顿时间一样的背光系统强。这样用户在调节屏幕亮度的时候,实际上亮度的明暗得益于LED背光闪烁的变化。

在实际的产品中,LED背光这种明暗时间的转变速度非常的快,采用PWM调光的普通大众显示器其工作频率一般在200Hz-1000Hz左右,而人眼在频率达到100Hz的时候就已经难以察觉明显的明暗变化了,因为人眼感知亮度的过程是积累的,在闪烁的速度足够快的时候,人眼看到的画面是“常亮”的。

Example:把PWM的一个周期分成10块

这10块时间里,只有1块的时间让LED导通,剩下9块的时间里LED截止。假设PWM信号的幅值是5V,那么在导通的1块时间里LED电压的确是5V的,但是在剩下9块时间里,它的电压却是0V。也就是说从一个周期整体看来,LED的平均电压只有5*0.1+0*0.9=0.5V。PWM信号频率很高的,我们无法通过肉眼来观察到每一个周期LED灯亮灭的变化过程,所以只好通过平均电压这样一种方式来决定这个LED的亮的程度了。

PWM优点

1、不会产生任何色谱偏移。因为LED始终工作在满幅度电流和0之司。

2、可以有极高的调光精确度。因为脉中波形完全可以控制到很高的精度,所以很容易实现万分之一的精度。

3、可以和数字控制技术相结合来进行控制。因为任何数字都可以很容易变换成为一个PWM信号。

4、即使在很大范围内调光,也不会发生闪烁现象。因为不会改变恒流源的工作条件(升压比或降压比),更不可能发生过热等问题。

PWM注意事项

1、PWM占空比控制不控制电流;调节之前亮度就定了,是100%,所以不要和电压和电流联系起来;PWM控制通过占空比,就是调整在一个特定的时间周期(如1ms)内,点亮一个百分比的时间,如1/2,1/4。

2、脉冲频率的选择因为LED是处于快速开关状态,假如工作频率很低,人眼就会感到闪烁。为了充分利用人眼的视觉残留现象,它的工作频率应当高于100Hz,最好为200HZ。

3、消除调光弓起的啸声; 虽然200HZ以上人眼无法察觉,可是一直到20kHz却都是人耳听觉的范围。这时候就有可能会听到丝丝的声音。解决这个问题有两种方去,一是把开关频率提高到20kHz以上,跳出人耳听觉的范围。但是频率过高也会弓起一些问题,因为各种寄生参数的影响,会使脉冲波形(前后沿)产生畸变。

Linux系统背光子系统PWM机制主要包括pwm和backlight两部分。

Linux内核配置PWM背光功能的具体流程

1.设备树配置

背光配置

backlight_peb: backlight {

compatible = "pwm-backlight";                                       //调用通用背光设备驱动

brightness-levels = < 0  4 8 16 32 64 128 255>;           //背光亮度调节等级

default-brightness-level = <5>;                                     //默认背光亮度等级

pwms = ;                                     //调用pwm3节点 并配置pwm参数  0是默认设备号  5000000为默认周期ns

};

pwm配置

&pwm3 {

compatible = "fsl,imx6ul-pwm";                                    //调用pwm控制器驱动

pinctrl-0 =

;                                       //配置soc引脚输出功能为pwm功能

};

2.驱动配置

配置编译以下驱动

/drivers/video/backlight/backlight.c               用户层背光节点驱动

/drivers/video/backlight/pwm_bl.c                 通用背光pwm设备驱动

/drivers/pwm/core.c                                       pwm核心层驱动

/drivers/pwm/pwm-xxx.c                                pwm控制器驱动

3.用户层调用

背光子系统文件位于/sys/class/backlight/XXX(背光设备名称)/中,该目录下的属性文件有:

actual_brightness          brightness         max_brightness       subsystem@

bl_power                       device@

power/                      uevent

其中,主要用到的是brightness:当前实际的亮度值(内核中记录的值)。

可以使用 "cat /sys/class/backlight/XXX/brightness"查看当前背光亮度。

也用 "echo  数字(背光亮度等级)  >>  /sys/class/backlight/XXX/brightness"设置背光亮度。

欢迎转载,欢迎指正,更欢迎点赞。转载请附原文链接。

linux pwm 调屏_嵌入式Linux系统基于PWM机制的液晶屏背光Backlight功能配置相关推荐

  1. 嵌入式linux python移植过程_嵌入式linux项目开发(一)——BOA移植

    嵌入式linux项目开发(一)--BOA移植 项目目标:使用BOA.CGIC.SQLite搭建嵌入式web服务器 一.嵌入式web服务器BOA简介 在嵌入式设备的管理与交互中,基于Web方式的应用成为 ...

  2. linux java usb 串口_嵌入式linux usb-ftdi串口读取问题

    我有一个运行嵌入式Linux的基于TI Cortex的Pengwyn板,我试图用来从USB-ftdi外设读取原始串行数据,因此我可以将其处理成数据包 . 为此,我编写了一个简单的程序(使用Qt)和te ...

  3. 华为鸿蒙智慧屏_华为鸿蒙系统到底什么样?荣耀智慧屏秀出答案

    8月10日下午,荣耀智慧屏正式发布.这是全球首款采用华为鸿蒙操作系统的终端产品,也是华为智慧屏战略的第一款产品. 荣耀智慧屏的发布,不仅是鸿蒙系统的应用,更不是那个55英寸的屏幕,而是华为技术实力的展 ...

  4. arm linux 识别新硬盘_嵌入式Linux系列第13篇:USB摄像头拍照

    1.引言 本篇介绍USB摄像头的使用,实现的功能是通过摄像头进行拍照,生成jpg格式图片. 2.环境介绍 2.1.硬件 1) NUC972开发板 2) USB摄像头 2.2.软件 1) Uboot继续 ...

  5. arm linux 识别新硬盘_嵌入式Linux 的NTFS移动硬盘支持

    本文大部分参考了 我的两个学生移植工作 大部分是重做一遍. 测试环境S3C6410开发板 内核 linux 2.6.28.6 编译器 arm-linux-gcc 4.4.1 一.内核配置 高版本的Li ...

  6. 尚观linux视频配套教程,尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备...

    尚观最新嵌入式Linux基础视频教程 98集嵌入式Linux巨制视频教程 新手必备 5.jpg (67.09 KB, 下载次数: 0) 2018-4-16 09:34 上传 1.jpg (44.17 ...

  7. 【嵌入式】MCU(HC32F460)+SPI接口LCD液晶屏ILI9341 移植emWin记录1----点亮LCD屏

    目录 一 SPI屏的接线 二 SPI屏驱动初始化 三 SPI屏点亮 四 附录 一 SPI屏的接线 SPI屏的特点在于接线简单,只需要四根SPI线以及几个GPIO口即可驱动工作,但是由于非并口的,所以当 ...

  8. 4. linux调用文件计算阶乘前5项和_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

  9. 嵌入式项目_嵌入式Linux项目分享_linux系统编程

    分享一个适合入门嵌入式linux系统编程的项目,其他项目见:牛客嵌入式项目 同时附上本人编写的两个牛客高级专栏: <100道安卓常见面试题全解析> <嵌入式 面经C++软件开发 面经 ...

最新文章

  1. Angular 7 版本
  2. 三种python序列类型
  3. c++ cstring 转换 char_LeetCode 709. 转换成小写字母
  4. PHP10段常用功能代码
  5. 挺水的一门课,发现全系都过了,就自己挂了,这是一种什么样的感觉呢?
  6. 基于javafx的五子棋_JavaFX中基于表达式的PathTransitions
  7. ActiveMQ 即时通讯服务 入門指南及淺析
  8. 导入已有项目到svn
  9. 百度编辑器ueditor 字符限制
  10. 无聊的python课程_5 个无聊 Python 程序,用 Python 整蛊你的朋友们吧
  11. SQL夯实基础(九)MySQL联接查询算法
  12. P2123皇后游戏+P1080国王游戏
  13. vue Emitter
  14. 12 个华丽的 UI 组件,为您提供设计灵感✨
  15. 相机平面与工作平面带夹角下的坐标换算
  16. LDO电路设计以及选型的几个重要参数
  17. 在微信开发者工具中,使用WeUI前端美化框架,微信小程序
  18. 解决必应biying搜索跳转到百度www.baidu.com搜索的解决方法
  19. OpenResty实现限流的几种方式
  20. java将古诗竖排_古诗词竖排格式

热门文章

  1. 手机测试软件 lg g5,LG G5评测:系统功能初体验
  2. ROS仿真笔记之——gazebo配置velodyne
  3. python日期工具datedays
  4. ios 倒数器_Clover旗下iOS应用Widgets全线更新:倒数器、新闻画报、全球天气
  5. 从Solidworks中导出的.wrl文件无法打开?
  6. “贫困县电商特产”大数据地图:一定有你青睐的特色产品
  7. Angular响应式开发中报错Property 'map' does not exist on type 'Observable'.引用rxjs也没用。
  8. SQL Server错误18456,window身份验证登录失败解决办法
  9. 入门金融数据分析-Task1-数据了解and熟悉赛题
  10. python小技巧5 调整图片像素输出更清晰