【Maker 電子學】小型 OLED 顯示裝置的原理與應用—PART 5

作者:Bird

上篇文章 【Maker 電子學】小型 OLED 顯示裝置的原理與應用—PART4 中,我們說明了 SSD1306 連接外部的五種通訊介面、對外連接的各個訊號以及在 SPI 及 I2C(以下寫作 I2C) 介面下的速度差距。這一回我們要來看看 SSD1306 幾種不同的模組設計,以及直接使用模組時,要如何設計電路。

模組的設計

(圖片來源:Bird 提供)

上圖是我們現在很容易在淘寶或是販售 Arduino 相關零件的電子材料行購得的 OLED 模組,它們都是用 SSD1306 驅動的,左邊的面板是 128×64 的,右邊的面板比較小,是 128×32 的。

這些模組都把帶有 SSD1306 COG 的 OLED 面板安裝在一塊 PCB 上,並把連接 Arduino 或其它實驗平台的訊號用標準距離 2.54 mm 的排針或焊點拉出來,方便用麵包板或跳線做實驗。

但如果你把這張 PCB 翻過來看,就會發現它上面的零件其實不多,而且看起來大部分都是電阻或電容等被動元件,只有一顆三隻腳的零件看起來像電晶體。:

(圖片來源:Bird 提供)

如果我們要製作自己的 PCB,能不能不要用這種帶有 PCB 的模組,而直接用 SSD1306 的面板模組,然後把這些驅動 SSD1306 面板模組所需要的外部零件放在我們自己的 PCB 上呢?可以,而且不難。

我們之前說過,SSD1306 是香港晶門科技(Solomon Systech)所設計、生產的 PM-OLED 驅動 IC,那麼這些 128×64、128×32 的 OLED 面板又是誰生產的呢?

這些市面上很容易買到用 SSD1306 驅動的 OLED 面板,有很大一部分是由已經解散的台灣公司「悠景科技」所生產的。雖然台灣的公司登記顯示這間公司已經在 2012 年解散,但現在仍然找得到以該公司為名的網站,且其網址雖然掛在 .tw 之下,公司的聯絡方式都在香港或大陸,令人不禁好奇我們現在買到的 OLED 面板模組到底是在哪裡在生產。

不過,我們仍然可以在 Adafruit 的網站上取得這些 OLED 面板的 datasheet,供我們研究。以 UG-2832HSWEG02 這個面板模組為例,它是一個 128×32 的面板,而模組本身就設計成使用 I2C 介面來操作。

我們更深入一點來看看它的 datasheet。

(圖片來源:Bird 提供)

上面這張圖大概是整份 UG-2832HSWEG02 datasheet 中最重要的一張圖,它畫出了這個模組的外觀機械尺寸、顯示陣列的尺寸以及對外連接訊號的列表。

從圖中,我們可以看出來,UG-2832HSWEG02 總共有 14 隻對外接腳:

(圖片來源:Bird 提供)

有沒有覺得有些接腳的名稱很眼熟,和我們上一回介紹的 SSD1306 對外訊號有許多雷同之處?對,這些接腳很多就是直接從 SSD1306 上引出來,讓我們使用的。

聰明的讀者可能猜得到,像 C1P/C1N、C2P/C2N 就是 SSD1306 上用來連接 charge pump 電容器的接腳,而 VBAT、VDD、VCOMH、VCC 等電源相關接腳,都和我們上次介紹的 SSD1306 對外連接接腳有一對一的對應。

IREF 是設定 OLED 陣列驅動電流的接腳,我們上次也說明過如何計算連接在它上面的電阻,以控制驅動電流;RES# 是 SSD1306 的 reset 接腳、SCL/SDA 更不用說,看名字就知道是 I2C 訊號。

了解這些接腳的功能後,我們就可以設計 UG-2832HSWEG02 與 MCU 連接的電路了。

(圖片來源:Bird 提供)

上圖是使用 SSD1306 內部的 charge pump 產生 VCC 電壓時,所需要的電路。根據 SSD1306 datasheet 上的建議,charge pump 需要 1 uF 的交換電容器,就是 C1 和 C2,而幾個電源接腳包括 VDD(邏輯電源)、VCC(OLED 陣列驅動電源)、VBAT(charge pump 輸入電源)等都需要濾波電容,我們用 0.1 uF 和 4.7 uF 的電容並聯以求較為寬頻的濾波效果,而 VCOMH(OLED 掃描列關閉時的偏壓)同樣也需要濾波,即是圖中的 C6。

而 IREF 腳上面的驅動電流設定電阻, 根據我們上次的計算,要讓 OLED 矩陣上有 100 uA 的驅動電流,需要 400 KΩ 左右的電阻,這裡我們放 E24 系列最接近的數字 390 KΩ。這個電阻調大,OLED 面板會變得比較暗;調小,面板會變得比較亮,我們可以根據需求適度的在 10% 左右的範圍內上下調整,但切記不可為了追求亮度而把它設得太小,過大的驅動電流可能會造成 OLED 陣列不可逆的損壞,或導致 SSD1306 燒毀。

RES# 接腳就比較妙了。由於 SSD1306 內部沒有 POR(power on reset)電路,在供電後我們需要把 RES# 拉低一小段時間,重置 SSD1306 內部的邏輯電路,才能讓它開始正常運作。最簡單的方法就是把這隻腳接到 MCU 的 GPIO,在開機後用 GPIO 去 reset SSD1306。

我們之前介紹過的 Adafruit SSD1306 驅動 library 也有這個功能,在 SSD1306 的控制物件 constructor 中,有個參數就是用來告訴 library,SSD1306 的 reset 要用哪個 GPIO 控制。

1
2
3
4
5
6
7
8
Adafruit_SSD1306::Adafruit_SSD1306 (
uint8_t w,
uint8_t h,
TwoWire * twi = &Wire,
int8_t rst_pin = -1,
uint32_t clkDuring = 400000UL,
uint32_t clkAfter = 100000UL
)

上面的第 4 個參數,就是用來指定用哪隻 GPIO 控制 SSD1306 的 RES#,但這個做法需要浪費一隻 GPIO,在很多 GPIO 數量非常有限的平台上,這並不是個好主意。

事實上我們也可以用硬體電路來產生這一個 reset 訊號,一個簡單的 RC reset 電路在這裡就可以工作得很好。我們用 10 KΩ 和 1 uF 的電容器,得到一個時間常數差不多 10 ms 的 RC 電路,只要 3.3 V 電源起來的速度夠快,這個電路就能確保 RES# 接腳停留在 low 的時間夠久,讓 SSD1306 在供電穩定後可以收到 reset 訊號。

至於 D1 那個二極體,是用來讓 C5 在電源關掉後可以快速放電用的。因為當電源關閉後,C5 內部仍有殘存的電荷,它會透過 R3 以及 SSD1306 IC 內部的一些漏電路徑慢慢洩漏掉,但速度可能不會太快。如果在 C5 上的電荷還沒漏光前就重新上電,RES# 接腳可能就收不到夠低的電壓作為 reset 訊號,而讓 reset 失敗。這是 RC reset 電路常見的設計失誤:斷電之後馬上重新上電,RC reset 電路會失效。

以上,我們總共只需要 6 個電容器、2 個電阻、再加上 1 個二極體,就可以讓 SSD1306 的面板模組工作。剩下的,就是把 SCL/SDA 訊號接到 MCU,讓軟體去控制它了。

至於 UG-2832HSWEG02 模組上的這 14 隻腳,要如何與 PCB 連接呢?

(圖片來源:Bird 提供)

這個模組的邊緣是一個軟性電路板,這個 14 個訊號拉到軟板的邊邊,形成一排可以焊接的點。對,雖然看起來很像用連接器連接的 FFC 端點,但它不是。這是設計直接和電路板焊接的焊點。

根據前面說明過的圖面,這 14 隻腳之間的間距是 0.62 mm:

(圖片來源:Bird 提供)

而每隻腳的寬度是 0.32 mm。因此,我們只要根據這個間距,在電路板上設計一排焊點,就可以把這個模組焊接到電路板上。

(圖片來源:Bird 提供)

上圖用紅色框起來的那一排,就是根據這個尺寸設計的焊點,而右邊有一排零件則是前面電路圖中的被動元件,這裡用的是 0603 的尺寸。

它實際焊接在電路板上的樣子是這樣:

(圖片來源:Bird 提供)

小結

我們花了五回的篇幅,仔細地介紹 SSD1306 這顆 PM-OLED 驅動 IC、OLED 面板掃描驅動的原理,並示範了用 ESP8266 在 Arduino 平台上驅動它。

使用 SSD1306 驅動的 PM-OLED 面板使用起來非常方便、有彈性,不管是高速的 SPI 介面,還是節省接腳到極致的 I2C 介面,使用起來都很容易。SSD1306 內建的 VCC charge pump 更讓 OLED 驅動最麻煩的電源問題變得非常簡單,只要單一的 3.3 V 電源就可以點亮它。

希望藉由這次的介紹,可以讓讀者更深入地了解這個好用的零件,在更多專案的上使用。

(責任編輯:賴佩萱)

Bird

Author: Bird

在外商圈電子業中闖蕩多年,經歷過 NXP、Sony、Crossmatch 等企業,從事無線通訊、影像系統、手機、液晶面板、半導體、生物辨識等不同領域產品開發。熱愛學習新事物,協助新創團隊解決技術問題。台大農機系、台科大電子所畢業,熱愛賞鳥、演奏管風琴、大提琴、法國號,亦是不折不扣的熱血 maker。

Share This Post On

發表

跳至工具列