Gu Jasper / Motor_200Nm_V0

Dependencies:   mbed-dev-f303 FastPWM3

Committer:
Rushu
Date:
Wed May 08 01:17:38 2019 +0000
Revision:
51:b0a3ef66ea3d
Parent:
47:e1196a851f76
for as5147, included bang bang control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
benkatz 20:bf9ea5125d52 1
benkatz 47:e1196a851f76 2 #include "../math_ops.h"
benkatz 20:bf9ea5125d52 3
benkatz 20:bf9ea5125d52 4
benkatz 20:bf9ea5125d52 5 float fmaxf(float x, float y){
benkatz 25:f5741040c4bb 6 /// Returns maximum of x, y ///
benkatz 20:bf9ea5125d52 7 return (((x)>(y))?(x):(y));
benkatz 20:bf9ea5125d52 8 }
benkatz 20:bf9ea5125d52 9
benkatz 20:bf9ea5125d52 10 float fminf(float x, float y){
benkatz 25:f5741040c4bb 11 /// Returns minimum of x, y ///
benkatz 20:bf9ea5125d52 12 return (((x)<(y))?(x):(y));
benkatz 20:bf9ea5125d52 13 }
benkatz 20:bf9ea5125d52 14
benkatz 20:bf9ea5125d52 15 float fmaxf3(float x, float y, float z){
benkatz 25:f5741040c4bb 16 /// Returns maximum of x, y, z ///
benkatz 20:bf9ea5125d52 17 return (x > y ? (x > z ? x : z) : (y > z ? y : z));
benkatz 20:bf9ea5125d52 18 }
benkatz 20:bf9ea5125d52 19
benkatz 20:bf9ea5125d52 20 float fminf3(float x, float y, float z){
benkatz 25:f5741040c4bb 21 /// Returns minimum of x, y, z ///
benkatz 20:bf9ea5125d52 22 return (x < y ? (x < z ? x : z) : (y < z ? y : z));
benkatz 20:bf9ea5125d52 23 }
benkatz 34:51647c6c500d 24
Rushu 51:b0a3ef66ea3d 25 //===============================HJB added=============================//
Rushu 51:b0a3ef66ea3d 26 int getMidNum(int x, int y, int z) {
Rushu 51:b0a3ef66ea3d 27 /// Returns middle of x, y, z ///
Rushu 51:b0a3ef66ea3d 28 return (x < y ? (y < z ? y : x < z ? z : x) : (y > z ? y : x > z ? z: x));
Rushu 51:b0a3ef66ea3d 29 }
Rushu 51:b0a3ef66ea3d 30 //================================HJB end==================================//
Rushu 51:b0a3ef66ea3d 31
benkatz 34:51647c6c500d 32 float roundf(float x){
benkatz 34:51647c6c500d 33 /// Returns nearest integer ///
benkatz 34:51647c6c500d 34
benkatz 34:51647c6c500d 35 return x < 0.0f ? ceilf(x - 0.5f) : floorf(x + 0.5f);
benkatz 34:51647c6c500d 36 }
benkatz 20:bf9ea5125d52 37
benkatz 20:bf9ea5125d52 38 void limit_norm(float *x, float *y, float limit){
benkatz 25:f5741040c4bb 39 /// Scales the lenght of vector (x, y) to be <= limit ///
benkatz 20:bf9ea5125d52 40 float norm = sqrt(*x * *x + *y * *y);
benkatz 20:bf9ea5125d52 41 if(norm > limit){
benkatz 20:bf9ea5125d52 42 *x = *x * limit/norm;
benkatz 20:bf9ea5125d52 43 *y = *y * limit/norm;
benkatz 20:bf9ea5125d52 44 }
benkatz 20:bf9ea5125d52 45 }
benkatz 47:e1196a851f76 46
benkatz 47:e1196a851f76 47 void limit(float *x, float min, float max){
benkatz 47:e1196a851f76 48 *x = fmaxf(fminf(*x, max), min);
benkatz 47:e1196a851f76 49 }
benkatz 26:2b865c00d7e9 50
benkatz 26:2b865c00d7e9 51 int float_to_uint(float x, float x_min, float x_max, int bits){
benkatz 47:e1196a851f76 52 /// Converts a float to an unsigned int, given range and number of bits ///
benkatz 26:2b865c00d7e9 53 float span = x_max - x_min;
benkatz 26:2b865c00d7e9 54 float offset = x_min;
benkatz 47:e1196a851f76 55 return (int) ((x-offset)*((float)((1<<bits)-1))/span);
benkatz 26:2b865c00d7e9 56 }
benkatz 26:2b865c00d7e9 57
benkatz 47:e1196a851f76 58
benkatz 26:2b865c00d7e9 59 float uint_to_float(int x_int, float x_min, float x_max, int bits){
benkatz 47:e1196a851f76 60 /// converts unsigned int to float, given range and number of bits ///
benkatz 26:2b865c00d7e9 61 float span = x_max - x_min;
benkatz 26:2b865c00d7e9 62 float offset = x_min;
benkatz 26:2b865c00d7e9 63 return ((float)x_int)*span/((float)((1<<bits)-1)) + offset;
benkatz 26:2b865c00d7e9 64 }