这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界» 论坛首页» DIY与开源设计» 电子DIY» 我的fpga智能循迹车

共7条 1/1 1 跳转至

我的fpga智能循迹车

菜鸟
2013-04-14 18:56:11 打赏

程序正在调试中,争取能够实现转弯性能的同时,实现实现更快速度,以前用单片机做,速度不能快,速度一块转弯就会跟不上,就会偏离黑色轨道,无法循迹。当然之前我用的是普通控制,没有用瑞萨单片机PID之类那么复杂的控制
视频地址:http://player.youku.com/player.php/sid/XNTQ2MDk3NTI0/v.swf

show一下我的车


2013/0416追加,还是老问题,跟用mcu控制差不多,速度一快转向不灵活,还是要从机械结构上解决转向问题,电机的pwm控制,周期太短的话电机啸叫,不会启动。

module car(
sys_clk,
in1,
in2,
in3,
in4,
ena,
enb,
detect_a,
detect_b);
input sys_clk;
output in1;
reg in1;
output in2;
reg in2;
output in3;
reg in3;
output in4;
reg in4;
output ena;
reg ena;
output enb;
reg enb;
input detect_a;
input detect_b;
reg [9:0] go_state;
reg [9:0] left_state;
reg [9:0] right_state;
reg [9:0] wrong_state;
reg [30:0] go_clk;
reg [30:0] stop_clk;
reg [30:0] left_clk;
reg [30:0] right_clk;
parameter state_0=0;
parameter state_1=1;
parameter state_2=2;
parameter state_3=3;
parameter state_4=4;
parameter state_5=5;
parameter state_6=6;
parameter state_7=7;
/*各个引脚定义
pin161---->in1
pin163---->in2
pin165---->in3
pin169---->in4
pin191---->ena
pin195---->enb
pin193---->detect_a
pin205---->detect_b
*/
always@(posedge sys_clk)
begin
if((detect_a==1'b1)&&(detect_b==1'b1))
begin
case(go_state)
state_0:
begin
right_clk<=0;
right_state<=0;
left_clk<=0;
left_state<=0;
go_clk<=0;
stop_clk<=0;
go_state<=state_1;
end
state_1:
begin
if(go_clk>=31'd1500000)
begin
go_clk<=0;
go_state<=state_2;
end
else
begin
ena=1'b1;
enb=1'b1;
in1=0;
in2=1'b1;
in3=0;
in4=1'b1;
go_clk<=go_clk+1'b1;
go_state<=state_1;
end
end
state_2:
begin
if(stop_clk>=31'd10000)
begin
stop_clk<=0;
go_state<=state_0;
end
else
begin
ena=0;
enb=0;
in1=0;
in2=1'b1;
in3=0;
in4=1'b1;
stop_clk<=stop_clk+1'b1;
go_state<=state_2;
end
end
endcase
end
else if((detect_a==0)&&(detect_b==1'b1))
begin
case(left_state)
state_0:
begin
right_clk<=0;
right_state<=0;
go_state<=0;
go_clk<=0;
stop_clk<=0;
left_state<=state_1;
end
state_1://左边轮子探到黑线
begin
if(left_clk>=31'd180000000)
begin
left_clk<=0;
left_state<=state_2;
end
else
begin
ena=1'b1;
enb=1'b1;
in1=1'b1;
in2=0;//反转
in3=0;
in4=1'b1;//正转
left_clk<=left_clk+1'b1;
left_state<=state_1;
end
end
state_2:
begin
left_state<=state_0;
end
endcase
end
else if((detect_a==1'b1)&&(detect_b==0))//右边轮子探到黑线
begin
case(right_state)
state_0:
begin
right_clk<=0;
left_state<=0;
left_clk<=0;
go_state<=0;
go_clk<=0;
stop_clk<=0;
right_state<=state_1;
end
state_1:
begin
if(right_clk>=31'd180000000)
begin
right_clk<=0;
right_state<=state_2;
end
else
begin
ena=1'b1;
enb=1'b1;
in1=0;
in2=1'b1;//正转
in3=1'b1;
in4=0;//反转
right_clk<=right_clk+1'b1;
right_state<=state_1;
end
end
state_2:
begin
right_state<=state_0;
end
endcase
end
else if((detect_a==0)&&(detect_b==0))
begin
case(wrong_state)
state_0:
begin
right_clk<=0;
right_state<=0;
left_state<=0;
left_clk<=0;
go_state<=0;
go_clk<=0;
stop_clk<=0;
wrong_state<=state_1;
end
state_1:
begin
/* ena=0;
enb=0;
in1=0;
in2=1'b1;
in3=0;
in4=1'b1;*/
wrong_state<=state_0;
end
endcase
end
end
endmodule






关键词: 智能车

院士
2013-04-14 22:44:02 打赏
2楼

楼主这个DIY还是很不错的。

赞一下!送上10个积分……



高工
2013-04-14 23:36:26 打赏
3楼
楼主用的什么传感器呢?没找到。。。

高工
2013-04-14 23:58:04 打赏
4楼
这东西用FPGA做起来,没有MCU好用啊

院士
2013-04-15 08:59:23 打赏
5楼
大材小用了吧?

高工
2013-04-15 09:42:03 打赏
6楼

不错,赞一个!


菜鸟
2013-05-04 17:12:52 打赏
7楼
嗯 ,楼主的这个做的好啊,这样学FPGA才给力!

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]