TEB programma
Dependencies: mbed QEI HIDScope biquadFilter MODSERIAL FastPWM
controller.cpp
- Committer:
- JornD
- Date:
- 2019-10-15
- Branch:
- Branch2
- Revision:
- 58:897b67113094
- Parent:
- 56:58cbb056e4be
- Child:
- 61:4c7de1e2f9fe
File content as of revision 58:897b67113094:
#include "structures.h" #include <math.h> #include "global.cpp" extern const float Ts; float K = 2/Ts; /* To call this function, the coefficients variable in the main scope needs to have a "*" in front of it. The coefficients can be printed using: for ( int i = 0; i < 5; i++ ) { std::cout << *(coefficient_variable_name+i) << std::endl; } */ void BuildController(ControllerSettings& StrucName, float P[], float Q[]) { StrucName.A = (Q[0] * pow(K,2) + Q[1] * K + Q[2])/(P[0] * pow(K,2) + P[1] * K + P[2]); StrucName.B = (2 * Q[2] - 2 * Q[0] * pow(K,2))/(P[0] * pow(K,2) + P[1] * K + P[2]); StrucName.C = (Q[0] * pow(K,2) - Q[1] * K + Q[2])/(P[0] * pow(K,2) + P[1] * K + P[2]); StrucName.D = (2 * P[2] - 2 * P[0] * pow(K,2))/(P[0] * pow(K,2) + P[1] * K + P[2]); StrucName.E = (P[0] * pow(K,2) - P[1] * K + P[2])/(P[0] * pow(K,2) + P[1] * K + P[2]);; } void InitializeControllers(void) { //Define Controller structures, shorthand: Set_ ControllerSettings Set_ProcessEMG; ControllerSettings Set_Base; //Controller base ControllerSettings Set_EndAffector; //Controller end affector //Define Memory cells of the Input/Output, shorthand: Mem_ MemoryIO Mem_ProcessEMG; MemoryIO Mem_Base; MemoryIO Mem_EndAffector; //Build Controllers and define P and Q, the transfer function of the controller //--Build controller, EMG float PE[] = {1,2,3}; float QE[] = {4,5,6}; BuildController(Set_ProcessEMG, PE, QE); //--Build controller, Base float PB[] = {1,2,3}; float QB[] = {4,5,6}; BuildController(Set_Base, PB, QB); //--Build controller, End Affector float PA[] = {1,2,3}; float QA[] = {4,5,6}; BuildController(Set_EndAffector, PA, QA); } float Biquad(ControllerSettings& StrucName, MemoryIO& MemName, float X) { //Difference equation which implements the digital biquad filter float Y = StrucName.A * X + StrucName.B * MemName.Xm + StrucName.C * MemName.Xmm + StrucName.D * MemName.Ym + StrucName.E * MemName.Ymm; return Y; }