小车测速码盘读数请教(主要是想让小车走直线)?
本帖最后由 wzc0066 于 2012-9-12 19:58 编辑购买的小车底盘是 路虎5履带底盘(2WD),并带有两个测速模块,支持Arduino读数。
小车底盘及测速模块见附件;
商家告诉我每转一圈,码盘状态会跳变8次(码盘包括4个黑色块和4个白色块,接入一数字口,分别对应0和1的输出),但我这边读出来竟然达到160多次;
测试代码:
int pin = 4; //连接到pin 4
int i;
int j;
int n = 0; //码盘读数(即状态跳变次数)
int flag = 0; //因为初始读数可能为0或1,该标志是用来读取初始状态的
void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
}
void loop() {
i = digitalRead(pin); //读取码盘状态(0或1)
if(!flag){ //获取初始状态读数
j = i;
flag = 1;
}
if(i != j){ //每次状态发生跳变的时候,读数增加1
n += 1;
j = i;
}
Serial.println(n);
}
代码很简单,请大家帮忙看一下,有什么错误吗?
厂家没提供测试代码,说本论坛里面有,但没搜索到,有使用过这款底盘的朋友现身探讨一下吧。 也许是由于干扰导致的
可以搞个斯密特触发器试试 本帖最后由 wzc0066 于 2012-9-12 20:01 编辑
通过附件图片,编码器(那个黑白相间的东东)好像是通过减速齿轮带动的,会不会是这个原因呢(外轮转一圈,里面的转了很多圈) ?
还有一个问题:假设当前的读数是正确的,后面的调试让小车走直线:不断读取两边的读数,如果哪一边读数较大,则将该侧马达降为半速(另一边读数较小的为满速),运行持续50ms(delay(50));
调速后两边的读数基本接近了(大约相差2或3,每圈的读数约为160多,所以差异的比率蛮小的),但小车运行的更不直了(准确的说抖动比较厉害)
做过直线行驶的朋友麻烦指点一下。
这边读出来竟然达到160多次 --- 怎么判断出来的?,你的一圈可能内部已是十多圈了
可简化为下列句子
int pin = 4; //连接到pin 4
int i;
int j;
int n = 0; //码盘读数(即状态跳变次数)
void setup() {
Serial.begin(9600);
pinMode(pin, INPUT);
j= digitalRead(pin); //读取码盘状态(0或1)
}
void loop() {
i = digitalRead(pin); //读取码盘状态(0或1)
if(i != j){ //每次状态发生跳变的时候,读数增加1
n += 1;
j = i;
Serial.println(n);
}
} 本帖最后由 wzc0066 于 2012-9-17 12:23 编辑
yyy_zc 发表于 2012-9-14 21:54 static/image/common/back.gif
这边读出来竟然达到160多次 --- 怎么判断出来的?,你的一圈可能内部已是十多圈了
可简化为下列句子
非常感谢,确实简化了不少!
现在假如读数已经正确获得了,然后就是要矫正行驶中产生的偏差了:
想法是(以“前进”为例,pwm速度值是通过2.4G遥控器给的):
* 如果左轮读数大,则左轮pwm降为一半,右轮保持原速度值;
* 如果右轮读数大,同样处理
* 读数相等,则等度行驶
这样调节后,从串口的输出来看两边的读数已经很接近了(差额 0~3 这样吧,一圈的读数大约是164,所以从比例来看两边轮子已经非常接近了),但小车的真实运行情况却大不如自然状况下(就是非调控状态下前进,小车会越走越弯),感觉左边快一阵,然后右边快一阵,轨迹很凌乱!
请做过闭环控制的朋友提宝贵意见。。。 如果光电编码器的精度高,这样计数准确吧,可不可以用中断计数,新人不懂 朋友 你的这个实验后来成功了吗?我最近也在做一个和你这个类似的东西,有的问题想请教你.你的i,j分别代表两边的轮子吗?我发现你的编程相对别的比较简单,我看很多都用到PID编程,你这个好像没用到PID? 这个编码器太烂了,没实验成功呢。。。 代码有点冗余。其实这种反射式的编码盘确实不好用,对射式的效果会更好。给你个网址,我买的这种测速模块:http://item.taobao.com/item.htm?spm=a1z10.3.w4002-305338327.42.A1RHdA&id=12757713315
申明:我不是打广告的!!:lol 要用pid吧,靠这个走直线不靠谱吧 楼主,你这个测速的时间上是怎么控制的啊?用了中断了吗?中断我还不会,我用了一个光电槽的来测速,但是我不知道怎么去设置单位时间,怎么让它显示每秒钟的变化次数?
页:
[1]