久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3556|回復: 15
收起左側

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

[復制鏈接]
ID:282747 發表于 2020-6-30 16:40 | 顯示全部樓層 |閱讀模式
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;
            }

回復

使用道具 舉報

ID:592807 發表于 2020-7-1 10:33 | 顯示全部樓層
基本上都市ADC采集然后ADC濾波,求得答案,
以前做adc從51下載的資料,忘了那個大佬的分享的了,希望能幫到你

十大濾波.rar

313.45 KB, 下載次數: 10

回復

使用道具 舉報

ID:282747 發表于 2020-7-1 10:33 來自手機 | 顯示全部樓層
會了,摸索出來了
回復

使用道具 舉報

ID:452950 發表于 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;


回復

使用道具 舉報

ID:490426 發表于 2020-7-1 11:23 | 顯示全部樓層
xxpp2011 發表于 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A ...

你這程序寫的下面應該進不去吧,編譯器沒報警
回復

使用道具 舉報

ID:490426 發表于 2020-7-1 11:24 | 顯示全部樓層
xxpp2011 發表于 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A ...

就是if(A<31)根本進不去
回復

使用道具 舉報

ID:282747 發表于 2020-7-1 11:24 來自手機 | 顯示全部樓層
xxpp2011 發表于 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A ...

不要延遲函數,會拉低單片機處理速度
回復

使用道具 舉報

ID:490426 發表于 2020-7-1 11:27 | 顯示全部樓層
定時器里面加一個計數標志,等到計數到2秒給主循環一個標志位,再拉低或者拉高引腳,就可以了。溫度防抖是不是采樣會有誤差,可以加個電容濾波,然后定時器延時采樣一下,不建議在主函數里面加延時。
回復

使用道具 舉報

ID:452950 發表于 2020-7-1 11:41 | 顯示全部樓層

if只是防抖,如果50ms后仍然低于31度就會跳出上面的while語句,執行下面的LED狀態還原
回復

使用道具 舉報

ID:282747 發表于 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;
                         }
                   }
           }

}
回復

使用道具 舉報

ID:760185 發表于 2020-7-1 12:10 | 顯示全部樓層
延時判斷,這是比較簡單的辦法
回復

使用道具 舉報

ID:319023 發表于 2020-7-1 12:20 | 顯示全部樓層
溫度  應該要設置一個窗口值,升溫后報警  降到一定溫度值后再解除報警  就是有一個溫度范圍。 定時也要的,定義一個時間相關的變量, 降溫后 需要定時時間到了才解除報警
回復

使用道具 舉報

ID:282747 發表于 2020-7-1 12:30 | 顯示全部樓層
xujiabin 發表于 2020-7-1 11:27
定時器里面加一個計數標志,等到計數到2秒給主循環一個標志位,再拉低或者拉高引腳,就可以了。溫度防抖是 ...

你這個是定時去處理 我想要的是定時器直接做延遲
回復

使用道具 舉報

ID:636538 發表于 2020-7-1 13:34 | 顯示全部樓層
shijie240 發表于 2020-7-1 12:30
你這個是定時去處理 我想要的是定時器直接做延遲

那你就在想要延時的下面做個標志位,標志位為1,定時器給標志位里面的變量累計加一,到了你想要延時的時間在做一個標志位這個標志位為1,說明,延時時間到了
回復

使用道具 舉報

ID:466730 發表于 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;
            }

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 又黑又粗又长的欧美一区 | 欧美视频在线播放 | 91夜色在线观看 | 久久免费视频在线 | 国产一区二区在线播放视频 | 国产日韩免费视频 | 日韩高清中文字幕 | 欧美中文字幕在线观看 | 国产大片黄色 | 美日韩中文字幕 | 一区在线视频 | 成人亚洲性情网站www在线观看 | 日本免费一区二区三区视频 | 久久久久久久久久毛片 | 久久久精品久久 | 欧美精品一二三 | 欧美四虎| 久久中文字幕一区 | 麻豆精品一区二区三区在线观看 | 欧美1区2区 | 精品国产乱码一区二区三区 | 精品欧美一区二区三区久久久 | 91资源在线 | 99在线资源| 二区三区视频 | 国产精品网址 | 91视频大全 | 久久国产精品一区二区三区 | 成人高清视频在线观看 | 蜜臀av日日欢夜夜爽一区 | 久久久久久久久久久久一区二区 | 99久久婷婷| 婷婷色在线播放 | 国产在线观看不卡一区二区三区 | 欧美电影在线 | 狠狠涩 | 在线免费观看日本 | 亚洲免费一 | 亚洲欧美激情四射 | 日本久草 | 久久久久久久久国产 |