宋桓公

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

0
阅读(2641)

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

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

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

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

上次是通过按键绘图,但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