a

Dependencies:   mbed mbed-rtos

Revision:
1:ceee5a608e7c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/include/Controllers/pidcontroller.hpp	Thu Mar 28 07:44:42 2019 +0000
@@ -0,0 +1,82 @@
+#ifndef PID_CONTROLLER_H
+#define PID_CONTROLLER_H
+
+#include <cstdio>
+#include <Linalg/linalg.h>
+#include <SystemModels/systemmodels.hpp>
+#include <mbed.h>
+
+namespace controllers
+{
+    namespace siso
+    {
+        
+        /**
+         * @brief General interface class for the controller
+         * 
+         * @tparam T type of the variables (float, double)
+         */
+        template<class T>
+        class IController{
+            public:
+                virtual T calculateControl(const T&)=0;
+                virtual void clear()=0;
+        };
+
+        /**
+         * @brief It generates a discrete transferfunction for realizing a proportional–integral–derivative controller, which is discretized by the Euler’s method.
+         * 
+         * @tparam T type of the variables (float, double) 
+         */
+        template<class T>
+        class CPidController:public IController<T>
+        {
+            public:
+                /* Discrete transfer function type */
+                using CPidSystemmodelType = systemmodels::lti::siso::CDiscreteTransferFucntion<T,3,3>;
+                
+                /* Constructor */
+                CPidController(T              f_kp
+                              ,T              f_ki
+                              ,T              f_kd
+                              ,T              f_tf
+                              ,T              f_dt);
+                CPidController(CPidSystemmodelType f_pid,T f_dt);
+
+                /* Overloaded operator */
+                T calculateControl(const T& f_input);
+                /* Serial callback */
+                static void staticSerialCallback(void* obj,char const * a, char * b);
+                /* Initialization */
+                void clear();
+            private:
+                #ifdef CONTROL_TEST_HPP
+                    FRIEND_TEST(PidControlTest,Initialization);
+                    FRIEND_TEST(PidControlTest,Setter);
+                #endif 
+                /* Controller setting */
+                void setController(T              f_kp
+                                  ,T              f_ki
+                                  ,T              f_kd
+                                  ,T              f_tf);
+                /* Serial callback implementation */
+                void serialCallback(char const * a, char * b);
+
+                
+
+                /* Discrete transfer function */
+                CPidSystemmodelType     m_pidTf;
+
+
+                /* delta-time term */
+                T                 m_dt;
+
+        };
+        /* Include function definitions */
+        #include "PidController.inl"
+    }; // namespace siso
+}; // namespace controllers   
+
+
+
+#endif