工具与软件:
您好!
我尝试使用 TI ADS114S08B ADC 测量0.4至1.867伏范围内的电压、该电压是将4 -20 mA 信号转换为电压的 INA199C1DCK 的输出。 我将使用通过 SPI 传输的 MSP430来控制它。 我可以写入 ADS114S08B 上的寄存器、并读回它们、以确认设置符合我的预期、但当我尝试读取转换数据时、结果没有意义。 ADC 在多个电压条件下读取相同的值、始终保持相同的值、绝不会出现轻微的变化(例如、始终为5120、而不是5119或5121)。 然后这些值突然跳至下一个离散级别:
我读出的值始终与上面显示的值完全相同。 压力传感器的精度约为+-3 psi、但我读取的 ADC 输出代码与298和395 psi 相同。 我使用电压表测量每个电平的电压以进行确认。 我有一个3.3V 的单极电源、使用2.5V 的内部基准电压。我正在进行单端测量、在 AINCOM 连接到 GND 的情况下将 AIN8读取为正电压作为负电压。 以下是我的原理图的一部分:
下面是显示如何设置寄存器的代码片段:
unsigned int ads114s08b_configure(void){ WREG(0b11, 0b00000000); // 0x0 dec: 0 // Gain Setting register: disable PGA, set gain to 1 WREG(0b100, 0b00110100); // 0x34 dec: 52 // Data Rate register: internal clock, single-shot conversion mode, 20 SPS WREG(0b101, 0b00111010); // 0x3A dec: 58 // REF register: positive and negative reference buffers disabled, internal 2.5V reference enabled, internal reference always on WREG(0b10, 0b10001100); // select channel AIN8 dec 140 }
我已禁用 PGA 并将增益设置为1。 我怀疑问题在于我读取数据的方式。 我按照手册第72页的伪代码启动并配置 ADC:
我 被名为"发送16个 SCLK 上升沿以读出 DOUT/DRDY 上的转换数据"的行弄糊涂。 在我的代码中、我只发送了一个虚拟字节以实现这一点。 我是否应该切换 SCLK 线16次或者是否发送一个虚拟字节可用?
unsigned int RDATA(void) { volatile unsigned int bytes = 0; volatile unsigned int byte1; volatile unsigned int byte2; while (!(IFG2 & UCB0TXIFG)); // Wait until the transmit buffer is empty UCB0TXBUF = 0b00010011; // Send first byte while (!(IFG2 & UCB0TXIFG)); // Wait until the transmit buffer is empty UCB0TXBUF = 0b0; // Send first dummy byte while (!(IFG2 & UCB0RXIFG)); // Wait for the RX buffer to have data byte1 = UCB0RXBUF; // Return the received data printf("byte1: %d\n", byte1); while (!(IFG2 & UCB0TXIFG)); // Wait until the transmit buffer is empty UCB0TXBUF = 0b0; // Send second dummy byte while (!(IFG2 & UCB0RXIFG)); // Wait for the RX buffer to have data byte2 = UCB0RXBUF; // Return the received data printf("byte2: %d\n", byte2); return (byte2 << 8) | byte1; // shift the 2nd byte recieved to the MSB and combine the bytes //return (byte1 << 8) | byte2; }
当我运行上述代码时、返回的第一个字节似乎始终为0、第二个字节是一个值。 我不确定哪个字节应该是最高有效字节、哪个是最低有效字节。
如果有人有任何见解或建议,我会非常感谢。 我很乐意提供更多信息。
此致!
Mason