完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在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个回答
|
|
谢谢大家。。。现在找到原因了,接收数据有问题。先接收数据,然后再移位的。接收了最后一位数据,却把最高位移出去了
|
|
|
|
看样子你的程序可能出了一些问题,忽略了用于区分0-2和2-4的最高bit
|
|
|
|
使用的内部基准,万用表测了REFCOMP引脚有4.07V的电压
|
|
|
|
使用的内部基准,万用表测了REFCOMP引脚有4.07V的电压
|
|
|
|
0~2和2~4都是u16位的数据啊,麻烦详细指点
|
|
|
|
实际电压0V对应采集值0V,实际电压2V对应采集值为2V,2.01V开始就变成了0V,
就是说,输入0v、2v,得到的 ADC 转换数值是完全一样的? 注意,我是问“output code”,而不是你换算以后的数值。 |
|
|
|
如果 0v、2v 时得到的 output code 完全一样,
怀疑是你 SCK 时序有错。 平时 SCK 必须为低, 在你的 SPI_WriteRead(u8 chnl) 函数里, SCK 初值不明确。 |
|
|
|
时序没有问题,现在找到原因了。先接收数据,然后再移位的。接收了最后一位数据,却把最高位移出去了
|
|
|
|
只有小组成员才能发言,加入小组>>
878 浏览 2 评论
12813 浏览 0 评论
4108 浏览 7 评论
2327 浏览 9 评论
2148 浏览 2 评论
447浏览 2评论
754浏览 2评论
878浏览 2评论
381浏览 1评论
605浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 14:03 , Processed in 1.118534 second(s), Total 64, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号