• 大小: 3.18MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-27
  • 语言: 其他
  • 标签: PID  步进电机  

资源简介

基于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个文件信息

评论

共有 条评论