【红色飓风Nano二代测评】插补绘图之钢炼纹章
0赞
发表于 4/29/2014 8:21:42 AM
阅读(3421)
上次通过按键画一些横平竖直的线,感觉不太爽。这次想通过插补(而不是按键)画一些
有趣的图形。画些什么呢,我的思绪一下飘到了大学时代,在那个暑假,白天和大家在实
验室备战电子竞赛,晚上就会回到寝室和达子一起看钢炼,回忆起那段时间,真是充实而美好。
好吧,这次就画一个钢炼的纹章致青春~~
上次是通过按键绘图,但LCD驱动部分,不做任何改动。完整代码在上一篇文章中:
这次把按键模模块换成插补模块,具体插补内容,详见:
现在问题就是如何通过插补,产生坐标,并将其画到LCD上。我们知道,之前打造的LCD接口,
只要将坐标写入FIFO那么,这个点将出现在LED上。而对于插补而言,电机走一步就会产生一个
脉冲,那么,我们可以去检测插补产生的脉冲,从而产生一一对应的坐标。比如说,X轴产生了
一个脉冲,说明X方向走了一步,那么我就将X坐标累加一并写入FIFO,Y轴同理。具体程序如下:
//------------------------向FIFO中写数据-------------------------------
reg [3:0]j;
reg [15:0]Xpos;
reg [15:0]Ypos;
reg [15:0]Ytmep = 16'd0;
always @(posedge CLK or negedge RSTn)
if(!RSTn)
begin
Write_Sig <= 1'b0;
FIFO_Write_Data <= 32'd0;
Xpos <= 16'd0;
Ypos <= 16'd0;
j <= 4'd0;
end
else
case(j)
0://start point
begin
Xpos <= 16'd120;
Ypos <= 16'd150;
j <= j + 1'b1;
end
1://TFT坐标系转换,(将原点定在竖屏的左下角)
begin
Ytmep <= 16'd319 - Ypos;
j <= j + 1'b1;
end
2://write a start point
begin
Write_Sig<= 1'b1;
FIFO_Write_Data <= {Xpos,Ytmep};
j <= j + 1'b1;
end
3:
begin
Write_Sig<= 1'b0;
j <= j + 1'b1;
end
4://choose
begin
if(Xup & Yup) j <= 4'd7;
else if(Xup) j <= 4'd5;
else if(Yup) j <= 4'd6;
end
5://X
begin
Xpos <= X_dir ? Xpos - 1'b1 : Xpos + 1'b1;
j <= 4'd1;
end
6://Y
begin
Ypos <= Y_dir ? Ypos - 1'b1 : Ypos + 1'b1;
j <= 4'd1;
end
7://XY
begin
Xpos <= X_dir ? Xpos - 1'b1 : Xpos + 1'b1;
Ypos <= Y_dir ? Ypos - 1'b1 : Ypos + 1'b1;
j <= 4'd1;
end
endcase
最后献上效果图:
看到旁边的LED闪烁了吗?那就是这句造成的:
assign LED = {~Y_pulse,Y_dir,~X_pulse,X_dir};
其实将这些引脚接上步进电机驱动器,电机就能欢快的转起来了,如果你有XY平台,
那么,你就可以在纸上画出同样的图形。
技术讨论欢迎加群~~电子技术协会 362584474

