资料介绍
PID例子
[电机与驱动] 一个简单的PID
PID
#include 《hidef.h》 /* common defines and macros */
#include “derivative.h” /* derivative-specific definitions */
#include 《mc9s12xs128.h》
//定义PID参数
#define VV_KPVALUE 3 //比例
#define VV_KIVALUE 40 //积分
#define VV_KDVALUE 3 //微分
#define VV_MAX 10000 //返回的最大值,是pwm的周期值
#define VV_MIN 0
#define VV_DEADLINE 0X08 //速度PID,设置死区范围
typedef struct PID //定义数法核心数据
{
signed int vi_Ref; //速度PID,速度设定值
signed int vi_FeedBack; //速度PID,速度反馈值
signed long vi_PreError; //速度PID,前一次,速度误差,,vi_Ref - vi_FeedBack
signed long vi_PreDerror; //速度PID,前一次,速度误差之差,d_error-PreDerror;
unsigned int v_Kp; //速度PID,Ka = Kp
unsigned int v_Ki; //速度PID,Kb = Kp * ( T / Ti )
unsigned int v_Kd; //速度PID,
signed long vl_PreU; //电机控制输出值
}PID;
PID sPID; // PID Control Structure
void PIDInit(void)
{
sPID.vi_Ref = 0 ; //速度设定值
sPID.vi_FeedBack = 0 ; //速度反馈值
sPID.vi_PreError = 0 ; //前一次,速度误差,,vi_Ref - vi_FeedBack
sPID.vi_PreDerror = 0 ; //前一次,速度误差之差,d_error-PreDerror;
sPID.v_Kp = VV_KPVALUE;
sPID.v_Ki = VV_KIVALUE;
sPID.v_Kd = VV_KDVALUE;
sPID.vl_PreU = 0 ; //电机控制输出值
}
unsigned int v_PIDCalc( PID *pp )
{
signed long error,d_error,dd_error;
error = (signed long)(pp-》vi_Ref - pp-》vi_FeedBack); // 偏差计算
d_error = error - pp-》vi_PreError;
dd_error = d_error - pp-》vi_PreDerror;
pp-》vi_PreError = error; //存储当前偏差
pp-》vi_PreDerror = d_error;
if( ( error 《 VV_DEADLINE ) && ( error 》 -VV_DEADLINE ) ); //设置调节死区
//速度PID计算
pp-》vl_PreU += (signed long)( pp -》 v_Kp * d_error + pp -》 v_Ki * error + pp-》v_Kd*dd_error);
else if( pp-》vl_PreU 》= VV_MAX ) //速度PID,防止调节最高溢出
pp-》vl_PreU = VV_MAX;
else if( pp-》vl_PreU 《= VV_MIN ) //速度PID,防止调节最低溢出
pp-》vl_PreU = VV_MIN;
else
;
return ( pp-》vl_PreU ); // 返回预调节占空比
}
void main(void) {
/* put your own code here */
InitMCu();
IncPIDInit();
int g_CurrentVelocity=0; //全局变量也初始化
int g_Flag=0; //全局变量也初始化
EnableInterrupts;
While(1)
{
if (g_Flag&&vi_FeedBack)
{
PWMOUT+= v_PIDCalc( PID *pp );
g_Flag&=~ vi_FeedBack;
}
}
}
for(;;) {
_FEED_COP(); /* feeds the dog */
} /* loop forever */
/* please make sure that you never leave main */
}
- [单片机]一个例子说PID算法
- 经典的PID控制技术图书《Advanced PID Control》pdf 0次下载
- 基于PID控制的DC-DC升压开关电源 27次下载
- 基于FPGA的PID系统源码下载 79次下载
- PID控制中如何整定PID参数 63次下载
- Matlab的数值方法与工作例子 0次下载
- PID调节及PID调节的基本原理 50次下载
- Labview Excel例子文件下载 142次下载
- 改进的足球机器人PID调节器设计 9次下载
- 到底什么是串级PID
- 使用单片机和Arduino实现增量式PID位置式PID算法和PID库免费下载 68次下载
- PID控制经典教程之位置式PID控制原理(上) 0次下载
- PID控制经典教程之位置式PID控制原理(下) 0次下载
- PID_REG3 11次下载
- PID_通俗教程 0次下载
- 位置式PID与增量式PID的区别 3465次阅读
- PID项目实例详解 1819次阅读
- 一个模拟解像力图表的例子 983次阅读
- 串级PID的相关概念 1772次阅读
- 什么是PID?位置式PID与增量式PID有何不同 3.6w次阅读
- 什么是PID控制? 3.1w次阅读
- PID是什么PID的形象说明和调试口诀详细说明 1.7w次阅读
- 浅析PID算法的控制原理和特点 1w次阅读
- 一文详解工业自动化控制中PID的应用和整定方法 6769次阅读
- pid控制器的输入输出_PID控制器的控制实现 2.7w次阅读
- 如何从逆变器侧防治PID效应 1.7w次阅读
- 光伏组件PID效应 5975次阅读
- 总结PID调试技巧 1.6w次阅读
- 深度解析PID 5494次阅读
- PID理论详解 7920次阅读
下载排行
本周
- 1TPS54202H降压转换器评估模块用户指南
- 1.02MB | 7次下载 | 免费
- 2华瑞昇CR215芯片数字万用表原理图
- 0.21 MB | 1次下载 | 3 积分
- 3SMD LED选型目录 灯珠手册
- 5.36 MB | 1次下载 | 免费
- 4Tiva C系列DK-TM4C129X入门指南
- 1.69MB | 1次下载 | 免费
- 5电涌保护器(SPD)的选择、安装以及装配
- 4.57 MB | 1次下载 | 免费
- 6时源芯微EMC前车灯案例
- 458.59 KB | 1次下载 | 免费
- 7bq25890、bq25892双级联充电器EVM(PWR692)用户指南
- 2.02MB | 1次下载 | 免费
- 8TPS54426降压转换器评估模块用户指南
- 847.7KB | 次下载 | 免费
本月
- 1ADI高性能电源管理解决方案
- 2.43 MB | 156次下载 | 免费
- 22024PMIC市场洞察
- 2.23 MB | 63次下载 | 免费
- 3开关电源设计原理手册
- 1.83 MB | 30次下载 | 免费
- 4智能门锁原理图
- 0.39 MB | 28次下载 | 免费
- 5OAH0428最新规格书(中文)
- 2.52 MB | 15次下载 | 7 积分
- 6ST7789V2单芯片控制器/驱动器英文手册
- 3.07 MB | 9次下载 | 1 积分
- 7LTH7充电电路和锂电池升压5V输出电路原理图
- 0.04 MB | 7次下载 | 免费
- 8TPS54202H降压转换器评估模块用户指南
- 1.02MB | 7次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935119次下载 | 10 积分
- 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
- 1.48MB | 420061次下载 | 10 积分
- 3Altium DXP2002下载入口
- 未知 | 233084次下载 | 10 积分
- 4电路仿真软件multisim 10.0免费下载
- 340992 | 191367次下载 | 10 积分
- 5十天学会AVR单片机与C语言视频教程 下载
- 158M | 183334次下载 | 10 积分
- 6labview8.5下载
- 未知 | 81581次下载 | 10 积分
- 7Keil工具MDK-Arm免费下载
- 0.02 MB | 73807次下载 | 10 积分
- 8LabVIEW 8.6下载
- 未知 | 65987次下载 | 10 积分
评论
查看更多