只能说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十几行代码就能解决的事情居然要我那么长时间)
使用方法:
- 将附件中的 “ChloroPID.rbt” 拷贝到当前用户的 “My Blocks” 文件夹下;
- 建立一个循环,放入 ChloroPID 模块;
- 设置一个输入(如光感的读数),接入 “value” 输入端中;
- 输入其余各参数,详细如下:
- amend – 积分回零的方式:如果设置为0,当输入值从阀值一端跳到阀值另一端时积分值清零;如果设置为(0,1),则每次循环将积分值自乘该值;
- KP – 比例常数;
- KI – 积分常数;
- KD – 微分常数;
- offset – 阀值:平衡状态时输入值的理想值;
- timer# – 计时器编号:允许的值为1、2、3,代表 NXT-G 所允许使用的3个计时器,如果程序中已经使用了某计时器,请在此设置为一个不同的值;
- 将输出值(Result)处理后作为物理输出。
使用示例:
其他:
- 这个模块在一个程序中同一时间内只能使用一个(也就是请不要在多线程程序中同时使用),因为 NXT-G 不支持局部变量(自带吐槽:坑爹呢);
- 这个模块使用了计时器进行精确计算;
- 这个模块会自动初始化;
- offset值也可以是动态的,就像demo中的电机同步;
- 这东西是这届 WRO 的副产品, WRO 居然规定不准用 C 不准用 Labview ,异常痛苦;
- ChloroPID 遵循 GPLv2 协议,如需再开发请仔细阅读协议;
下载:ChloroPID.zip PID_demo.zip