色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

第八章-PID 速度控制 PID控制 PID調參 PID溫度控制

dfhjgfg ? 來源:dfhjgfg ? 作者:dfhjgfg ? 2024-08-21 16:40 ? 次閱讀

功能介紹放開頭, 使用便捷無需愁

這是全網最詳細、性價比最高的STM32實戰項目入門教程,通過合理的硬件設計和詳細的視頻筆記介紹,硬件使用STM32F103主控資料多方便學習,通過3萬字筆記、12多個小時視頻、20多章節代碼手把手教會你如何開發和調試。讓你更快掌握嵌入式系統開發。

**V3.3.0-STM32智能小車 **

**視頻: **[https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click]

V3:HAL庫開發、功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、視覺控制、電磁循跡、RTOS等功能。

第八章-PID-速度控制

8.1-速度控制探索

前面我們已經能夠通過編碼器測量出速度值,下面我們來控制速度

我們先編寫一個簡單的控制方法

要求:講轉速控制再2.9-3.1轉每秒

可以把中斷里面不重要的輸出注釋掉
在這里插入圖片描述

if(Motor1Speed >3.1) Motor1Pwm--;
if(Motor1Speed< 2.9) Motor1Pwm++;
if(Motor2Speed >3.1) Motor2Pwm--;
if(Motor2Speed< 2.9) Motor2Pwm++;
Motor_Set(Motor1Pwm,Motor2Pwm);
printf("Motor1Speed:%.2f Motor1Pwm:%drn",Motor1Speed,Motor1Pwm);
printf("Motor2Speed:%.2f Motor2Pwm:%drn",Motor2Speed,Motor2Pwm);

HAL_Delay(100);

開始實驗
在這里插入圖片描述
現象就開始電機沒有到達3轉每秒,PWM占空比逐漸增大,電機****逐漸達到要求轉速、到達要求轉速后我們增加阻力,電機 變慢 ,阻力大小不邊PWM占空比逐漸更大轉速 逐漸更大

這樣我們就把轉速控制到我們想要的范圍,但是我們并不滿意、能夠看出來控制的速度很慢,給電機一些阻力電機至少要2-3秒能夠調整過來,這在一些場景是不允許的。

我們理想的控制效果是:在電機轉速很慢的是時候能快速調整,在電機一直轉的不能達到要求時候能夠更快速度調整

8.2-準備工作-匿名上位機曲線顯示速度波形方便觀察數據

為了方便觀察電機速度數據,我們通過上位機曲線顯示一下。

這里我們使用的上位機是匿名上位機-大佬寫的非常穩定功能也很多

我使用的版本是:****匿名上位機V7.2.2.8版本推薦大家和我使用一樣**
**匿名上位機官方下載鏈接:https://www.anotc.com/wiki/%E5%8C%BF%E5%90%8D%E4%BA%A7%E5%93%81%E8%B5%84%E6%96%99/%E8%B5%84%E6%96%99%E4%B8%8B%E8%BD%BD%E9%93%BE%E6%8E%A5%E6%B1%87%E6%80%BB
在這里插入圖片描述
我們要把STM32數據發送到匿名上位機,就要滿足匿名上位機的數據協議要求

在匿名上位機資料下載鏈接,可以下載到協議介紹

  • 匿名上位機V7通信協議,20210528發布:https://pan.baidu.com/s/1nGrIGWj6qr9DWOcGpKR51g 提取碼:z8d1
  • **CSDN **慕羽★大佬寫的協議解析教程博客:https://blog.csdn.net/qq_44339029/article/details/106004997
    1.先補充一下大小端模式
    這是因為在計算機系統中,我們是以字節為單位的,每個地址單元都對應著一個字節,一個字節為 8bit。但是在C語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),另外,對于位數大于8位的處理器,例如16位或者32位的處理器,由于寄存器寬度大于一個字節,那么****必然存在著一個如和將多個字節安排的問題 。因此就導致了大端存儲模式和小端存儲模式。例如一個16bit的short型x,在內存中的地址為0x0010,x的值為0x1122,那么0x11為高字節,0x22為低字節。對于大端模式,就將0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。
  • 所謂的大端模式(BE big-endian),是指數據的低位保存在內存的高地址中,而數據的高位,保存在內存的低地址中(低對高,高對低);
  • 所謂的小端模式(LE little-endian),是指數據的低位保存在內存的低地址中,而數據的高位保存在內存的高地址中(低對低,高對高)。
    常見的單片機大小端模式:(1)KEIL C51中,變量都是大端模式的,而KEIL MDK中,變量是小端模式的。(2)SDCC-C51是小端尋址,AVRGCC 小端尋址.(3)PC小端,大部分ARM是小端 (4)總起來說51單片機一般是大端模式,32單片機一般是小端模式.
    在這里插入圖片描述
    2.看一下上位機要求的協議
    在這里插入圖片描述
    靈活格式幀(用戶自定義幀)
    在這里插入圖片描述
    前面我們好理解

0xAA:一個字節表示開始

0xFF:一個字節表示目標地址

0xF1:一個字節表示發送功能碼

1-40:一個字節表示數據長度

數據內容有多個字節如何發送

因為串口每次發送一個字節,但是數據可能是int16_t 16位的數據,或者int32_t 32位數據,每次發送16位數據,先發送數據低八位,還是先發送數據高八位那?

**匿名協議通信介紹給出:**DATA 數據內容中的數據,采用小端模式傳送,低字節在前,高字節在后。

那么就要求,比如我們在發送16位數據0x2314我們要先發送低字節0x14,然后發送高字節0x23

那么如何解析出低字節或者高字節,就需要知道多字節數據在單片機里面是怎么存的,因為STM32是小端存儲,所以低字節就在低位地址中,高字節高位地址中。

如果使用32單片機 小端模式,0x23高地址,0x14在低地址,所以我們要先發低地址,再發高地址。

下面就是對16位數據,或者32位數據的拆分

//需要發送16位,32位數據,對數據拆分,之后每次發送單個字節
//拆分過程:對變量dwTemp 去地址然后將其轉化成char類型指針,最后再取出指針所指向的內容
#define BYTE0(dwTemp)  (*(char *)(&dwTemp))
#define BYTE1(dwTemp)  (*((char *)(&dwTemp) + 1))
#define BYTE2(dwTemp)  (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp)  (*((char *)(&dwTemp) + 3))

拆分后我們按照協議要求發送數據就可以了
在這里插入圖片描述
niming.c

#include "niming.h"
#include "main.h"
#include "usart.h"
uint8_t data_to_send[100];
?
//通過F1幀發送4個uint16類型的數據
void ANO_DT_Send_F1(uint16_t _a, uint16_t _b, uint16_t _c, uint16_t _d)
{
    uint8_t _cnt = 0;//計數值
    uint8_t sumcheck = 0;  //和校驗
    uint8_t addcheck = 0; //附加和校驗
    uint8_t i = 0;
data_to_send[_cnt++] = 0xAA;//幀頭
    data_to_send[_cnt++] = 0xFF;//目標地址
    data_to_send[_cnt++] = 0xF1;//功能碼
    data_to_send[_cnt++] = 8; //數據長度
//單片機為小端模式-低地址存放低位數據,匿名上位機要求先發低位數據,所以先發低地址
data_to_send[_cnt++] = BYTE0(_a);       
    data_to_send[_cnt++] = BYTE1(_a);

    data_to_send[_cnt++] = BYTE0(_b);
    data_to_send[_cnt++] = BYTE1(_b);

    data_to_send[_cnt++] = BYTE0(_c);
    data_to_send[_cnt++] = BYTE1(_c);

    data_to_send[_cnt++] = BYTE0(_d);
    data_to_send[_cnt++] = BYTE1(_d);
 for ( i = 0; i < data_to_send[3]+4; i++)
    {
        sumcheck += data_to_send[i];//和校驗
        addcheck += sumcheck;//附加校驗
    }
    data_to_send[_cnt++] = sumcheck;
    data_to_send[_cnt++] = addcheck;
HAL_UART_Transmit(&huart1,data_to_send,_cnt,0xFFFF);//這里是串口發送函數
}
//,通過F2幀發送4個int16類型的數據
void ANO_DT_Send_F2(int16_t _a, int16_t _b, int16_t _c, int16_t _d)   //F2幀  4個  int16 參數
{
    uint8_t _cnt = 0;
    uint8_t sumcheck = 0; //和校驗
    uint8_t addcheck = 0; //附加和校驗
    uint8_t i=0;
   data_to_send[_cnt++] = 0xAA;
    data_to_send[_cnt++] = 0xFF;
    data_to_send[_cnt++] = 0xF2;
    data_to_send[_cnt++] = 8; //數據長度
//單片機為小端模式-低地址存放低位數據,匿名上位機要求先發低位數據,所以先發低地址
    data_to_send[_cnt++] = BYTE0(_a);
    data_to_send[_cnt++] = BYTE1(_a);

    data_to_send[_cnt++] = BYTE0(_b);
    data_to_send[_cnt++] = BYTE1(_b);

    data_to_send[_cnt++] = BYTE0(_c);
    data_to_send[_cnt++] = BYTE1(_c);

    data_to_send[_cnt++] = BYTE0(_d);
    data_to_send[_cnt++] = BYTE1(_d);

  for ( i = 0; i < data_to_send[3]+4; i++)
    {
        sumcheck += data_to_send[i];
        addcheck += sumcheck;
    }
?
    data_to_send[_cnt++] = sumcheck;
    data_to_send[_cnt++] = addcheck;

HAL_UART_Transmit(&huart1,data_to_send,_cnt,0xFFFF);//這里是串口發送函數
}
//通過F3幀發送2個int16類型和1個int32類型的數據
void ANO_DT_Send_F3(int16_t _a, int16_t _b, int32_t _c )   //F3幀  2個  int16 參數   1個  int32  參數
{
    uint8_t _cnt = 0;
    uint8_t sumcheck = 0; //和校驗
    uint8_t addcheck = 0; //附加和校驗
    uint8_t i=0;
    data_to_send[_cnt++] = 0xAA;
    data_to_send[_cnt++] = 0xFF;
    data_to_send[_cnt++] = 0xF3;
    data_to_send[_cnt++] = 8; //數據長度
//單片機為小端模式-低地址存放低位數據,匿名上位機要求先發低位數據,所以先發低地址
    data_to_send[_cnt++] = BYTE0(_a);
    data_to_send[_cnt++] = BYTE1(_a);

    data_to_send[_cnt++] = BYTE0(_b);
    data_to_send[_cnt++] = BYTE1(_b);

    data_to_send[_cnt++] = BYTE0(_c);
    data_to_send[_cnt++] = BYTE1(_c);
    data_to_send[_cnt++] = BYTE2(_c);
    data_to_send[_cnt++] = BYTE3(_c);

  for ( i = 0; i < data_to_send[3]+4; i++)
    {
        sumcheck += data_to_send[i];
        addcheck += sumcheck;
    }
?
    data_to_send[_cnt++] = sumcheck;
    data_to_send[_cnt++] = addcheck;
?
HAL_UART_Transmit(&huart1,data_to_send,_cnt,0xFFFF);//這里是串口發送函數
}
?

niming.h

#ifndef  NIMING_H
#define  NIMING_H
#include "main.h"
//需要發送16位,32位數據,對數據拆分,之后每次發送單個字節
//拆分過程:對變量dwTemp 去地址然后將其轉化成char類型指針,最后再取出指針所指向的內容
#define BYTE0(dwTemp)  (*(char *)(&dwTemp))
#define BYTE1(dwTemp)  (*((char *)(&dwTemp) + 1))
#define BYTE2(dwTemp)  (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp)  (*((char *)(&dwTemp) + 3))
?
?
void ANO_DT_Send_F1(uint16_t, uint16_t _b, uint16_t _c, uint16_t _d);
void ANO_DT_Send_F2(int16_t _a, int16_t _b, int16_t _c, int16_t _d);
void ANO_DT_Send_F3(int16_t _a, int16_t _b, int32_t _c );
?
#endif 
?

添加測試代碼
在這里插入圖片描述

//電機速度等信息發送到上位機
//注意上位機不支持浮點數,所以要乘100
ANO_DT_Send_F2(Motor1Speed*100, 3.0*100,Motor2Speed*100,3.0*100);

下面設置上位機-數據解析
在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述
這個是控制效果,并不理想,后面我們介紹PID控制
在這里插入圖片描述

8.3-P I D 逐個參數理解

在這里插入圖片描述
加入的現在 過去 未來概念

p:現在

i:過去

d:未來
在這里插入圖片描述
那么我們就開始寫PID

PID的結構體類型變量、里面成員都是浮點類型

先在pid.h聲明一個結構體類型、聲明.c中的函數
在這里插入圖片描述

#ifndef __PID_H
#define __PID_H
?
//聲明一個結構體類型
typedef struct 
{
float target_val;//目標值
float actual_val;//實際值
float err;//當前偏差
float err_last;//上次偏差
float err_sum;//誤差累計值
float Kp,Ki,Kd;//比例,積分,微分系數

} tPid;
?
//聲明函數
float P_realize(tPid * pid,float actual_val);
void PID_init(void);
float PI_realize(tPid * pid,float actual_val);
float PID_realize(tPid * pid,float actual_val);
#endif
?

然后在pid.c中定義結構體類型變量
在這里插入圖片描述

#include "pid.h"
?
//定義一個結構體類型變量
tPid pidMotor1Speed;
//給結構體類型變量賦初值
void PID_init()
{
pidMotor1Speed.actual_val=0.0;
pidMotor1Speed.target_val=0.00;
pidMotor1Speed.err=0.0;
pidMotor1Speed.err_last=0.0;
pidMotor1Speed.err_sum=0.0;
pidMotor1Speed.Kp=0;
pidMotor1Speed.Ki=0;
pidMotor1Speed.Kd=0;
}
//比例p調節控制函數
float P_realize(tPid * pid,float actual_val)
{
pid- >actual_val = actual_val;//傳遞真實值
pid- >err = pid- >target_val - pid- >actual_val;//當前誤差=目標值-真實值
//比例控制調節   輸出=Kp*當前誤差
pid- >actual_val = pid- >Kp*pid- >err;
return pid- >actual_val;
}
//比例P 積分I 控制函數
float PI_realize(tPid * pid,float actual_val)
{
pid- >actual_val = actual_val;//傳遞真實值
pid- >err = pid- >target_val - pid- >actual_val;//當前誤差=目標值-真實值
pid- >err_sum += pid- >err;//誤差累計值 = 當前誤差累計和
//使用PI控制 輸出=Kp*當前誤差+Ki*誤差累計值
pid- >actual_val = pid- >Kp*pid- >err + pid- >Ki*pid- >err_sum;

return pid- >actual_val;
}
// PID控制函數
float PID_realize(tPid * pid,float actual_val)
{
pid- >actual_val = actual_val;//傳遞真實值
pid- >err = pid- >target_val - pid- >actual_val;////當前誤差=目標值-真實值
pid- >err_sum += pid- >err;//誤差累計值 = 當前誤差累計和
//使用PID控制 輸出 = Kp*當前誤差  +  Ki*誤差累計值 + Kd*(當前誤差-上次誤差)
pid- >actual_val = pid- >Kp*pid- >err + pid- >Ki*pid- >err_sum + pid- >Kd*(pid- >err - pid- >err_last);
//保存上次誤差: 這次誤差賦值給上次誤差
pid- >err_last = pid- >err;

return pid- >actual_val;
}
?

然后在main中要調用PID_init();函數
在這里插入圖片描述

PID_init();

p調節函數函數只根據當前誤差進行控制

//比例p調節控制函數
float P_realize(tPid * pid,float actual_val)
{
	pid- >actual_val = actual_val;//傳遞真實值
	pid- >err = pid- >target_val - pid- >actual_val;//目標值減去實際值等于誤差值
	//比例控制調節
	pid- >actual_val = pid- >Kp*pid- >err;
	return pid- >actual_val;
}

主函數-可以估算當p=10 就有較好的響應速度

先看根據p比例控制的效果
在這里插入圖片描述
p調節 電機穩態后還是存在誤差。

下面加入i 調節也就是加入歷史誤差
pi的控制函數

//比例P 積分I 控制函數
float PI_realize(tPid * pid,float actual_val)
{
	pid- >actual_val = actual_val;//傳遞真實值
	pid- >err = pid- >target_val - pid- >actual_val;//目標值減去實際值等于誤差值
	pid- >err_sum += pid- >err;//誤差累計求和
	//使用PI控制
	pid- >actual_val = pid- >Kp*pid- >err + pid- >Ki*pid- >err_sum;
	
	return pid- >actual_val;
}

因為實際值1.6的時候誤差為1.4 上次偏差1.4和這次偏差1.4相加2.8 我們乘5 等于10點多就會有較好控制效果
這是pi 調節的控制效果
在這里插入圖片描述
下面是PID調節的

// PID控制函數
float PID_realize(tPid * pid,float actual_val)
{
	pid- >actual_val = actual_val;//傳遞真實值
	pid- >err = pid- >target_val - pid- >actual_val;//目標值減去實際值等于誤差值
	pid- >err_sum += pid- >err;//誤差累計求和
	//使用PID控制
	pid- >actual_val = pid- >Kp*pid- >err + pid- >Ki*pid- >err_sum + pid- >Kd*(pid- >err - pid- >err_last);
	//保存上次誤差:最近一次 賦值給上次
	pid- >err_last = pid- >err;
	
	return pid- >actual_val;
}

8.4-加入cJSON方便上位機調參

在這里插入圖片描述
調大堆棧
在這里插入圖片描述
軟件開啟中斷
在這里插入圖片描述
開啟接收中斷
在這里插入圖片描述

__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);	//開啟串口1接收中斷

中斷回調函數在這里插入圖片描述

uint8_t Usart1_ReadBuf[256];	//串口1 緩沖數組
uint8_t Usart1_ReadCount = 0;	//串口1 接收字節計數
  if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_RXNE))//判斷huart1 是否讀到字節
  {
		if(Usart1_ReadCount >= 255) Usart1_ReadCount = 0;
		HAL_UART_Receive(&huart1,&Usart1_ReadBuf[Usart1_ReadCount++],1,1000);
  }

編寫函數用于判斷串口是否發送完一幀數據
在這里插入圖片描述

extern uint8_t Usart1_ReadBuf[255];	//串口1 緩沖數組
extern uint8_t Usart1_ReadCount;	//串口1 接收字節計數

//判斷否接收完一幀數據
uint8_t Usart_WaitReasFinish(void)
{
	static uint16_t Usart_LastReadCount = 0;//記錄上次的計數值
	if(Usart1_ReadCount == 0)
	{
		Usart_LastReadCount = 0;
		return 1;//表示沒有在接收數據
	}
	if(Usart1_ReadCount == Usart_LastReadCount)//如果這次計數值等于上次計數值
	{
		Usart1_ReadCount = 0;
		Usart_LastReadCount = 0;
		return 0;//已經接收完成了
	}
	Usart_LastReadCount = Usart1_ReadCount;
	return 2;//表示正在接受中
}

然后我們把cJSON庫放入工程里面

下載cJSON新版

gtihub鏈接: [https://github.com/DaveGamble/cJSON]

百度網盤鏈接: [https://pan.baidu.com/s/1AcNHtZuv5bokMQ2f6QoG7Q]

提取碼:a422

和添加其他文件一樣,加入工程,然后指定路徑

編寫解析指令的函數

在這里插入圖片描述

#include "cJSON.h"
#include < string.h >
   cJSON *cJsonData ,*cJsonVlaue;

	if(Usart_WaitReasFinish() == 0)//是否接收完畢
	{
		cJsonData  = cJSON_Parse((const char *)Usart1_ReadBuf);
		if(cJSON_GetObjectItem(cJsonData,"p") !=NULL)
		{
			cJsonVlaue = cJSON_GetObjectItem(cJsonData,"p");	
		    p = cJsonVlaue- >valuedouble;
			pidMotor1Speed.Kp = p;
		}
		if(cJSON_GetObjectItem(cJsonData,"i") !=NULL)
		{
			cJsonVlaue = cJSON_GetObjectItem(cJsonData,"i");	
		    i = cJsonVlaue- >valuedouble;
			pidMotor1Speed.Ki = i;
		}
		if(cJSON_GetObjectItem(cJsonData,"d") !=NULL)
		{
			cJsonVlaue = cJSON_GetObjectItem(cJsonData,"d");	
		    d = cJsonVlaue- >valuedouble;
			pidMotor1Speed.Kd = d;
		}
		if(cJSON_GetObjectItem(cJsonData,"a") !=NULL)
		{
		
			cJsonVlaue = cJSON_GetObjectItem(cJsonData,"a");	
		    a = cJsonVlaue- >valuedouble;
			pidMotor1Speed.target_val =a;
		}
		if(cJsonData != NULL){
		  cJSON_Delete(cJsonData);//釋放空間、但是不能刪除cJsonVlaue不然會 出現異常錯誤
		}
		memset(Usart1_ReadBuf,0,255);//清空接收buf,注意這里不能使用strlen	
	}
	printf("P:%.3f  I:%.3f  D:%.3f A:%.3frn",p,i,d,a);

測試發送cJSON數據就會解析收到數據
在這里插入圖片描述
然后我們賦值改變一個電機的PID參數和目標轉速
然后我們通過串口發送命令,就會改變PID的參數了
這么我們的第八章就弄好了,下篇我們進行第九章-PID整定

審核編輯 黃宇

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

    關注

    142

    文章

    9001

    瀏覽量

    145337
  • PID
    PID
    +關注

    關注

    35

    文章

    1472

    瀏覽量

    85479
  • PID控制
    +關注

    關注

    10

    文章

    460

    瀏覽量

    40091
  • 速度控制
    +關注

    關注

    0

    文章

    38

    瀏覽量

    7943
收藏 人收藏

    評論

    相關推薦

    PID調的相關資料分享

    說明:本文章適用于STM32初學者,想完成一個好玩且有深度的項目但不知道從何下手的同學。PID調是平衡車的精髓所在,參數整定的好壞直接影響到平衡車的平衡效果。有的車平衡時來回晃而參數選的好的車就能
    發表于 01-14 09:14

    專家PID控制和模糊PID控制

    專家PID控制和模糊PID控制 專家PID控制(Expert Control)的實質是基于受控
    發表于 05-04 15:51 ?100次下載

    什么是pid控制,什么是pid控制

    什么是pid控制器 所謂PID控制,就是在一個閉環控制系統中,使被控物理量能夠迅速而準確地無限接近于
    發表于 09-10 12:39 ?1.7w次閱讀
    什么是<b class='flag-5'>pid</b><b class='flag-5'>控制</b>,什么是<b class='flag-5'>pid</b><b class='flag-5'>控制</b>器

    pid算法_pid控制原理

    PID控制原理和特點 工程實際中,應用最為廣泛調節器控制規律為比例、積分、微分控制,簡稱PID控制
    發表于 09-09 09:45 ?19.6w次閱讀
    <b class='flag-5'>pid</b>算法_<b class='flag-5'>pid</b><b class='flag-5'>控制</b>原理

    先進PID控制MATLAB仿真源程序

    先進PID控制MATLAB仿真源程序,總共14個章節,包括: 第1 基本的PID控制 第2
    發表于 12-02 15:31 ?28次下載

    PID調節控制做電機速度控制資料

    PID調節控制做電機速度控制、ourdevBasic PID的老外的那篇經典文章、PID測速、由
    發表于 07-20 10:21 ?0次下載

    控制溫度PID實例

    三菱PLC(可編程邏輯控制器)編程實例項目例程控制溫度PID實例
    發表于 05-13 16:13 ?52次下載

    什么是PIDPID控制的各環節是什么?

    PID調節器的適用范圍:PID調節控制是一個傳統控制方法,它適用于溫度、壓力、流量、液位等幾乎所有現場,不同的現場,僅僅是
    發表于 07-20 08:08 ?13.5w次閱讀
    什么是<b class='flag-5'>PID</b>?<b class='flag-5'>PID</b><b class='flag-5'>控制</b>的各環節是什么?

    什么是PID控制

    PID控制中有P、I、D三個參數,只有明白這三個參數的含義和作用才能完成控制PID參數整定,讓控制器到達最佳
    的頭像 發表于 07-18 16:10 ?3.2w次閱讀
    什么是<b class='flag-5'>PID</b><b class='flag-5'>控制</b>?

    PID控制的理論和PID控制器設計的及PID控制器參數整定的以及分析

    深入研究了PID控制理論,運用了多種方法設計了PID控制器。內容包括兩個部分,其中第一部分為前四,主要是關于單變量
    發表于 12-04 08:00 ?26次下載
    <b class='flag-5'>PID</b><b class='flag-5'>控制</b>的理論和<b class='flag-5'>PID</b><b class='flag-5'>控制</b>器設計的及<b class='flag-5'>PID</b><b class='flag-5'>控制</b>器參數整定的以及分析

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

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

    PID控制中如何整定PID參數

    作為經典的控制理論,PID控制規律仍然是當今工控行業的主導控制方式,無論復雜、簡單的控制任務,PID
    發表于 06-01 10:28 ?67次下載

    電機控制中的PID

    FOC算法中的電流環,速度環都涉及到PID控制 PID又分位置式PID控制算法和增量式
    發表于 05-05 11:51 ?18次下載
    電機<b class='flag-5'>控制</b>中的<b class='flag-5'>PID</b>

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

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

    如何使用PID進行溫度控制

    PID(比例-積分-微分)控制器在溫度控制系統中扮演著至關重要的角色。以下是使用PID進行溫度
    的頭像 發表于 11-06 10:31 ?1268次閱讀
    主站蜘蛛池模板: seba51久久精品| a级成人免费毛片完整版| BLACKED太粗太长| 国产伦精品一区二区免费| 久久久精品久久久久特色影视| 欧美乱码伦视频免费66网| 性奴公司 警花| 99蜜桃在线观看免费视频网站| 国产精品麻豆AV| 免费看欧美一级特黄a大片| 午夜国产高清精品一区免费| 自慰弄湿白丝袜| 国产精品…在线观看| 美女扒开尿孔| 亚洲成A人片在线观看中文L| 99久久久免费精品免费| 国产亚洲精品精华液| 人妻中文字幕乱人伦在线 | 欧美69xxx| 亚洲女人毛片| 高傲教师麻麻被同学调教123| 久久国产亚洲电影天堂| 四虎影视库永久免费| 99精品免费在线观看| 狠狠色狠狠色狠狠五月ady| 日韩AV片无码一区二区三区不卡| 在线播放av欧美无码碰| 国产精品亚洲AV毛片一区二区三区| 男女交性视频无遮挡全过程| 亚洲精品无码不卡| 富婆夜店找黑人猛男BD在线| 男女肉大捧进出全过程免费| 亚洲视频一| 国产三级在线免费| 日韩人妻无码精品久久中文字幕| 5566av资源| 九九热国产视频| 亚洲国产区中文在线观看| 国产 亚洲 中文在线 字幕| 欧美日韩一级黄色片| 最新国自产拍 高清完整版|