|
|
本帖最后由 Martin1994 于 2012-7-3 18:13 编辑
Presented by: Martin Chloride
转载请注明出处.
先来个Demo,同步电机
(自带吐槽:优酷自转码果然不靠谱,帧率掉一地,以后还是自己转完战渣浪好了)
参考教程:http://bbs.cmnxt.com/thread-5688-1-1.html
(自带吐槽 :实在是找不到高端一点的教程了)
模块见附件。
(自带吐槽 :NXT-G用得我恶心死了,乱七八糟的走线,动不动卡机崩溃,用C十几行代码就能解决的事情居然要我那么长时间)
使用方法:
1 - 将附件中的 "ChloroPID.rbt" 拷贝到当前用户的 "My Blocks" 文件夹下;
2 - 建立一个循环,放入 ChloroPID 模块;
3 - 设置一个输入(如光感的读数),接入 "value" 输入端中;
4 - 输入其余各参数,详细如下:
i> amend - 积分回零的方式:如果设置为0,当输入值从阀值一端跳到阀值另一端时积分值清零;如果设置为(0,1),则每次循环将积分值自乘该值;
ii> KP - 比例常数;
iii> KI - 积分常数;
iv> KD - 微分常数;
v> offset - 阀值:平衡状态时输入值的理想值;
vi> 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 协议,如需再开发请仔细阅读协议;
|
|