视频连接

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跨行代码使用“\”。

posted on 2021-11-13 19:05  史久超  阅读(817)  评论(0编辑  收藏  举报
知识改变命运