• 大小: 4.48MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-10-13
  • 语言: 其他
  • 标签:

资源简介

此部分代码是以编码器反馈来控制电机的速度和位置。利用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个文件信息

评论

共有 条评论