音乐播放器
Xuwuyibing's Blog
 
文章 标签
4

Powered by Cloudflare Pages | Theme: Fog
载入天数...
载入时分秒...

Part2: 程控电压表(ADC)的原理与程序控制

中 / EN

1. 接线图

ad7608的接线图,与目前使用的ad7606c16只有部分针脚不同,具体差异可以在下面的程序中的阵脚定义处自行对比。

性能水平:

  • 18bit原生精度
  • 8通道采样,支持差分采样
  • 256次原生超采样率
  • 电压信号采集率达到200k

针对ad7606c18的程序应该以如下方式在shell中调用:

python voltmeter.py -n 64

其中-n所允许添加的参数是64,代表一次最多可以连续采样64组,n的默认值是1。

2. 原理

2.1 超采样(Oversampling)

超采样是指以远远高于信号最高频率两倍对其进行采样的过程。与之相对的还有欠采样。

超采样获得N位额外数据精度所需的样本数为:

sample times = 4^N
  • 我们开启了AD7606C18内置的软件模式, 将过采样率提高到256次, 此时可以提高4-bit精度。
  • 在循环缓存中我们也配置了64倍的过采样, 可以获得的额外的3bit理论精度, 因此理论精确位数可到±10V/2^25,达到了μV级。

2.2 循环缓存


循环缓存可以提高请求数据时的反应速率,并且也起到软件上的“超采样”的作用,尤其是当ADC的超采样率被设置得很高时

注:循环缓存中的数据遵循FIFO的原则,即先进先出,优先读出新数据,溢出旧数据

3. Arduino程序

ad7606c18的arduino程序信息详见gitee私有仓库

4. Python程序

voltmeter = serial.Serial(port="COM6", baudrate=1000000, timeout=0.5) #with CH340G
#when using our devices, please take care of the port

def writeByteCommand2arduino (sample_times:int):
    voltmeter.write(sample_times.to_bytes(1,'big'))
#this function is used to tell ardunio, how many group of the data we need

注:请注意port端口的变化,在使用linux时这个端口会有固定的文件名,但是在使用Windows时会跟随端口的不同发生变化。