娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

增量式PID算法在c代碼部分的實現過程

發布者:genius5最新更新時間:2024-06-27 來源: elecfans關鍵字:c代碼 手機看文章 掃描二維碼
隨時隨地手機看文章

下經常會用到對溫度控制,適度控制,轉速控制等需要自動控制相關的操作,因此在使用中需要不斷提高對自動控制 原理部分的學習,一個好的自動控制系統包含三個 主要因素:穩,快,準。穩即系統的穩定性,快即系統的快速性,準即控制的準確性。


在自動控制中比例增益,積分時間,微分時間三個主要變量。下面就這三個變量進行動態展示。

動圖

如上圖所示,假設在單位階躍響應下,比例控制幅值,kp越大值越高相關的,積分時間控制精確度,數值越大波形超調量越大,微分時間控制波形的平緩程度。


下面貼出增量式PID算法在c代碼部分的實現過程。


//實現增量式PID算法 


#include 'stdio.h' 

void pid_init();//PID參數初始化 

float pid_realise(float speed);//實現PID算法   


struct {

    float set_speed;//設定速度 

    float actual_speed;//實際速度

    float error;//偏差  

    float error_next;//上一個偏差  

    float error_last;//上上一個偏差 

    float kp,ki,kd;//定義比例,積分,微分參數  

     

}pid;



int main()

{

    pid_init();

    int count = 0;

    while(count<400)//進行400次 PID 運算,使初始值從0開始接近200.0   

    {

        float speed = pid_realise(200.0);//設定值設定為200.0  

        printf('%fn',speed);//輸出每一次PID 運算后的結果  

        count++;

    }

}



void pid_init()

{

    pid.set_speed = 0.0;

    pid.actual_speed = 0.0;

    pid.error = 0.0;

    pid.error_next = 0.0;

    pid.error_last = 0.0;

    //可調節PID 參數。使跟蹤曲線慢慢接近階躍函數200.0 // 

    pid.kp = 0.2;

    pid.ki = 0.01;

    pid.kd = 0.2;

}



float pid_realise(float speed)//實現pid  

{

    pid.set_speed = speed;//設置目標速度  

    pid.error = pid.set_speed - pid.actual_speed;

    float increment_speed;//增量

     

    increment_speed = pid.kp*(pid.error-pid.error_next)+pid.ki*pid.error+

    pid.kd*(pid.error-2*pid.error_next+pid.error_last);//增量計算公式  

    

    pid.actual_speed+= increment_speed;

    pid.error_last = pid.error_next;//下一次迭代  

    pid.error_next = pid.error;

    return pid.actual_speed; 

    

}


運行數據得到圖標如下 :

poYBAGKqov2ALrgkAABTRApyEyM634.png

關鍵字:c代碼 引用地址:增量式PID算法在c代碼部分的實現過程

上一篇:ADC采樣過程中遇到的問題分析
下一篇:一款基于機智云平臺的物聯網智能倉庫安防系統

推薦閱讀最新更新時間:2025-06-07 23:36

使用STM32控制器系列中的DAC生成音頻和波形之應用實例
《使用DAC生成正弦波形》 1、說明 本示例分步說明如何生成正弦波形。 正弦波形也稱作單頻正弦波音,它是一種純音或絕對音。在確定聽覺系統的各種響應時,正弦音一般用作刺激源。 2、準備數字模式的正弦波形 要準備數字模式的波形,需要進行一些數學運算。這里的目標是產生正弦波的 10 個數字模式數據(采樣),變化范圍為 0 到 2*PI。 采樣間隔為 (2*PI)/ ns (采樣數)。 sin(x) 的結果值在 -1 到 1 之間,經過必要的重新校準后,可以生成 0 和 0xFFF 之間(對應電壓范圍為 0 V 到 3.3 V)的正向正弦波。 經過線性轉換后,數字輸入會轉換為 0 到 VREF+ 之間的輸出電壓。 各 DAC 通道
[單片機]
使用<font color='red'>STM32</font>微<font color='red'>控制器</font>系列中的DAC生成音頻和波形之應用實例
基于STM32的RA8806控制器LCD設計
0 引言 在現代電子設備中,觸摸屏的應用使電子設備更智能化、人性化。在手機、導航儀、電子儀器、咨詢終端等設備中,作為信息交流的媒介,觸摸屏具有界面編程靈活、反應速度快、功耗低、體積小的特點。 RA8806是一個文字與繪圖模式相結合的點矩陣液晶顯示控制器,最大能驅動640×240或320×480分辨率的LCD液晶觸摸屏,可以顯示文字、圖片、符號等復雜信息,支持文字、圖片混合顯示和區域卷動,支持90°,180°,270°的文字旋轉顯示,支持4/8 b的8080和6800系列兩種MPU接口,提供4×8或8×8的鍵盤掃描接口,提供使用者自行創建字型及符號的功能,可以進行文字對齊、設置粗體字、設置行間距和LCD對比度、背光調節。
[單片機]
基于<font color='red'>STM32</font>的RA8806<font color='red'>控制器</font>LCD設計
嵌入開發學習(10)<匯編寫啟動代碼之設置棧、調用c語言、開關看門狗和開關iCache>
C語言運行時需要和棧的意義: “C語言運行時(runtime)”需要一定的條件,這些條件由匯編來提供。C語言運行時主要是需要棧 C語言與棧的關系:C語言中的局部變量都是用棧來實現的。如果我們匯編部分沒有給C部分預先設置合理合法的棧地址,那么C代碼中定義的局部變量就會落空,整個程序就死掉了。 我們平時在編寫單片機程序(譬如51單片機)或者編寫應用程序時并沒有去設置棧,但是C程序還是可以運行的。原因是:在單片機中由硬件初始化時提供了一個默認可用的棧,在應用程序中我們編寫的C程序其實并不是全部,編譯器(gcc)在鏈接的時候會幫我們自動添加一個頭,這個頭就是一段引導我們的C程序能夠執行的一段匯編實現的代碼,這個代碼中就幫我們的C程序設
[單片機]
嵌入<font color='red'>式</font>開發學習(10)<匯編寫啟動<font color='red'>代碼</font>之設置棧、調用<font color='red'>c</font>語言、開關看門狗和開關iCache>
S3C2440—10.代碼重定位
本文主要介紹ARM裸機代碼重定位的相關知識,以及重定位的實現過程。 下面將由ARM裸機(S3C2440)的啟動方式開始分析,引入段的概念,隨后介紹鏈接腳本的使用以及代碼重定位的操作,首先會使用匯編語言驗證代碼重定位的可行性,最后將使用C語言實現代碼重定位。 一.啟動方式 S3C2440的啟動方式有倆種: NOR FLASH啟動 NAND FLASH啟動 說起ARM裸機的啟動方式,就是將程序的bin文件燒寫在ARM的存儲空間中,ARM從這些地址中讀取指令到CPU中執行,需要數據的時候去數據的存儲地址取數據。說白了啟動方式的不同就是bin文件燒寫地址的不同,可以燒在NOR FLASH中,也可以燒在NAND FLASH中,倆種F
[單片機]
S3<font color='red'>C</font>2440—10.<font color='red'>代碼</font>重定位
S3C2440之UART驅動代碼模板(RealView MDK)
好記心不如爛筆頭,為方便以后查看代碼及代碼重復利用,這里貼出S3C2440 UART驅動代碼。使用友善MINI2440開發板,開發環境為RealView MDK 4.22。需要注意的是,本代碼中,對GPIO的初始化放在了s3c2440.s中完成,采用keil自帶的html方式進行配置。 該源碼結構簡單明了,原始工程下載地址: 點擊打開鏈接 UART控制器初始化: void Uart_Init(void) { #define rULCON0 (*(volatile unsigned int*)0x50000000) #define rUCON0 (*(volatile unsigned int*
[單片機]
HOLTEK 主I2C的源程序代碼
HO LTE K 主I2C的源程序代碼 調用的代碼 case C_READ+C_I2C: return_buf = comm_buf ; // read(comm_buf ,comm_buf ,&return_buf ); break; case C_WRITE+C_I2C: return_buf = 0; write(comm_buf ,comm_buf ,&comm_buf ); break; 主I2C的代碼 #define Chip _ADDR 0x78 unsigned char
[單片機]
51單片機AT89C52與DS18B20的接口電路及源代碼
本文將介紹51單片機AT89C52與溫度傳感器芯片DS18B20構成測溫系統,并提供源程序供讀者參考.其測量的溫度精度達到0.1度,測量的溫度的范圍在-20度到+50度之間,用4位數碼管顯示出來。 硬件電路原理圖 圖2 AT89S52與DS18B20組成的測溫系統原理圖 工作原理 DS18B20數字溫度計是DALLAS公司生產的1-Wire,即單總線器件,具有線路簡單,體積小的特點。因此用它來組成一個測溫系統,具有線路簡單,在一根通信線,可以掛很多這樣的數字溫度計。DS18B20產品的特點 (1)、只要求一個I/O口即可實現通信。 (2)、在DS18B20中的每個器件上都有獨一無二的序列號。 (3)、實際應用中不需要外部任
[單片機]
51單片機AT89<font color='red'>C</font>52與DS18B20的接口電路及源<font color='red'>代碼</font>
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 晋中市| 延安市| 安乡县| 姜堰市| 平凉市| 罗定市| 偏关县| 绥中县| 福清市| 双辽市| 鲁山县| 兴隆县| 东兴市| 大宁县| 龙州县| 满城县| 怀远县| 丹寨县| 格尔木市| 临邑县| 漯河市| 花莲市| 南靖县| 罗山县| 武威市| 探索| 大足县| 宁明县| 泾源县| 金湖县| 裕民县| 敖汉旗| 闵行区| 临安市| 甘洛县| 湖口县| 垣曲县| 淮阳县| 阿拉善左旗| 连江县| 青岛市|