AD8400调试记录


前言

本文记录AD8400数字电位器调试;


一、AD8400简介

AD8400是单通道、256位、数字控制可变电阻(VR)器件,可实现与机械电位计或可变电阻相同的电子调整功能;

1.功能框图

在这里插入图片描述

2.操作时序

在这里插入图片描述

二、功能测试

1.测试源码

module top (
	//差分时钟
	input diff_clock_clk_p, 
	input diff_clock_clk_n,
	
	//input clk ,
	input rst_n,  // Asynchronous reset active low
	
	// input trins,
	// input[7:0] trins_data,
	// input trins_rst ,
	//AD8400
	output reg cs ,
	output reg sck,
	output reg sdi,
	//AGND
	output ctrl_o,
	//LED
	output led_o
);

wire clk ;
wire[0:0] trins ;
wire[7:0] trins_data ;

reg[31:0] timer_cnt ;
reg led_reg ;
assign led_o = led_reg ;

reg[3:0] state ;
reg[15:0] sck_cnt ;

reg[4:0] data_bit ;

wire trins_rst ;

//差分转单端
IBUFGDS CLK_U(
	.I(diff_clock_clk_p),
	.IB(diff_clock_clk_n),
	.O(clk)
);

vio_0 vio_inst0 (
  .clk(clk),                // input wire clk
  .probe_out0({ctrl_o,trins_rst}),  // output wire [0 : 0] probe_out0
  .probe_out1(trins),  // output wire [0 : 0] probe_out1
  .probe_out2(trins_data)  // output wire [7 : 0] probe_out2
);

ila_0 ila_inst (
	.clk(clk), // input wire clk
	.probe0({trins,cs,sck,sdi}) // input wire [3:0] probe0
);

//LED计数值
always @(posedge clk or negedge rst_n) begin : led_cnt_task
	if(~rst_n) begin
		timer_cnt <= 0;
	end else begin
		if(timer_cnt==32'd50_000_000-1) timer_cnt<= 0;
		else timer_cnt <= timer_cnt + 1'b1 ;
	end
end
//LED翻转
always @(posedge clk or negedge rst_n) begin : proc_led_reg
	if(~rst_n) begin
		led_reg <= 1;
	end else begin
		if(timer_cnt==32'd50_000_000-1)	led_reg <= ~led_reg;
		else led_reg <= led_reg ;
	end
end

//CS控制
always @(posedge clk or negedge rst_n) begin : proc_cs
	if(~rst_n) begin
		cs <= 1;
	end else begin
		if(state==1) begin
			cs <= 0 ;
		end
		else cs = 1 ;
	end
end

//计数值
always @(posedge clk or negedge rst_n) begin : proc_sck_cnt
	if(~rst_n) begin
		sck_cnt <= 0;
	end else begin
		if(state==1) begin
			if(sck_cnt==999) sck_cnt <= 0 ;
			else sck_cnt <= sck_cnt + 1; 		
		end
		else sck_cnt <= 0;
	end
end

//时钟翻转
always @(posedge clk or negedge rst_n) begin : proc_sck
	if(~rst_n) begin
		sck <= 0;
	end else begin
		if(sck_cnt==499) sck <= ~sck ;
		else if(sck_cnt==999) sck <= ~sck ;
		else sck <= sck;
	end
end

//发送计数
always @(posedge clk or negedge rst_n) begin : proc_data_bit
	if(~rst_n) begin
		data_bit <= 0;
	end else begin
		if(state==1&&sck_cnt==999) data_bit <= data_bit + 1 ;
		else if(state!=1) data_bit = 0 ;
	end
end

//数据线
always @(posedge clk or negedge rst_n) begin : proc_sdi
	if(~rst_n) begin
		sdi <= 0;
	end else begin
		if(state==1) begin
			if(data_bit<2) sdi <= 1'b0;
			else sdi <= trins_data[7-(data_bit-2)];
		end
		else sdi <= 0 ;
	end
end


always @(posedge clk or negedge rst_n) begin : proc_state
	if(~rst_n) begin
		state <= 0;
	end else begin
		case (state)
			0:begin
				if(trins)	state <= 1 ;
				else 		state <= state ;
			end
			1:begin
				if(data_bit==10)	state <= 2 ;
				else state <= state ;
			end
			2:begin
				if(trins_rst) state <= 0;
				else state <= state ;
			end

		endcase
	end
end

endmodule : top

2.仿真结果

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ad2s1210旋变模块是一种用于测量机器旋转角度的模块。调试该模块需要以下步骤: 第一步是检查硬件连接。确保电源正常供电,接线正确无误。检查控制器和模块之间的通信线路是否连接良好。 第二步是配置控制器和模块。通过控制器上的编程软件,配置模块的参数,例如分辨率、增益以及滤波等。确保配置参数符合实际测量要求。 第三步是进行初始校准。在调试过程中,首先需要进行初始校准。校准过程中,将模块置于已知位置,比如零位,然后通过控制器发送相应指令进行校准。校准的目的是消除系统误差,提高测量的精度。 第四步是测试和调整。在校准完成后,进行模块的测试和调整。将模块置于不同的位置,观察测量结果。如果测量结果与实际位置不一致,可以通过调整模块的参数或者增加滤波操作来改善。 第五步是功能验证。在完成测量和调试后,对模块进行功能验证。通过控制器发送相应指令,对模块进行功能性测试,确保其能够按照预期工作和输出准确的旋转角度。 最后一步是记录和准备文档。在调试过程中,及时记录一些关键参数和调试结果,以备日后参考。同时,准备相关的调试文档,包括连接图、操作步骤和问题解决方法等,以便其他人员在必要时了解和进行维护。 通过以上步骤,可以对ad2s1210旋变模块进行有效的调试,确保其正常工作和准确测量旋转角度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值