外设测试 - ADC 电平采集测试

原理

基于内核 IIO 子系统,给定固定输入电压,程序通过设备节点读取读数,换算为采集电压,与实际输入电压计算误差,不大于 5% 为测试通过。

自动化测试设计

1)考虑相邻通道存在短路的可能,最好给相邻通道设置不同的输入电压值。

2)可从板卡扩展接口中的 3.3v、5v 等管脚中通过电阻分压的方法降到 ADC 的采集范围进行输入。

参考代码

#!/usr/bin/env python
# Description:
#   Test ADC value, error limit is 5%.

import os, sys, time
import math, commands

if (len(sys.argv) < 3):
    print("Usage: {0} <adc device> <adc voltage> <adc channel  number(optional )>".format(sys.argv[0]))
    print("e.g.:  /sys/bus/iio/devices/iio\:device0/in_voltage4_raw 1.8")
    sys.exit(10)

print("*****************************************************")
ADC_DEVICE = sys.argv[1]
ADC_VOLTAGE = float(sys.argv[2])

try:
    CHANNEL_NUMBER=sys.argv[3]
except:
    CHANNEL_NUMBER="------"

ADC_VALUE = 0
CMD = "cat " + ADC_DEVICE
(cmd_status, cmd_result) = commands.getstatusoutput(CMD)
num = 0
while cmd_status != 0 and num < 10:
    time.sleep(2)
    (cmd_status, cmd_result) = commands.getstatusoutput(CMD)
    num = num+1

if cmd_status != 0:
    print("adc test run failed: " + cmd_result)
    sys.exit(3)

ADC_VALUE = float(cmd_result)
ADC_RAW = (ADC_VALUE * 1.8) / 4095 # 4095 = 2 ** 12 - 1
ADC_RAW = float('%.03f'%ADC_RAW)
deviation_value = (ADC_RAW - ADC_VOLTAGE) / ADC_VOLTAGE
print("adc device:            " + sys.argv[1])
print("adc channel number:    " + CHANNEL_NUMBER)
print("adc raw value:         " + cmd_result)
print("adc input voltage:     " + sys.argv[2] + "v")
print("adc actual voltage:    " + '%.03f'%ADC_RAW + "v")
print("adc voltage deviation: " + '%.03f'%(deviation_value *  100) + '%')
if -0.05 <= deviation_value and deviation_value <= 0.05:
    print("adc test succeed.")
    sys.exit(0)
else:
    print("adc test failed.")
    sys.exit(3)

参考

《嵌入式必会的Linux驱动开发之IIO子系统》: https://www.eet-china.com/mp/a23599.html

2020年10月29日

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页