MTK平台pwm控制led的亮度

来源:互联网 发布:拉伸弹性模量实验数据 编辑:程序博客网 时间:2024/04/30 09:15
1. 查MTK的Android_Driver_allinoneV1.01.pdf资料,到mediatek\source\kernel\drivers\leds\leds.c 中通过查看static int led_set_pwm(int pwm_num, struct nled_setting* led)函数,根据
struct cust_mt65xx_led {
 char                 *name;
 enum mt65xx_led_mode  mode;
 int                   data;
};结构定义的 cust_led_list中
static struct cust_mt65xx_led cust_led_list[MT65XX_LED_TYPE_TOTAL] = {
 {"red",               MT65XX_LED_MODE_PWM, PWM1},
 {"green",             MT65XX_LED_MODE_PWM, PWM2},
 {"blue",              MT65XX_LED_MODE_PWM, PWM3},
 {"jogball-backlight", MT65XX_LED_MODE_NONE, -1},
 {"keyboard-backlight",MT65XX_LED_MODE_NONE, -1},
 {"button-backlight",  MT65XX_LED_MODE_PWM, PWM7},
 {"lcd-backlight",     MT65XX_LED_MODE_CUST, (int)Cust_SetBacklight},

};  来选择的botton backlight为pwm7等控制模式。


2.  修改mediatek\source\kernel\drivers\leds\leds.c文件led_set_pwm中的case NLED_ON下的duty(0-255),可以达到改变led的brightness。


pwm控制原理

1.这里是利用脉宽PWM法,通过调整PWM的周期和占空比来改变led亮与不亮的时间,即改变了亮与不亮的机器周期,达到控制led的亮与暗。这里的占空比的变量参数就是duty 和lever.


2.PWM中的占空比解释如下:如32KHZ意味每秒产生32K个脉冲波,每个脉冲波高电平用1,低电平0表示,,若产生的波是均匀的01010101…系列,说明了导通的时间和非导通的时间是1:1,即占空比是50%,若为非均匀的脉冲波,0与1的比例失调,即大于50%的占空比输出的平均电流大,则led就更亮。


3.由寄存器KPLEDcom0和pwm1模式控制Duration和data width等来调节01序列比,每个时间周期内有不同比例的01系列,再把这些不同的占空比分255个等级,mt6573_pwm.c 中 duty 或者 lever的变化,通过S32 pwm_set_easy_config ( struct pwm_easy_config *conf)函数转化为data0,data1值,然后去写寄存器: PWM_SEND_DATA0,PWM_SEND_DATA1;这样我们就可以调节led的亮度变化了。

0 0
原创粉丝点击