VDD位5.0v
-IN位接地
+IN为输入电压
Vref为2.5v,
我给+IN5.0v电压时候,读出来为32767,为7FFF
我给+IN2.5V电压,读出来为16474(数值有一些波动,不是很稳定)
+IN短接,读出来为151
下面是我spi_read的程序,我通过给到的芯片手册
static int ads8317_adc_conversion(struct ads8317 *adc, u32 channel) { int ret; printk("into %s\n",__func__); printk("into %s,channel:%d\n",__func__,channel); // adc->buffer = 0; // printk(" adc->buffer:%x\n",adc->buffer); struct spi_transfer t = { .rx_buf = &adc->buffer, .len = 3, }; struct spi_message m; spi_message_init(&m); spi_message_add_tail(&t, &m); ret = spi_sync(adc->spi, &m); if(ret) return ret; udelay(2); printk(" adc->buffer0:%x\n",adc->buffer[0]); printk(" adc->buffer1:%x\n",adc->buffer[1]); printk(" adc->buffer2:%x\n",adc->buffer[2]); return ((((adc->buffer[0] << 16) | (adc->buffer[1] << 8) | adc->buffer[2])>>2)&0xffff); }
我想问两个问题
1我的位转换是否有问题?
2在ads8317芯片手册中的20页关于table1的表哥能否给出详细的解释,我不是很看的懂
Amy Luo:
您好,
ads8317满量程输入范围是+IN– (–IN)是-VREF~+VREF,即2*VREF,您的Vref为2.5v,就不能输入大于2.5V的信号,输入信号范围-Vref~+Vref对应数字信号8000~7FFF。
gengle lou:
回复 Amy Luo:
满量程不是5v吗
Amy Luo:
回复 gengle lou:
您好,满量程范围-VREF~VREF,您的Vref是2.5V,那么就是-2.5V到2.5V,总的是2*Vref=5V范围。
gengle lou:
回复 Amy Luo:
在电路图这边-IN脚接地了,所以我外部输入的电压的范围是否为0-5v?
Amy Luo:
回复 gengle lou:
抱歉,回复晚了。-IN脚接地属于单端输入,那就要考虑输入共模电压范围了,若-IN接地,输入0-5V,那么满量程输入范围根据上面表格+IN-(-IN)即0-5V,不满足-2.5V(VREF)~+2.5V(VREF)的部分将不能正常ADC转换。如果输入信号范围是0-5V,就要像上面表格设置工作条件,即需要将-IN接2.5V。
gengle lou:
回复 Amy Luo:
因为硬件-IN是接地的,不太好改变,使用如下表的模式吗,1fdclock=24xfsample,这个fsample是什么?2用单端输入模式code值和输出电压值的关系是否还能用20页的table1来对比。table1中2.5v得到的代码是7FFF,我实际5v得到7FFF。
Amy Luo:
回复 gengle lou:
您好,fsample是采样率。我想知道在您现在电路的情况下,输入信号2.5V到5V时,您转换的代码是对应的吗
gengle lou:
回复 Amy Luo:
2.5v到5v对应的code为3fff(16383)到7fff (32767) ,不知道对不对。