Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 
    SOLVED

    BMA456 offset compensation

    BMA456 offset compensation

    Andy_253
    New Poster

    Hi,

    I use the BMA456 sensor.

    I would like to use the API bma4_perform_accel_foc, for calculating the foc for all 3 axis - x,y,z.

    (I got a code from git hub)

    The API recieves the struct : bma4_accel_foc_g_value.

    I thought to declare - const struct bma4_accel_foc_g_value accel_g_value = {1, 1, 1, 0},  so all three axis will be calculated, but in the API code I see the following condition :

    if (((ABS(accel_g_value->x) + ABS(accel_g_value->y) + ABS(accel_g_value->z)) == 1) &&
    ((accel_g_value->sign == 1) || (accel_g_value->sign == 0)))

    which makes me think I should call one axis at a time (also in related APIs  it seems like that).

    but if so - will it be saved corrctly at the NVM? won't each call run over the previous values? 

    I don't understand what is the proper input to the accel_g_value

    Thanks in advance,

    14 REPLIES 14

    BSTRobin
    Community Moderator
    Community Moderator

    Hello Andy_253,

    In BMA456 driver code, it can be seen from the logic in the following code that the FOC of X, y and Z axes can only be done separately,  and sign is equal to '0', indicating that you are placing Z axis of the sensor positive. sign is equal to '1', indicating that you are placing Z axis of the sensor negative .

    Z axis positive placement

    FOC Z axis.png
    Z axis negative placement

    FOC Z axis negative placement.png

    sign

    /* '0' for positive input and '1' for negative input */
    uint8_t sign;

    if (((ABS(accel_g_value->x) + ABS(accel_g_value->y) + ABS(accel_g_value->z)) == 1) &&
    ((accel_g_value->sign == 1) || (accel_g_value->sign == 0)))

    So to do FOC for Z axis  accel_g_value should be  = {0, 0, 1, 0}

    FOC of other axes is similar to that of Z axis.

    With FOC, the compensation value is not saved to NVM.

     

    Hi, Bosch

    Thanks for your reply.

    According to your reply, I did the FOC for each axis seperately.

    But I faced the 1 issue. I read the x,y,z 128 times and calculated the average value.

    The average value of x axis is -4116(y axis : -201, z : 32). It is too big for FOC. If I did  the FOC for y,z axis, the value can reach the '0'.

    However the axis of x couldn't possible. I tested it using 2 sensors. It was same. I don't know How can I do the FOC for x axis.

    I'm attahcing the SPI packet by captured on my device. Could you please check it?

    BSTRobin
    Community Moderator
    Community Moderator

    Hello Andy_253,

    In function call of bma4_perform_accel_foc(), perform_accel_foc() had calculated the average value, don't need you do any thing out of function bma4_perform_accel_foc(). You could see the detailed code implement in bma4_perform_accel_foc().

    Hi BSTRobin,

    Yes. I know the perform_accel_foc do all of things for FOC. I didn't do anythings out of this function.

    But I means that the average of x axis is too big(-4147). Is it right value on BMA456 sensor?

    I think that If the value is bigger than 4096, I can't do the FOC.

    I want to know what factor makes the this big value and then If I inserted the BMA253 sensor on same poistion as BMA456, The value of x axis is not big.

     

    Thanks & Regards

    Andy

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist