|
|||||||||||
| 技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng) 驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe |
AD如何去除相鄰兩點(diǎn)之間電壓的抖動? |
| 作者:FZJ 欄目:單片機(jī) |
比如AD值100到101之間的變化,如果程序在讀到0~100時(shí)點(diǎn)亮一個(gè)LED,而到101~200時(shí)熄滅LED這樣如何保證AD值在100-101之間時(shí)LED不閃爍?大家有沒有好的思路?謝謝! |
| 2樓: | >>參與討論 |
| 作者: eeproom 于 2006/4/17 10:56:00 發(fā)布:
多取點(diǎn),最簡單的算法是求平均值 |
|
| 3樓: | >>參與討論 |
| 作者: computer00 于 2006/4/17 11:15:00 發(fā)布:
不可以把比較值弄寬點(diǎn)嗎? 值大于101時(shí)才改變顯示狀態(tài)LED2,值小于99時(shí)才改變顯示狀態(tài)LED1。 以前做自動量程切換時(shí),就用過這種類似“滯回”的方法,不然在切換點(diǎn),會跳來跳去,很暈的。 |
|
| 4樓: | >>參與討論 |
| 作者: FZJ 于 2006/4/17 12:00:00 發(fā)布:
是啊computer00 說的對!不過按照你的思路也不對 那中間的值怎么辦??100沒了呀 如果AD轉(zhuǎn)換到100的時(shí)候如何處理? |
|
| 5樓: | >>參與討論 |
| 作者: FZJ 于 2006/4/17 12:32:00 發(fā)布:
求平均值的方法我試過,無非是 降低AD轉(zhuǎn)換的時(shí)間,不會有太大的變化,抖動還是有的,就是LED閃爍時(shí)間慢點(diǎn)罷了,我試過,現(xiàn)象還是有的,按照computer00的意思我也試過,如果電壓是連續(xù)線性變化的話這個(gè)方法是可行的,在100的時(shí)候我不作處理好了,但是如果第一次AD轉(zhuǎn)換的數(shù)據(jù)是250,一下子跳變到100,這時(shí)如果不作處理的話就不行了,我的思路是把先前AD轉(zhuǎn)換的值作臨時(shí)備份,然后和一個(gè)新的AD轉(zhuǎn)換值進(jìn)行比較,如果變化幅度大于3作處理,如果小于當(dāng)作是干擾信號處理, if (ad_old>ad_new) { if ((ad_old+3)>=ad_new) //1-->0 { 。。。。。。//正常處理 } } else if ((ad_new+3)>=ad_old) //0-->1 { 。。。。。。//正常處理 } |
|
| 6樓: | >>參與討論 |
| 作者: yewuyi 于 2006/4/17 15:12:00 發(fā)布:
搞出一個(gè)交叉區(qū)即可 至于如何搞,你應(yīng)該自己動動心思了,很簡單的東西沒必要讓人給你一點(diǎn)點(diǎn)講把。 |
|
| 7樓: | >>參與討論 |
| 作者: bolofeng 于 2006/4/17 15:20:00 發(fā)布:
00想法正確 樓主的理解有誤,大于101LED亮,點(diǎn)亮后,小于99再滅。 在LED滅的時(shí)候,如果值是100,則不亮,這就是滯回。 很多地方應(yīng)用的到,電壓檢測芯片,mcu復(fù)位芯片都是這樣的。。。 數(shù)字濾波是必要的,至于用哪種,樓主根據(jù)應(yīng)用選擇。 * - 本貼最后修改時(shí)間:2006-4-17 15:22:59 修改者:bolofeng |
|
| 8樓: | >>參與討論 |
| 作者: FZJ 于 2006/4/17 16:15:00 發(fā)布:
那換作是電壓顯示呢?? 如果電壓瞬間突變那怎么辦?比如一開始電壓是5V,AD轉(zhuǎn)換值為255,正常顯示5V電壓,然后由于某種原因引起電壓瞬間突變下降到2V左右,對應(yīng)上面的AD值是100,這樣還能保持先前的狀態(tài)嗎?不可能顯示5V吧?那該怎么顯示?? |
|
| 9樓: | >>參與討論 |
| 作者: computer00 于 2006/4/17 16:19:00 發(fā)布:
對于電壓顯示,最后一位跳動是允許的。 所以你不用管它,讓它顯示出來即可。 如果照你那樣,既然0-100都可以不改變顯示,那么到101不改變顯示,又何妨呢? |
|
| 10樓: | >>參與討論 |
| 作者: gtw 于 2006/4/17 18:31:00 發(fā)布:
就像雙穩(wěn)態(tài)觸發(fā)器…… |
|
| 11樓: | >>參與討論 |
| 作者: fzj 于 2006/4/18 8:00:00 發(fā)布:
computer00 :你理解錯(cuò)了,謝謝! 我是要檢測24V的直流電池電壓,通過電阻分壓后分4檔顯示,由于電池空載狀態(tài)下的電壓比負(fù)載狀態(tài)下的電壓高出好多,28V左右,而帶負(fù)載后馬上跌落到23V多點(diǎn),如果按你的意思以28V顯示4個(gè)LED,如果帶載工作后電壓回落到那個(gè)點(diǎn),而恰恰單片機(jī)不處理那個(gè)點(diǎn),仍然保持4個(gè)LED長亮,這樣就會誤判,而且這個(gè)機(jī)率不是說沒有,為了保證4個(gè)LED不出現(xiàn)閃爍在每個(gè)相鄰LED之間都有一個(gè)不處理的段,即上面你所說的值100,這樣能行嗎? 不知道是我理解錯(cuò)了你的意思還是你理解錯(cuò)了我的意思?謝謝您! |
|
| 12樓: | >>參與討論 |
| 作者: fzj 于 2006/4/18 8:25:00 發(fā)布:
以8位AD,參考電壓5V把它分成5段 即0~51,52~102,103~153,154~204,205~255,在51和52,102和103,153和154,204和205之間會產(chǎn)生抖動現(xiàn)象,按你的意思把它改為0~51,53~102,104~153,155~204,206~255,這樣中間就有52,103,154和205,4個(gè)不處理的值,如果單片機(jī)檢測的值不在這4個(gè)段當(dāng)中一點(diǎn)問題都沒有,但萬一電壓跌落或者因空載而回升到某個(gè)點(diǎn),那樣不做處理肯定不對,但是這52,102,154,205又屬于誰呢??屬于任何一個(gè)都避免不了抖動,屬于任何一個(gè)都相當(dāng)于你所說的取消了“滯回”這個(gè)功能。 |
|
| 13樓: | >>參與討論 |
| 作者: fzj 于 2006/4/18 8:42:00 發(fā)布:
參考遲滯比較器原理,我是這么想的 還是要備份一個(gè)老的AD轉(zhuǎn)換值,和新的AD轉(zhuǎn)換值進(jìn)行比較,根據(jù)電壓上升和下降將幾個(gè)不處理的值分配給與它相接近的兩邊,即值52如果是電壓上升把它分配給53,當(dāng)作2V電壓處理,如果是下降把它分配給51當(dāng)作1V處理,這樣就完成了用運(yùn)放構(gòu)成遲滯比較器的功能,這樣就不會出現(xiàn)抖動現(xiàn)象,但不可避免的產(chǎn)生了2個(gè)值電壓來回誤差,不能作為高精度電壓檢測,不知道大家有沒有更好的辦法??謝謝! |
|
| 14樓: | >>參與討論 |
| 作者: computer00 于 2006/4/18 10:04:00 發(fā)布:
個(gè)人意見:對于這樣的指示,跳動也無妨。 跳動就說明電壓處于臨界狀態(tài)。 對于回差,如果取1的話,1LSB大概約等于0.1V。 你的LED顯示要求那么高精度嗎?例如,24.1V顯示4個(gè),而24.0V必須顯示3個(gè)?顯示4個(gè)不行?等到23.9V再顯示3個(gè)不行嗎? 既然是用LED做粗略的顯示,相差個(gè)0點(diǎn)幾V的,沒關(guān)系吧, |
|
| 15樓: | >>參與討論 |
| 作者: fzj 于 2006/4/18 11:53:00 發(fā)布:
老師:談?wù)勎业目捶?br>我的電壓檢測是不需要很高的精度,但考慮到將來或者以后需要設(shè)計(jì)高精度的也想從中了解一點(diǎn)技巧,呵呵,不知道您有沒有設(shè)計(jì)過高精度的,想聽聽您的建議,謝謝,另外我的電壓只是還有其他幾個(gè)跟AD有關(guān)的功能,如充電檢測,低壓報(bào)警,欠壓關(guān)閉,我不想因?yàn)橛辛硕秳佣饒?bào)警,或者關(guān)閉,或者LED亂閃爍,雖然這是電池電壓變化的正常結(jié)果,但是作為一個(gè)產(chǎn)品不允許,所以。。。 |
|
| 16樓: | >>參與討論 |
| 作者: fghsy 于 2006/4/18 16:47:00 發(fā)布:
還有采用回滯的辦法吧 99時(shí)是一種狀態(tài),101時(shí)是另一種狀態(tài),100時(shí)保持當(dāng)前狀態(tài),這樣合理 |
|
| 17樓: | >>參與討論 |
| 作者: yewuyi 于 2006/4/19 8:41:00 發(fā)布:
給你舉個(gè)例子 假設(shè)分成1~99,101~200兩擋,當(dāng)測量值超過101(包含101)時(shí),立即判斷為進(jìn)入了第二擋,則送第二擋的狀態(tài)指示,這時(shí),測量值可能有波動,當(dāng)測量值回跳到小于99(包含99),此時(shí)判斷為回到了第一擋,則送第一檔狀態(tài)指示即可。 從上面可以提煉出一個(gè)結(jié)論:如果我們把交叉區(qū)設(shè)置為99~101,那么99~101的具體狀態(tài)和你的第一狀態(tài)相關(guān),如果第一狀態(tài)為第一檔,那么在99~101內(nèi)始終判斷為第一檔,直到測量值超過交叉區(qū),超過以后顯示第二檔,進(jìn)入第二檔后,當(dāng)測量值回跳到99~101區(qū)間時(shí),始終判斷狀態(tài)依然為第二檔,直到測量值小于99后才判斷狀態(tài)遷移到了第一檔,如此往復(fù)即可。 另外還有一個(gè)辦法就是采用數(shù)字濾波,前一測量值和當(dāng)前測量值求平均,然后四舍五入,然后把分檔點(diǎn)的采樣時(shí)間搞得梢長點(diǎn),因?yàn)槟愕闹凳菃沃翟黾樱@樣也可以基本解決你的問題。(當(dāng)然這個(gè)方法不能完全解決跳的問題) 說明:在測量儀表的設(shè)計(jì)中,一個(gè)字的反復(fù)跳動是容許的。 |
|
| 18樓: | >>參與討論 |
| 作者: powerking 于 2006/4/19 12:59:00 發(fā)布:
笨笨方法 電池電壓一般變化不是太巨烈,要不上升或者下降。而且你的指示燈隨電池電壓立即變化并不能反映出電池的真實(shí)狀態(tài)(容量)。建議:簡單的方法就是增加采樣次數(shù),把平均時(shí)間延長(比方說1S)。復(fù)雜辦法,可以參考Curtis電量計(jì)。 |
|
| 19樓: | >>參與討論 |
| 作者: GUNMATO 于 2006/4/21 11:47:00 發(fā)布:
我是這樣做的 我的AD要不停的采樣電壓值并且判斷信號的合法性,于是我做了個(gè)計(jì)數(shù)器在 連續(xù)采樣一各信號周期,或多個(gè)信號周期,并且每次采樣都做合法性判斷,然后 將合法和非法性作累加,等到采樣周期到了,在判斷累加的結(jié)果。這樣不會有 閃爍發(fā)生了。。 |
|
| 20樓: | >>參與討論 |
| 作者: FZJ 于 2006/4/21 11:49:00 發(fā)布:
yewuyi同意你兩擋的說法 但是如果換作是3擋呢?仔細(xì)想想你的思路就不可行,我前面也說過了,交叉區(qū)的不可以不處理,不處理就會出現(xiàn)錯(cuò)誤,作為兩擋當(dāng)然不會出現(xiàn)錯(cuò)誤,說簡單點(diǎn)不是0我就當(dāng)作1處理,兩擋以上就不行。 |
|
| 21樓: | >>參與討論 |
| 作者: computer00 于 2006/4/21 12:22:00 發(fā)布:
暈了,樓主咋就轉(zhuǎn)不過彎來呢? 你要它精確,那么它就必須要跳動;如果你要它不跳動,那么就必須不能精確,因?yàn)槭聦?shí)上它就是波動的。 電壓是波動的,你能保證你的系統(tǒng)能夠?qū)崟r(shí)顯示?也許你采樣的剛好是波谷或者波峰? 100和101,再追究這一個(gè)字已經(jīng)沒有意義了。所以用滯回的方法肯定是對的,為了使顯示穩(wěn)定,就必須要犧牲準(zhǔn)確度。 本來就是波動的東東,強(qiáng)行要它穩(wěn)定,這本來就是一個(gè)犧牲精度的過程。 |
|
| 22樓: | >>參與討論 |
| 作者: FZJ 于 2006/4/21 12:54:00 發(fā)布:
computer00 老師,不談精度,就你的滯回方法不能解決呀,呵呵 理由看前面我所說的,會引起電壓判斷錯(cuò)誤,看看我的上下判斷處理方法會不會出現(xiàn)問題?多謝大蝦了! |
|
| 23樓: | >>參與討論 |
| 作者: computer00 于 2006/4/21 13:26:00 發(fā)布:
還是沒轉(zhuǎn)過彎來,哪里判斷錯(cuò)誤了?你能說說嗎? 24.0V,被判斷成24.1V,就不行了? |
|
| 24樓: | >>參與討論 |
| 作者: yewuyi 于 2006/4/21 15:31:00 發(fā)布:
暈!! 兩檔可以怎么就三檔不行了???? 我要說的是:不管它多少檔,依此類推…… |
|
| 25樓: | >>參與討論 |
| 作者: FZJ 于 2006/4/21 15:37:00 發(fā)布:
兩位老師仔細(xì)看看 我是要檢測24V的直流電池電壓,通過電阻分壓后分4檔顯示,由于電池空載狀態(tài)下的電壓比負(fù)載狀態(tài)下的電壓高出好多,28V左右,而帶負(fù)載后馬上跌落到23V多點(diǎn),如果按你的意思以28V顯示4個(gè)LED,如果帶載工作后電壓回落到那個(gè)點(diǎn),而恰恰單片機(jī)不處理那個(gè)點(diǎn),仍然保持4個(gè)LED長亮,這樣就會誤判,而且這個(gè)機(jī)率不是說沒有,為了保證4個(gè)LED不出現(xiàn)閃爍在每個(gè)相鄰LED之間都有一個(gè)不處理的段,即上面你所說的值100,這樣能行嗎? 不知道是我理解錯(cuò)了你的意思還是你理解錯(cuò)了我的意思?謝謝您! 重慶的快去-了解飛利浦32位ARM fzj 發(fā)表于 2006-4-18 08:25 PIC 單片機(jī) ←返回版面 以8位AD,參考電壓5V把它分成5段 即0~51,52~102,103~153,154~204,205~255,在51和52,102和103,153和154,204和205之間會產(chǎn)生抖動現(xiàn)象,按你的意思把它改為0~51,53~102,104~153,155~204,206~255,這樣中間就有52,103,154和205,4個(gè)不處理的值,如果單片機(jī)檢測的值不在這4個(gè)段當(dāng)中一點(diǎn)問題都沒有,但萬一電壓跌落或者因空載而回升到某個(gè)點(diǎn),那樣不做處理肯定不對,但是這52,102,154,205又屬于誰呢??屬于任何一個(gè)都避免不了抖動,屬于任何一個(gè)都相當(dāng)于你所說的取消了“滯回”這個(gè)功能。 重慶的快去-了解飛利浦32位ARM fzj 發(fā)表于 2006-4-18 08:42 PIC 單片機(jī) ←返回版面 參考遲滯比較器原理,我是這么想的 還是要備份一個(gè)老的AD轉(zhuǎn)換值,和新的AD轉(zhuǎn)換值進(jìn)行比較,根據(jù)電壓上升和下降將幾個(gè)不處理的值分配給與它相接近的兩邊,即值52如果是電壓上升把它分配給53,當(dāng)作2V電壓處理,如果是下降把它分配給51當(dāng)作1V處理,這樣就完成了用運(yùn)放構(gòu)成遲滯比較器的功能,這樣就不會出現(xiàn)抖動現(xiàn)象,但不可避免的產(chǎn)生了2個(gè)值電壓來回誤差,不能作為高精度電壓檢測,不知道大家有沒有更好的辦法??謝謝! |
|
| 26樓: | >>參與討論 |
| 作者: computer00 于 2006/4/21 16:10:00 發(fā)布:
剛好到那個(gè)點(diǎn),顯示4個(gè),就是正確的。不處理也無妨。 23.1V顯示4個(gè),23.0V可能顯示3個(gè),也可能顯示4個(gè),如果是下跌的,就顯示4個(gè),如果是上升的,就顯示3個(gè),這有什么不好的嗎? |
|
| 27樓: | >>參與討論 |
| 作者: FZJ 于 2006/4/21 16:25:00 發(fā)布:
這樣真的能行嗎,仔細(xì)想想看 假如現(xiàn)在電壓是22~24我顯示4個(gè),在18V 這個(gè)點(diǎn)上我不作處理,18V以下我顯示1個(gè)由于電池等原因接上負(fù)載電壓回落到18V這個(gè)點(diǎn)上,好了本來要顯示一個(gè)的,現(xiàn)在還是顯示4個(gè),這樣的處理能行嗎? |
|
| 28樓: | >>參與討論 |
| 作者: eeproom 于 2006/4/21 16:26:00 發(fā)布:
既然電源電壓采樣,使用平均值算法就滿足了: (FilterParameter-1)*Val+New NewVal = ---------------------------------- FilterParameter 這樣計(jì)算,就不會抖動,除非電壓確實(shí)在門點(diǎn)反復(fù)長時(shí)間抖動。 FilterParameter根據(jù)需要取8?16?64?256?1024 . * - 本貼最后修改時(shí)間:2006-4-21 16:29:30 修改者:eeproom |
|
| 29樓: | >>參與討論 |
| 作者: computer00 于 2006/4/21 16:50:00 發(fā)布:
暈……………………………… 真不知道樓主是怎么想的…………………… * - 本貼最后修改時(shí)間:2006-4-23 2:08:58 修改者:computer00 |
|
| 30樓: | >>參與討論 |
| 作者: eeproom 于 2006/4/22 7:55:00 發(fā)布:
嘿嘿,沒見過吧? 對不劇烈波動的數(shù)據(jù)處理最基本的算法。 |
|
| 31樓: | >>參與討論 |
| 作者: OYGGJ 于 2006/4/24 11:34:00 發(fā)布:
computer00餓說法是對的, computer00餓說法是對的,就是和遲滯比較器比較器一樣的概念,也就是必須要有一個(gè)回差值,比如5V來講,2.5V以下為0,燈滅,2.5V以上為1,就是要燈亮,那么必須要有一個(gè)回差值在那里.必須有交叉點(diǎn),也就是可以做成0~2.7V為0,2.3~5V為1,那么你會問2.4,2.5,2.6V怎么處理是吧?也就是說如果如果是從5V下降的到2.6,2.5,2.4都維持原理的值也就是還是1,燈還是亮的,降到2.3V就必須動作,要為0,燈滅,同樣的如果是0V上升2.4,2.5,2.6也是維持原來的值,是0,燈是滅的,當(dāng)達(dá)到2.7V就要?jiǎng)幼?為1,燈亮,明白了吧? |
|
| 32樓: | >>參與討論 |
| 作者: wolfererer 于 2006/4/24 21:48:00 發(fā)布:
明顯樓主只能理解2擋的 就是理解不了3擋,4檔... 怪了 假如18-22為第3檔,22-24V為第4檔, 18和22都為交叉點(diǎn),既然跳到了18(第3檔)當(dāng)然要顯示3個(gè)LED,還不做處理? 暈.......... |
|
| 33樓: | >>參與討論 |
| 作者: FZJ 于 2006/6/27 14:30:00 發(fā)布:
暈什么呀??你這樣處理不抖才暈?zāi)兀?br>"假如18-22為第3檔,22-24V為第4檔," 都沒理解我的意思,就下結(jié)論,太冤了吧? 比如說1-3為1檔,5-8為第2檔,10-13為第3擋,中間有4和9兩個(gè)值不做處理對吧?那好一開始值為10—13之間,很明顯,做第3檔處理,那好如果電壓突變,AD值一下子回到4這個(gè)點(diǎn)上,不做處理依然處理第3檔可以嗎,遲滯比較工作原理是這樣的嗎????有哪位說暈的朋友能幫我解釋一下你們的處理思路???你們?nèi)绾谓鉀Q突變電壓???我想你們的處理思路只能在電壓連續(xù)線性變化當(dāng)中,不可以處理電壓突變,那又有誰會說,電池電壓不會突變??? |
|
| 34樓: | >>參與討論 |
| 作者: xieyuanbin 于 2006/6/28 13:11:00 發(fā)布:
還來? 其實(shí)多做一些平均值,什么突變都沒了.8次不夠?64次?我看到張工做過4096次,小數(shù)舍得多了也不會跳了,采樣時(shí)間延長了也不會跳了.我做過15分鐘快速充電器的曲線,64次平均值做下來10位AD數(shù)據(jù)都無突變. |
|
| 35樓: | >>參與討論 |
| 作者: computer00 于 2006/6/28 13:56:00 發(fā)布:
從10降到4時(shí)當(dāng)然要切換,但降到9時(shí)可不必理會。 滯回比較只在切換點(diǎn)附近暫時(shí)不動作,一旦超過切換點(diǎn),就要馬上切換了。 例如,在9附近不處理,從8變成9,依然認(rèn)為是8,必須要大過9后,才能切換; 而從10變成9,依然認(rèn)為是10,必須要小過9后,才能切換。這就是滯回。 像樓主剛舉的那個(gè)例子,都變成4了,明顯小于9,當(dāng)然要切換。 |
|
| 36樓: | >>參與討論 |
| 作者: fzj 于 2006/6/28 14:57:00 發(fā)布:
computer00 老師:能不能麻煩您幫我寫段C程序??謝謝拉 比如分3擋,0~70,75~150,155~255,分別跳轉(zhuǎn)到不同地方,可以嗎??謝謝您了! |
|
| 37樓: | >>參與討論 |
| 作者: computer00 于 2006/6/28 16:09:00 發(fā)布:
Re: //假設(shè) 0~70,75~150,155~255分別對應(yīng)1,2,3 unsigned CHAR judge(unsigned CHAR result) //調(diào)用函數(shù),返回的是要顯示的結(jié)果 { static unsigned CHAR status; //用來保存當(dāng)前的顯示狀況 if(result<71) //如果結(jié)果小于71,那當(dāng)然是顯示1 { status=1; return status; //返回應(yīng)該顯示的狀態(tài) } if(result<75) //如果結(jié)果大于70并且小于75 { if((status!=1)&&(status!=2)) //并且當(dāng)前的顯示狀態(tài)不是1也不是2 { if(result<73) //如果在70跟73之間,則顯示1 { status=1; } else //如果在73跟75之間,則顯示2 { status=2; } } //如果當(dāng)前狀態(tài)是1或者是2,應(yīng)該保持當(dāng)前狀態(tài)不變 return status; //返回應(yīng)該顯示的狀態(tài) } if(result<151) //如果結(jié)果大于75并且小于151,那當(dāng)然是顯示2 { status=2; return status; //返回應(yīng)該顯示的狀態(tài) } if(result<155) //如果結(jié)果大于150并且小于155 { if((status!=2)&&(status!=3)) //并且當(dāng)前的顯示狀態(tài)不是2也不是3 { if(result<153) { status=2; } else { status=3; } } //如果當(dāng)前狀態(tài)是2或者是3,應(yīng)該保持當(dāng)前狀態(tài)不變 return status; //返回應(yīng)該顯示的狀態(tài) } //大于等于155的,都認(rèn)為是3 status=3; return status; } //使用 DISPLAY(judge(ADC_result)); |
|
| 38樓: | >>參與討論 |
| 作者: fzj 于 2006/6/30 9:37:00 發(fā)布:
圈圈:3檔的判斷程序怎么寫得這么復(fù)雜? unsigned CHAR judge (unsigned CHAR *old_ad,unsigned CHAR *new_ad) { if ((*old_ad>=*new_ad+3)&&(*old_ad<=*new_ad-3)) { *old_ad=*new_ad;//電壓上升或者下降幅度大于3,舊AD值賦新值 if (*new_ad<=73) return (1); if ((*new_ad>73)&&(*new_ad<=153)) return (2); else return (3); } else return (0); //電壓上升或者下降幅度小于3,返回,不做處理。 } //你看看這樣合理嗎?比較簡單吧???嘿嘿! |
|
| 39樓: | >>參與討論 |
| 作者: computer00 于 2006/6/30 12:35:00 發(fā)布:
應(yīng)該可以吧,能實(shí)現(xiàn)你的目的即可。 |
|
| 40樓: | >>參與討論 |
| 作者: xieyuanbin 于 2006/7/3 12:34:00 發(fā)布:
圈圈真夠耐心的. |
|
| 41樓: | >>參與討論 |
| 作者: fzj 于 2006/7/3 14:37:00 發(fā)布:
圈圈老師是個(gè)熱心人呀,謝謝圈圈老師!謝謝。 建議各位老大像圈圈學(xué)習(xí),嘿嘿! |
|
| 42樓: | >>參與討論 |
| 作者: leituoxin 于 2006/7/4 17:40:00 發(fā)布:
我的思想: computer00的方法很好,我經(jīng)常用,但如果我做這個(gè)的話我會選擇我另外的一中方法,同一個(gè)數(shù)值多次確認(rèn)法,這叫做偽平均算法,比如,檢測數(shù)據(jù)在100,我不立刻處理,我連續(xù)檢測到10次100我才認(rèn)為是100,只要中間有一個(gè)99或者是101,我都認(rèn)為這不是100,這種方法我也經(jīng)常用,效果也不錯(cuò)。個(gè)人觀點(diǎn),如有問題,恕不負(fù)責(zé)。 |
|
| 43樓: | >>參與討論 |
| 作者: fzj 于 2006/7/4 20:34:00 發(fā)布:
樓上的兄弟:你這種思路就像處理開關(guān)一樣,不 錯(cuò)!! 應(yīng)該是個(gè)軟件抗干擾吧,不過檢測電壓會不會有問題??不可能在10次轉(zhuǎn)換當(dāng)中數(shù)據(jù)一點(diǎn)不差吧?? 不過我還是覺得思路不錯(cuò),我去試試!謝謝! |
|
| 44樓: | >>參與討論 |
| 作者: computer00 于 2006/7/5 15:23:00 發(fā)布:
我個(gè)人認(rèn)為,顯示跳動是不會有什么影響的 而且,這樣更加可以判斷出電量到底是多少了。你看很多設(shè)備的電量指示都是如此,有時(shí)會在兩格之間跳動,而且,一些設(shè)備還故意這樣做,相當(dāng)于增加了一個(gè)檔指示。例如,0-5,5-10,用兩個(gè)燈表示1和2,那么只能表示1-5或者5-10,但是如果加上跳動呢?例如在4-7之間,用來回跳動表示,那么就可以表示3種狀態(tài)了。 |
|
| 45樓: | >>參與討論 |
| 作者: s33 于 2006/7/8 7:53:00 發(fā)布:
個(gè)人觀點(diǎn) 樓主: 一個(gè)簡單問題非要爭個(gè)半年呢?你老是說要處理交叉點(diǎn),老是說不要LED抖動,但你對電壓突變又要求顯示,這樣不是前后矛盾嗎?舉例:突變電壓造成24V跳到18V,馬上又從18V跳回24V,接著又跳到了18V,請問,如果你每次都跳,是不是就出現(xiàn)了抖動,但如果你瀉回這個(gè)交叉點(diǎn),是不是沒有抖動呢?第二,既然你的分檔精度本身不高,對于交叉點(diǎn)的突變又何必計(jì)較呢,絕對不是你所說的錯(cuò)誤判斷啊,又不是此時(shí)判斷停止了,程序還在繼續(xù)跑啊,還有,你的AD采樣又不是1小時(shí)來一次的,肯定是半秒以內(nèi)吧,下一次的結(jié)果不就可以正確顯示了嗎,18.1就不邊,17.9不就變了. |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 www.hbjingang.com 浙ICP證030469號 |