加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

第九章-PID整定方法 STM32 PID驅(qū)動編碼器 控制電機(jī)轉(zhuǎn)速

06/20 10:11
1724
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論
放大
實物圖
相關(guān)方案
  • 方案介紹
    • 第九章-PID整定方法
    • 以上是入門篇
  • 相關(guān)文件
  • 推薦器件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

第九章-PID整定方法

9.1-調(diào)整合適的采樣周期和PID調(diào)參方法

正如之前所說,現(xiàn)在我們PID控制函數(shù)是在主函數(shù)中循環(huán)調(diào)用,這樣的調(diào)用方式并不能保證實時性,不能保證周期得到調(diào)用

所以我們要把PID控制函數(shù)放到中斷里面定時執(zhí)行,那么如何放到中斷里面執(zhí)行,執(zhí)行的周期是多少合適那?
在這里插入圖片描述
在這里插入圖片描述

		if(TimerCount %10 ==0)//每20ms一次
		{
			Motor_Set(PID_realize(&pidMotor1Speed,Motor1Speed),0);
		    TimerCount=0;
		}
	}

燒錄測試一下,是否可以改變波形和調(diào)整參數(shù)
在這里插入圖片描述

借助上位機(jī)調(diào)節(jié)PID

  1. 調(diào)節(jié)P 把I=0、D=0先給正值或負(fù)值值測試P 正負(fù)、然后根據(jù)PID函數(shù)輸入和輸出估算P 大小,然后I=0 D=0去測試,調(diào)節(jié)一個較大值
  2. 調(diào)節(jié)I 把P等于前面的值 然后測試I給較大正值和負(fù)值 測試出I正負(fù),然后I從小值調(diào)節(jié),直到?jīng)]有偏差存在
  3. 一般系統(tǒng)不使用D
    在這里插入圖片描述

然后當(dāng)前系統(tǒng)特點(diǎn) :I 對于系統(tǒng)更重要

下面我們調(diào)節(jié)I
在這里插入圖片描述

給一個較小的i 發(fā)現(xiàn) 有一個大的超調(diào),我們就減少p 、減小一半p

下面是減少一半p 的效果

在這里插入圖片描述

這個效果還可以

整理雙電機(jī)速度控制

首先我們的需要是控制兩個電機(jī),那么這兩個電機(jī)的特點(diǎn)不同,他們的P I D 參數(shù)不同,要控制不同的目標(biāo)速度,那么他們的目標(biāo)值、實際值、偏差等都會不同,所以我們的PID函數(shù)就要能夠根據(jù)輸入?yún)?shù)控制電機(jī)

我們增加tPid 類型函數(shù)的定義用于控制電機(jī)

在這里插入圖片描述

tPid pid1_speed;//電機(jī)1的轉(zhuǎn)速控制
tPid pid2_speed;//電機(jī)2的轉(zhuǎn)速控制

//初始化PID參數(shù)
void PID_init()
{
	pid1_speed.actual_val=0.0;//初始化電機(jī)1轉(zhuǎn)速PID 結(jié)構(gòu)體
	pid1_speed.target_val=0.0;
	pid1_speed.err=0.0;
	pid1_speed.err_last=0.0;
	pid1_speed.err_sum=0.0;
	pid1_speed.Kp=0.0;
	pid1_speed.Ki=0.0;
	pid1_speed.Kd=0.0;
	
	pid2_speed.actual_val=0.0;//初始化電機(jī)2轉(zhuǎn)速PID 結(jié)構(gòu)體
	pid2_speed.target_val=0.0;
	pid2_speed.err=0.0;
	pid2_speed.err_last=0.0;
	pid2_speed.err_sum=0.0;
	pid2_speed.Kp=0.0;
	pid2_speed.Ki=0.0;
	pid2_speed.Kd=0.0;
}

更改一下PID函數(shù),這里我們使用結(jié)構(gòu)體作為函數(shù)地址

訪問因為是地址,訪問結(jié)構(gòu)體變量要用->

float PID_realize(tPid * pid,float actual_val)
{
	pid->actual_val = actual_val;//傳遞真實值
	pid->err = pid->target_val - pid->actual_val;//目標(biāo)值減去實際值等于誤差值
	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;
}

更改主函數(shù),對PID函數(shù)的使用

在這里插入圖片描述

然后可以分別調(diào)節(jié)電機(jī)1的參數(shù)和電機(jī)二的參數(shù)

把測試好的PID 參數(shù)分別寫在PID_init里面

以上是入門篇

通過上面的學(xué)習(xí)與實操,大家對:PWM、電機(jī)驅(qū)動、PID閉環(huán)控制、串口通信等有了一定掌握,如果上面那個章節(jié)掌握不好,一定要多看兩遍視頻,多敲邊代碼,還有疑惑可以百度查找或者留言問題。

后面的內(nèi)容就是偏應(yīng)用比較簡單了。

這樣咱們第九章就結(jié)束了,PID就完成了,后面的章節(jié)利用PID做小車控制。

聯(lián)系:Q,1930299709

  • 聯(lián)系方式.txt

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
KSZ9897RTXI-TR 1 Microchip Technology Inc IC ETHERNET SWITCH 7PORT 128TQFP

ECAD模型

下載ECAD模型
$12.98 查看
H11G1M 1 onsemi 6-Pin DIP High Voltage Photodarlington Output Optocoupler, 1000-BLKBG
$1.01 查看
HC49US-FF5F18-6.000MHZ 1 ILSI America LLC Parallel - Fundamental Quartz Crystal,
暫無數(shù)據(jù) 查看

相關(guān)推薦

電子產(chǎn)業(yè)圖譜