屏幕背光的PWM控制
1. 摘要
本文档主要用来介绍如何通过PWM控制屏幕背光,通过PWM占空比达到控制背光的目的
2. 准备工作
可正常运行的屏幕显示程序
屏幕背光调节范围20-100%,20k PWM频率
3. 实施
不管是采用那种GUI框架开发,我们一般都需要对屏幕背光做控制,背光的控制是通用的,例如我们在emwin工程和TouchGFX工程下,都是采用同一套背光可控制逻辑和代码,背光的最低亮度根据自己的实际应用做限制,例如我的工程是25%-100%背光可调节。以STM32H743控制800*480的显示屏为例,使用TIM2的一个通道产生PWM来控制屏幕背光。要清除TIM作为PWM运行的控制和几个计算以及寄存器的配置。
4. 代码实现
首先我们需要对外有一个初始化接口,有一个改变占空比的接口,
void BSP_BL_Init(void)
{
/* Compute the prescaler value to have TIM1 counter clock equal to 20000000 Hz */
uhPrescalerValue = (uint32_t)(SystemCoreClock / (2*20000000)) - 1;
TimHandle.Instance = TIMx;
TimHandle.Init.Prescaler = uhPrescalerValue;
TimHandle.Init.Period = PERIOD_VALUE;
TimHandle.Init.ClockDivision = 0;
TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
TimHandle.Init.RepetitionCounter = 0;
if (HAL_TIM_PWM_Init(&TimHandle) != HAL_OK)
{
/* Initialization Error */
Error_Handler();
}
/*##-2- Configure the PWM channels #########################################*/
/* Common configuration for all channels */
sConfig.OCMode = TIM_OCMODE_PWM1;
sConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfig.OCFastMode = TIM_OCFAST_DISABLE;
sConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
sConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
/* Set the pulse value for channel 1 */
sConfig.Pulse = 0;//1000-1;//10;//PULSE1_VALUE;
if (HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_1) != HAL_OK)
{
/* Configuration Error */
Error_Handler();
}
if (HAL_TIM_PWM_Start(&TimHandle, TIM_CHANNEL_1) != HAL_OK)
{
/* PWM Generation Error */
Error_Handler();
}
}
初始化TIM外设的底层驱动,配置时钟,通道,周期等。并开启PWM
对外的占空比改变接口主要是用来刷新PWM的占空比,达到调节背光的目的,
void BSP_vLcdBlCtrl(uint32_t PulseValue)
{
if((PulseValue >= 10) && (PulseValue <= 1000))/**校验设置范围,**/
{
sConfig.Pulse = PulseValue;
}
else
{
sConfig.Pulse = 500;/**50%**/
}
if (HAL_TIM_PWM_ConfigChannel(&TimHandle, &sConfig, TIM_CHANNEL_1) != HAL_OK)/**配置通道**/
{
/* Configuration Error */
Error_Handler();
}
HAL_TIM_PWM_Stop(&TimHandle, TIM_CHANNEL_1);
if (HAL_TIM_PWM_Start(&TimHandle, TIM_CHANNEL_1) != HAL_OK)/**开启PWM***/
{
/* PWM Generation Error */
Error_Handler();
}
}
一般触摸屏我们固定周期没有触摸就会将背光调低,这时候屏幕会变暗,一旦有触摸,重新将背光调亮,
PWM也可以采用中断,这里没有采用中断,都可以实现。在三个项目上都是采用的这个背光控制逻辑和代码。
屏幕背光的PWM控制相关推荐
- android关闭屏幕背光,Android 的背光控制
echo 23 > /sys/devices/platform/atmel_lcdfb.0/backlight/backlight/brightness http://android.git.k ...
- Android应用开发(21)屏幕背光控制
Android应用开发学习笔记--目录索引 最近各手机厂商都在宣传万级调光,宣传数字越来越大,但是到底背光调节平滑度体验如何呢? 如最近realme 11 pro+ (MTK平台天玑7050),宣传2 ...
- 松下伺服电机pwm控制连线_从零打造树莓派家庭监控 (一): 伺服电机控制
本文首发自我的博客 MikeTech 现在很多家庭喜欢购买一个摄像头来监控家里的情况,但是往往却无法了解购买第三方摄像头的安全性,摄像头泄露的新闻也每过一段时间就会出现在人们的视野当中.如果购买的摄像 ...
- linux PWM驱动屏幕亮度及pwm子系统框架(Linux驱动开发篇)
1.对象 imx6ull单片机,控制其下面的pwm3的外设.关于对象的详细介绍看裸机pwm控制屏幕亮度 在dtsi中的位置 /soc/aips1/pwm3 pwm3: pwm@02088000 { c ...
- 树莓派GPIO和PWM控制教程
树莓派GPIO和PWM 1. 目的 在汽车电子开发中,CAN通讯是很难避开的一个技术点,当前CAN已经形成了行业内较为稳定的开发及相关测试验证方法,其中一种较为主流的就是使用CANoe和开发相应的CA ...
- MCGS用脚本设置屏幕背光和声音
MCGS用脚本设置屏幕背光和声音 用MCGS软件控制TPC的声音.背光及IP地址设置,方便在用户工程中对系统的控制. 运行环境为WINCE系统,测试型号:1061Ti和1062K. (1)打开 设备窗 ...
- AMT49702:双DMOS全桥式电动机驱动器,为低压步进电机和双/单高电流直流电机的PWM控制而设计
汽车级双极步进电机驱动器或双直流电机驱动器IC AMT49702,新产品专为低压步进电机和双/单高电流直流电机的脉冲宽度调制(PWM)控制而设计.AMT49702的输出电流可达每通道1A,工作电压为3 ...
- python舵机控制程序_树莓派PWM控制舵机的两种方式
PWM控制舵机简介 通常情况下,伺服电机(舵机)是由一个标准的直流系统和一个内部反馈控制装置(一个减速齿轮和电位计)来组成的.伺服电机(舵机)的主要作用是将齿轮轴旋转到一个预定义的方向上.伺服电机(舵 ...
- 基于FPGA的直流电机PWM控制+毕业论文
基于FPGA的直流电机PWM控制+开题+毕业论文+源码(VHDL or verilog) 基于FPGA的直流电机PWM控制电路主要由四部分组成:控制命令输入模块.控制命令处理模块.控制命令输出模块.电 ...
最新文章
- java 魔法王国,游历魔法王国
- win11怎么使用ie浏览器?(ie兼容模式)(win11还是支持不好啊)
- 在Winform中播放视频等【DotNet,C#】
- Linux下paste命令详解
- vue子组件改变父组件的值
- 谈一谈flex布局使用中碰到的一些问题
- 计算机考研保护一志愿,考研良心大学,保护一志愿的考研名校!
- WDM驱动程序入门(很详细)
- 30个ies光域网带图_15个让你脚下更细腻的经典控球训练
- python 解析模块脚本_Python HTMLParser模块解析html获取url实例
- JavaWeb:tomcat知识以及遇到的一些小问题
- 高级维修电工实训装置
- ISO7816协议中APDU指令解析
- 音乐播放器代码和网页播放器代码
- 神经网络参数优化算法,神经网络损失函数设计
- 一点点读懂regulator(四)
- java流重定向如何分类,Java 文件流與標准流之間的重定向
- 【愚公系列】2022年10月 .Net Core使用cpolar内网穿透功能实现钉钉回调事件的监听
- 2020年网络安全国赛解析(仅个人想法)
- 2009.6.29在淘宝网里订购了多普达P4550手机