https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1406946/tac5212-incremental-mode
器件型号:TAC5212工具与软件:
我很想通过 TAC5212获取高分辨率直流测量值、数据表中简要提到了用于此目的的"增量模式"。 您能否提供有关此模式以及如何最好地使用 TAC5xxx 器件进行一般直流测量的更多详细信息?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
https://e2e.ti.com/support/audio-group/audio/f/audio-forum/1406946/tac5212-incremental-mode
器件型号:TAC5212工具与软件:
我很想通过 TAC5212获取高分辨率直流测量值、数据表中简要提到了用于此目的的"增量模式"。 您能否提供有关此模式以及如何最好地使用 TAC5xxx 器件进行一般直流测量的更多详细信息?
尊敬的 Timothy:
IADC 具有多种模式和配置、ADC_CH_CFG (第0页寄存器81)在此处提供了详细信息。 此功能可与单端输入一起使用。
在一次性模式下、它在触发时进行一次测量并保存该值;我们还拥有顺序模式、在该模式下、它连续采样。您必须执行寄存器写入来保存数据(P1_R85)以进行手动读回
下面的脚本适用于单端直流耦合配置。 Default nSkip、nReset 和 OST。 单通道模式。
w a0 00 00 w a0 01 01 w a0 02 09 w a0 50 48 # Single Ended DC Coupled w a0 55 48 # Single Ended DC Coupled w a0 51 80 #Enable IADC in single channel one shot mode w a0 4C 26 # Config for IADC parameters can try different values w a0 76 80 # enabling first channel of ADC w a0 1F 01 # Disabling DOUT for channel 2 w a0 00 01 # page change w a0 55 08 # Enable IADC diag reg w a0 00 00 #Page Change w a0 78 80 # ADC power up w a0 51 90 # Start IADC one shot Conversion r a0 51 01 # Reg read to get conversion status w a0 00 01 r a0 62 03 # Read IADC 24 bit output
在从寄存器中获得24位输出后、回读采用该数字的二进制补码将其转换为十进制、并在下面的公式中代入 vin1p、这样应该可以得到测量的直流电压。
((vin1p-vin1m)/vfs)* 0.925*2^22、其中 vfs=2.828、vin1m=0、因为单端和5k 阻抗模式
好的、只是想了解一下使用增量模式而不是"正常"模式进行直流测量的好处。 增量模式的电压调节是否不同? 下面是一些数据、将12kHz 采样率下的 TAC5212 ADC 输出与测试设备提供的类似测量结果进行了比较。 当寄存器0x50/0x55 = 0x48时、ADC 满量程为1.414V、我通过按2.828/2^24而不是0.925* 2.828/2^22进行缩放、与测试设备获得很好的一致性:
如果0x50/0x55 = 0x4A、ADC 满量程为2.828V、按2.828/2^23进行缩放:
看起来可以从这些测量中准确读取输入电压电平、那么增量模式会为图片增加什么功能?
您好、Daveon:
我使用的是 CircuitPython 中编写的脚本、您可以在 https://github.com/timchinowsky/tac5上找到该脚本。 configure
中的方法tac5.py
是进行 I2C 编程的位置。 关键部分如下:
self.write_reg(0x01, 1, address=a) # Reset all registers to defaults
time.sleep(0.1)
self.write_reg(0x02, 9, address=a) # No sleep, DREG and VREF enabled
if self.width == 32:
self.write_reg(0x1A, 0x30, address=a) # TDM, 32 bit
elif self.width ==24:
self.write_reg(0x1A, 0x20, address=a) # TDM, 24 bit
elif self.width == 20:
self.write_reg(0x1A, 0x10, address=a) # TDM, 20 bit
else:
self.write_reg(0x1A, 0x00, address=a) # TDM, 16 bit
self.write_reg(0x78, 0xEE, address=a) # Power up all enabled ADC and DAC channels
# self.write_reg(0x72, 0x0A, address=a) # disable ADC HPF
self.write_reg(0x72, 0x8A, address=a) # disable ADC HPF, ultra-low latency decimation filter
self.write_reg(0x73, 0x0A, address=a) # disable DAC HPF
self.write_reg(0x1B, 0x40, address=a) # transmit hi-Z for unused cycles
self.write_reg(0x50, 0x4A, address=a)
self.write_reg(0x55, 0x4A, address=a)
self.write_reg(0x55, 0x4A, address=a)