国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

CW32L012的PID溫度控制——算法基礎

CW32生態社區 ? 來源:CW32生態社區 ? 作者:CW32生態社區 ? 2026-01-05 16:27 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、什么是PID 控制算法

wKgZPGlU9SmAJD1EAAAQ7OK9QZ8910.jpg

PID 控制算法是比例(Proportional)- 積分(Integral)- 微分(Derivative) 控制的簡稱,是工業控制、嵌入式系統中最經典、應用最廣泛的閉環控制算法。它的核心思想是通過偏差(設定值與實際值的差值)的比例、積分、微分三個環節的加權組合,計算出控制量,使系統的實際輸出快速、穩定地逼近設定值

二、核心公式(連續域)

wKgZO2lU9SmAJlX6AAAMNnXF6as787.jpg

wKgZPGlU9SmATD4AAABbWOXML2o481.jpg

比例環節(P)

核心作用:即時響應偏差,偏差越大,控制量越大。

缺點:僅用 P 控制會存在穩態誤差(系統穩定后,實際值與設定值仍有差距);Kp過大會導致系統震蕩。

積分環節(I)

核心作用:累積歷史偏差,只要存在偏差,積分項就會持續增大,直到偏差為 0,從而消除穩態誤差。

缺點:積分累積會導致系統超調(實際值超過設定值),甚至震蕩;系統啟動初期積分飽和會影響響應速度。

微分環節(D)

核心作用:預測偏差變化趨勢,偏差變化越快,微分項輸出越大,提前抑制偏差的變化(類似 “阻尼” 作用)。

缺點:對噪聲敏感傳感器的微小波動會被放大);Kd過大會導致系統響應遲緩。

離散化公式嵌入式系統常用)

嵌入式 MCU離散采樣系統,無法直接計算連續的積分和微分,需要將上述的連續域PID 公式離散化,用數值積分數值微分替代連續運算,得到離散 PID 公式

設系統采樣周期為 Ts,第 k 次采樣時刻的偏差為 e(k)=r(k)-y(k)(設定值-實際采樣值),則離散 PID 有兩種常用形式:

位置式PID

wKgZO2lU9SqAIVFVAAAN3qlv7rA736.jpg

特點:輸出 u(k) 是絕對控制量,也就是閥門開度(如電機的目標占空比、舵機的目標角度)。

C語言代碼(通用):

typedef struct {
    float kp;          // 比例系數
    float ki;          // 積分系數
    float kd;          // 微分系數
    float set_point;   // 設定值
    float feedback;    // 反饋值
    float error;       // 當前誤差 (set_point - feedback)
    float error_sum;   // 誤差積分和(防止積分飽和)
    float error_prev;  // 上一次誤差(微分用)
    float output_max;  // 輸出最大值
    float output_min;  // 輸出最小值
} PID_Positional;
/**
- @brief 位置式 PID 核心計算(無初始化函數,參數需外部賦值)
- @param pid: 位置式 PID 結構體指針
- @param set_point: 設定值
- @param feedback: 反饋值
- @return 位置式 PID 輸出值
*/
float PID_Positional_Calc(PID_Positional *pid, float set_point, float feedback) {
    if (pid == NULL) return 0.0f;
    // 更新設定值和反饋值
    pid->set_point = set_point;
    pid->feedback = feedback;
    // 計算當前誤差
    pid->error = pid->set_point - pid->feedback;
    // 積分項(帶積分限幅,防止積分飽和)
    pid->error_sum += pid->error;
    // 積分限幅:根據輸出限幅和 ki 動態約束(也可直接賦值固定值)
    float integral_max = (pid->output_max / pid->ki) * 0.8f;
    float integral_min = (pid->output_min / pid->ki) * 0.8f;
    if (pid->error_sum > integral_max) pid->error_sum = integral_max;
    if (pid->error_sum < integral_min) pid-?>error_sum = integral_min;
    // 位置式 PID 核心公式
    float output = pid->kp * pid->error +                    // 比例項
                   pid->ki * pid->error_sum +                // 積分項
                   pid->kd * (pid->error - pid->error_prev); // 微分項
    // 輸出限幅
    if (output > pid->output_max) output = pid->output_max;
    if (output < pid-?>output_min) output = pid->output_min;
    // 更新上一次誤差
    pid->error_prev = pid->error;
    return output;
}

2.增量式 PID

計算相鄰兩次控制量的差值 Δ u(k),公式推導:

wKgZPGlU9SqAdGMMAAAvPKoIl2w159.jpg

特點:輸出Δ u(k)控制量增量,只需疊加到上一次的控制量上(在上一次的控制輸出上進行加減):u(k)=u(k-1)+Δ u(k)。

C語言代碼(通用):

typedef struct {
    float kp;          // 比例系數
    float ki;          // 積分系數
    float kd;          // 微分系數
    float set_point;   // 設定值
    float feedback;    // 反饋值
    float error;       // 當前誤差 (set_point - feedback)
    float error_prev1; // 前1次誤差
    float error_prev2; // 前2次誤差
    float output_inc;  // 增量輸出
    float output_max;  // 輸出最大值(用于增量限幅)
    float output_min;  // 輸出最小值(用于增量限幅)
} PID_Incremental;
/**
@brief 增量式 PID 核心計算(無初始化函數,參數需外部賦值)
@param pid: 增量式 PID 結構體指針
@param set_point: 設定值
@param feedback: 反饋值
@return 增量式 PID 輸出增量
*/
float PID_Incremental_Calc(PID_Incremental *pid, float set_point, float feedback) {
    if (pid == NULL) return 0.0f;
    // 更新設定值和反饋值
    pid->set_point = set_point;
    pid->feedback = feedback;
    // 計算當前誤差
    pid->error = pid->set_point - pid->feedback;
    // 增量式 PID 核心公式
    pid->output_inc = pid->kp * (pid->error - pid->error_prev1) +          // 比例增量
                      pid->ki * pid->error +                              // 積分增量
                      pid->kd * (pid->error - 2*pid->error_prev1 + pid->error_prev2); // 微分增量
    // 增量限幅(避免單次增量過大)
    float inc_max = (pid->output_max - pid->output_min) / 2;
    if (pid->output_inc > inc_max) pid->output_inc = inc_max;
    if (pid->output_inc < -inc_max) pid-?>output_inc = -inc_max;
    // 更新誤差歷史(前2次 → 前1次,前1次 → 當前)
    pid->error_prev2 = pid->error_prev1;
    pid->error_prev1 = pid->error;
    return pid->output_inc;
}

三、嵌入式系統如何使用PID控制算法?

建立閉環反饋

明確被控對象

被控對象:比如溫度、機器人關節、直流電機轉速等;

選擇合適的采樣周期對被控變量進行采樣

采集能反應被控對象當前狀態的信號

采樣周期的選擇依據:

香農采樣定理:采樣頻率至少是被控對象最高變化頻率的 2 倍,避免信號混疊;

被控對象響應速度:比如直流電機響應速度為 ms 級,采樣周期設置為1~10ms;溫度這類慢響應對象,采樣周期設置為1~5s

由此我們得到了被控對象溫度的實際溫度

PID運算出輸出量

將目標值和采樣值送入PID公式進行計算

需要注意:

抗積分飽和:當 PID 輸出達到執行器最大 / 最小量程時,停止積分累加;

積分分離:當誤差|ek|大于設定閾值時,暫停積分項運算,避免積分飽和導致的超調;

輸出到執行器

將PID公式運算出來的結果作用到輸出執行器

需要注意:

數值限幅:運算后必須將輸出量限制在執行器的有效范圍(比如 PWM 占空比 0~100%、DAC 輸出 0~4095),避免輸出超限損壞執行器;

PID參數的調參(Kp,Ki,Kd)

建立好閉環反饋環節后就可以對PID參數進行整定了,我們實際最多使用的是經驗試湊法,這里只分享試湊法:

試湊法的核心邏輯:先調 P,再調 I,最后調 D,每次只改一個參數,觀察系統響應,逐步逼近最優值。

只調比例環節(P),關閉 I 和 D

Ki=0,Kd=0,K_p 從 0 開始緩慢增大;直到響應較快,實際值快速接近設定值,輕微震蕩后穩定,穩態誤差較小

wKgZO2lU9SqARUcJAAA4KOarfRk910.jpg

(此時可能會有靜態誤差,即輸出一直達不到目標值這種情況)

Kp過大-->系統可能會震蕩

Kp過小-->系統響應較慢, 可能達不到目標值

加入積分環節(I),消除穩態誤差

為了消除靜態誤差,加入積分環節,在Kp已有的基礎上,Kd=0,加入Ki,Ki 從 0 開始緩慢增大,直到系統能消除靜態誤差,并且不發生震蕩

wKgZPGlU9SqAYlvOAAA7AA4660I327.jpg

wKgZPGlU9SuATW43AABWDlx2zrE696.jpg

(要注意抗積分飽和,不然系統極易發生震蕩)

Ki過大-->系統可能會震蕩

Ki過小-->系統依舊有靜差

加入微分環節(D),加快響應

若已達到預期的控制效果可不引入微分環節。

若未達到預期的控制效果,可以在前面的基礎上使Kid從 0 開始緩慢增大,直到超調大幅減小,響應速度基本不變,系統快速穩定。

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

    關注

    7

    文章

    310

    瀏覽量

    39084
  • PID
    PID
    +關注

    關注

    38

    文章

    1499

    瀏覽量

    91162
  • 控制算法
    +關注

    關注

    4

    文章

    171

    瀏覽量

    22739
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    FOC控制中如何利用芯片內部的運放設計電流采樣電路?

    最近開發電機控制的項目,我開始使用最新的CW32L012做主控,CW32L012作為混合信號MCU,相比于傳統MCU控制,集成度較高,性能當然也更好,加之又是48Pin的芯片,因此我開
    的頭像 發表于 01-05 16:50 ?2683次閱讀
    FOC<b class='flag-5'>控制</b>中如何利用芯片內部的運放設計電流采樣電路?

    堅持繼續布局32位MCU,進一步完善產品陣容,96Mhz主頻CW32L012新品發布!

    基于CW32L01x系列低功耗微控制器家族的全新成員:CW32L012系列產品。 CW32L012基于ARM? Cortex-M0+內核,主頻高達96MHz,同時集成了CORDIC硬件
    發表于 07-16 16:32

    **CW32L012****開發評估板的第一個程序**

    CW32L012****開發評估板的第一個程序 最近以15.99在CW32生態社區入手了這塊CW32L012開發評估板,我迫不及待的燒錄進電燈程序,看看這塊板子是否是正常的,能否滿足我后面的學習
    發表于 11-22 00:09

    CW32L012小型機器人控制評估板活動 四足機器人+智能小車 開箱評測

    。 這次CW32L012的評測活動,CW32生態社區將開發板、以及各類套件與相關資料(技術資料、例程代碼、視頻教程等)準備得非常豐富,對初學者非常地有好,可以說是手把手帶你入門,新手小白可以趁機入手
    發表于 11-24 23:44

    基于PID算法溫度控制

    利用安芯一號單片機控制溫度加熱器,軟件實現PID算法,利用溫度傳感器返回溫度值,將
    發表于 11-04 15:34

    基于單片機PID算法溫度控制系統設計資料分享

    恒溫控制器廣泛應用于工業需要溫度控制的地方,電子產品出貨前也要進行恒溫老化測試,溫度控制器必不可少,而
    發表于 11-10 07:30

    溫度控制PID算法的C語言程序

    溫度控制PID算法的C語言程序,以前寫論文收集的一些資料
    發表于 06-06 10:00 ?66次下載

    溫度控制PID算法及C程序實現

    溫度控制PID算法j較為復雜,下面結合實際淺顯易懂的闡述一下PID控制理論,將
    發表于 05-31 16:31 ?121次下載

    基于改進PID控制算法的火電廠過熱溫度控制

    基于改進PID控制算法的火電廠過熱溫度控制
    發表于 07-01 16:20 ?39次下載

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

    PID溫控系統是一種常用的控制系統,用于實現對溫度變量的精確控制PID算法根據當前的
    的頭像 發表于 08-14 18:21 ?3946次閱讀
    基于<b class='flag-5'>CW</b>32的<b class='flag-5'>PID</b><b class='flag-5'>溫度</b><b class='flag-5'>控制</b>案例分享

    堅持繼續布局32位MCU,進一步完善產品陣容,96Mhz主頻CW32L012新品發布!

    CW32L012基于ARM? Cortex-M0+內核,主頻高達96MHz,同時集成了CORDIC硬件單元、擴展算術運算單元(EAU),可以提供部分數學函數、算術運算的硬件加速,特別適用于電機控制、電源、計量、信號處理等應用。
    的頭像 發表于 07-16 16:34 ?1339次閱讀
    堅持繼續布局32位MCU,進一步完善產品陣容,96Mhz主頻<b class='flag-5'>CW32L012</b>新品發布!

    使用芯源CW32的CW32L012開發評估板做了spi屏幕驅動

    CW32生態社區以極高的性價比入手了這塊CW32L012開發評估板,開發板以底板、核心板、1.77寸TFT顯示屏構成,所有的IO口都引出了排針,這點好評,使用杜邦線可以非常方便的連接其他模塊。引腳
    的頭像 發表于 11-21 11:34 ?608次閱讀
    使用芯源<b class='flag-5'>CW</b>32的<b class='flag-5'>CW32L012</b>開發評估板做了spi屏幕驅動

    CW32L012小機器人的電機控制

    線的大功率調速,電機的控制性能直接決定了系統的響應速度、運行精度、能耗效率與穩定性。這里分享CW32L012小機器人的正反轉、調速的電機控制 電機的正反轉 從配套的開發板資料介紹中可以知道,這是電機的驅動芯片RZ7899 從立創
    的頭像 發表于 11-21 13:18 ?2384次閱讀
    <b class='flag-5'>CW32L012</b>小機器人的電機<b class='flag-5'>控制</b>

    CW32L012與STM32F103的三角運算性能對比

    沒有硬件浮點運算單元。 但在運算三角函數時,CW32L012支持CORDIC算法。 二、 三角運算性能具體分析 1:標準庫浮點運算(如 math.h 的 sinf, cosf) 這是最常用但也是最慢的方式。 STM32F103C8 :
    的頭像 發表于 12-29 15:32 ?2305次閱讀
    <b class='flag-5'>CW32L012</b>與STM32F103的三角運算性能對比

    CW32L012與STM32G431的CORDIC三角函數運算性能對比

    本文對比均為作者實測,結果僅供參考,可附代碼供有意者評估~ STM32G431是STM32家族中較新的產品。CW32L012也是武漢芯源半導體最新推出的混合信號MCU,讓我們深入分析基于各自芯片
    的頭像 發表于 12-29 15:55 ?2477次閱讀
    <b class='flag-5'>CW32L012</b>與STM32G431的CORDIC三角函數運算性能對比