NXT-G 2.0 的简易 PID 模块 ChloroPID

只能说NXT-G用得我各种不爽,明明用c十几行代码搞得定的事情要花掉我几个小时。

现在WRO做得虚啊,看着不断飙升的闪存占用量,那坑爹的64k闪存不知道能不能装下一个终版程序。真不知道WRO组委会怎么想的,c不让用就算了干嘛labview也禁掉。

以上为吐槽。

同时发布于:http://bbs.cmnxt.com/thread-8256-1-1.html

参考教程:http://bbs.cmnxt.com/thread-5688-1-1.html

(自带吐槽 :实在是找不到高端一点的教程了)

模块见附件。

(自带吐槽 :NXT-G用得我恶心死了,乱七八糟的走线,动不动卡机崩溃,用C十几行代码就能解决的事情居然要我那么长时间)

使用方法:

  1. 将附件中的 “ChloroPID.rbt” 拷贝到当前用户的 “My Blocks” 文件夹下;
  2. 建立一个循环,放入 ChloroPID 模块;
  3. 设置一个输入(如光感的读数),接入 “value” 输入端中;
  4. 输入其余各参数,详细如下:
    1. amend – 积分回零的方式:如果设置为0,当输入值从阀值一端跳到阀值另一端时积分值清零;如果设置为(0,1),则每次循环将积分值自乘该值;
    2. KP – 比例常数;
    3. KI – 积分常数;
    4. KD – 微分常数;
    5. offset – 阀值:平衡状态时输入值的理想值;
    6. timer# – 计时器编号:允许的值为1、2、3,代表 NXT-G 所允许使用的3个计时器,如果程序中已经使用了某计时器,请在此设置为一个不同的值;
  5. 将输出值(Result)处理后作为物理输出。

使用示例:

其他:

  1. 这个模块在一个程序中同一时间内只能使用一个(也就是请不要在多线程程序中同时使用),因为 NXT-G 不支持局部变量(自带吐槽:坑爹呢);
  2. 这个模块使用了计时器进行精确计算;
  3. 这个模块会自动初始化;
  4. offset值也可以是动态的,就像demo中的电机同步;
  5. 这东西是这届 WRO 的副产品, WRO 居然规定不准用 C 不准用 Labview ,异常痛苦;
  6. ChloroPID 遵循 GPLv2 协议,如需再开发请仔细阅读协议;

下载:ChloroPID.zip PID_demo.zip

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">