12-22-2021 05:35 AM
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,
Solved! Go to Solution.
12-23-2021 03:57 AM
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
Z axis negative placement
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.
12-23-2021 06:03 AM
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?
12-23-2021 06:28 AM
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().
12-23-2021 06:54 AM
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