標題:
STM32智能小車編碼器源碼
[打印本頁]
作者:
Ivy_Lee
時間:
2018-6-11 19:12
標題:
STM32智能小車編碼器源碼
小車電池被拆了沒法調(diào)試,有錯請指正!
待修好再上傳更完善的,求大佬點評指正!
單片機源程序如下:
#include "contral.h"
#include "stm32f10x.h"
#include "motor.h"
int Target_velocity=50; //設(shè)定速度控制的目標速度為50個脈沖每10ms
/**************************************************************************
函數(shù)功能:TIM3中斷
入口參數(shù):無
返回 值:無
**************************************************************************/
void TIM3_IRQHandler(void)
{
static int time=0;
time ++;
if(time==10)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update)!= RESET) //檢查指定的TIM中斷發(fā)生與否:TIM 中斷源
{
Encoder=transfer(encoder);
Led_Flash(100); //LED閃爍;指示單片機正常運行
Moto=Incremental_PI(Encoder,Target_velocity); //===速度PI控制器
Xianfu_Pwm(); //===PWM限幅
Set_Pwm(Moto);
TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中斷待處理位:TIM 中斷源
}
time=0;
}
}
/**************************************************************************
函數(shù)功能:增量PI控制器
入口參數(shù):編碼器測量值,目標速度
返回 值:電機PWM
根據(jù)增量式離散PID公式
pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)+Kd[e(k)-2e(k-1)+e(k-2)]
e(k)代表本次偏差
e(k-1)代表上一次的偏差 以此類推
pwm代表增量輸出
在我們的速度控制閉環(huán)系統(tǒng)里面,只使用PI控制
pwm+=Kp[e(k)-e(k-1)]+Ki*e(k)
**************************************************************************/
int Incremental_PI (int Encoder,int Target) //Target是目標值
{
float Kp=20,Ki=30;
static int Bias,Pwm,Last_bias;
Bias=Encoder-Target; //計算偏差
Pwm+=Kp*(Bias-Last_bias)+Ki*Bias; //增量式PI控制器
Last_bias=Bias; //保存上一次偏差
return Pwm; //增量輸出
}
/**************************************************************************
函數(shù)功能:限制PWM賦值
入口參數(shù):無
返回 值:無
**************************************************************************/
void Xianfu_Pwm(void)
{
int Amplitude=7100; /*PWM滿幅是7200 限制在7100*/
if(Moto<-Amplitude) Moto=-Amplitude;
if(Moto>Amplitude) Moto=Amplitude;
}
/**************************************************************************
函數(shù)功能:絕對值函數(shù)
入口參數(shù):int
返回 值:unsigned int
**************************************************************************/
int myabs(int a)
{
int temp;
if(a<0) temp=-a;
else temp=a;
return temp;
}
/**************************************************************************
函數(shù)功能:賦值給PWM寄存器
入口參數(shù):PWM
返回 值:無
**************************************************************************/
void Set_Pwm(int moto)
{
if(moto>0) AIN2=1, AIN1=0;
else AIN2=0, AIN1=1;
PWM1=myabs(moto);
}
復(fù)制代碼
所有資料51hei提供下載:
小車.rar
(406.8 KB, 下載次數(shù): 54)
2018-6-12 02:47 上傳
點擊文件名下載附件
編碼器的1部分
下載積分: 黑幣 -5
作者:
啊杰啊啊啊
時間:
2018-11-24 22:46
謝謝樓主分享
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1