PID控制示例C编程
typedef struct PID_zhs
{
double P,I,D;//P、I、D系数
float curError;//当前误差
float lastError;//上次误差
float preError;//上上次误差
double sumError;//积分项
float dError;//微分项
}PID_zhs;
//初始化结构体数据
void pid_zhs_init()
{
pid_v_zhs.P=0.0;//比例系数
pid_v_zhs.I=0.0;//积分系数
pid_v_zhs.D=0.0;//微分系数
pid_v_zhs.curError=0.0;//当前误差
pid_v_zhs.lastError=0.0;//上次误差
pid_v_zhs.preError=0.0;//上上次误差
pid_v_zhs.sumError=0.0;//积分项
pid_v_zhs.dError=0.0;//微分项
}
void SpeedTitl_init()//云台动态值清空
{
int i;
for(i=2;i<7;i++)
{
SpeedTitl[i]=0x00;
}
}
long Speed=0;
void SpeedOut(void)
{
SpeedTitl_init();
float angle = Q_ANGLE.X;//Q_ANGLE.X为全局变量角度 由互补滤波函数求得 可在我相关博客中查阅
//位置式
pid_v_zhs.curError = angle;//比例项
pid_v_zhs.sumError+=pid_v_zhs.curError;//积分项
pid_v_zhs.dError = pid_v_zhs.curError - pid_v_zhs.lastError;//微分项
Speed = pid_v_zhs.curError * pid_v_zhs.P + pid_v_zhs.sumError * pid_v_zhs.I + pid_v_zhs.dError * pid_v_zhs.D;
pid_v_zhs.preError=pid_v_zhs.lastError;
pid_v_zhs.lastError=pid_v_zhs.curError;
if(Speed < 0)
{
Speed=-Speed;
//俯仰向下控制:FF address 00 10 00 Vspeed checksum
SpeedTitl[3]=0x10;
}
//如果云台前倾 摄像头则应该向上运动
//向前倾时Q_ANGLE.X为正值
else if(Speed > 0)
{
//俯仰向上控制:FF address 00 08 00 Vspeed checksum
SpeedTitl[3]=0x08;
}
//云台水平 摄像头不需运动
else ;
SpeedTitl[5]=Speed;
SpeedTitl[6]=SpeedTitl[3]+SpeedTitl[4]+SpeedTitl[5]+1;
if(Speed>0)
{
Uart1_Send_Buf(SpeedTitl,7);//将云台转动方向速度发送至云台
}
}
// 增量式未实践成功 不建议使用
//增量式
pid_v_zhs.curError=angle;
Speed+=(pid_v_zhs.P * pid_v_zhs.curError - pid_v_zhs.I * pid_v_zhs.lastError + pid_v_zhs.D * pid_v_zhs.preError);
pid_v_zhs.preError=pid_v_zhs.lastError;
pid_v_zhs.lastError=pid_v_zhs.curError;
PID控制示例C编程的更多相关文章
- PID控制最通俗的解释与PID参数的整定方法
转自->这里 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID控制的原理可以用人对炉温的手动控制来理解.阅读本文 ...
- 转 C#实现PID控制的模拟测试和曲线绘图
C#实现PID控制的模拟测试和曲线绘图 本文分两部分,一部分是讲PID算法的实现,另一部分是讲如何用动态的曲线绘制出PID运算的结果. 首先,PID算法的理论模型请参考自动控制理论,最早出现的是模 ...
- PID控制及整定算法
一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...
- 一文读懂PID控制算法(抛弃公式,从原理上真正理解PID控制)
PID控制应该算是应用非常广泛的控制算法了.小到控制一个元件的温度,大到控制无人机的飞行姿态和飞行速度等等,都可以使用PID控制.这里我们从原理上来理解PID控制. PID(proportion ...
- 【iCore3应用开发平台】发布 iCore3 应用开发平台PID控制代码
说明:1.本代码包包含FPGA和STM32F407两部分内容2.FPGA工程为出厂代码FPGA工程,版本为REV43.STM32F407为只含PID控制的ARM工程4.在使用风扇过程中,请勿将手伸入扇 ...
- 两轮自平衡小车双闭环PID控制设计
两轮自平衡小车的研究意义 ...
- 数字式PID控制的应用总结
PID控制是一个二阶线性闭环控制器,通过调整比例.积分和微分三项参数,使得大多数的工业控制系统获得良好的闭环控制性能.PID控制优点:a. 技术成熟,b. 易被人们熟悉和掌握,c. 不需要建立数学模型 ...
- Struts2使用拦截器完成权限控制示例
http://aumy2008.iteye.com/blog/146952 Struts2使用拦截器完成权限控制示例 示例需求: 要求用户登录,且必须为指定用户名才可以查看系统中某个视图资源:否 ...
- PID控制学习笔记(二)
不管是基本的PID控制还是变形的PID控制算法,其核心都是对输入信号(设定值信号.测量信号或者偏差信号等)做基本的比例.积分.微分运算,最终提供给被控过程良好的调节信号. 在过程控制仪表,特别是在数字 ...
随机推荐
- 【转载】Apache Storm 官方文档 —— 基础概念
[转载自https://yq.aliyun.com/articles/87510?t=t1] Storm 系统中包含以下几个基本概念: 拓扑(Topologies) 流(Streams) 数据源(Sp ...
- SpringBean基础装配
首先,让我们先对Bean进行理解:什么是Bean,为什么要有Bean,如何装配Bean: 1,什么是Bean? Bean你可以看成是一个组件,在 ...
- python官方推荐的各阶段学习书籍
Python学习交流群:463024091,群内每天分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎各位小伙伴入群学习交流! 你是否曾经学期初立下一大堆学习计划,到期末却依旧过着 ...
- Unity3D基本操作教程
物体操作图文教程 一些游戏资产文件 拖进游戏里 像这样,就可以上坡了 修改箱子的位置 完成 机械臂开始运作 游戏通关,教学结束
- 杜教筛:Bzoj3944: sum
题意 求\(\sum_{i=1}^{n}\varphi(i)和\sum_{i=1}^{n}\mu(i)\) \(n <= 2^{31}-1\) 不会做啊... 只会线性筛,显然不能线性筛 这个时 ...
- APIO2010特别行动队
斜率优化 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <s ...
- 网络防火墙和NAT地址转换
网络防火墙 iptables/netfilter网络防火墙: (1) 充当网关 (2) 使用filter表的FORWARD链 注意的问题: (1) 请求-响应报文均会经由FORWARD链,要注意规则的 ...
- C#服务器端生成报告文档:使用帆软报表生成Word、Pdf报告
一.帆软报表简介 报表工具中,帆软报表相比Crystal Report(水晶报表).SQL Server Report Service(SSRS)等报表工具来说算是佼佼者,此外帆软报表在统计图表.数据 ...
- 初读 c# IL中间语言
对一段c#编写的代码,有一些疑问,想通过IL中间语言看看,编译后是怎么处理的.代码如下: static StringBuilder sb = new StringBuilder(); ; ; /// ...
- UML 中extend和include的区别
在UML用例图中有两种关系——包含和扩展,容易混淆,下面通过一张表来区别一下这两种关系.