資源簡介
基于STM32的PID位置式閉環程序,值得參考

代碼片段和文件信息
#include?“control.h“
??/**************************************************************************
作者:平衡小車之家
我的淘寶小店:http://shop114407458.taobao.com/
**************************************************************************/
int?Target_position=11000;????//初始值是10000,目標值是11000
int?TIM3_IRQHandler(void)??
{????
if(TIM3->SR&0X0001)//10ms定時中斷
{???
??TIM3->SR&=~(1<<0);?????????????????????????????????????????//===清除定時器1中斷標志位 ?
??Encoder=Read_Encoder(2);??????????????????????????????????//===讀取編碼器的位置數據?初始值是10000,詳見encoder.c?和encoder.h
?? Led_Flash(100);???????????????????????????????????????????//===LED閃爍;指示單片機正常運行
??Moto1=Position_PID(EncoderTarget_position);??????????????//===位置PID控制器
??Xianfu_Pwm();?????????????????????????????????????????????//===PWM限幅
???? Set_Pwm(Moto1);??????????????????????????????????????????//===賦值給PWM寄存器??
}???????
?return?0; ??
}?
/**************************************************************************
函數功能:賦值給PWM寄存器
入口參數:PWM
返回??值:無
**************************************************************************/
void?Set_Pwm(int?moto1)
{
if(moto1>0) AIN2=1 AIN1=0;
else? ??????????AIN2=0 AIN1=1;
PWMA=myabs(moto1);
}
/**************************************************************************
函數功能:限制PWM賦值?
入口參數:無
返回??值:無
**************************************************************************/
void?Xianfu_Pwm(void)
{
??int?Amplitude=7100;????//===PWM滿幅是7200?限制在7100
????if(Moto1<-Amplitude)?Moto1=-Amplitude;
if(Moto1>Amplitude)??Moto1=Amplitude;
}
/**************************************************************************
函數功能:絕對值函數
入口參數:int
返回??值:unsigned?int
**************************************************************************/
int?myabs(int?a)
{? ???
??int?temp;
if(a<0)??temp=-a;??
??else?temp=a;
??return?temp;
}
/**************************************************************************
函數功能:位置式PID控制器
入口參數:編碼器測量位置信息,目標位置
返回??值:電機PWM
根據位置式離散PID公式?
pwm=Kp*e(k)+Ki*∑e(k)+Kd[e(k)-e(k-1)]
e(k)代表本次偏差?
e(k-1)代表上一次的偏差??
∑e(k)代表e(k)以及之前的偏差的累積和;其中k為12k;
pwm代表輸出
**************************************************************************/
int?Position_PID?(int?Encoderint?Target)
{?
?float?Position_KP=80Position_KI=0.1Position_KD=500;
?static?float?BiasPwmIntegral_biasLast_Bias;
?Bias=Encoder-Target;??????????????????????????????????//計算偏差
?Integral_bias+=Bias; ?????????????????????????????????//求出偏差的積分
?Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias);???????//位置式PID控制器
?Last_Bias=Bias;???????????????????????????????????????//保存上一次偏差?
?return?Pwm;???????????????????????????????????????????//增量輸出
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\BALANCE\
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\BALANCE\CONTROL\
?????文件????????2987??2016-06-01?11:55??電機位置閉環控制(代碼詳細注釋)\BALANCE\CONTROL\control.c
?????文件?????????458??2016-06-01?11:53??電機位置閉環控制(代碼詳細注釋)\BALANCE\CONTROL\control.h
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\BALANCE\DataScope_DP\
?????文件????????2891??2015-07-09?14:05??電機位置閉環控制(代碼詳細注釋)\BALANCE\DataScope_DP\DataScope_DP.C
?????文件?????????586??2015-07-09?14:05??電機位置閉環控制(代碼詳細注釋)\BALANCE\DataScope_DP\DataScope_DP.h
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\
?????文件???????19342??2012-12-14?11:16??電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\dmpKey.h
?????文件????????6765??2012-12-14?11:16??電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\dmpmap.h
?????文件???????84104??2015-07-09?14:05??電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\inv_mpu.c
?????文件????????4335??2015-07-09?14:05??電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\inv_mpu.h
?????文件???????57839??2015-07-09?14:05??電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\inv_mpu_dmp_motion_driver.c
?????文件????????3386??2015-07-09?14:05??電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\inv_mpu_dmp_motion_driver.h
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\BALANCE\filter\
?????文件????????2108??2015-07-09?14:05??電機位置閉環控制(代碼詳細注釋)\BALANCE\filter\filter.c
?????文件?????????399??2015-07-09?14:05??電機位置閉環控制(代碼詳細注釋)\BALANCE\filter\filter.h
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\BALANCE\MPU6050\
?????文件???????11064??2015-10-20?17:02??電機位置閉環控制(代碼詳細注釋)\BALANCE\MPU6050\MPU6050.c
?????文件???????14781??2015-07-09?14:05??電機位置閉環控制(代碼詳細注釋)\BALANCE\MPU6050\mpu6050.h
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\BALANCE\show\
?????文件????????3273??2015-10-13?13:01??電機位置閉環控制(代碼詳細注釋)\BALANCE\show\show.c
?????文件?????????331??2015-10-16?15:04??電機位置閉環控制(代碼詳細注釋)\BALANCE\show\show.h
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\HARDWARE\
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\HARDWARE\ADC\
?????文件????????2377??2015-06-22?15:54??電機位置閉環控制(代碼詳細注釋)\HARDWARE\ADC\adc.c
?????文件?????????189??2015-06-22?15:39??電機位置閉環控制(代碼詳細注釋)\HARDWARE\ADC\adc.h
?????目錄???????????0??2016-08-17?12:46??電機位置閉環控制(代碼詳細注釋)\HARDWARE\ENCODER\
?????文件????????2547??2015-10-28?12:03??電機位置閉環控制(代碼詳細注釋)\HARDWARE\ENCODER\encoder.c
?????文件?????????589??2015-10-28?12:03??電機位置閉環控制(代碼詳細注釋)\HARDWARE\ENCODER\encoder.h
............此處省略126個文件信息
評論
共有 條評論