欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 請教一下單片機大神,關于溫度邏輯判斷怎么溫度防抖,還有定時器做延遲問題? [打印本頁]

作者: shijie240    時間: 2020-6-30 16:40
標題: 請教一下單片機大神,關于溫度邏輯判斷怎么溫度防抖,還有定時器做延遲問題?
請教一下大神,關于溫度邏輯判斷怎么溫度防抖,還有定時器做延遲問題 ,用定時器可以做類似下面程序功能嗎?
檢測到溫度界限 拉低io口持續一段時間 用定時器方法不影響主程序運作

單片機源程序如下:
if(A>=31)//溫度大于31度
                 {
                  LED1=1;
                  LED2=1;
                  AR1=0;//拉低下面io口持續2s
                  AR2=0;
                  AR3=0;
                  AR4=0;
                  AR5=0;
                  AR6=0;
                  AR7=0;
                  Delay2000ms();
                    }
          else if(A<31)
                 {
                  AR1=1;
                  AR2=1;
                  AR3=1;
                  AR4=1;
                  AR5=1;
                  AR6=1;
                  AR7=1;
                  LED1=~LED1;
                  LED2=~LED2;
            }


作者: 黃youhui    時間: 2020-7-1 10:33
基本上都市ADC采集然后ADC濾波,求得答案,
以前做adc從51下載的資料,忘了那個大佬的分享的了,希望能幫到你

十大濾波.rar

313.45 KB, 下載次數: 10


作者: shijie240    時間: 2020-7-1 10:33
會了,摸索出來了
作者: xxpp2011    時間: 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A>=31)//溫度大于31度
                  {
                  LED1=1;
                  LED2=1;
                  AR1=0;//拉低下面io口持續2s
                  AR2=0;
                  AR3=0;
                  AR4=0;
                  AR5=0;
                  AR6=0;
                  AR7=0;
                    }
                if(A<31)//溫度小于31度
                delay(50);
                 }
                  AR1=1;
                  AR2=1;
                  AR3=1;
                  AR4=1;
                  AR5=1;
                  AR6=1;
                  AR7=1;
                  LED1=~LED1;
                  LED2=~LED2;



作者: xujiabin    時間: 2020-7-1 11:23
xxpp2011 發表于 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A ...

你這程序寫的下面應該進不去吧,編譯器沒報警
作者: xujiabin    時間: 2020-7-1 11:24
xxpp2011 發表于 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A ...

就是if(A<31)根本進不去
作者: shijie240    時間: 2020-7-1 11:24
xxpp2011 發表于 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A ...

不要延遲函數,會拉低單片機處理速度
作者: xujiabin    時間: 2020-7-1 11:27
定時器里面加一個計數標志,等到計數到2秒給主循環一個標志位,再拉低或者拉高引腳,就可以了。溫度防抖是不是采樣會有誤差,可以加個電容濾波,然后定時器延時采樣一下,不建議在主函數里面加延時。
作者: xxpp2011    時間: 2020-7-1 11:41
xujiabin 發表于 2020-7-1 11:24
就是if(A

if只是防抖,如果50ms后仍然低于31度就會跳出上面的while語句,執行下面的LED狀態還原
作者: shijie240    時間: 2020-7-1 11:50
自己想了一下搞定了
if((((AB[M]-N)>TM[4])&&((AB[M+1]-N)>TM[4]))||(((AB[M]-N)>TM[4])&&((AB[M-1]-N)>TM[4]))||(((AB[M]-N)>TM[4])&&((AB[M+2]-N)>TM[4]))||(((AB[M]-N)>TM[4])&&((AB[M-2]-N)>TM[4])))        //判斷檢測數據
          {
           HAD=1;
           WM=1;
           GM=1;
          }
        else                   //延遲切換時間
        {
          if(GM==0)
                   {
                  HAD=0;
                }
         }
}
void IO_handle()   //LED IO口處理
{
                if(HAD==1)
                {
                  LED1=1;
                  LED2=1;
                  AR1=0;
                  AR2=0;
                  AR3=0;
                  AR4=0;
                  AR5=0;
                  AR6=0;
                  AR7=0;
                    }
          else if(HAD==0)
                 {
                  AR1=1;
                  AR2=1;
                  AR3=1;
                  AR4=1;
                  AR5=1;
                  AR6=1;
                  AR7=1;
                 if(HAV==1)
                   {
                         HAV=0;
                        LED1=~LED1;
                    LED2=~LED2;
               }
            }
}

void Timer0Init(void)                //50毫秒@11.0592MHz
{
        AUXR &= 0x7F;                //定時器時鐘12T模式
        TMOD &= 0xF0;                //設置定時器模式
        TL0 = 0x00;                //設置定時初值
        TH0 = 0x4C;                //設置定時初值
        TF0 = 0;                //清除TF0標志
        TR0 = 1;                //定時器0開始計時
        EA = 1;                        //開總中斷
        ET0 = 1;           //開定時器T0中斷
}

void Timer0(void) interrupt 1
  {
    TL0 = 0x00;                //設置定時初值
        TH0 = 0x4C;                //設置定時初值
        tewp++;
   if(tewp>=20)                 //LED燈閃時間處理
         {
          tewp=0;
          HAV=1;
         }
        if(WM==1)                        //開關延遲10s
          {
           temp++;
           if(temp>=20)
                  {
                  temp=0;
                  time++;
                  if(time>=10)
                         {
                          time=0;
                           WM=0;
                       GM=0;
                         }
                   }
           }

}

作者: naqishuben    時間: 2020-7-1 12:10
延時判斷,這是比較簡單的辦法
作者: 隨風飄遠    時間: 2020-7-1 12:20
溫度  應該要設置一個窗口值,升溫后報警  降到一定溫度值后再解除報警  就是有一個溫度范圍。 定時也要的,定義一個時間相關的變量, 降溫后 需要定時時間到了才解除報警
作者: shijie240    時間: 2020-7-1 12:30
xujiabin 發表于 2020-7-1 11:27
定時器里面加一個計數標志,等到計數到2秒給主循環一個標志位,再拉低或者拉高引腳,就可以了。溫度防抖是 ...

你這個是定時去處理 我想要的是定時器直接做延遲
作者: SKYLAR123    時間: 2020-7-1 13:34
shijie240 發表于 2020-7-1 12:30
你這個是定時去處理 我想要的是定時器直接做延遲

那你就在想要延時的下面做個標志位,標志位為1,定時器給標志位里面的變量累計加一,到了你想要延時的時間在做一個標志位這個標志位為1,說明,延時時間到了
作者: qyqx01    時間: 2020-7-1 18:07
不能在AD轉溫度時候作么,比如AD轉換后取平均值,然后作個定時標記,多少時間內刷新一次溫度值.剩下的溫度控制程序就完全可以直接一次性判斷了
if(ADCokF&&Flag2s)
{
    ADCokF=0;
   Flag2s=0;
    //溫度轉換;
   A=溫度;
}

控制程序直接去掉延時等待
if(A>=31)//溫度大于31度
                 {
                  LED1=1;
                  LED2=1;
                  AR1=0;//拉低下面io口持續2s
                  AR2=0;
                  AR3=0;
                  AR4=0;
                  AR5=0;
                  AR6=0;
                  AR7=0;
                    }
          else if(A<31)
                 {
                  AR1=1;
                  AR2=1;
                  AR3=1;
                  AR4=1;
                  AR5=1;
                  AR6=1;
                  AR7=1;
                  LED1=~LED1;
                  LED2=~LED2;
            }


作者: wxs732    時間: 2020-7-1 19:06
你應該想實現的是,溫度自動控制 !
    最長見的就是  “恒溫電烙鐵”  
這個需要PID 來實現。
    如果用繼電器 是不行的,因為在接近溫度值得時候開關頻繁。
    如果加熱水的話,還需要考慮水量減少時,這個開時間加熱的判斷。
    希望能幫到
   




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1