专栏首页嵌入式程序猿屏幕背光的PWM控制

屏幕背光的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也可以采用中断,这里没有采用中断,都可以实现。在三个项目上都是采用的这个背光控制逻辑和代码。

本文分享自微信公众号 - 嵌入式程序猿(InterruptISR),作者:小猿

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 高通LCD的pwm背光驱动

    msm8953 lcd在快速亮灭的情况下背光概率性休眠不灭;测量高通pwm,发现正常的时候pwm的管脚LCM_BL_PWM为低电平,失败的时候为高电平;

    233333
  • FPGA | LVDS屏幕接口的应用

    大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢。...

    FPGA技术江湖
  • Windows on Device 项目实践 1 - PWM调光灯制作

    在前一篇文章《Wintel物联网平台-Windows IoT新手入门指南》中,我们讲解了Windows on Device硬件准备和软件开发环境的搭建,以及He...

    ShiJiong
  • 聊聊身边的嵌入式,靓丽的LED广告屏

    不知道你的记忆中是否还记得这种用多个显示器拼接起来的大屏幕。虽然整体看起来是一个比较大的画面,但中间的拼接线却让人感觉特别的不舒服。

    用户2366192
  • 国内手机正集体转向OLED屏幕,“LCD永不为奴”的时代要落幕了吗?

    近日,微博知名数码博主“数码闲聊站”爆料称:“除了部分清库存的换壳套娃机,今年国内各家中高端新机的屏幕以OLED为主了,即便上一代LCD这一代也会切到 OLED...

    镁客网
  • RoboMaster TT 无人机microPython编程.3

    在方法的后面有一些我们之前看见的方法,有Tof的传感器,三个RGB的灯,控制功能,已经led的控制和小屏幕的控制

    云深无际
  • 高通移植mipi LCD的过程LK代码

    aboot_init()来到target_display_init(); 这就是高通原生lk LCD 兼容的关键所在。至于你需要兼容多少LCD 就在while...

    233333
  • 打造机器人:为遥控小车加一个树莓派

    2. 你已经对树莓派已有了相当的了解,并已 SD卡上烧制了 Raspbian/Wheezy系统

    博文视点Broadview
  • 【STM32H7教程】第51章 STM32H7的LTDC应用之LCD汉字显示和2D图形显示

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

    armfly

扫码关注云+社区

领取腾讯云代金券