电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>嵌入式开发>PID例子

PID例子

2014-06-25 | doc | 28KB | 次下载 | 1积分

资料介绍

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 */

}

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1TPS54202H降压转换器评估模块用户指南
  2. 1.02MB   |  7次下载  |  免费
  3. 2华瑞昇CR215芯片数字万用表原理图
  4. 0.21 MB   |  1次下载  |  3 积分
  5. 3SMD LED选型目录 灯珠手册
  6. 5.36 MB   |  1次下载  |  免费
  7. 4Tiva C系列DK-TM4C129X入门指南
  8. 1.69MB   |  1次下载  |  免费
  9. 5电涌保护器(SPD)的选择、安装以及装配
  10. 4.57 MB   |  1次下载  |  免费
  11. 6时源芯微EMC前车灯案例
  12. 458.59 KB  |  1次下载  |  免费
  13. 7bq25890、bq25892双级联充电器EVM(PWR692)用户指南
  14. 2.02MB   |  1次下载  |  免费
  15. 8TPS54426降压转换器评估模块用户指南
  16. 847.7KB   |  次下载  |  免费

本月

  1. 1ADI高性能电源管理解决方案
  2. 2.43 MB   |  156次下载  |  免费
  3. 22024PMIC市场洞察
  4. 2.23 MB   |  63次下载  |  免费
  5. 3开关电源设计原理手册
  6. 1.83 MB   |  30次下载  |  免费
  7. 4智能门锁原理图
  8. 0.39 MB   |  28次下载  |  免费
  9. 5OAH0428最新规格书(中文)
  10. 2.52 MB   |  15次下载  |  7 积分
  11. 6ST7789V2单芯片控制器/驱动器英文手册
  12. 3.07 MB   |  9次下载  |  1 积分
  13. 7LTH7充电电路和锂电池升压5V输出电路原理图
  14. 0.04 MB   |  7次下载  |  免费
  15. 8TPS54202H降压转换器评估模块用户指南
  16. 1.02MB   |  7次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935119次下载  |  10 积分
  3. 2开源硬件-PMP21529.1-4 开关降压/升压双向直流/直流转换器 PCB layout 设计
  4. 1.48MB  |  420061次下载  |  10 积分
  5. 3Altium DXP2002下载入口
  6. 未知  |  233084次下载  |  10 积分
  7. 4电路仿真软件multisim 10.0免费下载
  8. 340992  |  191367次下载  |  10 积分
  9. 5十天学会AVR单片机与C语言视频教程 下载
  10. 158M  |  183334次下载  |  10 积分
  11. 6labview8.5下载
  12. 未知  |  81581次下载  |  10 积分
  13. 7Keil工具MDK-Arm免费下载
  14. 0.02 MB  |  73807次下载  |  10 积分
  15. 8LabVIEW 8.6下载
  16. 未知  |  65987次下载  |  10 积分