/**************************************************************************
函数功能:位置式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为1,2,,k;
pwm代表输出
**************************************************************************/
int16_t PID_Ctrl (int16_t Target_val,int16_t Actual_val )
{
Bias=Target_val-Actual_val; // 计算偏差
Integral_bias+=Bias; // 求出偏差的积分
Pwm1 =Kp*Bias; //
Pwm2 =Ki*Integral_bias; //
if (Pwm2>=5600) Pwm2=5600;
else if(Pwm<=-5600) Pwm2=-5600;
// Pwm3 =Kd*(Bias-Last_Bias); // 位置式PID控制器
Pwm =Kdim*(Pwm1+Pwm2) +1200;
// Pwm =Kdim*(Pwm1+Pwm2) +0x11a0;
Last_Bias=Bias; // 保存上一次偏差
return Pwm; // 增量输出
}
函数功能:位置式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为1,2,,k;
pwm代表输出
**************************************************************************/
int16_t PID_Ctrl (int16_t Target_val,int16_t Actual_val )
{
Bias=Target_val-Actual_val; // 计算偏差
Integral_bias+=Bias; // 求出偏差的积分
Pwm1 =Kp*Bias; //
Pwm2 =Ki*Integral_bias; //
if (Pwm2>=5600) Pwm2=5600;
else if(Pwm<=-5600) Pwm2=-5600;
// Pwm3 =Kd*(Bias-Last_Bias); // 位置式PID控制器
Pwm =Kdim*(Pwm1+Pwm2) +1200;
// Pwm =Kdim*(Pwm1+Pwm2) +0x11a0;
Last_Bias=Bias; // 保存上一次偏差
return Pwm; // 增量输出
}
相关帖子
- • 一个基于中断以及回调的多旋转编码器驱动库
- • 51单片机对编码器的读写和串口通信功能的代码及上位机读取数据
- • 给大家分享一份电机自动化测试系统资料~~
- • stm32f407如何使用编码器 求帮助
- • 绝对值多圈编码器,其中齿轮以格雷码的方式编码,但是现在齿轮安装精度跟不上
- • Maxwell R17.1 coupling to Simulink example
- • 优先编码器的Multisim仿真
- • [原创]开源51单片机PID电机调速Proteus仿真与源码
- • 电机
- • 用单片机控制直流电动机并测量转速 求仿真文件和代码
- • 防酒驾控制器的设计完美版
- • 新唐M452LG6AE单片机实现电机控制 原理图和PCB程序
- • 求基于单片机的四路扫描式抢答器设计
- • 求个51单片机控制的硬盘主电机驱动程序
- • 一张图就看懂15大VR无线外设控制器的处理芯片采用方案[新手东拼西凑的小总结]【par...
- • 基于单片机和NRF24L01的无线PID电机转速控制器设计
- • 单片机的电除尘控制器PID控制的疑问
- • 关于STC单片机采集霍尔感应器信息问题求助
- • 伺服电机的声音大应该如何来处理?