Post Go back to editing

My adis16507-1 returns false data

Category: Software
Product Number: adis16507-1
Software Version: Driver ADIS16475

Hello,

I want to use my IMU adis16507-1 to know the angular velocity of my embedded system.

Once I have set up the sensor I notice that I get false values.

By rotating my IMU at a constant controlled speed of about 1.7 rad/s on the Z axis, I read the value of the angular velocity of Z on /sys/bus/iio/devices/iio\:device0/in_anglvel_z_raw which I multiply by the value of the scale on /sys/bus/iio/devices/iio\:device0/in_anglvel_scale I get a velocity of about 1 rad/s.

I also notice that the received speed cannot exceed 1.7 rad/s despite an increase of the rotation. The sign of the direction of rotation works very well.

I also have at my disposal the IMU adis16470. I notice the same problem, the measured value is different from the real value. However it is different (For 1.7 rad/s real I get 0.63 rad/s measured).

I deduce that the problem could come from the configuration. So here is my adis16475-overlay.dts

/dts-v1/;
/plugin/;

#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>

/ {
        compatible = "brcm,bcm2835";

        fragment@0 {
                target = <&spi0>;
                __overlay__ {
                        status = "okay";
                };
        };

        fragment@1 {
                target = <&spidev0>;
                __overlay__ {
                        status = "disabled";
                };
        };

        fragment@2 {
                target = <&spidev1>;
                __overlay__ {
                        status = "disabled";
                };
        };

         fragment@3 {
                target = <&gpio>;
                __overlay__ {
                        adis16475_pins: adis16475_pins {
                                brcm,pins = <4 12>; // interrupt and reset
                                brcm,function = <0 1>; // in out
                        };
                };
        };
        fragment@4 {
                target = <&spi0>;
                __overlay__ {
                        /* needed to avoid dtc warning */
                        #address-cells = <1>;
                        #size-cells = <0>;
                        
                        adis16475: adis16475@0 {
                                compatible = "adi,adis16507-1";
                                reg = <0>;
                                pinctrl-names = "default";
                                pinctrl-0 = <&adis16475_pins>;
                                spi-cpha;
                                spi-cpol;
                                reset-gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
                                spi-max-frequency = <2000000>;
                                interrupts = <4 IRQ_TYPE_EDGE_RISING>;
                                interrupt-parent = <&gpio>;
                        };
                };
        };

        __overrides__ {
                interrupt = <&adis16475_pins>,"brcm,pins:0",
                                <&adis16475>,"interrupts:0";
                reset = <&adis16475_pins>,"brcm,pins:4",
                                <&adis16475>,"reset-gpios:4";
        };
};

Is there an error in this file? Could the problem come from somewhere else?

Thanks in advance,

Dimitri



mistake file
[edited by: Dimigger at 7:32 AM (GMT -4) on 17 Oct 2022]
Parents
  • I tried to use the IMU adis16470 with this .dts or I just changed the line "compatible = "adi,adis16507-1" to "compatible = "adi,adis16470" like this: 

    /

    dts-v1/;
    /plugin/;
    
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/gpio/gpio.h>
    
    / {
    compatible = "brcm,bcm2835";
    
    fragment@0 {
    target = <&spi0>;
    __overlay__ {
    status = "okay";
    };
    };
    
    fragment@1 {
    target = <&spidev0>;
    __overlay__ {
    status = "disabled";
    };
    };
    
    fragment@2 {
    target = <&spidev1>;
    __overlay__ {
    status = "disabled";
    };
    };
    
    fragment@3 {
    target = <&gpio>;
    __overlay__ {
    adis16475_pins: adis16475_pins {
    brcm,pins = <4 12>; // interrupt and reset
    brcm,function = <0 1>; // in out
    };
    };
    };
    fragment@4 {
    target = <&spi0>;
    __overlay__ {
    /* needed to avoid dtc warning */
    #address-cells = <1>;
    #size-cells = <0>;
    
    adis16475: adis16475@0 {
    compatible = "adi,adis16470";
    reg = <0>;
    pinctrl-names = "default";
    pinctrl-0 = <&adis16475_pins>;
    spi-cpha;
    spi-cpol;
    reset-gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
    spi-max-frequency = <2000000>;
    interrupts = <4 IRQ_TYPE_EDGE_RISING>;
    interrupt-parent = <&gpio>;
    };
    };
    };
    
    __overrides__ {
    interrupt = <&adis16475_pins>,"brcm,pins:0",
    <&adis16475>,"interrupts:0";
    reset = <&adis16475_pins>,"brcm,pins:4",
    <&adis16475>,"reset-gpios:4";
    };
    };

    And the values the adis16470 gives me are right!

    However, I need to use the adis16507-1. I don't understand why it doesn't work when the code difference between the two sensors is minimal.

  • Thank you for your use of the ADIS16507 and for posting your question in this forum.  It seems like this might be working, as expect, but let's explore this together.  The rated measurement range, for the gyroscopes in the ADIS16507-1, is +/-125dps, which is equivalent to +/-1.1rad/second.   What range do you require?  The ADIS16507-2 provides 4x more measurement range than the ADIS16507-1.  Could that help?  If you need more, the ADIS16507-3 provides +/-2000dps of measurement range, which is 16x greater than the ADIS16507-1 and equivalent to the ADIS16470.  Could this help? 

  • Hello,

    Thank you for your answer.

    Indeed my result is logical considering the dps of the sensor that I use.

    I will continue to use my adis16470 sensor because its +/- 2000 dps correspond to my needs.

Reply Children
No Data