[STM32F2]

熟悉CS5532的进

[复制链接]
6707|18
手机看帖
扫描二维码
随时随地手机跟帖
mage心寒|  楼主 | 2014-3-24 11:26 | 显示全部楼层 |阅读模式
本人调试CS5532一个星期,电路板自己画的,程序网上看了一堆,但是IO模拟还是失败,SPI暂时跟CS5532通信正常,一个星期的失败是因为电源的问题,我刚来直接就给芯片接5V,VD,VA,VREF。后来再论坛看到说要跟单片机供电一样,要不然休想读到数据,然后将电压改成跟单片机一样,能跟芯片通信,但是返回的数据是溢出的,也就是低8位为0x04。
现在的问题:
  1.  按datasheet上说如果3.3V供电VA-、VREF-要接负的3.3V,我现在接的是0,因为是自己焊接的板子,现在增益1,电压小于(VREF+ - VREF-)/2,但是数据还是溢出。是不是一定要接负的3.3V。
  2.刚接触这个片子大家一定要注意硬件部分,其实这个芯片软件网上给的,对照着datasheet基本上是没有问题的,大部分不出数据的都是硬件问题。
3.今天还发现一个问题,第三脚和第四脚的电容上下有点浮动不知道有没有关系。
mage心寒|  楼主 | 2014-3-24 11:57 | 显示全部楼层
纠正一下,电路是自己搭的,没画。。:dizzy:这都能错,哎。。。

使用特权

评论回复
BBSTOM| | 2014-3-24 12:47 | 显示全部楼层
如果不是虚焊或者芯片坏了,就是 楼主的软件有问题

使用特权

评论回复
mage心寒|  楼主 | 2014-3-24 12:51 | 显示全部楼层
BBSTOM 发表于 2014-3-24 12:47
如果不是虚焊或者芯片坏了,就是 楼主的软件有问题

我不能完全保证软件没问题,但是用的是芯片自带的SPI,如果能读到RV返回的值是正确的说明写没有问题,软件问题应该不大,因为SPI的读是写任意值。而且现在读到的数据符合datasheet上写的就是跟实际不符,说明芯片返回的值能读到,数据也是对的。http://www.amobbs.com/forum.php?mod=viewthread&tid=5504479&highlight=CS5532  跟这个帖子的问题差不多。。

使用特权

评论回复
mmuuss586| | 2014-3-24 12:56 | 显示全部楼层

可以咨询厂家啊,他们就在上海。
发个参考程序给你,对照下,很快的

使用特权

评论回复
mage心寒|  楼主 | 2014-3-24 13:13 | 显示全部楼层
程序有啊,我缺少硬件,我现在觉得95%的问题在硬件。。。我上面已经说了。。

使用特权

评论回复
mage心寒|  楼主 | 2014-3-24 14:13 | 显示全部楼层
结贴,自己搞定,分享一下是硬件的问题,如果都接3.3的话那么VA-,VREF-就需要接负的3.3这个好麻烦,仔细看datasheet上面还有一种接法就是VD接3.3 VA接5V的,我只有SPI的程序,IO模拟的暂时没有,后续应该会去写下看看,下面把SPI的贴出来。


附件:

/*******************************************************************************
* 百为技术有限公司                 Copyright(C) 2013, baiweijishu
* 项目名称(Project):                       
* 文件名(File):                                spi_flash.c
*
* 作者(Author):                                张锡良 (xi_iang)
* 电邮(Email):                                        zhang.xiliang@163.com
* 技术支持论坛(Forum):www.stm32bbs.com
* 淘宝官方网店(Shop):  http://baiweijishu.taobao.com
* 修改日期(Date):                         2013-11-29               
*******************************************************************************/

#include "config.h"
unsigned char cs5532ResetData[5]={0x03,0x20,0x00,0x00,0x00};   //0x03写配置寄存器  0x20选择复位,  0x02是自动校准
                                                               //  参考电压选择2.5v~VA+,其余默认   复位AD
extern unsigned int ADvalue;

/*******************************************************************************
* 函数名(Function):        SPI_FLASH_Init
* 参数(Param):                                无                                                        
* 返回值(Return):                无
* 描述(Description): SPI_FLASH初始化函数
*******************************************************************************/
void SPI_FLASH_Init(int port)
{
        SSP_CFG_Type SSP_ConfigStruct;

        /* 配置触摸屏SPI管脚
                p2.22:SSP0_SCK
                p0.17: CS //SSP0_SSEL
                p2.26: SSP0_MISO
                p2.27: SSP0_MOSI
        */
  PINSEL_ConfigPin(2, 22, 2);
// PINSEL_ConfigPin(2, 23, 2);
  PINSEL_ConfigPin(2, 26, 2);
  PINSEL_ConfigPin(2, 27, 2);

        GPIO_SetDir(0, (1<<17), 1);

        GPIO_SetValue(0, (1<<17));
  SPI_FLASH_CS_HIGH();

        /* 配置SPI参数 */
  SSP_ConfigStruct.ClockRate = 200000;       //200khz
  SSP_ConfigStruct.CPHA = SSP_CPHA_FIRST;
  SSP_ConfigStruct.CPOL = SSP_CPOL_HI;
        SSP_ConfigStruct.Databit = SSP_DATABIT_8;
        SSP_ConfigStruct.Mode = SSP_MASTER_MODE;
        SSP_ConfigStruct.FrameFormat = SSP_FRAME_SPI;
        SSP_Init(LPC_SSP0, &SSP_ConfigStruct);

        /* 使能SPI外设 */
        SSP_Cmd(LPC_SSP0, ENABLE);
}

void CS5532_Config(void)
{
         SPI_FLASH_SendByte(0x03);  //写配置寄存器
   SPI_FLASH_SendByte(0x00);//
   SPI_FLASH_SendByte(0x08);
   SPI_FLASH_SendByte(0x00);
   SPI_FLASH_SendByte(0x00);
         ;;
        // Delay_ms(1);
         SPI_FLASH_SendByte(0x05);  //写通道寄存器
   SPI_FLASH_SendByte(0x01); //增益为1  高四位为增益位最大为0110 ,64位增益 (VREF+ - VREF-)/增益 低四位为字速率 01为50hz
   SPI_FLASH_SendByte(0x80);  //80为双极性
   SPI_FLASH_SendByte(0x01);  //跟前面是一样的
   SPI_FLASH_SendByte(0x80);
       
         SPI_FLASH_SendByte(0xc0);  //单次转换80 lianxu c0
          
}

void CS5532_SPIInit(void)
{
         unsigned char i;
        // unsigned int temp;
         unsigned int CS5532ID=0;
       
          Delay_ms(20);
          for(i=0;i<31;i++)
             SPI_FLASH_SendByte(0xff);
           SPI_FLASH_SendByte(0xfe);

                 for(i=0;i<5;i++)
              SPI_FLASH_SendByte(cs5532ResetData);
            ;  
            Delay_ms(20);
                  SPI_FLASH_SendByte(0x0b);
       
                  CS5532ID=SPI_ReadByte();       //返回值0x10 说明正确复位CS5532了 3.3V可以reset 5V不可以
            SPI_ReadByte();
            SPI_ReadByte();
            SPI_ReadByte();
            if(CS5532ID==0x10)
              Uart0_Printf("Reset sucess \r\n");
            
            CS5532_Config();
}

unsigned int Read_ADC(void)
{
                unsigned char i;
          unsigned int reg0=0,reg1=0,reg2=0,reg3=0,temp=0;
        //  SPI_FLASH_SendByte(0x80);
          for(i=0;i<1;i++)
                {
                          SPI_FLASH_SendByte(0x00);
                }       
                reg0=SPI_ReadByte();
//                Delay_ms(10);
                reg1=SPI_ReadByte();
        //        Delay_ms(10);
                reg2=SPI_ReadByte();
        //        Delay_ms(10);
                reg3=SPI_ReadByte();
                if(reg3==0x04)
                         return error;   //溢出
        //  Delay_ms(10);

               
          temp=reg0<<24|reg1<<16|reg2<<8|reg3;
          
                Uart0_Printf("reg0 = %d \r\n",reg0);
          Uart0_Printf("reg1 = %d \r\n",reg1);
          Uart0_Printf("reg2 = %d \r\n",reg2);
                Uart0_Printf("reg3 = %d \r\n",reg3);
                Uart0_Printf("ADvalue = %d \r\n",temp>>11);
                return temp>>11;
               
}

/*******************************************************************************
* 函数名(Function):        SPI_FLASH_SendByte
+
* 参数(Param):                                byte 要发送的1字节数据                                                        
* 返回值(Return):                tmp  接收到的1字节数据
* 描述(Description):        SPI字节发送接收函数
*******************************************************************************/
uint8_t SPI_FLASH_SendByte(uint8_t byte)
{
        uint8_t tmp;
  /* 等待忙标志位为零和发送缓冲为未满 */
        while ( (LPC_SSP0->SR & (SSP_SR_TNF|SSP_SR_BSY)) != SSP_SR_TNF );

  /* 发送1字节数据到SPI0 */
        LPC_SSP0->DR = byte;
   
  /* 忙标志位为零和接收缓冲器非空 */
        while ( (LPC_SSP0->SR & (SSP_SR_BSY|SSP_SR_RNE)) != SSP_SR_RNE );

  /* 从SPI总线上接收1字节数据 */
        tmp = LPC_SSP0->DR;
       
        //Uart0_Printf("tmp = %d \r\n",tmp);
  return tmp;
}

unsigned char SPI_ReadByte(void)
{
  /* 发送读数据指令 */
       
  return(SPI_FLASH_SendByte(0x00));
        //return 0;
}





/************************************* End *************************************/

使用特权

评论回复
mage心寒|  楼主 | 2014-3-27 18:27 | 显示全部楼层
新问题,不知道还有没有大神来解答,我测得电压分辨率是0.001mv刚测试的时候还好,测试大概十几分钟左右电压就变成1mv左右了,接触端是放在桌面上,也就是空气中,不知道为什么会漂移这么大,为什么刚开始测试是好的,漂移以后断开给5532的电源,上电重新复位后正常,我现在的电路是搭的电路板,是不是这个对cs5532的分辨率有影响,看到***电子论坛说了PCB的布线很重要:
即使线路正确,但PCB布得不好一样不行------正确来说 PCB布线更重要,难度更高。

1 电压基准的精度[稳定度和准确度]

2 接地的布线-----这个非常重要,PCB布得不好,M88的震荡电流/电压对于CS5532的分辨率来说,可是不小干扰

3 元件的布局


但是我现在刚开始测试也能稳定十几分钟,如果搭的板子有问题应该刚开始就会出现吧,为什么要过一会才出现呢。。这个电压到底是哪来的?路过的大神帮忙分析下。。

使用特权

评论回复
embassy| | 2016-9-23 21:11 | 显示全部楼层
cs5532采样出来的 AD值 怎么转换成电压的???

使用特权

评论回复
软件电气| | 2017-5-18 17:04 | 显示全部楼层
楼主可否发一下CS5532用STM32F103驱动的全套代码,感谢!邮箱号1085240838@qq.com

使用特权

评论回复
清心如水| | 2017-6-22 16:08 | 显示全部楼层
最近在调试cs5532程序,采用SPI2通信口,stm32作为主机,LCD显示采集到的数据值,不知道为什么显示的数据一直跳变,调试好几天了还找不到问题,有没有遇到同样问题的?

使用特权

评论回复
yk910127| | 2017-7-3 14:07 | 显示全部楼层
最近也在研究CS5532,到现在还没搞清楚

使用特权

评论回复
momingwill| | 2017-7-3 17:11 | 显示全部楼层
供电可以5V,VREF-接模拟地,但是与st mcu通讯要注意电平的转换。

使用特权

评论回复
yk910127| | 2017-7-10 14:17 | 显示全部楼层
momingwill 发表于 2017-7-3 17:11
供电可以5V,VREF-接模拟地,但是与st mcu通讯要注意电平的转换。

可以留个联系方式吗?有问题请教

使用特权

评论回复
软件模拟的SPI做出来了吗?最近在调试CS5532,读出来的配置寄存器的值连续读三次不知道为什么是三个不同的值,并且是固定的。不知道什么原因?

使用特权

评论回复
EysMCU| | 2017-11-7 10:46 | 显示全部楼层
遇到个奇怪的问题!楼主遇到过没?
用IO模拟的时候,CS必须一致为0才行,否则SDO一致不拉低!

使用特权

评论回复
lywer8888| | 2017-11-25 20:48 | 显示全部楼层
也在学习CS5532 问题好多

使用特权

评论回复
lywer8888| | 2017-11-25 20:52 | 显示全部楼层
学习一下 我的写入寄存器的和读出来的不一样

使用特权

评论回复
643757107| | 2017-11-29 15:20 | 显示全部楼层
确认原理图没错,软件没错,那就是焊接错了。

使用特权

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

本版积分规则

19

主题

1019

帖子

13

粉丝