基于FPGA控制的AD采集,ads8688芯片8通道扫描

 1.  ads8688芯片简介

        芯片详细介绍可仔细查看数据手册,链接:

        由于数据手册内容太多,在次不做过多介绍,此处将只对实现8通道的扫描采集所涉及到的知识点做解释说明,大概需掌握如下3点。

1.1  程序寄存器配置

        程序寄存器映射图如下所示。16位的程序寄存器可设置0~7通道的电压范围及其他内容,可直接将16位的数据(已含地址)写入芯片。

        采集通道电压范围定义如下。

 

1.2  命令寄存器

        命令寄存器可配置为自动扫描模数、手动扫描模数等其他模数。

1.3  时序图

        详细时序图满足如下要求即可。 

                 

 

1.4  程序设计思路

        1.        配置程序寄存器,将0~7通道的电压范围写入程序寄存器

        2.        配置命令寄存器,选择自动扫描模数,先写入16'hA000,选择自动从0通道开始采集,后续写入16'h0000表示继续自动扫描至1通道一次类推。

        值得注意的一点是:32个时钟为一次读写完整周期,在配置自动选择模式时,当第一次32个时钟周期写入16'hA000选择自动模式后,应在第二次32个时钟周期的后16个时钟周期读取出采集的数据。

2.  工程在线调试结果 

 

3.程序列表 

 

 4.PLL调用设置

5.详细代码

5.1顶层模块代码

module TopModule(
input        ExtClk,
input        ExtRstN,
input        SDO,
output        SDI,
output        CS_N,
output        SCLK);

//
Ads8688        UUTAds8688(
                    .CLK100M(CLK100M),//100M
                    .RST_N(RST_N),
                    .SCLK(SCLK),//10M
                    .CS_N(CS_N),
                    .SDI(SDI),
                    .SDO(SDO));

//
PllClk UUTPllClk
   (
    // Clock out ports
    .clk_out1(CLK100M),     // output clk_out1
    // Status and control signals
    .reset(~ExtRstN), // input reset
    .locked(RST_N),       // output locked
   // Clock in ports
    .clk_in1(ExtClk));      // input clk_in1
    
endmodule
 

5.2.Ads8688模块代码

//SPI通信协议

//[2:0]RangeChn  101  Vref = 4.096V 
// 000表示±2.5Vref;001表示±1.25Vref;010表示0.625Vref;101表示0~2.5Vref;110表示0~1.25Vref
//101表示选中0~10.24V;0001h~ffffh 156.25uV
//0000:0 0001:156.25 
//顺序:先配置程序寄存器,再配置命令寄存器
//程序寄存器:各个通道的电压范围配置
//命令寄存器:模式选择、通道选择

module Ads8688(
input    CLK100M,//100M
input    RST_N,
output    reg    SCLK,//10M
output    reg    CS_N,
output    reg    SDI,
input    SDO);

//命令寄存器命令字
parameter    AutoRst        =    16'hA000;//自动扫描通道

//程序寄存器
parameter    RangeChn    =    3'b101;//0~10.24V
parameter    WriteEn        =    1'b1;
parameter    ReadEn        =    1'b0;
parameter    Ch0InRange    =    {7'h05,WriteEn,5'd0,RangeChn};
parameter    Ch1InRange    =    {7'h06,WriteEn,5'd0,RangeChn};
parameter    Ch2InRange    =    {7'h07,WriteEn,5'd0,RangeChn};
parameter    Ch3InRange    =    {7'h08,WriteEn,5'd0,RangeChn};
parameter    Ch4InRange    =    {7'h09,WriteEn,5'd0,RangeChn};
parameter    Ch5InRange    =    {7'h0A,WriteEn,5'd0,RangeChn};
parameter    Ch6InRange    =    {7'h0B,WriteEn,5'd0,RangeChn};
parameter    Ch7InRange    =    {7'h0C,WriteEn,5'd0,RangeChn};

//[17:0]Cnt2ms
reg        [17:0]Cnt2ms;
always@(posedge CLK100M or negedge RST_N)
    if(RST_N == 1'b0) Cnt2ms <= 'd0;
    else if(Cnt2ms == 'd200) Cnt2ms <= 'd200;
    else Cnt2ms <= Cnt2ms + 1'b1;

//ConfigureStage  配置阶段(程序寄存器)
reg        ConfigureStage;
always@(posedg

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值