打印

求教CS5532的使用问题,大神麻烦看一眼吧,小弟感激不尽

[复制链接]
1488|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
我遇到了个问题,使用CS5532-bsz 选择了单极性模式 参考电压VERF+为5V ,VERF-为0   把AD的输入端AIN+和AIN-都接到地上,即此时输入端的信号为0,按照数据手册说明此时对应的输出值应该为0x000000  ,为什么我得到的数值却报溢出了  输出值一直是0x00000004 ,模拟输入短路位置后 输出值是0x00000004 还是溢出  我把AD的输入端悬空后,增益选择64倍 时   输出为0XFFFFFF04 ,增益为1倍时 输出0x00000004.选择双极性模式则不会溢出 ,输入端短路接地后 读出的值为0XFFBE2600 悬空时 增益选择64倍读出的值为0XFFFFFF04
请问这是什么原因造成的 ?
我画PCB板时 DGND没有接在模拟地上 接在了数字地上 。  
我很着急,项目时间很紧,谢谢了!!!
(附有原理图文件和PCB图文件,用的软件是AD10)
程序代码:
#include "67k22.h"
#define CS5532_CS LATDbits.LATD3                            //定义CS5532的片选位
volatile u32 CS5532_RV;
volatile u32 temp;
volatile u32 temp1;

/*----------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------
*函数名称:CS5532_init
*函数功能:CS5532进行初始化
*输入参数:无
*输出参数:无
-------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------*/
u8 SPI_SendData(u8 SendData);
void delayms(unsigned  int m);
void CS5532_init(void)
{
        u8 i;
    u32 High1_Byte;
    u32 Mid1_Byte;
        u32 Low1_Byte;
        u32 AddLow1_Byte;
    CS5532_CS=0;

    delayms(100);
    for(i=0;i<15;i++)
    {
             CS5532_CS=0;
         SPI_SendData(0XFF);//发送复位命令:15个字节0XFF,1个字节0XFE;
         CS5532_CS=1;
    }
    CS5532_CS=0;
    SPI_SendData(0XFE);
    CS5532_CS=1;
    delayms(500);
    CS5532_CS=0;
    SPI_SendData(0X03);     //写复位命令,将RS置1
    SPI_SendData(0X20);
    SPI_SendData(0X00);
    SPI_SendData(0X00);
    SPI_SendData(0X00);
    CS5532_CS=1;
    delayms(100);
    CS5532_CS=0;
    SPI_SendData(0X0b);    //读配置寄存器命令
    CS5532_CS=1;
    Nop();
    Nop();
    CS5532_CS=0;
    High1_Byte=SPI_SendData(0X00);  //读配置寄存器中的值
    Mid1_Byte=SPI_SendData(0X00);
        Low1_Byte=SPI_SendData(0X00);
        AddLow1_Byte=SPI_SendData(0X00);
        CS5532_CS=1;
    CS5532_RV=High1_Byte<<24|Mid1_Byte<<16|Low1_Byte<<8|AddLow1_Byte;
    while(CS5532_RV!=0X10000000);
    delayms(1);
    CS5532_CS=0;
    SPI_SendData(0X03);       //写配置位命令
    SPI_SendData(0X00);
    SPI_SendData(0X08);
    SPI_SendData(0X00);
    SPI_SendData(0X00);
    CS5532_CS=1;
    delayms(1);
    CS5532_CS=0;
    SPI_SendData(0X05);       //写通道设置寄存器命令
    SPI_SendData(0X02);       //增益为64,采样速率为25sps  
    SPI_SendData(0X40);       //单极性
    SPI_SendData(0X02);
    SPI_SendData(0X40);
    CS5532_CS=1;
        delayms(1);
//    CS5532_CS=0;
//    SPI_SendData(0X15);       //写通道设置寄存器命令
//    SPI_SendData(0X02);       //增益为64,采样速率为25sps  
//    SPI_SendData(0X41);       //单极性
//    SPI_SendData(0X72);
//    SPI_SendData(0X41);
    CS5532_CS=1;
    delayms(1);
    CS5532_CS=0;
    SPI_SendData(0XC0);       //单次转换80,连续转换C0,写转换命令
    CS5532_CS=1;
}

/*----------------------------------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------------------------------------------------------
*函数名称:CS5532_Sampling
*函数功能:CS5532进行采样
*输入参数:无
*输出参数:temp
-------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------*/
u32 CS5532_Sampling()
{
        u8 i,k;

        volatile u32 High_Byte,Mid_Byte,Low_Byte,AddLow_Byte;
        volatile u32 High_Byte2,Mid_Byte2,Low_Byte2,AddLow_Byte2;
//    delayms(500);
//    CS5532_CS=0;
//     SPI_SendData(0X80);       //单次转换80,连续转换C0,写转换命令
//      LATF=0x00;
//    CS5532_CS=1;
    //delayms(4000);
   
    while(PORTEbits.RE2!=0);    //AD转换完成后,SDO输出0

        for(i=0;i<1;i++)
        {
                CS5532_CS=0;
                SPI_SendData(0X00);      //用于清SDO标志位
                CS5532_CS=1;
        }        
        CS5532_CS=0;                 //读AD转换的值 31-8位
        High_Byte=SPI_SendData(0X00);
        Mid_Byte=SPI_SendData(0X00);
        Low_Byte=SPI_SendData(0X00);
        AddLow_Byte=SPI_SendData(0X00);
    CS5532_CS=1;
        temp=High_Byte<<24|Mid_Byte<<16|Low_Byte<<8|AddLow_Byte;
                    return temp;
}        

QQ图片20150611194403.png (87.3 KB )

QQ图片20150611194403.png

相关帖子

沙发
lujianfeimxm|  楼主 | 2015-6-12 11:48 | 只看该作者
:(

使用特权

评论回复
板凳
wufeng198829| | 2015-6-12 23:11 | 只看该作者
万用表测下vref,和输入,看看硬件上是什么样的

使用特权

评论回复
地板
wufeng198829| | 2015-6-12 23:14 | 只看该作者
还有时钟之类的,看看AD工作环境是否正常

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

64

帖子

1

粉丝