任务目标
寻迹小车的实现。用的红外寻迹模块,记得要把模块可调电阻参数调好。
实现代码
电机模块代码motor.v:
module MOTOR(
input sysclk,
input rst_n,
input ENA,
input ENB,
input [1:0] ATURN,
input [1:0] BTURN,
output reg [1:0] EN,
output reg [1:0] AIN,
output reg [1:0] BIN
);
always@(posedge sysclk) begin
if(!rst_n) begin
EN <= 2'b00;
AIN <= 2'b00;
BIN <= 2'b00;
end
else
begin
EN <= {ENB ,ENA};
AIN <= ATURN;
BIN <= BTURN;
end
end
endmodule
顶层文件逻辑TOP.v:
`timescale 1ns / 1ps
module TOP(
input sysclk,
input rst_n,
input [1:0] infraded, // 1:左侧红外传感器,0:右侧红外传感器
output [1:0] AIN, // 左侧车轮控制
output [1:0] BIN // 右侧车轮控制
);
reg [1:0] ATURN,BTURN;
wire [1:0] EN;
MOTOR motor(
.sysclk(sysclk),
.rst_n(rst_n),
.ENA(1'b1),
.ENB(1'b1),
.ATURN(ATURN),
.BTURN(BTURN),
.EN(EN),
.AIN(AIN),
.BIN(BIN)
);
always@(posedge sysclk) begin
if(infraded == 2'b00) begin
ATURN <= 2'b01;
BTURN <= 2'b01;
end
else if(infraded == 2'b01) begin
ATURN <= 2'b01;
BTURN <= 2'b10;
end
else if(infraded == 2'b10) begin
ATURN <= 2'b10;
BTURN <= 2'b01;
end
else begin
ATURN <= 2'b00;
BTURN <= 2'b00;
end
end
endmodule
结语
车辆组装上就看读者自己来吧。代码逻辑大同小异。