模拟技术学习
直播中

李梁

8年用户 171经验值
私信 关注
[问答]

为什么LTC1867芯片单极模式只能采样0~2V?

STM32f107基础上使用LTC1867芯片采样,设置单极性后只能采样要0~2V的电压,基准为4V。请大神帮忙!!!!
0~2V采样正常,2~4V读到的电压又从0开始递增。实际电压0V对应采集值0V,实际电压2V对应采集值为2V,2.01V开始就变成了0V,实际电压4V对应的采集值是1.996V。确认配置为单极性。[AppleScript] 纯文本查看 复制代码
#define     ADC_CS_H                    GPIO_SetBits(GPIOA,GPIO_Pin_4);#define     ADC_CS_L                    GPIO_ResetBits(GPIOA,GPIO_Pin_4); #define     ADC_SCK_H                   GPIO_SetBits(GPIOA,GPIO_Pin_5);#define     ADC_SCK_L                   GPIO_ResetBits(GPIOA,GPIO_Pin_5); //#define   ADC_MISO              GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6)#define     ADC_MISO              GPIOA->IDR&(1<<6)  #define     ADC_MOSI_H              GPIO_SetBits(GPIOA,GPIO_Pin_7);#define     ADC_MOSI_L              GPIO_ResetBits(GPIOA,GPIO_Pin_7); #define     Instructions_LTC1867_CH0                        0x80#define     Instructions_LTC1867_CH1                    0xC0#define     Instructions_LTC1867_CH2                        0x90#define   Instructions_LTC1867_CH3                      0xD0#define     Instructions_LTC1867_CH4                        0xA0#define     Instructions_LTC1867_CH5                    0xE0#define     Instructions_LTC1867_CH6                        0xB0#define   Instructions_LTC1867_CH7                      0xF0                                 #define     LTC1867_SLEEP_MODE                                  0x02#define     LTC1867_EXIT_SLEEP_MODE                         0x00#define     LTC1867_UNIPOLAR_MODE                           0x04#define     LTC1867_BIPOLAR_MODE                                0x00  /******************************************  *功能:SPI初始化 *******************************************/void SPI_GPIO_Init(void){        GPIO_InitTypeDef GPIO_InitStructure;                 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);                 //----------------------GPIO----------------------        // Configure SPI pins: CS        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_Init(GPIOA, &GPIO_InitStructure);                  // Configure SPI pins: SCK         GPIO_InitStructure.GPIO_Pin = 0;        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        GPIO_Init(GPIOA, &GPIO_InitStructure);         // Configure SPI pins: MISO         GPIO_InitStructure.GPIO_Pin = 0;        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;        GPIO_Init(GPIOA, &GPIO_InitStructure);         // Configure _SPI pins: MOSI         GPIO_InitStructure.GPIO_Pin = 0;        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        GPIO_Init(GPIOA, &GPIO_InitStructure);          //设置为空闲状态      ADC_CS_H;      ADC_SCK_H; }   /************************************************  *功能: LTC1867ACGN选择1~8通道 *************************************************/u8 LTC1867ACGN_SetChnl(u8 chnl){        u8 cmd;                     switch(chnl)        {                case 1:                     cmd = Instructions_LTC1867_CH0|LTC1867_UNIPOLAR_MODE;break;                                 case 2:                     cmd = Instructions_LTC1867_CH1|LTC1867_UNIPOLAR_MODE;break;                                 case 3:                     cmd = Instructions_LTC1867_CH2|LTC1867_UNIPOLAR_MODE;break;                                 case 4:                     cmd = Instructions_LTC1867_CH3|LTC1867_UNIPOLAR_MODE;break;                                 case 5:                     cmd = Instructions_LTC1867_CH4|LTC1867_UNIPOLAR_MODE;break;                                 case 6:                     cmd = Instructions_LTC1867_CH5|LTC1867_UNIPOLAR_MODE;break;                                 case 7:                     cmd = Instructions_LTC1867_CH6|LTC1867_UNIPOLAR_MODE;break;                                 case 8:                     cmd = Instructions_LTC1867_CH7|LTC1867_UNIPOLAR_MODE;break;                 default:                     cmd = Instructions_LTC1867_CH0|LTC1867_UNIPOLAR_MODE;break;        }        return cmd;} /**********************************  *功能: SPI读写数据,给定通道选择参数 ***********************************/u16 SPI_WriteRead(u8 chnl){        u8 i = 0;        u16 dat = 0;        u8 cmd = 0;        cmd = LTC1867ACGN_SetChnl(chnl);        ADC_CS_L;        delay_5us(10);                  //50        for(i=0;i<7;i++)        {                if(cmd&(0x80))                {                        ADC_MOSI_H;                }else{                        ADC_MOSI_L;                }                cmd <<= 1;                ADC_SCK_L;                delay_5us(1);           //5                ADC_SCK_H;                delay_5us(1);           //5        }        ADC_CS_H;        delay_5us(2);                   //10        ADC_CS_L;        for(i=0;i<16;i++)        {                ADC_SCK_L;                delay_5us(1);           //2                if(ADC_MISO) dat |= 1;                dat <<= 1;                ADC_SCK_H;                delay_5us(1);           //2        }        ADC_CS_H;                 return dat;}

回帖(8)

甘晓茵

2019-8-14 07:25:42
谢谢大家。。。现在找到原因了,接收数据有问题。先接收数据,然后再移位的。接收了最后一位数据,却把最高位移出去了
举报

张玉梅

2019-8-14 07:32:48
看样子你的程序可能出了一些问题,忽略了用于区分0-2和2-4的最高bit
举报

张易

2019-8-14 07:51:22
使用的内部基准,万用表测了REFCOMP引脚有4.07V的电压
举报

訾存贵

2019-8-14 08:07:49
使用的内部基准,万用表测了REFCOMP引脚有4.07V的电压
举报

更多回帖

发帖
×
20
完善资料,
赚取积分