资源简介
此部分代码是以编码器反馈来控制电机的速度和位置。利用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页
评论
共有 条评论