|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
困擾已久:AD出來(lái)的數(shù)據(jù)和實(shí)際加在芯片通道上的模擬值有出入 |
| 作者:geergeer 欄目:單片機(jī) |
對(duì)瀏覽帖子的大俠表示由衷的感謝。如題,小弟是在MPLAB IDE內(nèi)掛接PICC開發(fā)程序的,使用的芯片是16F877A。AD的兩個(gè)寄存器的值設(shè)為ADCON1=0x00,ADCON0=0x41(當(dāng)然通道會(huì)變),也就是說(shuō)采用Fosc/8的模式,數(shù)據(jù)是左對(duì)齊,AD轉(zhuǎn)換的分辨率為8位,每次AD結(jié)束后取ADRESH中的內(nèi)容即可,而且AD的最大轉(zhuǎn)換范圍是單片機(jī)的供電電壓5v,小弟每次AD之間都會(huì)有100微秒的間隔(采樣捕捉時(shí)間和通道轉(zhuǎn)換時(shí)間),每個(gè)通道不停的AD十次,得到十次的和(用sum表示)后,然后用average=sum*5/2550取得均值(浮點(diǎn)型)。到產(chǎn)品實(shí)際上電檢測(cè)的時(shí)候發(fā)現(xiàn),每次AD轉(zhuǎn)換出來(lái)的數(shù)據(jù)比實(shí)際加在芯片通道上的直流模擬值要小,比如1v的變0.6v了,1.9v的變1.2v了,2v的變1.8v了,有大俠知道是什么原因嗎??感激不盡 * - 本貼最后修改時(shí)間:2006-9-16 9:53:06 修改者:geergeer |
| 2樓: | >>參與討論 |
| 作者: geergeer 于 2006/9/14 17:21:00 發(fā)布:
哎,自己頂一個(gè) 把采樣濾波的函數(shù)和中斷函數(shù)貼出來(lái) void FILTER(void)// 均值濾波 { unsigned int i,sum=0; for(i=0; i<10; i++) { delay(20);//捕捉時(shí)間約200多us ADGO=1; while (!flagperend);//flagperend初始化時(shí)為0 sum=sum+adconvert; flagperend=0; } average=sum*5/2550;//average浮點(diǎn)型,sum為unsigned CHAR型 } void interrupt ISR(void) { if(ADIE&&ADIF) { ADIF=0; adconvert=ADRESH; flagperend=1; } if(TMR1IE&&TMR1IF) { TMR1IF=0; delaycount--; } if(EEIE&&EEIF) { EEIF=0; flagwrite=1; } } * - 本貼最后修改時(shí)間:2006-9-15 8:44:19 修改者:geergeer |
|
| 3樓: | >>參與討論 |
| 作者: geergeer 于 2006/9/15 8:08:00 發(fā)布:
有沒(méi)有大俠賜教一二?? 難道自己還忽略了那些重要的寄存器的設(shè)置嗎,還是ADCON0和ADCON1的設(shè)置有問(wèn)題?? * - 本貼最后修改時(shí)間:2006-9-16 10:06:15 修改者:geergeer |
|
| 4樓: | >>參與討論 |
| 作者: javie 于 2006/9/15 18:21:00 發(fā)布:
* 首先不要一次就取10次相加求平均,先取一次,看結(jié)果 |
|
| 5樓: | >>參與討論 |
| 作者: geergeer 于 2006/9/15 18:23:00 發(fā)布:
感謝大俠 小弟明天按指示去調(diào)一下~~~~ |
|
| 6樓: | >>參與討論 |
| 作者: javie 于 2006/9/15 18:24:00 發(fā)布:
我暈,還要明天啊,老大 |
|
| 7樓: | >>參與討論 |
| 作者: xieyuanbin 于 2006/9/16 7:35:00 發(fā)布:
AD采樣值偏小的兩個(gè)可能: 第一是采樣時(shí)間不夠,在ADON和ADGO之間必須有一個(gè)足夠的采樣時(shí)間,第一是采樣的AD信號(hào)阻抗偏大,比如大于10K,在這種情況下必須適當(dāng)延長(zhǎng)采樣時(shí)間。建議信號(hào)內(nèi)阻不要超過(guò)10K。 具體采樣時(shí)間和信號(hào)內(nèi)阻有關(guān)算法在每個(gè)數(shù)據(jù)手冊(cè)中都有詳細(xì)說(shuō)明。 |
|
| 8樓: | >>參與討論 |
| 作者: geergeer 于 2006/9/16 8:08:00 發(fā)布:
回復(fù) 感謝xieyuanbin大哥,小弟已經(jīng)延時(shí)了近400微秒的采樣捕捉時(shí)間和通道轉(zhuǎn)換時(shí)間了,結(jié)果還是不行,頭疼的問(wèn)題啊,我的程序里面有錯(cuò)誤嗎?與AD有關(guān)的ADCON1的值是初始化中設(shè)好后一直不變的,而ADCON0中的值是根據(jù)通道變化在改變的,在中斷中讀ADRESH的值。也已經(jīng)根據(jù)javie大哥的建議去試,只采樣一次還是和采樣十次取均值一樣的結(jié)果,很郁悶啊,我還測(cè)了一下單片機(jī)的供電電壓(即AD的參考電壓)為5.1V,應(yīng)該問(wèn)題不大啊~~ * - 本貼最后修改時(shí)間:2006-9-16 10:11:36 修改者:geergeer |
|
| 9樓: | >>參與討論 |
| 作者: javie 于 2006/9/16 10:41:00 發(fā)布:
400us? 老大你能不能搞大一點(diǎn)啊,877A我沒(méi)做過(guò)A/D,不過(guò)別的型號(hào)我都是1ms的 |
|
| 10樓: | >>參與討論 |
| 作者: geergeer 于 2006/9/16 11:13:00 發(fā)布:
好的,試去 |
|
| 11樓: | >>參與討論 |
| 作者: qianlong30 于 2006/9/16 19:47:00 發(fā)布:
我覺得你的信號(hào)源內(nèi)阻太大, 我延時(shí)20US,精度很準(zhǔn)確,16F74(8位AD)及12F675(10位AD)都用過(guò) |
|
| 12樓: | >>參與討論 |
| 作者: xieyuanbin 于 2006/9/17 20:58:00 發(fā)布:
參考電壓有點(diǎn)偏高,不過(guò)誤差應(yīng)該沒(méi)這么大 5.1V的參考電壓偏高,不過(guò)在這樣的情況下3V讀出數(shù)應(yīng)該在2.97V左右。既然能得出結(jié)果,那么程序基本是沒(méi)有問(wèn)題的,ADON和ADGO均是ADCON0中的位,看你的程序也找不出毛病,再給兩個(gè)建議:第一關(guān)掉AD中斷,采用死等的辦法看看結(jié)果是否符合,第二,你先告訴我你的AD口外面都接了什么?是否有平滑濾波電容?至少要有一個(gè)的。 |
|
| 13樓: | >>參與討論 |
| 作者: geergeer 于 2006/9/18 9:01:00 發(fā)布:
感謝諸位的指點(diǎn) 十分感謝xieyuanbin,qianlong30的指點(diǎn),你們都說(shuō)到了點(diǎn)上。因?yàn)橛布枪驹O(shè)計(jì)的,信號(hào)源內(nèi)阻太大的問(wèn)題我只能夠從軟件上適應(yīng)了。一直覺得延時(shí)已經(jīng)夠長(zhǎng)夠狠了,后來(lái)按照javie大哥的指示,我把延時(shí)搞到了毫秒級(jí),AD的值正常了。≡俅胃兄x幾位大俠的耐心指點(diǎn)~~~~ * - 本貼最后修改時(shí)間:2006-9-18 9:40:11 修改者:geergeer |
|
|
|
| 免費(fèi)注冊(cè)為維庫(kù)電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào) |