找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1999|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)怎么判斷某個(gè)數(shù)據(jù)范圍?才不會(huì)在臨界值不穩(wěn)定,大佬請指教

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:959051 發(fā)表于 2022-7-20 15:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
如何判斷某個(gè)數(shù)據(jù)范圍,且不會(huì)被在臨界值跳動(dòng),造成判斷不穩(wěn)定。比如判斷一個(gè)溫度36.3-36.9,亮起第一個(gè)燈,36.9-37.3亮起第二個(gè)燈。如果在36.9中間跳動(dòng)一會(huì),就會(huì)出現(xiàn)一下兩個(gè)燈亮,一下一個(gè)燈亮,如何解決這個(gè)問題,大佬們幫幫忙提個(gè)方案,有示例代碼更好。萬分感謝。
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:883242 發(fā)表于 2022-7-20 18:10 | 只看該作者
加一段滯回hysteresis唄。超過36.95才亮起第二個(gè)燈,低于36.85才亮起第一個(gè)燈,并熄滅第二個(gè)燈。
回復(fù)

使用道具 舉報(bào)

板凳
ID:161164 發(fā)表于 2022-7-20 21:42 | 只看該作者
1. 輸入數(shù)值濾波后才比較
2. 比較范圍加死區(qū)。如判斷一個(gè)溫度36.3-36.9,亮起第一個(gè)燈,36.9-37.3亮起第二個(gè)燈

代碼就寫為
  1. if(ADC>= 36.4 && ADC <= 36.8)
  2. {
  3.         led1 = On;
  4. }
  5. else
  6. {
  7.         led1 = Off;
  8. }
  9. if(ADC>= 37。0 && ADC <= 37.2)
  10. {
  11.         led2 = On;
  12. }
  13. else
  14. {
  15.         led2 = Off;
  16. }
復(fù)制代碼




回復(fù)

使用道具 舉報(bào)

地板
ID:401564 發(fā)表于 2022-7-20 22:53 | 只看該作者
如果單片機(jī)有足夠的空間,你又不在乎效率的話,可以參考一下這個(gè),這個(gè)是我一個(gè)鋰電池電量指示函數(shù)
你參考一下,大概原理就是電壓變化量超過0.05V時(shí)才進(jìn)行比較,不會(huì)在臨界點(diǎn)來回跳的
//────────────────────────────────────────────
void Battry_Voltage_Disp(float Bat_Voltage)                                                //電池電壓處理,用于顯示指示燈和自動(dòng)關(guān)機(jī)
{                                                                                                                                //Bat_Voltage為當(dāng)前電池電壓
        float a;                                                                                                        //Last_Voltage為全局變量
        a=Bat_Voltage-Last_Voltage;                                                                         //本次電壓值和上次電壓進(jìn)行比較
        a=fabs(a);                                                                                                         //絕對值
if(a>0.05)                                                                                         
                        {                               
                                 Last_Voltage=Bat_Voltage;                                                //電池電壓變化超過0.05V,保存為上次電壓
                                a=Bat_Voltage;
                                if(a<2.9)ON=0;                                                                        //關(guān)機(jī)電壓:2.9V               
                                else if(a<3.35)Flash_light();                                        //指示燈:閃燈                               
                                else if((a>3.35)&&(a<3.55))Red_light();                        //指示燈:紅燈                                               
                                else if((a>3.55)&&(a<3.65))Orange_light();                //指示燈:橙燈
                                else         Green_light();                                                        //指示燈:綠燈
                        }
                       
}
//─────────────────────────────────────────────────

回復(fù)

使用道具 舉報(bào)

5#
ID:959051 發(fā)表于 2022-7-21 20:29 | 只看該作者
Y_G_G 發(fā)表于 2022-7-20 22:53
如果單片機(jī)有足夠的空間,你又不在乎效率的話,可以參考一下這個(gè),這個(gè)是我一個(gè)鋰電池電量指示函數(shù)
你參考一 ...

你好,感謝你江湖救急,謝謝!!想問下 Last_Voltage全局變量數(shù)據(jù)類型和初始值是多少?另外fabs絕對值是多少?
回復(fù)

使用道具 舉報(bào)

6#
ID:401564 發(fā)表于 2022-7-22 07:10 | 只看該作者
guoqiang881245 發(fā)表于 2022-7-21 20:29
你好,感謝你江湖救急,謝謝!!想問下 Last_Voltage全局變量數(shù)據(jù)類型和初始值是多少?另外fabs絕對值是 ...

Last_Voltage為浮點(diǎn)型呀,初始值為0.00
Bat_Voltage為電池電壓,是ADC計(jì)算好了的浮點(diǎn)型數(shù)據(jù)
a=Bat_Voltage-Last_Voltage;         //本次電壓值和上次電壓進(jìn)行比較
a的值就是本次電壓和上次電壓的相差值,有正值也有負(fù)值,所以進(jìn)行絕對值運(yùn)算
變化超過0.05V就進(jìn)行處理,不然的話,還是上次比較的結(jié)果
這個(gè)0.05V是可以改的,你調(diào)試的時(shí)候自己改一下,感覺良好就行
回復(fù)

使用道具 舉報(bào)

7#
ID:359272 發(fā)表于 2022-7-22 08:10 | 只看該作者
設(shè)置上下閾值,軟件模擬一個(gè)施密特觸發(fā)器
回復(fù)

使用道具 舉報(bào)

8#
ID:959051 發(fā)表于 2022-7-22 18:38 | 只看該作者
Y_G_G 發(fā)表于 2022-7-22 07:10
Last_Voltage為浮點(diǎn)型呀,初始值為0.00
Bat_Voltage為電池電壓,是ADC計(jì)算好了的浮點(diǎn)型數(shù)據(jù)
a=Bat_Voltag ...

好的  明白了,很感謝你的講解
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表