part1: 用一路led照亮地面,左中右三路红外传感看反光。根据反光3'bxxx写个mealy状态机。
9种状态3‘zzz,3'b000~3'b111 根据后8种状态的64种变化,输出前进还是后退,速度,方向等。
3‘b111 -> 3'b111: 在线上, DIR=2'b00; RUN=4, 快进;
3'b111 -> 3'b011: 小弯左偏, DIR=2'b10; RUN=2, 慢进;
3'b111 -> 3'b110:
3'b111 -> 3''b001: 大弯左偏, DIR=2'b10; RUN=1, 低速;
3'b111 -> 3'b000: >90度的急弯, 跑丢了: RUN=1, DIR=2'b11, REV=1倒回去找回路线。
3'b000 - > 3'b001:
3'b001 ->
default:
Part2:
根据REV确定步进电机的正转还是反转,根据DIR产生脉冲序列,根据RUN产生脉冲频率。
主要还是状态解析能力,参考<异步时序电路设计>之mealy,输出跟当前态和历史态都相关。
先按一下中控台上的360度影像按键,这时候中控屏上就会有个循迹倒车点击一下。然后再点击左侧屏幕上的开始循迹,这时候就要松开刹车和方向盘了让它自己 *** 控。这个功能可以记录30米内的行程,超出应该就不行了。小6的这项功能我还是比较满意的,对于我这样的新手而言简直就是福音。因为我家小区内本来是上下道的路,但是因为车位紧张一条道上停满了车。这就相当于变成了一条单向车道,每个车位前面都放着一排车。进出车很不方便,所以我一般也不愿意开进来。(看图)
首先要区分踩线和十字路口。如果一边传感器有效后,经过1/2线宽的行程另一边的传感器还没有有效,说明已经踩线了,进行方向调整。如果在1/2线宽内另一边传感器也有效了,说明到达十字路口,这时左转,直到右边的传感器无效,说明已经过了十字路口。然后继续进行防踩线的行走方式。
简单的写的话不会区别偏离黑线距离远近的,复杂点儿的话会分区编程,简单版如下:
void turn_left()
{
P10 = 0; //左前轮
P11 = 1; //右前轮
P12 = 0; //左后轮
P13 = 1; //右后轮
}
unsigned char judge()
{
switch(P2 & 0x)
case 0x:
{
break;
}
return 某变量(用于选择拐弯方向程序)
}
转弯比较简单,就是一个轮转,另一个不转达到转弯目的,你也可以用速度高低来控制,自己DIY就行。
胶带的宽度一定的话:
四个传感器一字排列的情况最简单:
按1234号传感器命名,照在胶带上状态位为A,否则为a
直线正常行走时,23号持续为A,14号持续为a
分析开始右转的逻辑:
2号变a,继续直线行走,直到4号变A,根据24号间的距离和小车在这段时间内行驶的距离计算出转动角度(这就是动态平面几何问题了,自己画图解一下,注意转弯时候前后中心点的轨迹,胶带宽度是关键,得到的角度不会也不必太精确。这里我只讨论逻辑),然后以比计算结果稍大(目的是确保能让2恢复状态A)的转动角度开始转弯,等到2和3都恢复状态A,小车变回直线行走,等到2号重新变a,小车再恢复到原先的转动角度……后面一直循环就行了
直线上如果车子前进方向倾斜,和转弯一样,下面以车子向右倾斜为例分析:
会出现3号变a的情况,继续保持直线行走,直到1号变A,计算出小车在这个过程中行进距离,结合胶带宽度,1和3号间的距离,就可以算出偏离的角度然后决定转动角度。后面具体调整和过弯道一样。
然后我来吐槽为什么要用labview,你是想着拿着笔记本进行无线 *** 控么 - -,嵌入式的labview编程现在还不成熟好吧~
以上就是关于用Verilog控制智能循迹小车的代码怎么写全部的内容,包括:用Verilog控制智能循迹小车的代码怎么写、领克06如何开启循迹倒车、如何让循迹小车走“8”字型,主控为单片机等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)