Xuwuyibing's Blog
文章
标签
4
阅
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时会跟随端口的不同发生变化。