国产AD芯片 MS1243应用

 前几天做项目用到了一款国产多路ADC采集芯片瑞盟Ms1243,期间遇到不少坑,来跟大家分享一下。
     MS1242/MS1243 是一款高精度、宽动态范围、Σ-Δ模 数转换芯片,其工作电压为 2.7V 至 5.25V,可以达到 24bit 无失码转换,且其有效精度可达 21bit。
     所谓的无失码就是就是不丢码,比如 8位的ADC,加入从0000 0000 1111 1111 在实际测试中,每一个码都可以测到就称之为无失码, 若在0000 0001 往上走 0000 0003的时候 没有出现过0000 0002 就说明丢码了。
    该芯片有8个模拟输入通道,如果作为单通道输入,可以是8ADC采集,如果作为差分,一路固定参考源,另外7路差分ADC,我才用的是AIN0 - AIN6是变换通道输入。AIN7接地作为公共参考端。以下是该芯片的内部结构图和原理图。  
    说到原理图,这就遇到了第一个坑,因为我懒,直接从某商城上下的它的原理图,如下图所示,注意!!这个图是错误的。
   
大家看到了吧,他的引脚顺序和人家数据不一样!!坑死我了!! 左边是错的,右边才是对的, 接着往下,来看他的引脚说明。

第二个坑,第4号管脚,4 PDWN I 掉电控制信号,低有效。这个芯片是由掉电控制,当该引脚输入为低电平的时候,芯片掉电不工作,
当初画图有点快,忘记了这个管脚,以为是内部上拉高电平。直至刷完板子回来才发现这个问题。该引脚可以通过1个4.7k的电阻上拉至
VCC电平即可,如果考虑的低功耗,可以通过引脚来控制该芯片引脚的电平。
接着往下,要注意的是外部晶振的时钟的频率要求

要求是1M - 5M之间,我采用的是4.9152M晶振,谐振电容选用10pf ,原理图如下
 
其他参数指标大家可以自己了解一下,我们接着往下说。
该芯片需要有外部的参考电压源,这个参考电压源的电压是有要求的,如下图所示

我们采用的是3.3V供电,参考电压电压源选择是2.5V,注意,是在RANGE值为1的时候才可设置为2.5V。硬件大致就这些,接下来我们说软件部分。
MCU我们采用的是华大HC32F460,通过SPI协议与MS1243进行通信。
第一个坑是时钟频率
MS1243的时钟频率为4.9152M,我们MCU的SPI时钟频率不能高于该时钟频率,最好小于芯片时钟频率的1/2
我们采用的是1.5M时钟的频率,华大的SPI时钟频率为100M,因此进行时钟分频。
  stcSpiInit.enClkDiv = SpiClkDiv64; //时钟分频64,我们进行了64分频,100 / 64  = 1.5625M,比较合适。 
第二个坑是MS1243 空闲时的时钟极性和时钟相位。

由图得知,MS1243的SPI协议规定为空闲时时钟为低电平,第一个上升沿发送数据,偶数边沿采集数据,不要弄反了。

第三个坑

DRDY管脚是数据是都准备就绪的标志,当该引脚电平为低的时候,表示数据准备好可以度,当该引脚电平为低的时候,此时数据正在转换,不能去读,
因此可以将此管脚作为中断输入,下降沿触发去读取24位数据。
    当MCU没给MS143芯片读取数据信号事,MS1243会自己按照一定的频率进行数据更新,频率如下图所示。

第四个坑是该芯片需要校正时候的延时问题和置位问题。

根据晶振的频率,一个数据输出周期大概是50ms左右,两个时钟周期就是100ms,我们延时150ms

值得注意的是,ACR寄存器第二个为即RANGE校准是必须为0,而我们需要的是RANGE为1。因此在校准完成之后
将ACR寄存器的RANGE位置1.并且校准完之后,第一个数据是不正确的,应该舍弃。

第四个坑,也是和重要的就是发送读取命令和读取数据要有足够的时间间隔。

SDI是数据输入,也就是MCU给MS1243发送命令或者写寄存器
该芯片读取数据的命令有两种,一种是连续读取,一种是单词读取
我们采用的单次读取操作,即发送命令
static unsigned char MS1243_SendByte(unsigned char byte)
{
    unsigned char u8Byte;

    /* Wait tx buffer empty */
    while (Reset == SPI_GetFlag(MS1243_SPI1_UNIT, SpiFlagSendBufferEmpty))
    {
    }
    /* Send data */
    SPI_SendData8(MS1243_SPI1_UNIT, byte);
    /* Wait rx buffer full */
    while (Reset == SPI_GetFlag(MS1243_SPI1_UNIT, SpiFlagReceiveBufferFull))
    {
    }
    /* Receive data */
    u8Byte = SPI_ReceiveData8(MS1243_SPI1_UNIT);

    return u8Byte;
}

  MS1243_SendByte(CMD_RDATA);


发送完读取命令之后,要等待50个时钟周期, 50 *(1 / 4915200) = 10us左右 
发送完转换命令之后,我们延时了10us,然后进行了数据读取

读取了3个字节 24位的数据
然后将读取的数据转换为电压,24位的分辨率

得到电压之后进行相应的运算转换即可。
最后一点,我们是多通道的ADC转化芯片,肯定要进行采集通道的切换操作
  
切换通道指令即往寄存器MUX写通道配置信息,高四位正输入端的通道,低四位为负输入端通道,我们负输入端固定,即为MS1243_MUXN_AIN7。
发送配置MUX寄存器指令

写寄存器命令WREG,读寄存器命令RREG


注意一点,在切换通道时,尽量在DRDY引脚电平为低的时候,防止出现错误。
读取完24位数据之后,DRDY会立即被拉高。
以上就对写MS4243多路ADC采集芯片学习的总结。
---------------------
作者:woai32lala
链接:https://bbs.21ic.com/icview-3225296-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
VeriLog AD芯片是一种集成电路芯片,用于进行数据模拟和数字信号处理。它是一种基于Verilog语言描述的可配置型芯片,可以根据需求进行个性化设计和定制。VeriLog AD芯片主要用于模拟电路的设计和验证,在电子产品开发中起到非常重要的作用。 VeriLog AD芯片具有高度的灵活性和可扩展性。它可以模拟电路中的各种信号和电压波形,并可以进行各种复杂的计算和处理。这使得VeriLog AD芯片在电路仿真、信号分析和嵌入式系统设计方面广泛应用。 VeriLog AD芯片还具有较高的性能和运算速度。它采用了先进的数字信号处理技术和高性能的算法,可以在较短的时间内完成大量的计算任务。这对于需要大规模数据处理和高速计算的应用领域,如音频处理、图像处理和通信系统等是非常重要的。 除此之外,VeriLog AD芯片还具有较低的功耗和体积小的特点。由于采用了先进的芯片制造工艺和节能技术,VeriLog AD芯片在工作时能够有效降低能耗,提高能源利用率。其小尺寸设计也使得VeriLog AD芯片可以集成到各种紧凑型设备中,如智能手机、可穿戴设备和车载电子等。 总之,VeriLog AD芯片是一种功能强大、灵活可配置的集成电路芯片。它在模拟电路设计、数字信号处理和嵌入式系统等领域发挥着重要的作用,并具有高性能、低功耗和小体积等特点。随着技术的不断进步和应用领域的扩展,VeriLog AD芯片将在更多领域展示其巨大的潜力和价值。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值