打印

熟悉CS5532的大哥帮忙看看吧

[复制链接]
2016|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lujianfeimxm|  楼主 | 2015-6-11 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟遇到了个问题,使用CS5532-bsz 选择了单极性模式 增益位64倍  把AD的输入端AIN+和AIN-都接到地上,即此时输入端的信号为0,按照数据手册说明此时对应的输出值应该为0x000000  ,为什么我得到的数值却报溢出了  输出值一直是0x00000004

相关帖子

沙发
lujianfeimxm|  楼主 | 2015-6-11 19:44 | 只看该作者
下图是硬件图

QQ图片20150611194403.png (87.3 KB )

QQ图片20150611194403.png

使用特权

评论回复
板凳
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;
}       

使用特权

评论回复
5
tyw| | 2015-6-12 09:23 | 只看该作者
CS5530中文资料.pdf (7.16 MB)
基于CS5532的高精度自动称重系统设计.pdf (1.66 MB)
工业称重仪表设计.pdf (10.64 MB)
AD转换IC--使用手册中文版.pdf (8.3 MB)

使用特权

评论回复
6
lujianfeimxm|  楼主 | 2015-6-12 10:21 | 只看该作者
:'(

使用特权

评论回复
7
lujianfeimxm|  楼主 | 2015-6-12 13:00 | 只看该作者

T叔  这些资料我原来已经看了好多遍了   还是没解决这个问题

使用特权

评论回复
8
aliu_us| | 2015-6-13 22:13 | 只看该作者
这个是正常的offset偏差,需要校正的。可通过内部寄存器或外部软件校正。

使用特权

评论回复
9
aliu_us| | 2015-6-13 22:16 | 只看该作者
这个初始偏差,可正可负。我碰到的情况跟你一样,实际的AD结果是个很小的负数。

使用特权

评论回复
10
aliu_us| | 2015-6-13 22:19 | 只看该作者
这种情况,单极性模式下就变成了溢出错误。

使用特权

评论回复
11
lujianfeimxm|  楼主 | 2015-6-14 11:42 | 只看该作者
aliu_us 发表于 2015-6-13 22:13
这个是正常的offset偏差,需要校正的。可通过内部寄存器或外部软件校正。

大哥啊大哥  哈哈 你就是我再生父母啊 我去试试  这问题把我快搞得抑郁症了

使用特权

评论回复
12
aliu_us| | 2015-6-14 22:37 | 只看该作者
期望你的问题得到解决。

使用特权

评论回复
13
tirodu| | 2018-3-9 20:46 | 只看该作者
楼主,你这个问题早就解决了吧?》

使用特权

评论回复
14
wll006| | 2018-4-11 15:33 | 只看该作者
你好,请问您一点关于芯片cs5532的问题,如果采用VA+=5v.VA-接地。vref+接5v,vref-地,请问系统校准应该如何操作,手册实在没看明白。。。

使用特权

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

本版积分规则

16

主题

64

帖子

1

粉丝