宋桓公

【红色飓风Nano二代测评】插补绘图之钢炼纹章

0
阅读(2614)

上次通过按键画一些横平竖直的线,感觉不太爽。这次想通过插补(而不是按键)画一些

有趣的图形。画些什么呢,我的思绪一下飘到了大学时代,在那个暑假,白天和大家在实

验室备战电子竞赛,晚上就会回到寝室和达子一起看钢炼,回忆起那段时间,真是充实而美好。

好吧,这次就画一个钢炼的纹章致青春~~

上次是通过按键绘图,但LCD驱动部分,不做任何改动。完整代码在上一篇文章中:

赛 【红色飓风Nano二代测评】教你如何编写带FIFO的LCD接口

这次把按键模模块换成插补模块,具体插补内容,详见:

赛 【红色飓风Nano二代测评】Verilog实现直线插补


现在问题就是如何通过插补,产生坐标,并将其画到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

Baidu
map