STM32利用光敏二极管实现光度测量
????????最近我們在開發臭氧發生器時,需要監測生成的臭氧的濃度,于是想到使用光度計來測量。因為不同濃度的臭氧對管的吸收作用是不相同的,于是檢測光照強度的變化就可以得到相應的濃度數據。
1、硬件設計
????????此次光照度檢測我們選用了S1336-5BQ光電點二極管,其光譜響應范圍為:190~1100nm范圍。而我們的光源波長則在254nm最顯著,包括其它600nm以內的光波,這個好處于測量范圍之內。
????????根據相關的資料,光電點二極管S1336-5BQ的每100lx的光照對應有5μA的電流。于是我們可以據此設計一個電路,將電流的變化改變為電壓變化,具體原理圖設計如下:
????????上圖中我們采用5V電源,為了檢測方便調零,我們將基準電壓上抬到2.5V(圖中的Vmid)。這樣我們根據測量范圍的要求將R5的值更換為精確的值就好了,讓輸出范圍在2.5V到5V之間。這樣我們就可以將其作為輸入信號接入到ADC中。在ADC前端加一些必要的保護就可以了,具體如下圖所示:
????????上圖只是對輸入信號做了保護,如果需要也可以放大縮小等處理,從而符合ADC輸入的要求。
2、軟件設計
????????前面我們描述了硬件電路,該電路在要求不高時是非常方便的。接下來我們根據上述電路來分析并設計軟件。根據上面的電爐我們可以得出輸出電壓的變化公式為:Vout=Isc*R5+Vmid。
????????而Vmid正好為Vcc的一半,Vout可以通過ADC測量出來,于是公式就可以變化為:Isc=(Vout-Vcc/2)/R5。
????????而對于該光電二極管的特性是5μA/100lx,于是計算得到光照強度,公式可修改為:光照強度lux=((Vout-Vcc/2)/R5)*2*107。據此公式來編寫軟件就非常容易了。
/*計算光照強度*/ float CalcLxIllumination(LuxObjectType *lm,float mVoltage) {float lux=0.0;lux=(mVoltage-lm->vref)*100/(lm->rnf*lm->isc100lux);lm->lux=lux;return lux; }/* 光度檢測對象初始化 */ void LuxInitialization(LuxObjectType *lm,float isc,float vref,float rnf) {if(lm==NULL){return;}lm->lux=0.0;lm->isc100lux=isc;lm->rnf=rnf;lm->vref=vref; }歡迎關注:
總結
以上是生活随笔為你收集整理的STM32利用光敏二极管实现光度测量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速实现一个室内空气质量检测仪
- 下一篇: grubbs检测c语言,Grubbs算法