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
上一篇:
下一篇: