查看“Microduino 单维度PID调整/zh”的源代码
←
Microduino 单维度PID调整/zh
跳转至:
导航
、
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
{{Language | microduio Single dimension PID adjustment}} {| style="width: 800px;" |- | ==目的== 本教程将让大家了解PID,并通过processing展示的波形图来更好的理解PID控制,为以后制作自平衡小车打下坚实的基础。 ==设备== *'''[[Microduino-Core/zh]]''' *'''[[Microduino-USBTTL/zh]]''' *其他硬件设备 **USB数据连接线 一根 **电位器 一个 ==理解PID== PID在自动控制领域有着极其重要的作用,作为最早实用化的控制技术已经有70多年的历史,近几年一些创客们自制的一些很酷的东西,如:四轴飞行器,自平衡车等等都离不开它的身影。 首先了解什么是PID。PID实指“比例proportional”、“积分integral”、“微分derivative”,如果我们要求被控制的对象最终趋于一个稳定的结果,一般就可以使用PID算法。 假设说,有一辆速度为1m/s的小车,我们要求他的速度改变为5m/s,要完成这样的一件事,我们必须要有: 小车驱动装置(用程序控制它输出多大的电压,电压决定驱动的马力) 被驱动器控制的部分(即小车) 检测当前速度的装置(当前速度与目标速度的差称为误差)。本来,我们可以给小车一个驱动力让小车加速,直到检测到小车速度达到5m/s,撤去驱动力。 然而,这样做会带来几个问题: 1,当小车速度达到5m/s时,从装置检测到这个速度,通知控制器,让控制器改变输出的电压,这一个过程需要耗费一定时间,在这个时间里面,小车速度可能增加了不少。 2,撤去驱动力后,外界条件如摩擦会让小车速度进一步改变。 然而,PID算法可以在一定误差内解决这些问题。 使用PID算法时,大致是这样的。每一个采样周期,通过速度检测装置获得当前速度,传入程序,通过程序计算得到电压控制小车得到新速度。下一个采样周期又把新速度传入,获得新电压,再传入速度,再获得电压,如此反复。 PID算法的关键,是如何根据当前得到的速度值,输出一个“恰当”的电压,以致小车最终能够趋于稳定。 PID算法采用比例,积分,微分(Proportion Integral Differential)三种方法进行控制。三种方法都有自己对应的一个常量(pconst,iconst,dconst)。这三个变量都需要在实验中多次尝试得出。 用数学公式表达PID算法如下图所示: [[File:PID公式.jpg|600px|center|thumb]] 下面就让我们用Microduino和processing来实现一个,简单PID调整,从而更直观的理解PID。 ==原理图== [[File:Microduino单维度调整原理图.jpg|600px|center|thumb]] ==程序== [https://github.com/Microduino/Microduino_Tutorials/tree/master/Microduino_Sensor/PID_FrontEnd_v03 PID_FrontEnd_v03] ==调试== 步骤一:下载Processing2.0 Beta 7 IDE软件:http://processing.org/download/ 步骤二:下载Arduino官方库—PID Library 和 PID Front-End using Processing.org:http://playground.arduino.cc//Code/PIDLibrary 步骤三:下载Processing官方库—ControlP5 :http://www.sojamo.de/libraries/controlP5/ 步骤四:将Arduino官方库—PID Library解压到你的arduino IDE的libraries里面 如果想知道PID库中的算法如何实现的请参见:http://brettbeauregard.com/blog/2011/04/improving-the-beginners-pid-introduction/ 步骤五:将Processing官方库—ControlP5解压到你的processing安装文件夹里的\modes\java\libraries里面 步骤六:解压Arduino PID_FrontEnd_v03.zip到任何一个地方 步骤七:用Arduino IDE打开PID FrontEnd ArduinoSampleCode.pde,然后点击编译下载到Microduino上 在代码中,注意如下: [[File:SetpointInputOutput.jpg|600px|center|thumb]] double Setpoint, Input, Output; //setpoint为目标值,也就是经过PID调整要达到的值 //Input为输入值,在系统中就是通过某些传感器检测到的实际值。比如:在自平衡车中input就是传感器获取的角度值。 //Output为输出值,也就是经过PID调整得出的需要调整的值。如果在自平衡车系统中就是给电机输出的PWM的值,使得角度正好改变到0度。 int inputPin=0, outputPin=3; //在本例中,只做简单的PID调整,输入值inputPin是A0,是通过一个电位器得到的,输出值outputPin是pin3,也会体现到processing的波形图中。 步骤八:用Processing打开PID_FrontEnd_v03.pde [[File:processing选择正确的com口.jpg|600px|center|thumb]] 要注意 myPort = new Serial(this, Serial.list()[1], 9600); 和下面信息[0] "COM2", [1] "COM7",总之,写对你的com口就成。 步骤九:硬件搭建,如下图: [[File:Microduino单维度调整连接图.jpg|600px|center|thumb]] 步骤十:先运行arduino IDE代码,在运行processing,然后会出现如下图: [[File:processing的PID波形图.jpg|600px|center|thumb]] 步骤十一:转动电位器,观察input, setPoint, output的波形。 ==结果== 在本例中setpoint=100,当input(电位器)的值为0时,output达到最大值255为了让最快的达到setpoint。 当input达到100,甚至超过100时,output变为最小。 ==视频== http://v.youku.com/v_show/id_XNzAxMDk4Mjcy.html |}
该页面使用的模板:
模板:Language
(
查看源代码
)
模板:Nmbox
(
查看源代码
)
返回至
Microduino 单维度PID调整/zh
。
导航菜单
个人工具
创建账户
登录
名字空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
Welcome
首页
创客大赛
大赛详情
3D打印
安装月球车
图形化编程
操控月球车
升级月球车
编程工具下载
软件下载
Arduino
Processing
Mixly
Scratch
模块套件
Microduino 102
mCookie 102
mCookie 202
mCookie 302
IBC
其他
应用套件
四轴飞行器
平衡车
小车CUBE
音乐播放器
刷卡音乐播放器
wifi气象站
彩虹音乐触摸灯
分贝检测仪
迎门汇报
LED点阵时钟
LED点阵屏幕
硬件
mCookie
Sensor
Microduino
MicroWrt
MicroNux
MicroRobot-Core
MicroRobot-CoreESP
ideaBoard
ideaBox
MicroMV
MicroAI
帮助
常见问题
帮助
工具
链入页面
相关更改
特殊页面
页面信息