如題,MCU是STC89C52RC,傳感器是GP2Y1014AU0F,AD芯片是TLC0832
GP2Y101x.png (101.71 KB, 下載次數: 30)
下載附件
2023-5-23 11:32 上傳
這是傳感器部分的電路,為了方便看把外圍電路和傳感器內部電路放在一起,實物是用線連接的
具體問題是和AD芯片相連的2腳Vout輸出電壓過低,低塵環境萬用表測出來只有0.007~0.016V。
手冊上給的輸出電壓應該在0.6~5.0V,無塵環境應該在0.6~0.9V。
拿其它可以正常讀數的板子用同一個傳感器測出來是0.05~0.20V。
我的板子:Vout輸出電壓0.007-0.016V Vled二極管供電電壓1.37-4.48V Led控制電壓0.59-4.45V
參考的正常板子:Vout輸出電壓0.05-0.20V Vled二極管供電電壓2.00-4.98V Led控制電壓1.80-4.98V
輸出電壓的波形圖:
Vo輸出A1.png (25.01 KB, 下載次數: 19)
下載附件
2023-5-23 11:51 上傳
有一個非常夸張的1V尖刺,其它部分還是0.016V
以下是主要的控制代碼
int GP2Y101x_init()
{
uchar FC_NUM; //定義變量
long SUM = 0;
if (FlagStartRH == 1) //轉換標志是否為1
FlagStartRH=0;
for(FC_NUM=0;FC_NUM<100;FC_NUM++)
{
LED_DUST=1; //打開LED
delay_tus(280)
//FC=(float)(adc0832(0)-0.6)*0.172/0.5*1000;
FC=(float)(adc0832(0)*0.0196-6.6)/0.5*1000;
LED_DUST=0; //關閉LED
SUM=SUM+FC; //累加數值
if(SET_KEY==0) break;
}
FC = SUM/FC_NUM; //取平均值
if(FC>999) FC = 999; //正常達不到999
SUM=0; //累加值清零
return FC;
}
其中轉換標志FlagStartRH由定時器T0控制,大約1s采樣一次。
為了看過小的輸出電壓有沒有變化,中間的計算公式數值都改過肯定不對。
adc0832轉換函數應該沒問題,至少能讀出電壓變化,主要還是輸出電壓太低了。
/***********************************************************************
2023年5月25日16:25更新進度
***********************************************************************/
抱歉保存草稿點成發帖發出來了,第一次發帖還沒找到在哪里刪除。
問題已經初步解決了,大概是輸出和采集沒對上或者哪里沖突了。
016.png (28.55 KB, 下載次數: 23)
下載附件
2023-5-25 16:16 上傳
重新測了一遍輸出波形,去電尖刺后可以看到采樣的輸出在0.3V左右,雖然官方數據手冊給的無塵電壓是0.6V,但應該是可以轉換成數據的。
之前沒有提到的是這是一個空氣質量檢測系統,還有溫濕度傳感器之類的其它傳感器,采用的結構是分別按順序控制采樣。
我把GP2Y1014粉塵傳感器的驅動控制單獨提了出來,寫了個只驅動它的代碼,內容基本沒變。
結果,成了,問題沒有出現,直接原因是輸出和采集沒有對上,但根本原因還沒查明。
這是我的設計,接下來一兩周我努力找找原因吧,如果找到會在這里更新。
021.png (29.98 KB, 下載次數: 28)
下載附件
2023-5-25 16:29 上傳
022.png (27.24 KB, 下載次數: 27)
下載附件
2023-5-25 16:29 上傳
這是正常的無塵波形,讀數還是很低但能正常反饋了。
果然我還是應該把帖子刪了,等我學會怎么刪就回來刪。
謝謝大家進來幫我,麻煩你們了,感激不盡。
|