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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM