芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 5441|回复: 3

AD5541BRZ驱动问题

[复制链接]
  • TA的每日心情
    难过
    2020-6-28 12:14
  • 2

    主题

    4

    帖子

    31

    积分

    新手上路

    Rank: 2

    积分
    31
    发表于 2020-6-28 09:47:30 | 显示全部楼层 |阅读模式
    本帖最后由 神经蛙_HAt4a 于 2020-6-28 09:57 编辑

    编写了一个16位DAC芯片——AD5541BRZ的驱动模块,通过在电脑端修改DAC_DATA=的值来获得对应的电压输出值。
    但是实际测量情况和理论计算情况相差甚远(可以参考如下的测量数据,给我的感觉就像AD5541实际上是个15位的DAC一样)。pll给DAC分配的是1Mhz的时钟。因为压缩包太大,无法上传,具体代码可参考图片或者如下代码。
    请求各位大佬指教!
    理论电压输出                         实际的输出电压

    2.5V  (16'HFFFF)                     2.5v(等于参考电压)


    1.25V (16'h8000)                         0


    0.625V(16'4000)                      1.253V (为理论值的两倍)

    0.3125V(16'2000)                     0.627v(为理论值的两倍)


    0.15625V(16'1000)                   0.314v  (为理论值的两倍)



    //AD5541驱动顶层模块
    module ADC5541_top(

                Clk,   //模块时钟50M
                rstn, //模块复位
                
                DAC_CS_N,  //AD5541的CS_N接口
                DAC_DIN,   //AD5541的DIN接口
                DAC_SCLK   //AD5541的SCLK接口     
            );
            
        input Clk;
        input rstn;
        output DAC_CS_N;
        output DAC_DIN;
        output DAC_SCLK;

        wire [15:0]DAC_DATA;
        wire DAC_State;
        wire Set_Done;
        wire clk1;
            
        pll pll_u0(
          .areset(~rstn),
          .inclk0(Clk),
          .c0(clk1),
          .locked(locked)
        );
       
    assign DAC_DATA=16'h8000;//修改这里的值获得不同的输出电压
       
    ADC5541 ADC5541_u0(
        .clk_in(clk1),//1M
        .rstn(rstn),
        .DAC_DATA(DAC_DATA),//用于外部改变DAC输出值
        .DAC_CLK(DAC_SCLK),
        .DAC_CS(DAC_CS_N),
        .DAC_DIN(DAC_DIN)
        );
    endmodule




    //////////////////////////////////////////////////////////////////////////////////

    AD5541驱动模块

    //////////////////////////////////////////////////////////////////////////////////
    module ADC5541(
       input          clk_in,//1M
       input          rstn,
       input[15:0]    DAC_DATA,
       output         DAC_CLK,
       output         DAC_CS,
       output         DAC_DIN
    //   output         DAC_LADC
        );
       
    reg[11:0] DAC_cnt;
    wire      clk;
    assign    clk=clk_in;
    always@(posedge clk)
    if(!rstn)
      DAC_cnt<=12'd0;
    else if(DAC_cnt<=12'd21)
      DAC_cnt<=DAC_cnt+1'b1;
    else
      DAC_cnt<=12'd0;
      
    /////////generate cs////////////
    reg DAC_CS_buf;
    always@(posedge clk)
    if(!rstn)
    DAC_CS_buf<=1'b1;
    else if((DAC_cnt<=12'd18)&(DAC_cnt>=12'd2))
    DAC_CS_buf<=1'b0;
    else
    DAC_CS_buf<=1'b1;

    assign DAC_CS=DAC_CS_buf;

    /////////generate DAC_DIN////////////
    reg DAC_DIN_buf;
    wire[15:0] DAC_DATA_buf;
    assign DAC_DATA_buf=DAC_DATA;
    always@(posedge clk)
    if(!rstn)
      DAC_DIN_buf<=1'b0;
    else if((DAC_cnt<=12'd17)&(DAC_cnt>=12'd2))
      DAC_DIN_buf<=DAC_DATA[17-DAC_cnt];
    else
      DAC_DIN_buf<=1'b0;
      
    assign DAC_DIN=DAC_DIN_buf;

    /////////generate DAC_clk////////////
    assign DAC_CLK=((DAC_cnt<=12'd19)&(DAC_cnt>=12'd3))?(~clk):1'b1;

    endmodule



    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2021-2-24 10:16
  • 423

    主题

    782

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    15854
    QQ
    发表于 2020-6-28 11:05:44 | 显示全部楼层
    既然你说像个15位的DAC,那你有没有考虑过可能是你的时序刚好错了一位呢?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2020-6-28 12:14
  • 2

    主题

    4

    帖子

    31

    积分

    新手上路

    Rank: 2

    积分
    31
     楼主| 发表于 2020-6-28 18:16:23 | 显示全部楼层
    admin 发表于 2020-6-28 11:05
    既然你说像个15位的DAC,那你有没有考虑过可能是你的时序刚好错了一位呢?
    ...

    我用testbench 仿真后发现时序图和器件手册上是一样的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2020-6-28 12:14
  • 2

    主题

    4

    帖子

    31

    积分

    新手上路

    Rank: 2

    积分
    31
     楼主| 发表于 2020-6-29 13:26:40 | 显示全部楼层
    admin 发表于 2020-6-28 11:05
    既然你说像个15位的DAC,那你有没有考虑过可能是你的时序刚好错了一位呢?
    ...

    else if((DAC_cnt<=12'd17)&(DAC_cnt>=12'd2))
      DAC_DIN_buf<=DAC_DATA[17-DAC_cnt];     梅哥,是不是我DIN这里写得有什么问题啊?
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

    GMT+8, 2024-4-25 01:24 , Processed in 0.111702 second(s), 33 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

    快速回复 返回顶部 返回列表