熟悉CS5532的大哥帮忙看看吧

[复制链接]
2682|13
 楼主| lujianfeimxm 发表于 2015-6-11 16:49 | 显示全部楼层 |阅读模式
小弟遇到了个问题,使用CS5532-bsz 选择了单极性模式 增益位64倍  把AD的输入端AIN+和AIN-都接到地上,即此时输入端的信号为0,按照数据手册说明此时对应的输出值应该为0x000000  ,为什么我得到的数值却报溢出了  输出值一直是0x00000004
 楼主| lujianfeimxm 发表于 2015-6-11 19:44 | 显示全部楼层
下图是硬件图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| lujianfeimxm 发表于 2015-6-11 22:58 | 显示全部楼层
:sleepy:
 楼主| lujianfeimxm 发表于 2015-6-12 08:56 | 显示全部楼层
添上程序
#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;
}       
tyw 发表于 2015-6-12 09:23 | 显示全部楼层





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| lujianfeimxm 发表于 2015-6-12 10:21 | 显示全部楼层
 楼主| lujianfeimxm 发表于 2015-6-12 13:00 | 显示全部楼层

T叔  这些资料我原来已经看了好多遍了   还是没解决这个问题
aliu_us 发表于 2015-6-13 22:13 来自手机 | 显示全部楼层
这个是正常的offset偏差,需要校正的。可通过内部寄存器或外部软件校正。
aliu_us 发表于 2015-6-13 22:16 来自手机 | 显示全部楼层
这个初始偏差,可正可负。我碰到的情况跟你一样,实际的AD结果是个很小的负数。
aliu_us 发表于 2015-6-13 22:19 来自手机 | 显示全部楼层
这种情况,单极性模式下就变成了溢出错误。
 楼主| lujianfeimxm 发表于 2015-6-14 11:42 | 显示全部楼层
aliu_us 发表于 2015-6-13 22:13
这个是正常的offset偏差,需要校正的。可通过内部寄存器或外部软件校正。

大哥啊大哥  哈哈 你就是我再生父母啊 我去试试  这问题把我快搞得抑郁症了
aliu_us 发表于 2015-6-14 22:37 来自手机 | 显示全部楼层
期望你的问题得到解决。
tirodu 发表于 2018-3-9 20:46 | 显示全部楼层
楼主,你这个问题早就解决了吧?》
wll006 发表于 2018-4-11 15:33 | 显示全部楼层
你好,请问您一点关于芯片cs5532的问题,如果采用VA+=5v.VA-接地。vref+接5v,vref-地,请问系统校准应该如何操作,手册实在没看明白。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

64

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部