算法
airX嵌入式(微信公众号同名)
微信公众号 airX嵌入式 ,分享个人实际项目经验和理解
展开
-
PID算法的C语言实现一 PID算法原理
直接上图:、PID的算法流程其实很简单!利用测得的真实输出变量与输入变量的误差来控制输出变量!而这个误差的控制就是比例、积分、微分这三个控制的相加!这里我们假设某个采样点时间为t :设1、输入变量(预期输出的变量大小)为In(t); 2、实际输出变量(传感器测得的真实输出的变量)为Out(t); 3、偏差值 err(t) = In(t)-Out(t);取原创 2017-06-01 11:24:10 · 3435 阅读 · 0 评论 -
【Bitmap算法浅谈篇】Mysql应用Bitmap
首先Bitmap算法并不是一种数学公式,而是一种方法!下面通过一个列子来使你明白何为Bitmap算法!以下数据库以mysql为列!给出一个表结构,每一行都表示一条记录!1、要想统计所有70后的演员怎么做?Select count(distinct Name) as 用户数 from table where Age='70后原创 2017-09-08 18:05:07 · 15872 阅读 · 6 评论 -
PID算法的C语言实现八 变积分的PID优化
在积分分离的章节,我们是用Ki去控制积分环节的偏差,是一个固定的值,但为了更好的稳定系统,我们要求在偏差大的时候,积分系数小,偏差小的时候,积分系数大,这样可以稳定系统,不至于出现超调过大、饱和等情况,而且能时间更短的使系统达到稳定状态!因此,变积分就是根据偏差的大小改变积分的速度!其思想就是:改变积分的累加速度,使其与偏差大小相对应;偏差越大,积分越慢(可以理解为积分少),偏差越小,原创 2017-06-07 14:37:36 · 3575 阅读 · 1 评论 -
PID算法的C语言实现七 梯形积分的PID优化
先上梯形积分的算法公式;对于积分环节的PID控制,其实就是为了消除系统的静差,为了减少这个,我们必须提高积分环节的精度也就是每一次偏差的调节变小,因为在系统稳定的状态下,偏差调节越小,就是精度越高,为此我们用梯形的积分代替第六章中的矩形积分来提高积分调节精度!代码请参考第六篇中的代码,只需讲第六篇中的这段代码:pid.Voltage = pid.Kp*pid.Err原创 2017-06-07 10:29:37 · 2868 阅读 · 0 评论 -
PID算法的C语言实现六 抗积分饱和的PID优化
积分饱和通俗讲就是系统在一个偏差方向上的饱和,比如一个系统设定了输出不会超过100,但因为出现一个方向上的偏差积分使得输出超过了100,此时达到了饱和状态,如果继续在这个方向上积分会导致PID控制超过100系统却运行在100,相当于积分调节对系统输出没有作用,就出现失控的状态,这是系统不能接受的,而且饱和积分越深,退出饱和就越久。上面是在正向的饱和,负向的饱和类似!为了解决这个问题,我们采原创 2017-06-07 09:59:19 · 9118 阅读 · 0 评论 -
PID算法的C语言实现四 增量型PID的C语言实现
有位置型编程可以知道这个编程也很简单,戒指接贴出代码了:#include "stdio.h"struct _pid{float SetSpeed;float ActualSpeed;float Err;float Err_Last;float Err_Next; float Kp,Ki,Kd; }pid;void PID_Init(void)原创 2017-06-01 15:22:04 · 4754 阅读 · 0 评论 -
PID算法的C语言实现二 PID算法的离散化
上面一篇已经讲述了PID的流程!这里对上面做一些补充说明:1、由上一篇原理图框架我们知道PID控制其实是对偏差的控制;2、如果偏差为0,则比列控制就不起作用;3、积分环节主要用来消除静差,就是系统稳定后实际输出变量与输入变量的差值,利用偏差不断的叠加来作为输入变量的补偿;4、微分环节其实是对偏差趋向的一个规律提前调节,这样可以增加系统稳定的快速性;补充好了!下面还是贴出原创 2017-06-01 14:14:29 · 7449 阅读 · 0 评论 -
PID算法的C语言实现三 位置型PID的C语言实现
前面我们已经知道位置型PID和增量型PID的数学表达式,我们根据这些表达式就可以实现基本的PID的C语言编程了!下面我们开始C语言的编写。第一步:创建一个PID各项参数的变量结构体。第二步:PID参数的初始化函数。 这里以后我们主要就是对Kp、Ki、Kd的不断调节来优化控制效果!第三步:PID算法的计算函数。注意:这里没有很严格原创 2017-06-01 14:49:38 · 7521 阅读 · 1 评论 -
PID算法的C语言实现五 积分分离的PID优化
在上面三、四我们知道积分环节是为了消除静差,但有时候机器启动、结束或出现大幅的偏差时,这样在短时间内会累积大量的偏差,这样就导致积分项很大,以至于出现超调甚至震荡,这样是不允许的!为了克服这个问题,我们对积分偏差的做一个选择,即通过控制积分偏差的大小来决定是否增加积分项的调节!在第三篇的代码中做如下更改:将float PID_Cal(float Speed){pid原创 2017-06-05 16:21:35 · 7009 阅读 · 4 评论 -
动态规划浅析篇
先上题目:小时候我们都跳过方格游戏吧!现在规定一次只能向前跳1格或2格,不能后退,要想正好跳到第10格,有多少种跳法?一、暴力枚举程序我就不写了,因为嵌套循环太多,时间复杂度高。二、我们假设跳到n格有F(n)种可能;我们来思考,我跳一次有几种可能,很简单,跳一次我有2种可能,1格或者2格;同理,我最后一次跳到第n格有几种可能?当然2种,比如我跳一次到第5个格的可能有从4格跳到5原创 2018-01-15 21:44:14 · 803 阅读 · 0 评论