We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi.
I'm a robot engineer and I usually use MCUs such as nrf52832(cortex-M4f) or ST32f407(cortex) to use various sensors.
Since those MCUs have an FPU inside, calculating time was quite fast without any burdensome optimizations.
The problem is, I have to use nrf52810(cortex-M4 without FPU) and calculate fractional numbers and trigonometric functions.
I'm worried about computational time is not enough to fast handling multiple sensors with nrf52810.
As I know, the CMSIS DSP library is very powerful in calculating fixed-point variables and trigonometric functions.
The library has Q31 or Q15 format but I'm confused about using it right.
Do I have to map each variable to Q31 and bear the mapped variables in mind?
For example, multiplying 30.02f and 12.76f using CMSIS DSP in that way would like this
float32_t ValA=30.02f;
float32_t ValB=12.76f;
float32_t Outcome;
q31_t ValA_Q31, ValB_Q31, Outcome_Q31;
arm_float_to_q31(ValA/1000, &ValA_Q31,1); // Since range of Q31 is between -1 and 1
arm_float_to_q31(ValB/1000, &ValA_Q31,1); // Since range of Q31 is between -1 and 1
arm_mult_q31(&ValA_Q31,&ValB_Q31,Outcome_Q31,1);
arm_q31_to_float(&Outcome,&Outcome_Q31,1);
printf("Sensordata: %f",Outcome*1000*1000);
Is it correct to use CMSIS DSP in that way?
If there are other ways please let me know...
This is all the functions that I use. (sine, cosine, square root, addition, subtraction, division, multiplication)
This is the simplified calculation example for handling sensor output.
int32_t ValA = 300; // Integer Sensor value
float ValA_float;
float Outcome;
ValA_float= (float)ValA/1000.0f;
Outcome=20.0f+1.32f*sin(ValA_float);
printf("Sensordata: %f",Outcome);
The actual code is more complicated than above.
How can I use the CMSIS DSP in that case above to reduce the computational time?