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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3726|回復: 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;
            }

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
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;


回復

使用道具 舉報

5#
ID:490426 發表于 2020-7-1 11:23 | 只看該作者
xxpp2011 發表于 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A ...

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

使用道具 舉報

6#
ID:490426 發表于 2020-7-1 11:24 | 只看該作者
xxpp2011 發表于 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A ...

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

使用道具 舉報

7#
ID:282747 發表于 2020-7-1 11:24 來自觸屏版 | 只看該作者
xxpp2011 發表于 2020-7-1 11:00
while(A>=31)//溫度大于31度
                 {                   delay(50);
                while(A ...

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

使用道具 舉報

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

使用道具 舉報

9#
ID:452950 發表于 2020-7-1 11:41 | 只看該作者

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

使用道具 舉報

10#
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;
                         }
                   }
           }

}
回復

使用道具 舉報

11#
ID:760185 發表于 2020-7-1 12:10 | 只看該作者
延時判斷,這是比較簡單的辦法
回復

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

14#
ID:636538 發表于 2020-7-1 13:34 | 只看該作者
shijie240 發表于 2020-7-1 12:30
你這個是定時去處理 我想要的是定時器直接做延遲

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

使用道具 舉報

15#
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 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久在视频 | 日韩精品欧美精品 | 久久久蜜臀国产一区二区 | 精品中文字幕一区二区 | 国产精品日本一区二区在线播放 | 韩国理论电影在线 | 国产a区 | 91精品无人区卡一卡二卡三 | 高清色视频 | 国产 欧美 日韩 一区 | 国产高清视频一区 | 国产视频线观看永久免费 | 91影片| 狠狠亚洲 | 久久久久久久久久久久亚洲 | 日韩在线观看视频一区 | 久久国产精品一区二区 | 久久久久久精 | 欧美日韩中文字幕在线 | 午夜视频一区二区三区 | 亚洲精品视频在线播放 | 在线日韩 | 丝袜毛片 | 亚洲综合五月天婷婷 | 国产成人精品一区二区三区在线观看 | 中文字幕第十一页 | 精品综合久久久 | 久久国内 | 一区不卡在线观看 | 91视频网址 | 视频一区在线播放 | 久久亚洲春色中文字幕久久久 | 99精品一区二区 | 国产精品久久久久久久久久久新郎 | 精品国产精品三级精品av网址 | 欧美精品一区二区三区在线四季 | 日韩欧美一区在线 | 亚洲品质自拍视频网站 | 亚洲视频免费 | 一级女毛片 | 国产高潮好爽受不了了夜夜做 |