在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

基于CW32的PID溫度控制案例分享

CW32生態社區 ? 來源:CW32生態社區 ? 2023-08-14 18:21 ? 次閱讀

1.PID溫控系統是一種常用的控制系統,用于實現對溫度變量的精確控制。PID算法根據當前的溫度誤差以及誤差的變化率,計算一個控制信號,用于調節加熱器的輸出。以下是PID算法的三個主要組成部分:

①比例(Proportional)控制:比例控制是根據當前的溫度誤差來計算控制信號。具體而言,通過將設定溫度與實際溫度之間的差異稱為誤差,然后將誤差乘以一個比例增益參數,得到一個修正值。這個修正值與控制設備的輸出信號相加,以調整溫度控制。

②積分(Integral)控制:積分控制用于處理長期的溫度誤差。它通過對溫度誤差進行積分來計算一個積分誤差。積分誤差乘以積分增益參數,并且在一段時間內進行積累,得到一個修正值。積分控制可以幫助消除持續的穩態誤差,使系統更快地達到設定溫度。

③微分(Derivative)控制:微分控制用于處理溫度變化的速率。它通過計算溫度誤差的變化率,即誤差的導數,得到一個微分值。微分值乘以一個微分增益參數,用于調整修正值。微分控制可以幫助系統更快地響應溫度變化,以防止過沖。

通過結合比例、積分和微分部分的修正值,PID控制算法可以計算出最終的控制信號。這個控制信號會被傳遞給加熱器,以控制溫度的變化。

2.本實驗用到了CW32-48大學計劃開發板OK、溫控實驗模塊及Keil5開發環境。


CW32-48大學計劃開發板OK

溫控實驗模塊
e0ec5ca4-3a89-11ee-9e74-dac502259ad0.png
e0fbcc7a-3a89-11ee-9e74-dac502259ad0.png
溫控模塊電路原理


4.核心代碼

mian.c:


#include "config.h"


unsigned char face = 0;       //界面變量
unsigned char face_brush = 0; //界面刷新頻率控制


void InitSystem(void)  
{
  RCC_Configuration();        //時鐘配置
  ADC_Configuration();        //ADC采集通道配置,采集NTC熱敏電阻電壓
  PID_Configuration();        //PID參數配置
  GPIO_KEYS_Configuration(); //按鍵GPIO配置
  PWM_Init();                  //兩路PWM輸出初始化
  Lcd_Init();                 //TFT屏幕初始化
  BTIM_Init();                //定時器初始化
}


void Interface(void)  //人機交互界面
{
  if ( face_brush > 200 )  //200ms刷新一次
  {
    face_brush = 0;
    switch(face)
    {
      case 0://顯示PV和SV,該界面下,可以設定SV
        TFTSHOW_STRING_HEADLINE(0,0,"  PID  Control  ");
        TFTSHOW_STRING(2,0,"REAL_Temper(℃):");
        TFTSHOW_STRING(4,0,"   P V:       ");
        TFTSHOW_FLOAT_NUMBER(4,8,pid.Pv);
        TFTSHOW_STRING(6,0,"SET_Temper(℃):");
        TFTSHOW_STRING(8,0,"   S V:       ");
        TFTSHOW_FLOAT_NUMBER(8,8,pid.set_Sv);
        break;
      case 1://該界面下,可以設定P參數
        TFTSHOW_STRING_HEADLINE(0,0,"  PID  Control  ");
        TFTSHOW_STRING(2,0,"SET PID Control:");
        TFTSHOW_STRING(4,0,"    P :       ");
        TFTSHOW_INT_NUMBER(4,8,pid.set_Kp);
        break;
      case 2://該界面下,可以設定I參數
        TFTSHOW_STRING_HEADLINE(0,0,"  PID  Control  ");
        TFTSHOW_STRING(2,0,"SET PID Control:");
        TFTSHOW_STRING(4,0,"    I :       ");
        TFTSHOW_FLOAT_NUMBER(4,8,pid.set_Ki);
        break;
      case 3://該界面下,可以設定D參數
        TFTSHOW_STRING_HEADLINE(0,0,"  PID  Control  ");
        TFTSHOW_STRING(2,0,"SET PID Control:");
        TFTSHOW_STRING(4,0,"    D :       ");
        TFTSHOW_INT_NUMBER(4,8,pid.set_Kd);
        break;
      case 4://該界面下,可以設定Out0,即修正值
        TFTSHOW_STRING_HEADLINE(0,0,"  PID  Control  ");
        TFTSHOW_STRING(2,0,"SET PID Control:");
        TFTSHOW_STRING(4,0,"   OUT0 :      ");
        TFTSHOW_INT_NUMBER(4,10,pid.set_Out0);
        break;
    }
  }
}


int main()           //主函數
{
  InitSystem();      //系統初始化
  while(1)
  {
    PID_Calc();      //PID運算
    Interface();     //人機交互界面
    Keys_Function(); //按鍵控制    
  }
}


pwm.c:


#include "pwm.h"


void PWM_Init(void)
{
  RCC_APBPeriphClk_Enable1(RCC_APB1_PERIPH_GTIM2,ENABLE); //使能GTIM2時鐘


  __RCC_GPIOA_CLK_ENABLE();   //使能GPIOA時鐘


  PA01_AFx_GTIM2CH2();        //打開PWM輸出通道
  PA02_AFx_GTIM2CH3();


  GPIO_InitTypeDef GPIO_InitStruct;


  GPIO_InitStruct.IT = GPIO_IT_NONE; 
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;  //推挽輸出模式
  GPIO_InitStruct.Pins = GPIO_PIN_1|GPIO_PIN_2;
  GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
  GPIO_Init(CW_GPIOA, &GPIO_InitStruct);


  GTIM_InitTypeDef GTIM_Initstructure;     //通用定時器
  GTIM_Initstructure.Mode=GTIM_MODE_TIME;  //計數模式
  GTIM_Initstructure.OneShotMode=GTIM_COUNT_CONTINUE; //連續計數
  GTIM_Initstructure.Prescaler=GTIM_PRESCALER_DIV64; //預分頻
  GTIM_Initstructure.ReloadValue=2000-1; //ARR,計數重載周期2000
  GTIM_Initstructure.ToggleOutState=DISABLE;
  GTIM_TimeBaseInit(CW_GTIM2,>IM_Initstructure);


  GTIM_OCInit(CW_GTIM2,GTIM_CHANNEL3,GTIM_OC_OUTPUT_PWM_LOW); //GTIM2輸出比較,CH3、CH2
  GTIM_OCInit(CW_GTIM2,GTIM_CHANNEL2,GTIM_OC_OUTPUT_PWM_LOW); //有效占空比為低電平
  GTIM_Cmd(CW_GTIM2,ENABLE); //使能GTIM2
}


void PWM1_Output(uint32_t value)
{
  GTIM_SetCompare3(CW_GTIM2,value);  //設置GTIM2通道3的CCR
}


void PWM2_Output(uint32_t value)
{
  GTIM_SetCompare2(CW_GTIM2,value);  //設置GTIM2通道2的CCR
}


void PWM_ALL_Output(uint32_t value)  //PWM1、2同步輸出
{
  PWM1_Output(value);
  PWM2_Output(value);
}


pid.c:


#include "pid.h"


PID pid;    //定義PID結構體變量pid


void PID_Configuration(void)   //PID參數初始化配置 
{
  pid.Sv     = 55;


  pid.Kp     = 350;  //比例系數
  pid.Ki     = 10;   //積分系數
  pid.Kd     = 38;   //微分系數


  pid.Ek_1   = 0;    //上一次偏差
  pid.T      = 400;  //PID計算周期


  pid.cnt    = 0;    
  pid.cycle  = 2000; //PWM周期
  pid.Out0   = 500;  //PID修正值


  pid.set_Sv = pid.Sv;
  pid.set_Kp = pid.Kp;
  pid.set_Ki = pid.Ki;
  pid.set_Kd = pid.Kd;
  pid.set_Out0 = pid.Out0;
}


float Get_Pv(void)  //Pv意為當前測量值,即當前溫度
{
  return Get_Temperture();
}


void PID_Calc(void)    //PID算法
{
  float Pout,Iout,Dout;
  float out;


  if ( pid.cnt > pid.T )   //控制計算周期
  {
    pid.cnt = 0;


    pid.Pv = Get_Pv();       
    pid.Ek = pid.Sv - pid.Pv; //計算偏差
    pid.SumEk += pid.Ek;  //偏差累積




    Pout = pid.Kp * pid.Ek;  //比例控制


    Dout = pid.Kd * (pid.Ek - pid.Ek_1);  //微分控制


    if(pid.Pv>(pid.Sv-1))   //當測量值非常接近目標值的時候加入積分控制
    {
      Iout = pid.Ki * pid.SumEk;           //積分控制
      out = Pout + Iout + Dout + pid.Out0; 
    }
    else   out  = Pout + Dout + pid.Out0;  //測量值距離目標值較遠時只使用PD控制


    if ( out > pid.cycle ) pid.Out = pid.cycle; //限幅
    else if ( out < 0 )    pid.Out = 0;
    else                   pid.Out = out;
    PWM_ALL_Output(pid.Out);  //控制PWM輸出
    pid.Ek_1 = pid.Ek;  //進行下一次PID運算之前,將本次偏差變為上次偏差
  }
}





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19286

    瀏覽量

    229852
  • 熱敏電阻
    +關注

    關注

    14

    文章

    1166

    瀏覽量

    101532
  • 加熱器
    +關注

    關注

    3

    文章

    222

    瀏覽量

    21153
  • TFT屏
    +關注

    關注

    0

    文章

    17

    瀏覽量

    5761
  • PID溫度控制
    +關注

    關注

    0

    文章

    3

    瀏覽量

    938

原文標題:【CW32】基于CW32的PID溫度控制

文章出處:【微信號:CW32生態社區,微信公眾號:CW32生態社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于CW32的門禁綜合系統

    基于CW32單片機的門禁綜合系統是一款功能強大的智能門禁解決方案,它提供了三種開鎖方式:密碼開鎖、指紋開鎖和刷卡開鎖,為用戶提供方便、安全的門禁控制。該系統的核心控制器采用了CW32
    的頭像 發表于 12-28 11:43 ?1706次閱讀
    基于<b class='flag-5'>CW32</b>的門禁綜合系統

    CW32移植Free-RTOS】CW32開發者扶持計劃

    CW32配置Free-RTOS全過程,CW32開發者扶持計劃
    的頭像 發表于 04-18 09:38 ?6150次閱讀
    【<b class='flag-5'>CW32</b>移植Free-RTOS】<b class='flag-5'>CW32</b>開發者扶持計劃

    CW32快速開發入門

    CW32快速開發入門
    的頭像 發表于 04-24 18:56 ?1971次閱讀
    <b class='flag-5'>CW32</b>快速開發入門

    CW32開發者扶持計劃#CW32 #芯片

    CW32
    CW32生態社區
    發布于 :2023年05月24日 16:56:14

    CW32系列微控制器選型表分享

    CW32系列微控制器選型表
    發表于 09-15 07:30

    cw32和stm32的區別

    cw32和stm32的區別 CW32和STM32是兩種常見的單片機,被廣泛應用于各種電子設備中。在本文中,我們將深入探討CW32和STM32之間的區別和優劣勢。 1. 硬件性能 硬件性能是衡量單片機
    的頭像 發表于 08-16 11:15 ?4246次閱讀

    cw32和gd32的區別

    推出的一款32位微控制器,它是WCH唯一以ARM Cortex-M3內核為基礎的產品系列,Cortex-M3內核是ARM公司的經典內核之一,性能穩定,功耗低。CW32系列的主頻高達72MHz,內置了
    的頭像 發表于 08-16 11:15 ?1984次閱讀

    基于CW32的無刷水泵方案

    基于CW32的無刷水泵方案
    的頭像 發表于 11-03 17:28 ?881次閱讀
    基于<b class='flag-5'>CW32</b>的無刷水泵方案

    基于CW32熱敏電阻采集溫度應用

    基于CW32熱敏電阻采集溫度應用
    的頭像 發表于 10-25 16:45 ?549次閱讀
    基于<b class='flag-5'>CW32</b>熱敏電阻采集<b class='flag-5'>溫度</b>應用

    CW32 PWM輸出功能介紹

    CW32 PWM輸出功能介紹
    的頭像 發表于 09-27 16:12 ?838次閱讀
    <b class='flag-5'>CW32</b> PWM輸出功能介紹

    CW32實時時鐘(RTC)介紹

    CW32實時時鐘(RTC)介紹
    的頭像 發表于 10-24 15:36 ?1148次閱讀
    <b class='flag-5'>CW32</b>實時時鐘(RTC)介紹

    應用筆記-CW32 自舉程序中使用的 ISP 協議

    CW32自舉程序中使用的ISP協議CW32控制器片上FLASH存儲器有一部分區域用于存儲BootLoader啟動程序,在芯片出廠時已編程,用戶可利用BootLoader啟動程序提供的ISP模式
    發表于 06-06 13:37 ?7次下載

    基于CW32的RC522刷卡模塊的應用

    基于CW32的RC522刷卡模塊的應用
    的頭像 發表于 11-02 14:53 ?1129次閱讀
    基于<b class='flag-5'>CW32</b>的RC522刷卡模塊的應用

    基于CW32的物聯網應用

    CW32】基于CW32的物聯網應用
    的頭像 發表于 11-02 15:55 ?797次閱讀
    基于<b class='flag-5'>CW32</b>的物聯網應用

    CW32單片機在智能馬桶的應用介紹

    和調節。本文將介紹CW32單片機在智能馬桶的詳細應用。圖:CW32的智能馬桶控制CW32單片機在智能馬桶的應用介紹1.溫度感應與
    的頭像 發表于 12-20 10:09 ?624次閱讀
    <b class='flag-5'>CW32</b>單片機在智能馬桶的應用介紹
    主站蜘蛛池模板: 亚洲情a成黄在线观看动| 午夜视频播放| 能看的黄网| 狠狠五月深爱婷婷网| 五月天婷婷丁香中文在线观看| 2019天天爱天天做| 亚洲人xx视频| 狠狠色综合久久婷婷| 久久久久久国产精品免费免费 | 亚洲不卡视频在线| 日韩欧美在线中文字幕| 91久久夜色精品国产网站| 永久黄色免费网站| 五月婷婷视频在线观看| 国产高清成人mv在线观看| 久操视频在线| 亚洲大尺度视频| 白丝丝袜高跟国产在线视频| 511韩国理论片在线观看| 校园激情综合网| 8050网午夜一级毛片免费不卡| 欧美色丁香| 日本三级香港三级人妇网站| 天天色天天| 被公侵犯肉体中文字幕一区二区| 毛片免费网| jlzz日本| 日本在线黄| 人人草人| 性欧美video视频另类| 99青草青草久热精品视频 | 成人性色生活片免费看爆迷你毛片| aa在线播放| 三级国产在线| 日日做夜夜做| 亚洲欧美成人综合久久久| 藏经阁在线| 日本不卡视频| 国产又黄又免费aaaa视频| 欧美另类激情| 麦克斯奥特曼在线观看|