毕业论文-单级倒立摆的pid控制

1.关于PID控制的倒立摆程序与程序解析

include "stc12.h" #include #include"pid.h" typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long int uint32; /*********************************函数声明****************** 结构体设定 ***********************************************************/ typedef struct PIDValue { uint32 Ek_Uint32[3]; //差值保存,给定和反馈的差值 uint8 EkFlag_Uint8[3]; //差值标志位符号,1则对应的为负数,0为对应的为正数 uint8 KP_Uint8; //比例系数 uint8 KI_Uint8; //积分系数 uint8 KD_Uint8; //微分显示 uint16 Uk_Uint16; //上一时刻的控制电压 uint16 RK_Uint16; //设定值 uint16 CK_Uint16; //实际值 uint8 Vaule_Flag; //输出的值正负标志位,0为正,1为负 }PIDValueStr; PIDValueStr PID; //定义一个结P构体 uint16 out ; // 加热输出(PID运算后的输出值) /*********************************************************************************** 增量型PID算式:PID :Uk=KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)] 函数入口: RK(设定值),CK(实际值),KP,KI,KD PID比例参数 函数出口: U(K) PID运算函数 **************************************************************************************/ uint16 PID_Calc(uint16 PIDinput) { uint32 Temp[3]; //中间临时变量 uint32 PostSum; //正数和 uint32 NegSum; //负数和 Temp[0] = 0; //给储存中间临时变量赋初值 Temp[1] = 0; Temp[2] = 0; PostSum = 0; //给存储所有的正数变量赋初值 NegSum = 0; //给存储所有的负值变量赋初值 PID.RK_Uint16=180; //设定值为180 PID.CK_Uint16=PIDinput; //输入值 if( PID.RK_Uint16 > PID.CK_Uint16 ) //如果设定值大于实际值,就是当前的值比设定值小 { if( PID.RK_Uint16 - PID.CK_Uint16 >10 ) //计算偏差是否大于 piancha=10 ( 这里的10由 piancha 来设定大小,根据实际情况设定) //if( PID.RK_Uint16 - PID.CK_Uint16 >piancha ) { //如果偏差大于 piancha=10 不在设定的PID调控范围之内就全速加热 out = 100; //偏差大于piancha=10为上限幅值输出(全速加热) // PID.Uk_Uint16 = full_speed; //全速时的加热值,更具实际情况可自由设定 这里full_speed=100; } else //如果偏差小于 piancha=10 再调节的范围内就计算储存起来 { //下面就是PID算法 Temp[0] = PID.RK_Uint16 - PID.CK_Uint16; // 计算出当前偏差值E(k) PID.EkFlag_Uint8[1]=0; //E(k)为正数 的标志位 0为正,1为负 //数值移位 PID.Ek_Uint32[2] = PID.Ek_Uint32[1]; //存储E(k-2) PID.Ek_Uint32[1] = PID.Ek_Uint32[0]; //储存E(k-1) PID.Ek_Uint32[0] = Temp[0]; //存储E(k) /****************************************************************************************/ if( PID.Ek_Uint32[0] >PID.Ek_Uint32[1] ) //E(k)>E(k-1) 为正数 { Temp[0]=PID.Ek_Uint32[0] - PID.Ek_Uint32[1]; //E(k)-E(k-1) 保存 PID.EkFlag_Uint8[0]=0; // 设定标志位 0为正,1为负 } else //E(k)Temp[2] ) //E(k-2)+E(k)>2E(k-1) { Temp[2]=(PID.Ek_Uint32[0]+ PID.Ek_Uint32[2])-Temp[2]; //E(k-2)+E(k)-2E(k-1)为正数 PID.EkFlag_Uint8[2]=0; } else //E(k-2)+E(k)-2E(k-1)为负数 { Temp[2]=Temp[2]-(PID.Ek_Uint32[0]+ PID.Ek_Uint32[2]); //2E(k-1)-(E(k-2)+E(k)) PID.EkFlag_Uint8[2]=1; } /**********************************************************************************************/ Temp[0] = (uint32)PID.KP_Uint8 * Temp[0]; // KP*[E(k)-E(k-1)] Temp[1] = (uint32)PID.KI_Uint8 * PID.Ek_Uint32[0]; // KI*E(k) Temp[2] = (uint32)PID.KD_Uint8 * Temp[2]; // KD*[E(k-2)+E(k)-2E(k-1)] /************************以下部分代码是讲所有的正数项叠加,负数项叠加**************************/ /**************************************KP*[E(k)-E(k-1)]********************************************/ if(PID.EkFlag_Uint8[0]==0) PostSum += Temp[0]; //正数和 else NegSum += Temp[0]; //负数和 /*************************************** KI*E(k)*************************************************/ if(PID.EkFlag_Uint8[1]==0) PostSum += Temp[1]; //正数和 else ; //空操作,E(K)>0 /************************************KD*[E(k-2)+E(k)-2E(k-1)]*************************************/ if(PID.EkFlag_Uint8[2]==0) PostSum += Temp[2]; //正数和 else NegSum += Temp[2]; //负数和 /**********************************************U(K)*************************************************/ //PostSum += (uint32)PID.Uk_Uint16; if(PostSum > NegSum ) // 是否控制量为正数 { out= PostSum - NegSum; PID.Vaule_Flag=0; //PID调节值是正值 } else //控制量输出为负数 { out=NegSum-PostSum; PID.Vaule_Flag=1; //PID调节值是负值 } } //return out; } else //如果设定值小于实际值,就是当前的值大于设定值,就不进行PID计算直接输出 0 { out = 0; } 。

2.我在做一级旋转式倒立摆pid控制,如何建模

你要说原因的话详细说来就要从系统的理论出发了,PID两三秒就下去了, 说明你整个闭环系统是发散的,倒立摆其实是个非线性模型,在小范围内可以认为他是一个线性模型,用PID是可以控制稳定的,对连续信号来说,P调大绝对是可以收敛的(极点问题),但是也要具体看你的控制频率够不够高,你先调大P 不要I和D,当勉强可以稳定时,你再调I,之后是D,PID对于非线性系统控制室建立在较高的控制频率的,用线性逼近非线性,如果控制频率不够高 就比较难控制了。

3.倒立摆系统建模与控制方法研究 文献综述怎么写

文献综述是在毕业论文(设计)开题前针对某一研究领域或专题搜集大量文献资料的基础上,就国内外在该领域或专题的主要研究成果、最新进展、研究动态、前沿问题等进行综合分析而写成的、能比较全面的反映相关领域或专题历史背景、前人工作、争论焦点、研究现状和发展前景等内容的综述性文章。“综”是要求对文献资料进行综合分析、归纳整理,使材料更精练明确、更有逻辑层次;“述”就是要求对综合整理后的文献进行比较专门的、全面的、深入的、系统的评述。

综述另起一页撰写,题目用小二号黑体加粗居中(综述题目尽量不与毕业论文题目雷同)。综述在目录中以“综述”二字表示并标注页码,综述内部小标题不再体现于目录中。综述正文格式参考毕业论文(设计)正文格式。

综述一般应包含以下四部分:概述、主题、总结和参考文献。

概述部分:主要是说明写作的目的,介绍有关的概念、综述的范围,扼要说明有关主题的现状或争论焦点,使读者对全文要叙述的问题有一个初步的轮廓。

正文部分:是综述的主体,其写法多样,没有固定的格式。可按年代顺序综述,也可按不同的问题进行综述,还可按不同的观点进行比较综述,不管用那一种格式综述,都要将所搜集到的文献资料归纳、整理、进行分析比较,阐明有关主题的历史背景、现状和发展方向,以及对这些问题的评述,主题部分应特别注意代表性强、具有科学性和创造性的文献引用和评述。

总结部分:与一般论文的小结有些类似,将全文主题进行扼要总结,提出自己的见解并对进一步的发展方向做出预测。

参考文献:是进行毕业论文(设计)和研究的基础,撰写文献综述的依据,列出这些参考文献不仅表示对被引用文献作者的尊重及引用文献的依据,而且也为评审者提供查找线索。参考文献的编排应条目清楚,格式规范,查找方便,内容准确无误。参考文献的格式参考上述毕业论文(设计)参考文献格式。综述参考文献要求8篇以上。

4.c语言 程序 倒立摆 求助 pid应用

#include "stc12.h" #include #include"pid.h" typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long int uint32; /*********************************函数声明****************** 结构体设定 ***********************************************************/ typedef struct PIDValue { uint32 Ek_Uint32[3]; //差值保存,给定和反馈的差值 uint8 EkFlag_Uint8[3]; //差值标志位符号,1则对应的为负数,0为对应的为正数 uint8 KP_Uint8; //比例系数 uint8 KI_Uint8; //积分系数 uint8 KD_Uint8; //微分显示 uint16 Uk_Uint16; //上一时刻的控制电压 uint16 RK_Uint16; //设定值 uint16 CK_Uint16; //实际值 uint8 Vaule_Flag; //输出的值正负标志位,0为正,1为负 }PIDValueStr; PIDValueStr PID; //定义一个结P构体 uint16 out ; // 加热输出(PID运算后的输出值) /*********************************************************************************** 增量型PID算式:PID :Uk=KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)] 函数入口: RK(设定值),CK(实际值),KP,KI,KD PID比例参数 函数出口: U(K) PID运算函数 **************************************************************************************/ uint16 PID_Calc(uint16 PIDinput) { uint32 Temp[3]; //中间临时变量 uint32 PostSum; //正数和 uint32 NegSum; //负数和 Temp[0] = 0; //给储存中间临时变量赋初值 Temp[1] = 0; Temp[2] = 0; PostSum = 0; //给存储所有的正数变量赋初值 NegSum = 0; //给存储所有的负值变量赋初值 PID.RK_Uint16=180; //设定值为180 PID.CK_Uint16=PIDinput; //输入值 if( PID.RK_Uint16 > PID.CK_Uint16 ) //如果设定值大于实际值,就是当前的值比设定值小 { if( PID.RK_Uint16 - PID.CK_Uint16 >10 ) //计算偏差是否大于 piancha=10 ( 这里的10由 piancha 来设定大小,根据实际情况设定) //if( PID.RK_Uint16 - PID.CK_Uint16 >piancha ) { //如果偏差大于 piancha=10 不在设定的PID调控范围之内就全速加热 out = 100; //偏差大于piancha=10为上限幅值输出(全速加热) // PID.Uk_Uint16 = full_speed; //全速时的加热值,更具实际情况可自由设定 这里full_speed=100; } else //如果偏差小于 piancha=10 再调节的范围内就计算储存起来 { //下面就是PID算法 Temp[0] = PID.RK_Uint16 - PID.CK_Uint16; // 计算出当前偏差值E(k) PID.EkFlag_Uint8[1]=0; //E(k)为正数 的标志位 0为正,1为负 //数值移位 PID.Ek_Uint32[2] = PID.Ek_Uint32[1]; //存储E(k-2) PID.Ek_Uint32[1] = PID.Ek_Uint32[0]; //储存E(k-1) PID.Ek_Uint32[0] = Temp[0]; //存储E(k) /****************************************************************************************/ if( PID.Ek_Uint32[0] >PID.Ek_Uint32[1] ) //E(k)>E(k-1) 为正数 { Temp[0]=PID.Ek_Uint32[0] - PID.Ek_Uint32[1]; //E(k)-E(k-1) 保存 PID.EkFlag_Uint8[0]=0; // 设定标志位 0为正,1为负 } else //E(k)Temp[2] ) //E(k-2)+E(k)>2E(k-1) { Temp[2]=(PID.Ek_Uint32[0]+ PID.Ek_Uint32[2])-Temp[2]; //E(k-2)+E(k)-2E(k-1)为正数 PID.EkFlag_Uint8[2]=0; } else //E(k-2)+E(k)-2E(k-1)为负数 { Temp[2]=Temp[2]-(PID.Ek_Uint32[0]+ PID.Ek_Uint32[2]); //2E(k-1)-(E(k-2)+E(k)) PID.EkFlag_Uint8[2]=1; } /**********************************************************************************************/ Temp[0] = (uint32)PID.KP_Uint8 * Temp[0]; // KP*[E(k)-E(k-1)] Temp[1] = (uint32)PID.KI_Uint8 * PID.Ek_Uint32[0]; // KI*E(k) Temp[2] = (uint32)PID.KD_Uint8 * Temp[2]; // KD*[E(k-2)+E(k)-2E(k-1)] /************************以下部分代码是讲所有的正数项叠加,负数项叠加**************************/ /**************************************KP*[E(k)-E(k-1)]********************************************/ if(PID.EkFlag_Uint8[0]==0) PostSum += Temp[0]; //正数和 else NegSum += Temp[0]; //负数和 /*************************************** KI*E(k)*************************************************/ if(PID.EkFlag_Uint8[1]==0) PostSum += Temp[1]; //正数和 else ; //空操作,E(K)>0 /************************************KD*[E(k-2)+E(k)-2E(k-1)]*************************************/ if(PID.EkFlag_Uint8[2]==0) PostSum += Temp[2]; //正数和 else NegSum += Temp[2]; //负数和 /**********************************************U(K)*************************************************/ //PostSum += (uint32)PID.Uk_Uint16; if(PostSum > NegSum ) // 是否控制量为正数 { out= PostSum - NegSum; PID.Vaule_Flag=0; //PID调节值是正值 } else //控制量输出为负数 { out=NegSum-PostSum; PID.Vaule_Flag=1; //PID调节值是负值 } } //return out; } else //如果设定值小于实际值,就是当前的值大于设定值,就不进行PID计算直接输出 0 { out = 0; } 。

毕业论文-单级倒立摆的pid控制

转载请注明出处众文网 » 毕业论文-单级倒立摆的pid控制

资讯

上海本科毕业论文字数

阅读(68)

本文主要为您介绍上海本科毕业论文字数,内容包括本科毕业论文字数一般写多少,本科毕业论文字数多少,本科的毕业论文一般来说要写多少字。毕业论文一般多少字,字数要求是什么,小编整理了相关信息,希望会对大家有所帮助! 中国知网对于本科论文的

资讯

家族信托毕业论文

阅读(83)

本文主要为您介绍家族信托毕业论文,内容包括总结一下2016年中国家族信托行业的发展情况和现状,最近在研究家族信托,请问有没有什么相关的文章可以推荐下百度,信托的分类写论文要用,帮帮忙。总结去年行业发展来看,目前对家族信托感兴趣并认真

资讯

大学生毕业论文周记

阅读(84)

本文主要为您介绍大学生毕业论文周记,内容包括毕业论文周记怎么写,毕业论文周记大概写多少字(文科),能帮我写一篇论文周记吗。家附近有个早点摊,吃的人不少。有时我起晚了,于是跑到摊头,胡乱买些点心,就赶去单位了。我最喜欢吃的是麻球。刚炸好的

资讯

会计电算化毕业论文引言

阅读(67)

本文主要为您介绍会计电算化毕业论文引言,内容包括大专会计电算化毕业论文前言怎么大专会计电算化毕业论文前言怎么,大专会计电算化毕业论文前言怎么写,会计电算化的大专毕业论文怎么写(包括目录,摘要,引言,文献以。浅析会计电算化 字数:3200

资讯

arm本科毕业论文

阅读(100)

本文主要为您介绍arm本科毕业论文,内容包括小弟想做一个嵌入式的毕业设计,单片机论文什么是ARM单片机毕业设计要这东西,不是很明白.爱问知,什么是ARM单片机毕业设计要这东西,不。凌阳科技大学计划网站上嵌入式资料多,而且有嵌入式设计方案,如

资讯

学前教育毕业论文开题报告范文

阅读(70)

本文主要为您介绍学前教育毕业论文开题报告范文,内容包括学前教育专业毕业论文怎么写开题报告,学前教育专业毕业论文选题方向(供参考),急求学前教育毕业论文开题报告题目是游戏环境因素对幼儿角色游戏。学前教育中,教师专业的观察意识和观察能

资讯

数控毕业论文前言

阅读(67)

本文主要为您介绍数控毕业论文前言,内容包括数控技术毕业设计前言,数控技术毕业论文的引言,数控专业毕业论文前言。前 言 毕业设计是高等职业教育教学计划的重要组成部分,是加强理论与实际相结合 的实践性教学环节,是各专业的必修课程,在学生

资讯

冷轧知识毕业论文

阅读(104)

本文主要为您介绍冷轧知识毕业论文,内容包括冷轧轧钢工艺论文,冷轧轧钢工艺论文,本人需要轧钢方面的论文三篇,求教各方神圣急最好是关于热轧无缝。在轧钢(主要是冷轧)过程中,为了减小轧辊与轧材之间的磨擦力,降低轧制力和功率消耗,使轧材易于延

资讯

广西大学毕业论文封面

阅读(65)

本文主要为您介绍广西大学毕业论文封面,内容包括毕业论文封面怎么写,毕业论文的封面是什么样子的啊,求毕业论文封面格式,目录格式,正文格式等等格式。毕业论文基本规范要求 毕业论文是培养学生综合能力的一个重要教学环节,是检验毕业生的专

资讯

管理类学生毕业论文的写作与指导

阅读(65)

本文主要为您介绍管理类学生毕业论文的写作与指导,内容包括管理类毕业论文的写作趋向是什么该怎么写呢,要如何写论文公司管理专业的毕业论文麻烦指导下谢谢,经济管理毕业论文从哪些方面写。首先从论文选题着手,选个好题目吧。以下方向的题目

资讯

计算机毕业论文设计网

阅读(75)

本文主要为您介绍计算机毕业论文设计网,内容包括推荐几个毕业论文网站,有哪个比较好的计算机毕业设计论文网站,计算机毕业论文网上哪里可以找的到要免费的。一下只是给你提供些大概内容,你可以作为参考!!! 超市进销存管理系统 目录: 言…………

资讯

会议论文sci检索的能毕业吗

阅读(82)

本文主要为您介绍会议论文sci检索的能毕业吗,内容包括会议论文有可以被SCI收录的吗,一些会议期刊说被SCI检索,级别高于核心期刊,真的是这样吗搜,什么样的会议论文能够被SCI或者EI检索。会议没有对应期刊,只有对应的会议文集和会议论文集;有的

资讯

会审毕业论文大专公司名称

阅读(60)

本文主要为您介绍会审毕业论文大专公司名称,内容包括写毕业论文的时候公司名字可以瞎编吗,毕业论文单位名称不能用真实名称怎么办,毕业论文中,公司简介需要写哪些内容。这个问题要看您的论文中是否涉及到该企业的核心数据和未公开信息,以及

资讯

毕业设计(论文)工作态度自评

阅读(58)

本文主要为您介绍毕业设计(论文)工作态度自评,内容包括论文自我评价,对毕业论文的自我评价,急求本科毕业论文评议考核书中"本人对毕业论文工作情况及。本人性格开朗、稳重、有活力,待人热情、真诚;工作认真负责,积极主动,能吃苦耐劳,用于承受压力

资讯

上海本科毕业论文字数

阅读(68)

本文主要为您介绍上海本科毕业论文字数,内容包括本科毕业论文字数一般写多少,本科毕业论文字数多少,本科的毕业论文一般来说要写多少字。毕业论文一般多少字,字数要求是什么,小编整理了相关信息,希望会对大家有所帮助! 中国知网对于本科论文的

资讯

家族信托毕业论文

阅读(83)

本文主要为您介绍家族信托毕业论文,内容包括总结一下2016年中国家族信托行业的发展情况和现状,最近在研究家族信托,请问有没有什么相关的文章可以推荐下百度,信托的分类写论文要用,帮帮忙。总结去年行业发展来看,目前对家族信托感兴趣并认真

资讯

大学生毕业论文周记

阅读(84)

本文主要为您介绍大学生毕业论文周记,内容包括毕业论文周记怎么写,毕业论文周记大概写多少字(文科),能帮我写一篇论文周记吗。家附近有个早点摊,吃的人不少。有时我起晚了,于是跑到摊头,胡乱买些点心,就赶去单位了。我最喜欢吃的是麻球。刚炸好的

资讯

会计电算化毕业论文引言

阅读(67)

本文主要为您介绍会计电算化毕业论文引言,内容包括大专会计电算化毕业论文前言怎么大专会计电算化毕业论文前言怎么,大专会计电算化毕业论文前言怎么写,会计电算化的大专毕业论文怎么写(包括目录,摘要,引言,文献以。浅析会计电算化 字数:3200

资讯

arm本科毕业论文

阅读(100)

本文主要为您介绍arm本科毕业论文,内容包括小弟想做一个嵌入式的毕业设计,单片机论文什么是ARM单片机毕业设计要这东西,不是很明白.爱问知,什么是ARM单片机毕业设计要这东西,不。凌阳科技大学计划网站上嵌入式资料多,而且有嵌入式设计方案,如

资讯

学前教育毕业论文开题报告范文

阅读(70)

本文主要为您介绍学前教育毕业论文开题报告范文,内容包括学前教育专业毕业论文怎么写开题报告,学前教育专业毕业论文选题方向(供参考),急求学前教育毕业论文开题报告题目是游戏环境因素对幼儿角色游戏。学前教育中,教师专业的观察意识和观察能

资讯

数控毕业论文前言

阅读(67)

本文主要为您介绍数控毕业论文前言,内容包括数控技术毕业设计前言,数控技术毕业论文的引言,数控专业毕业论文前言。前 言 毕业设计是高等职业教育教学计划的重要组成部分,是加强理论与实际相结合 的实践性教学环节,是各专业的必修课程,在学生

资讯

电子厂安全现状分析及改进毕业论文

阅读(64)

本文主要为您介绍电子厂安全现状分析及改进毕业论文,内容包括(电子商务安全机制的构建分析)毕业论文大纲怎么写,完整格式论文论文最基本格式一篇完整的论文该如何安排,最基本的,求毕业论文一篇题目:电子商务的风险及其安全管理。电子商务安全