![]() |
發布時間: 2019-7-10 21:29
正文摘要:單通道ADC結果沒有問題,現在需要“同時”采集兩路ADC,發現結果總是驚人的一致!甚至一個通道加電壓,另一個通道不加電壓,兩者得到的結果都是一樣的! 在論壇中發現一個類似的帖子:http://m.zg4o1577.cn/bbs/dpj ... |
用STC官方的例程一試就好。 |
echowilson 發表于 2019-7-11 09:56 謝謝 |
能分享下編程么,小白學習下,謝謝 |
echowilson 發表于 2019-7-11 09:56 這等與開啟ad電源,轉換第一個端口ad值,然后再次開啟電源,轉換下一個端口ad值??? |
解決了! uint GetADCresults(uchar adcch) { ADC_RES = 0; ADC_RESL = 0; ADC_CONTR = ADC_POWER|ADC_START|adcch; Delay(10); while(!(ADC_CONTR & ADC_FLAG)); //等待ADC完成 ADC_CONTR &= ~ADC_FLAG; //清零ADC_FLAG ADC_CONTR &= ~ADC_START; //關閉ADC return (ADC_RES<<8 | ADC_RESL); } 最重要的是這一句。初始化的時候不要上電。在采樣函數中每切換一次通道就上一次電就可以了。 ADC_CONTR = ADC_POWER|ADC_START|adcch; |
這個書上有(需要看原理圖),但你不一定注意到。你的師傅也未必能講透,師傅也未必注意到。 |
ADC采樣時,為了防止“彈動”,會用一只電容采樣輸入的電壓。 當你下達起動命令后,電容就與輸入分離,這樣電容上的電壓就不再受輸入影響了(彈動),再對電容上的電壓進行對分處理。 這個電容在ADC內部。 多路采樣時,多路切換開關在電容的前端,當你切換之后,需要保持一段時間,因為電容上的電壓是不能躍變的!否則電容上的電壓就與上一次的一樣! 明白這個道理正確的做法如下: 1、起動本次采樣,等待采樣結束(這期間去做其它事,不要呆等浪費CPU時間)。 2、采樣結束了,立即切換到下個通道(不要急于分析處理數據),這樣最節省采樣時間。 3、處理分析本次采樣到的數據。 4、估計切換有了一段時間了(自己按實際情況評估這段時間的長短),再起動采樣測量下個通道的電壓,這時電壓采樣也OK了(采樣電容有了足夠的充電時間)。 這樣你的問題就解決了,而且數據穩定! 不是高手注意不到這個細節,也不一定明白其中的道理。 |