光之使者 发表于 2024-12-22 14:03:38

基于发FPGA 练手智能小车顶层文件

`timescale 1ns / 1ps

module top(
    input    wire          clk   ,
    input    wire          rst_n ,
    input    wire          rx    ,
    input    wire          echo,
    input    wire     D0    ,
    output   reg    dj    ,
    output   wire          trig,
    output   wire     sel   ,
    output   reg         t17   ,
    output   reg         u18   ,
    output   wire     seg         
    );

wire         valid;
wire dis    ;
wiredata   ;
reg    dis_t;
reg   state;
reg    cunt   ;
parameter ZERO   =2'b00;
parameter ONE    =2'b11;

//产生一个计数器
always @(posedge clk ) begin
    if(!rst_n)
    cunt<=0;
    else if(cunt===100)
    cunt<=0;
    else
    cunt<=cunt+1;
end
//t17 u18赋值
always @(posedge clk ) begin
    if(!rst_n)begin
    t17<=0;
    end
    elsecase(state)
    ZERO:begin
      if(cunt<35)
      t17<=1;
      else
      t17<=0;   
    end
    ONE:t17<=1;
    default:;
    endcase
end
always @(posedge clk ) begin
    if(!rst_n)
    u18<=0;
    elsecase(state)
    ZERO:begin
      if(cunt<35)
      u18<=1;
      else
      u18<=0;
    end
    ONE: u18<=1;
    default:;
    endcase
end
//状态的转移
always @(posedge clk ) begin
    if(!rst_n)
    state<=ONE;
    else if(state==ONE&&data==8'h06)
    state<=ZERO;
    else if(state==ZERO&&data==8'h07)
    state<=ONE;
    else
    state<=state;
end
// dis_t的缓存
always @(posedge clk ) begin
    if(!rst_n)
    dis_t<=0;
    else if(dis>0)
    dis_t<=dis;
    else
    dis_t<=dis_t;
   
end
//红外寻迹 正常模式 的描述 (状态的描述)
always @(posedge clk ) begin
    if(state==ZERO)begin
      if(dis_t<55)
      dj<=4'b0000;
      elsecase (D0)
            2'b00: dj<=4'b0101;
            2'b01: dj<=4'b1001;
            2'b10: dj<=4'b0110;
            default:dj<=4'b0000 ;
      endcase
    end
    elseif(state==ONE)begin
      if(dis_t<55)
      dj<=4'b0000;
      else   case (data)
            8'h01:dj<=4'b0101;
            8'h02:dj<=4'b1010;
            8'h03:dj<=4'b1001;
            8'h04:dj<=4'b0110;
            8'h05:dj<=4'b0000;
            default: dj<=4'b0000;
      endcase
    end
    else
    dj<=4'b0000;
end



rx#(
    . CLK_DIV ( 50_000_000 ),
    . BIT   ( 9600       )
)u_rx(
    .clk(clk),
    .rst_n(rst_n),
    .rx   (rx   ),
    .data (data ),//o
    .valid(valid)
    );
HC_SR04 u_hc(
    /*input   wire      */. clk(clk   ),
    /*input   wire      */. rst_n(rst_n   ),
    /*input   wire      */. echo (echo    ),
    /*output    wire      */. trig (trig    ),
    /*output    wire */. sel(sel   ),
    /*output    wire */. seg(seg   ),
                              . data (dis   )// 精度0.1cm 小于40执行避障停止
    );
endmodule

其中细节1 蓝牙连接tx相称于是 蓝牙担当到了数据通过tx发送给fpga的(fpga只写了rx)

https://i-blog.csdnimg.cn/direct/cc8088bc19ee40dbb5d03ff286348e7c.jpeg
其中细节2

https://i-blog.csdnimg.cn/direct/3b87bb7ae4484c139ffa92efca141842.png
其中细节3

红外线寻迹模块需要低速 这时候如果速度过快需要调整pwm
https://i-blog.csdnimg.cn/direct/a1906606c7f7427f85d003dcec75c505.png
ENA 与ENB为两马达的使能,需要调速的时候把这两个使能的跳帽去掉,然后在第一个入口接入一个pwm信号即可

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 基于发FPGA 练手智能小车顶层文件