找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2678|回復(fù): 29
收起左側(cè)

單片機(jī)溫度控制的邏輯判斷代碼怎么寫(xiě)?

[復(fù)制鏈接]
ID:72649 發(fā)表于 2024-1-24 21:03 | 顯示全部樓層 |閱讀模式
三個(gè)溫度參數(shù):1、采集的實(shí)時(shí)溫度temp,2、設(shè)置停止溫度temp-off, 3、停機(jī)后溫度降低到temp-on溫度開(kāi)機(jī)a、第一次開(kāi)機(jī),只要溫度temp<temp-off  out停止加熱;
b、當(dāng)溫度從temp-off降低到temp-on溫度開(kāi)機(jī)。
這個(gè)代碼應(yīng)該怎么寫(xiě)?
回復(fù)

使用道具 舉報(bào)

ID:731755 發(fā)表于 2024-1-24 22:17 來(lái)自觸屏版 | 顯示全部樓層
PID控制
回復(fù)

使用道具 舉報(bào)

ID:13282 發(fā)表于 2024-1-24 23:42 | 顯示全部樓層
看你這個(gè)需求, 只是三個(gè)判斷點(diǎn), 那么設(shè)置不同狀態(tài)的flag值, 然后根據(jù)不同的狀態(tài)值去做對(duì)應(yīng)的邏輯判斷即可.
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-25 03:29 來(lái)自觸屏版 | 顯示全部樓層
xmcolong 發(fā)表于 2024-1-24 23:42
看你這個(gè)需求, 只是三個(gè)判斷點(diǎn), 那么設(shè)置不同狀態(tài)的flag值, 然后根據(jù)不同的狀態(tài)值去做對(duì)應(yīng)的邏輯判斷即可.

能不能具體點(diǎn)
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2024-1-25 07:53 | 顯示全部樓層
temp = Read_Temp();
if(Temp<Temp_On)
{
Out = on;
}
if(Temp>Temp_Off)
{
Out=Off;
}
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2024-1-25 10:11 | 顯示全部樓層
lkc8210 發(fā)表于 2024-1-25 07:53
temp = Read_Temp();
if(TempTemp_Off)
{

沒(méi)把滯回寫(xiě)出來(lái)。
回復(fù)

使用道具 舉報(bào)

ID:13282 發(fā)表于 2024-1-25 13:43 | 顯示全部樓層
#include "xxx.h" //看用的什么單片機(jī), 選對(duì)應(yīng)頭文件
bit First_On_Flag;      //定義第一次開(kāi)機(jī)標(biāo)志
bit HeatOnOff_Flag;  //定義加熱開(kāi)關(guān)標(biāo)志
unsigned char Temp,num; //定義全局變量temp,mode
define Temp_On 60;   //設(shè)置打開(kāi)加熱溫度值為60
define Temp_Off 80;  //設(shè)置關(guān)閉加熱溫度值為80
//函數(shù)聲明
void Read_Temp(); //溫度讀取函數(shù)
void Memory_Write(unsigned char Addr,unsigned int Value); //向地址Addr 寫(xiě)入數(shù)據(jù)Value
unsigned char Memory_Read(unsigned char Addr) //讀地址Addr 的數(shù)據(jù)
void main(void)
{
//各種初始化函數(shù);
First_On_Flag=0;
HeatOnOff_Flag=0;

while(1)
{
   Temp = Read_Temp();  //讀取當(dāng)前溫度值

   mode= Memory_Read(0x20); //讀取0x20數(shù)據(jù)到mode
  if(mode==0) //注意: 有些新的MCU沒(méi)有寫(xiě)過(guò)的是0, 有的要用null
  {
      Memory_Write(0x20,10); //向地址20寫(xiě)入10
  }
  if((Temp<Temp_Off)&&(Temp>Temp_On)&&(num==10)) //溫度低于temp_off 且 第一次開(kāi)機(jī)
   {
         HeatOff(); //停止加熱
   }
   if(Temp<Temp_On)
   {
        HeatOn();
        Memory_Write(20,11); //向地址20寫(xiě)入11, 這樣再次開(kāi)機(jī)后上面那個(gè)if將不再被執(zhí)行
   }
   if(Temp>Temp_Off)
   {      
         HeatOff();      
   }
}

打字好辛苦, 給些黑幣唄!

評(píng)分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-25 15:32 來(lái)自觸屏版 | 顯示全部樓層
lkc8210 發(fā)表于 2024-1-25 07:53
temp = Read_Temp();
if(TempTemp_Off)
{

如果溫度處于Temp-on和Temp-off之間,哪不是不能加溫了?
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2024-1-25 15:39 | 顯示全部樓層
lkc8210 發(fā)表于 2024-1-25 07:53
temp = Read_Temp();
if(TempTemp_Off)
{

不對(duì),滯回那部分寫(xiě)錯(cuò)了。
回復(fù)

使用道具 舉報(bào)

ID:1034262 發(fā)表于 2024-1-25 16:00 | 顯示全部樓層
溫度必須PID控制,否則會(huì)很難看。除非你要求很低,溫度可以飄移很大。
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2024-1-25 16:09 | 顯示全部樓層
hjx5548 發(fā)表于 2024-1-25 15:32
如果溫度處于Temp-on和Temp-off之間,哪不是不能加溫了?

b、當(dāng)溫度從temp-off降低到temp-on溫度開(kāi)機(jī)。
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-25 19:03 | 顯示全部樓層
Hephaestus 發(fā)表于 2024-1-25 15:39
不對(duì),滯回那部分寫(xiě)錯(cuò)了。

應(yīng)該怎么寫(xiě)呢?
回復(fù)

使用道具 舉報(bào)

ID:342822 發(fā)表于 2024-1-25 19:48 | 顯示全部樓層
滯回     加個(gè)等待200ms
回復(fù)

使用道具 舉報(bào)

ID:13282 發(fā)表于 2024-1-25 23:38 | 顯示全部樓層
xmcolong 發(fā)表于 2024-1-25 13:43
#include "xxx.h" //看用的什么單片機(jī), 選對(duì)應(yīng)頭文件
bit First_On_Flag;      //定義第一次開(kāi)機(jī)標(biāo)志
bit ...

感謝老大!
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2024-1-26 01:53 | 顯示全部樓層
hjx5548 發(fā)表于 2024-1-25 19:03
應(yīng)該怎么寫(xiě)呢?

就拿5樓代碼練手
  1. temp = Read_Temp();
  2. if(Temp<Temp_On)
  3. {
  4. Out = on;
  5. }
  6. if(Temp>Temp_Off)
  7. {
  8. Out=Off;
  9. }
復(fù)制代碼

因?yàn)槟闶菧乜刂,那么temp_on>temp_off,所以上面兩個(gè)if同時(shí)成立,單片機(jī)不知所措。
你設(shè)立個(gè)條件讓兩者不同時(shí)成立就行了唄,自己動(dòng)腦子想。
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-26 07:04 來(lái)自觸屏版 | 顯示全部樓層
Hephaestus 發(fā)表于 2024-1-26 01:53
就拿5樓代碼練手

因?yàn)槟闶菧乜刂疲敲磘emp_on>temp_off,所以上面兩個(gè)if同時(shí)成立,單片機(jī)不知所措 ...

temp = Read_Temp();
if(Temp<Temp_On)
{
Out = on;
}
else if(Temp>Temp_Off)
{
Out=Off;
}
這樣可以嗎?
回復(fù)

使用道具 舉報(bào)

ID:367624 發(fā)表于 2024-1-26 08:33 | 顯示全部樓層
這種控制,可以定義兩個(gè)參數(shù),停止加熱溫度和回差溫度兩個(gè)參數(shù),當(dāng)實(shí)時(shí)溫度小于停止加熱溫度減回差溫度時(shí)開(kāi)加熱,當(dāng)實(shí)時(shí)溫度達(dá)到停止加熱溫度時(shí)停止加熱,很簡(jiǎn)單的.
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2024-1-26 09:14 | 顯示全部樓層
Hephaestus 發(fā)表于 2024-1-26 01:53
就拿5樓代碼練手

因?yàn)槟闶菧乜刂疲敲磘emp_on>temp_off,所以上面兩個(gè)if同時(shí)成立,單片機(jī)不知所措 ...

???
Temp_Off的值一定會(huì)大于Temp_On啊
所以if(Temp<Temp_On)和if(Temp>Temp_Off)只會(huì)成立其中一個(gè) WhatsApp Image 2024-01-26 at 09.13.17.jpeg

回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-26 12:30 來(lái)自觸屏版 | 顯示全部樓層
xmcolong 發(fā)表于 2024-1-25 13:43
#include "xxx.h" //看用的什么單片機(jī), 選對(duì)應(yīng)頭文件
bit First_On_Flag;      //定義第一次開(kāi)機(jī)標(biāo)志
bit ...

單片機(jī)STC8H的呢?
回復(fù)

使用道具 舉報(bào)

ID:13282 發(fā)表于 2024-1-26 17:22 | 顯示全部樓層
hjx5548 發(fā)表于 2024-1-26 12:30
單片機(jī)STC8H的呢?

http://www.torrancerestoration.com/bbs/dpj-131249-1.html

這個(gè)帖子就是你說(shuō)的STC8的頭文件。
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-26 18:54 | 顯示全部樓層
lkc8210 發(fā)表于 2024-1-26 09:14
???
Temp_Off的值一定會(huì)大于Temp_On啊
所以if(TempTemp_Off)只會(huì)成立其中一個(gè)

處于T_on和T_off之間單片機(jī)要怎么處理?
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-26 18:55 | 顯示全部樓層

PID對(duì)于可控硅可以的,如果是繼電器呢?怎么調(diào)節(jié)?
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-26 19:00 | 顯示全部樓層
xmcolong 發(fā)表于 2024-1-24 23:42
看你這個(gè)需求, 只是三個(gè)判斷點(diǎn), 那么設(shè)置不同狀態(tài)的flag值, 然后根據(jù)不同的狀態(tài)值去做對(duì)應(yīng)的邏輯判斷即可.

if(T_on<temp)
flag=1;
if(T_off>temp)
flag=2;
if(T_on>temp)&&(T_off<temp)
flag=3;
是不是這樣做?
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2024-1-26 21:45 | 顯示全部樓層
hjx5548 發(fā)表于 2024-1-26 18:55
PID對(duì)于可控硅可以的,如果是繼電器呢?怎么調(diào)節(jié)?

不做產(chǎn)品純理論研究可控硅繼電器沒(méi)有區(qū)別!做具體產(chǎn)品才要考慮繼電器動(dòng)作過(guò)于頻繁很快就會(huì)把機(jī)械壽命消耗干凈的問(wèn)題。
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2024-1-27 15:14 來(lái)自觸屏版 | 顯示全部樓層
hjx5548 發(fā)表于 2024-1-26 18:54
處于T_on和T_off之間單片機(jī)要怎么處理?

Out輸出保持,直到越過(guò)Temo-off/temp-on
回復(fù)

使用道具 舉報(bào)

ID:72649 發(fā)表于 2024-1-29 00:07 | 顯示全部樓層
yuan旺仔小饅頭 發(fā)表于 2024-1-26 08:33
這種控制,可以定義兩個(gè)參數(shù),停止加熱溫度和回差溫度兩個(gè)參數(shù),當(dāng)實(shí)時(shí)溫度小于停止加熱溫度減回差溫度時(shí)開(kāi) ...

關(guān)鍵是停止溫度和開(kāi)機(jī)溫度,可以調(diào)節(jié)顯示的?應(yīng)該怎樣處理?
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2024-1-30 17:34 | 顯示全部樓層
hjx5548 發(fā)表于 2024-1-29 00:07
關(guān)鍵是停止溫度和開(kāi)機(jī)溫度,可以調(diào)節(jié)顯示的?應(yīng)該怎樣處理?

這個(gè)已經(jīng)超過(guò)題目范圍了,要寫(xiě)一本書(shū)才行,你先做,出問(wèn)題再說(shuō)。
回復(fù)

使用道具 舉報(bào)

ID:367624 發(fā)表于 2024-1-31 08:10 | 顯示全部樓層
hjx5548 發(fā)表于 2024-1-29 00:07
關(guān)鍵是停止溫度和開(kāi)機(jī)溫度,可以調(diào)節(jié)顯示的?應(yīng)該怎樣處理?

就設(shè)置兩個(gè)參數(shù)就好了,停止溫度和回差溫度,到停止溫度就關(guān),當(dāng)實(shí)時(shí)溫度小于停止溫度減回差就開(kāi)機(jī)(回差一般最小1度)
回復(fù)

使用道具 舉報(bào)

ID:382454 發(fā)表于 2024-1-31 10:21 | 顯示全部樓層
溫度低了,加熱,溫度高了停止加熱。就是溫差控制在1-3度之間即可。
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2024-1-31 13:09 | 顯示全部樓層
hjx5548 發(fā)表于 2024-1-29 00:07
關(guān)鍵是停止溫度和開(kāi)機(jī)溫度,可以調(diào)節(jié)顯示的?應(yīng)該怎樣處理?

用變量啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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