資源簡介
此部分代碼是以編碼器反饋來控制電機的速度和位置。利用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;???????????????????????????????????????????//增量輸出
}
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????109??2016-06-01?11:39??PID源碼\PID學習套件購買地址.txt
?????文件?????143734??2015-10-29?11:58??PID源碼\代碼對應原理圖.pdf
?????文件???????2987??2016-06-01?11:55??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\CONTROL\control.c
?????文件????????458??2017-11-01?14:57??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\CONTROL\control.h
?????文件???????2891??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\DataScope_DP\DataScope_DP.C
?????文件????????586??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\DataScope_DP\DataScope_DP.h
?????文件??????19342??2012-12-14?11:16??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\dmpKey.h
?????文件???????6765??2012-12-14?11:16??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\dmpmap.h
?????文件??????84104??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\inv_mpu.c
?????文件???????4335??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\inv_mpu.h
?????文件??????57839??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\inv_mpu_dmp_motion_driver.c
?????文件???????3386??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\DMP\inv_mpu_dmp_motion_driver.h
?????文件???????2108??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\filter\filter.c
?????文件????????399??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\filter\filter.h
?????文件??????11064??2015-10-20?17:02??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\MPU6050\MPU6050.c
?????文件??????14781??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\MPU6050\mpu6050.h
?????文件???????3273??2015-10-13?13:02??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\show\show.c
?????文件????????331??2015-10-16?15:04??PID源碼\電機位置閉環控制(代碼詳細注釋)\BALANCE\show\show.h
?????文件???????2377??2015-06-22?15:54??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\ADC\adc.c
?????文件????????189??2015-06-22?15:39??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\ADC\adc.h
?????文件???????2547??2015-10-28?12:03??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\ENCODER\encoder.c
?????文件????????589??2015-10-28?12:03??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\ENCODER\encoder.h
?????文件??????10557??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\IIC\IOI2C.c
?????文件???????3119??2015-07-09?14:05??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\IIC\IOI2C.h
?????文件???????1630??2015-06-21?12:46??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\KEY\key.c
?????文件????????234??2015-06-21?11:03??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\KEY\key.h
?????文件????????484??2015-12-27?16:22??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\LED\LED.C
?????文件????????166??2015-12-27?16:22??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\LED\LED.H
?????文件???????1059??2015-12-27?16:22??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\MOTOR\motor.c
?????文件????????307??2015-12-27?16:22??PID源碼\電機位置閉環控制(代碼詳細注釋)\HARDWARE\MOTOR\motor.h
............此處省略304個文件信息
- 上一篇:譚浩強C程序設計完整ppt和程序第五版內
- 下一篇:postman應用文檔164頁
評論
共有 條評論