發(fā)現(xiàn)一個應(yīng)廣科技單片機(jī)(Padauk)微控制器后,是時候進(jìn)行一些使用 Padauk PFS154 和 PMS150C 的項目了。
考慮到之前對電子和非電子蠟燭的研究,選擇它作為最低成本微控制器的目標(biāo)似乎是很自然的。
為了簡單起見,將硬件簡化為直接連接到 PA0 和 PA4 GPIO 的 LED。 Padauk GPIO 的供電能力非常有限,范圍從 3V 時的 4 mA 到 5 V 時的 12 mA。這意味著不存在損壞直接連接到引腳而不使用電阻器的 LED 的危險。 驅(qū)動能力有限可能是設(shè)計人員不想在 I/O 驅(qū)動晶體管上花費(fèi)太多 IC 空間的結(jié)果。
為了簡單起見,將硬件簡化為直接連接到 PA0 和 PA4 GPIO 的 LED。 Padauk GPIO 的供電能力非常有限,范圍從 3V 時的 4 mA 到 5 V 時的 12 mA。這意味著不存在損壞直接連接到引腳而不使用電阻器的 LED 的危險。 驅(qū)動能力有限可能是設(shè)計人員不想在 I/O 驅(qū)動晶體管上花費(fèi)太多 IC 空間的結(jié)果。
硬件
該軟件基于閃爍 LED IC 的仿真。 使用 PFS154 和 PMS150C 中的 PWM 之一來控制 LED 的亮度。 使用生成偏向最大亮度的隨機(jī)數(shù)分布的算法,PWM 值每秒更新 30 次。 詳細(xì)的描述可以看之前的文章。
引入了 IIR 低通濾波器來稍微改善視覺外觀。
lowpass = lowpass - (lowpass>>1) + (newval<<7);
如果沒有低通濾波器,亮度的變化顯得過于突然。 發(fā)現(xiàn)使用系數(shù)為 0.5 的 IIR 濾波器可以獲得最佳結(jié)果(“滯后 2”)。 較低的截止頻率不能很好地再現(xiàn)“閃爍”。 您可以在下面看到不同 IIR 濾波器設(shè)置的亮度變化痕跡。
如果沒有低通濾波器,亮度的變化顯得過于突然。 發(fā)現(xiàn)使用系數(shù)為 0.5 的 IIR 濾波器可以獲得最佳結(jié)果(“滯后 2”)。 較低的截止頻率不能很好地再現(xiàn)“閃爍”。 您可以在下面看到不同 IIR 濾波器設(shè)置的亮度變化痕跡。
PFS154 的 C 代碼可以在此處找到。 可以在此處找到 PMS150C 的匯編實(shí)現(xiàn)。
三盞 LED 蠟燭,配有 PFS154(左)、PMS150C(中)和閃爍 LED(右)
將這兩個版本安裝在廉價電子蠟燭的外殼中。 在上面的視頻中,您可以看到兩個版本的實(shí)際效果,將其與基于燭光閃爍 LED 的蠟燭進(jìn)行比較。
與專用蠟燭閃爍 LED 相比,微控制器版本有什么優(yōu)勢嗎? 還沒有,但是仍然有足夠的代碼空間來添加額外的功能。
嘗試使用 LED 作為光傳感器
逐高電子技術(shù)部整理分享,很快就有人建議使用 LED 和光傳感器來在黑暗中自動打開 LED 蠟燭。 事實(shí)上,這將是一個非常好的附加功能。 其實(shí)一開始就打算加上這個了。 這就是將 LED 的兩個端子都連接到 GPIO 的原因。 然而,盡管在這方面花費(fèi)了大量時間,但從未使其達(dá)到令滿意的效果。 最初省略了這一集,因為報告失敗顯然不那么有趣。 將以巴里的建議為線索來總結(jié)的發(fā)現(xiàn)。
眾所周知,LED 還可以充當(dāng)光電二極管(這里有一篇關(guān)于此的很好的論文)。 當(dāng)它們反向偏置時,照射光將產(chǎn)生可在端子上測量的光電流。 主要挑戰(zhàn)是該電流非常低,在正常室內(nèi)照明條件下通常在納安范圍內(nèi)。 大多數(shù) MCU 不提供任何外圍設(shè)備來測量電流,尤其是沒有這么低的電流。 有各種技巧和調(diào)整可以解決這個問題,這增加了使用 LED 作為光傳感器的魅力。 不幸的是,網(wǎng)絡(luò)上充斥著不解釋方法論并且經(jīng)常使用可疑方法的指導(dǎo)。
一種工作較為可靠的方法是使用內(nèi)部 LED 電容作為單斜率積分 ADC 中的電流積分器。 實(shí)際上,這是通過首先以反向偏壓將 LED 充電至固定電壓(例如 VDD),讓輸出浮動,然后監(jiān)控電荷消失所需的時間來實(shí)現(xiàn)的。 從 dQ=C*dV 和 dQ=Iphoto*dt 可以得出 Iphoto=C*dV/dt。 因此,LED 中產(chǎn)生的光電流與電壓降低至固定閾值所需的時間成反比。
之前在各種 ATtinys 上成功地使用過這種方法。 由于 Padauk PFS154 有一個內(nèi)部模擬比較器,希望同樣的方法也能工作。 將比較器配置為使用內(nèi)部電阻分壓器作為參考電壓,并使用 PA4 作為輸入。 出于測試目的,將比較器輸出路由到 PA0,以便可以從外部對其進(jìn)行監(jiān)控。
mov a,#(GPCC_COMP_MINUS_VINT_R | GPCC_COMP_PLUS_PA4 | GPCC_COMP_INVERSE | GPCC_COMP_ENABLE)
mov_gpcc,a
上面的示波器圖像顯示了 LED(通道 2)和比較器輸出(通道 1)之間的電壓。 可以清楚地看到,初始充電后,LED 兩端的電壓消失,比較器切換到參考電平(本例中約為 2.5V)。 不幸的是,這已經(jīng)暴露了一些問題:從比較器輸出到 LED 引腳存在顯著的串?dāng)_,并且還存在大量噪聲。 比較器不會以精確的電壓進(jìn)行切換,但會引入顯著的時序抖動。 需要注意的是,示波器探頭本身會增加大量的寄生電容和漏電。 因此不可能監(jiān)控準(zhǔn)確的操作條件。 移除了示波器探頭并停用外部比較器輸出以進(jìn)行進(jìn)一步調(diào)查。 使用內(nèi)部16位定時器來測量放電時間。
嘗試一下這個裝置,發(fā)現(xiàn)它對光的反應(yīng)很好。 較高的照明水平成比例地減少了放電時間。 不過,使用它來控制 LED 蠟燭有一些要求:由于要感測環(huán)境光,因此它需要非常敏感。 此外,測量應(yīng)該是可重復(fù)的,以確保蠟燭始終在相似的環(huán)境照明水平下打開。
為了穩(wěn)定結(jié)果,生成了上面所示的數(shù)據(jù)集。 掃描了三個照明級別的內(nèi)部參考電壓。 “高”對應(yīng)于手電筒直接照射 LED,低和中是正常環(huán)境亮度級別。 每個數(shù)據(jù)點(diǎn)都是 16 個測量點(diǎn)的平均值,以減少噪音。
可以看出,放電時間跟隨照明水平跨越數(shù)十年。 較高的參考電壓意味著較早達(dá)到閾值,因此放電時間會減少。 這種趨勢也得到了很好的再現(xiàn)。 對于中低亮度,事情變得非常可疑。 在高 Vref 下,無法區(qū)分低電壓和中電壓,并且跡線中存在奇怪的臺階。 所有這些都使得弱光檢測的操作變得非常可疑。
為了研究這些非理想性,將注意力轉(zhuǎn)向了噪音。 很快們就發(fā)現(xiàn)噪聲實(shí)際上是相關(guān)的,因此會導(dǎo)致系統(tǒng)誤差。 您可以在上面看到一個示例時間序列。 (源代碼在這里。)
嘗試了很多方法來理解并減少這個問題。:使用內(nèi)部帶隙電壓參考而不是電阻分壓器沒有產(chǎn)生任何有益的影響,這表明電壓參考不是問題的根源。 將電源改為電池并沒有產(chǎn)生任何顯著效果。 因此可以排除電源的影響。 嘗試不同的外部條件