zoukankan      html  css  js  c++  java
  • 1.6. 三基色LED

    视频连接

    1.6.1. 基本原理

    根据色度空间理论,R/G/B三种颜色不同亮度组合,可以综合出任一颜色,这是三基色LED的理论依据。

    三基色LED也称全彩LED,内部是由RGB三种颜色的LED组成的,控制三种基色LED的亮度,最终组合出不同的综合颜色。

    三基色LED有两种:共阴三基色LED和共阳三基色LED,如下图所示。

    wps1

    wps2wps3

    上图右图示一款插脚封装的共阳三基色LED实物图及引脚定义。

    1.6.2. 硬件电路

    既然三基色LED是封装在一起的三个不同颜色的LED,LED的正极连在一起引出(共阳)或LED的负极连在一起引出(共阴)。

    那么,三基色LED在电路中接法的接法,就相当于3个共用公共端的LED。

    共阴三基色LED,在电路中的接法如下:

    wps4

    共阴三基色LED的控制逻辑:

    a. IO输出高电平(value=1),LED点亮;IO输出低电平(value=0),led熄灭;

    b. 与micropython的pwm占空比一致;

    共阳三基色LED,在电路中的接法如下:

    wps5

    共阳三基色LED的控制逻辑:

    a. IO输出高电平(value=1),LED熄灭;IO输出低电平(value=0),led点亮;

    b. 与micropython的pwm占空比相反,故赋值占空比时使用1023-duty;

    示意图中:

    R01=R02=R03=1K。

    R、G、B通道电流wps6

    1.6.3. 程序设计(以共阴三基色LED为例)

    案例描述:按1Hz的频率循环切换红、绿、蓝

    需求分析:LED点亮的条件是两端有合适的电压,共阴三基色Led的公共端接地,则点亮的通道需高电平(PWM的占空比duty是高电平占比,可以直接赋值)。控制单路LED的亮度可以使用PWM技术(频率100hz,duty控制亮度0~1023),红色时R支路duty=1023、G/B支路duty=0,绿色时G支路duty=1023、B/R支路duty=0,蓝色时B支路duty=1023、G/R支路duty=0。

    代码实现:

    from machine import Pin,PWM
    
    from time import sleep
    
    #r/g/b实例
    
    r = PWM(Pin(18,Pin.OUT),freq=100,duty=1023)
    
    g = PWM(Pin(19,Pin.OUT),freq=100,duty=1023)
    
    b = PWM(Pin(21,Pin.OUT),freq=100,duty=1023)
    
    #[红、绿、蓝]
    
    color_ary = [[1023,0,0],[0,1023,0],[0,0,1023]]
    
    #计数器
    
    i = 0
    
    #循环
    
    while True:
    
        #配置各通道duty
    
        print("%d:r->%d,g-%d,b-%d" %(i,color_ary[i][0],color_ary[i][1],color_ary[i][2]))
    
        r.duty(color_ary[i][0])
    
        g.duty(color_ary[i][1])
    
        b.duty(color_ary[i][2])
    
        #指向下一颜色
    
        i = i+1
    
        if(i>2):
    
            i = 0
    
        #延时1S
    
        sleep(1)
    1.6.4. 函数

    项目开发中,为了提高代码的可读性、复用性、层次感等,可以将具有独立功能的代码打包成函数,方便多处调用,如上节中显示颜色的语句可以打包成函数,具体代码如下:

    from machine import Pin,PWM
    
    from time import sleep
    
    #r/g/b实例
    
    r = PWM(Pin(18,Pin.OUT),freq=100,duty=0)
    
    g = PWM(Pin(19,Pin.OUT),freq=100,duty=0)
    
    b = PWM(Pin(21,Pin.OUT),freq=100,duty=0)
    
    #[红、绿、蓝]
    
    color_ary = [[1023,0,0],[0,1023,0],[0,0,1023]]
    
    #函数演示
    
    def color(r_value,g_value,b_value):
    
        r.duty(r_value)
    
        g.duty(g_value)
    
        b.duty(b_value)
    
    #计数器
    
    i = 0
    
    #循环
    
    while True:
    
        #配置各通道duty
    
        color(color_ary[i][0],color_ary[i][1],color_ary[i][2])
    
        #指向下一颜色
    
        i = i+1
    
        if(i>2):
    
            i = 0
    
        #延时1S
    
        sleep(1)
    1.6.5. 其他测试

    观察r、g、b通道不同duty时的颜色变化。

    from machine import Pin,PWM
    
    from time import sleep
    
    #r/g/b实例
    
    r = PWM(Pin(18,Pin.OUT),freq=100,duty=0)
    
    g = PWM(Pin(19,Pin.OUT),freq=100,duty=0)
    
    b = PWM(Pin(21,Pin.OUT),freq=100,duty=0)
    
    #[红、绿、蓝]
    
    color_ary = [[1023,0,0],\
    
              [0,1023,0],\
    
              [0,0,1023],\
    
              [511,511,511],\
    
              [0,511,511],\
    
              [511,0,511],\
    
              [511,511,0]]
    
    #函数演示
    
    def color(r_value,g_value,b_value):
    
        r.duty(r_value)
    
        g.duty(g_value)
    
        b.duty(b_value)
    
    #计数器
    
    i = 0
    
    #循环
    
    while True:
    
        #配置各通道duty
    
        print("%d:r->%d,g-%d,b-%d" \
    
              %(i,color_ary[i][0],color_ary[i][1],color_ary[i][2]))
    
        color(color_ary[i][0],color_ary[i][1],color_ary[i][2])
    
        #指向下一颜色
    
        i = i+1
    
        if(i>(len(color_ary)-1)):
    
            i = 0
    
        #延时1S
    
        sleep(1)

    理论上,三基色不同亮度可以混合出全彩效果,这就是LED显示器的工作原理,LED显示器的最小显示单元就是3基色LED。

    小知识:python跨行代码使用“\”。

    ----*----*----*----*----*----*----*----*----*----*----*----
    史久超 email:shijiuchao1983@163.com tel:15999550975 qq:157185173
  • 相关阅读:
    python基础篇-wordcloud库的使用
    python基础篇-数据格式化和处理
    python基础篇-文件(读取,操作,关闭)
    python基础篇-jieba库的使用
    python基础篇-组合数据类型-3.字典
    mbStringLength 获取javascript字符串字节数
    JS 字符unicode转换函数
    jar命令解析--转自百度知道
    JBOSS7.0 热部署及开启远程调试的方法
    WampServer 安装心得
  • 原文地址:https://www.cnblogs.com/horal/p/15549385.html
Copyright © 2011-2022 走看看