ADS7950是Ti公司的一款ADC转换芯片,支持4通道采样位为12bit,其系列还有其他几款芯片,支持不同通道或采样位数。通讯接口是SPI。
NUMBER OF CHANNELS
RESOLUTION
12 BIT
10 BIT
8 BIT
16
ADS7953
ADS7957
ADS7961
12
ADS7952
ADS7956
ADS7960
8
ADS7951
ADS7955
ADS7959
4
ADS7950
ADS7954
ADS7958
本次使用i2X-6UB开发板的SPI控制器和ADS7950芯片通讯,采样外部电压。
从上表看出,VREF最大3V,SPI Clock最大20MHz。
ADS7950模块中的REF2925最大输出2.5V。
使用iMX6ULL的SPI1控制器,pinmux配置如下
i2C-6ULX-B底板信号
信号名称
复用功能
ADS7950模块
J4.37
CSI_DATA06
ECSPI1_MOSI
SDI
J4.38
CSI_DATA07
ECSPI1_MISO
SDO
J4.35
CSI_DATA04
ECSPI1_SCLK
CLK
J4.36
CSI_DATA05
GPIO CS
CS
除了连接SPI信号,还需要向ADS7950模块板供电,这里选择开发板J4的5V作为电源。
ADS7950的dts配置包含三个部分
- 参考电压
- 管脚功能复用
- SPI控制器配置
/ {
regulators {
adc7950_ref: regulator2 {
compatible = "regulator-fixed";
regulator-name = "ads7950_ref";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
regulator-boot-on;
};
};
};
&iomux {
pinctrl_ecspi1_cs_1: ecspi1_cs_grp-1 {
fsl,pins = <
MX6UL_PAD_CSI_DATA05__GPIO4_IO26 0x10b0
>;
};
};
&ecspi1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi1_1 &pinctrl_ecspi1_cs_1>;
fsl,spi-num-chipselects = <1>;
cs-gpios = <&gpio4 26 0>;
status = "okay";
adc79_1: adc7957@0 {
compatible = "ti,ads7957";
reg = <0>;
#io-channel-cells = <1>;
spi-max-frequency = <10000000>;
vref-supply = <&adc7950_ref>;
};
};
读出ADC数据
ls -la /sys/bus/iio/devices/iio\:device0/scan_elements/
total 0
drwxr-xr-x 2 root root 0 Dec 3 01:56 .
drwxr-xr-x 6 root root 0 Dec 3 00:57 ..
-rw-r--r-- 1 root root 4096 Dec 3 17:08 in_timestamp_en
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_timestamp_index
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_timestamp_type
-rw-r--r-- 1 root root 4096 Dec 3 17:08 in_voltage0-voltage1_en
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage0-voltage1_index
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage0-voltage1_type
-rw-r--r-- 1 root root 4096 Dec 3 17:08 in_voltage0_en
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage0_index
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage0_type
-rw-r--r-- 1 root root 4096 Dec 3 17:08 in_voltage1-voltage0_en
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage1-voltage0_index
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage1-voltage0_type
-rw-r--r-- 1 root root 4096 Dec 3 17:08 in_voltage1_en
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage1_index
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage1_type
-rw-r--r-- 1 root root 4096 Dec 3 17:08 in_voltage2-voltage3_en
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage2-voltage3_index
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage2-voltage3_type
-rw-r--r-- 1 root root 4096 Dec 3 17:08 in_voltage2_en
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage2_index
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage2_type
-rw-r--r-- 1 root root 4096 Dec 3 17:08 in_voltage3-voltage2_en
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage3-voltage2_index
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage3-voltage2_type
-rw-r--r-- 1 root root 4096 Dec 3 17:08 in_voltage3_en
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage3_index
-r--r--r-- 1 root root 4096 Dec 3 17:08 in_voltage3_type
echo 1 > /sys/bus/iio/devices/iio_sysfs_trigger/add_trigger
cat /sys/bus/iio/devices/trigger0/name
sysfstrig1
cd /sys/bus/iio/devices/iio\:device0
echo sysfstrig1 > trigger/current_trigger
cat trigger/current_trigger
sysfstrig1
echo 1 > scan_elements/in_timestamp_en
echo 1 > scan_elements/in_voltage0_en
echo 1 > scan_elements/in_voltage1_en
echo 1 > scan_elements/in_voltage2_en
echo 100 > buffer/length
echo 1 > buffer/enable
# 每次触发后,/dev/iio:device0会有数据
echo 1 > /sys/bus/iio/devices/trigger0/trigger_now
实际数据
cat iio\:device0/in_voltage_scale
0.610500610
hexdump /dev/iio\:device0 &
echo 1 > trigger0/trigger_now
0000f50 d109 8810 0820 5731 d464 97d8 50a2 16cb
CH0加1.5V电压,raw value = 0x9d1,计算后为1534mV
CH1输入1.7V电压,raw value = 0xb17,计算后为1733mV
echo 1 > trigger0/trigger_now
0000f60 0000 171b 9820 9730 81f7 8996 50b8 16cb
CH2输入1.9V电压,raw value = 0xc57,计算后为1928mV
echo 1 > trigger0/trigger_now
0000f70 0000 0010 572c 5631 b6e2 d4bd 50d2 16cb
CH3输入4.5V电压,raw value = 0xfff,计算后为2499mV
echo 1 > trigger0/trigger_now
0000f80 3a01 0f10 0720 ff3f dfbb 5d93 50ea 16cb
作者:SteveChen 创建时间:2024-09-17 16:22
最后编辑:SteveChen 更新时间:2024-09-17 16:24
最后编辑:SteveChen 更新时间:2024-09-17 16:24