pr7

Dependencies:   mbed

main.cpp

Committer:
altb2
Date:
2019-05-03
Revision:
0:05dd1de8cc3f
Child:
1:92f175969d90

File content as of revision 0:05dd1de8cc3f:

#include "mbed.h"
#include "EncoderCounter.h"
#include "LinearCharacteristics.h"
//------------------------------------------
#define PI 3.1415927f
//------------------------------------------
 
/* GRT: Control of voice-coil with PID-T1 - Controller
 */
Serial pc(SERIAL_TX, SERIAL_RX);        // serial connection via USB - programmer
InterruptIn button(USER_BUTTON);        // User Button, short presses: reduce speed, long presses: increase speed
AnalogOut out(PA_5);                    // Analog OUT on PA_5   1.6 V -> 0A 3.2A -> 4A (see ESCON)

bool key_was_pressed = false;
bool controller_active = false;
void pressed(void);                     // user Button pressed
void released(void);                    // user Button released
  
//------------------------------------------
// ... here define variables like gains etc.
//------------------------------------------
LinearCharacteristics i2u(-4.0f,4.0f,0.0f,3.2f / 3.3f);         // output is normalized output
//------------------------------------------
Ticker  ControllerLoopTimer;            // interrupt for control loop
EncoderCounter counter1(PB_6, PB_7);    // initialize counter on PB_6 and PB_7
Timer t_but;                            // define timer for button
// ----- User defined functions -----------
void updateLoop(void);   // loop for State machine (via interrupt)
float Ts = 0.0005f;                     // sample time of main loop
uint16_t k = 0;
//******************************************************************************
//---------- main loop -------------
//******************************************************************************
int main()
{   
    pc.baud(115200);   // for serial comm.
    counter1.reset();   // encoder reset
    out.write(i2u(0.0));
    button.fall(&pressed);          // attach key pressed function
    button.rise(&released);         // attach key pressed function
    pc.printf("Start controller now...\r\n");
    ControllerLoopTimer.attach(&updateLoop, Ts); //Assume Fs = ...;
    while(1);
}   // END OF main
//******************************************************************************
//---------- main loop (called via interrupt) -------------
//******************************************************************************
void updateLoop(void){
    float x = (float)(counter1)/1000.0f;  // get counts from Encoder
    float i_des = 0.0f;         // default: set motor current to zero (will be overwritten)
    if(controller_active)
        {   
        // here calculate controller's output
            }
    out.write(i2u(i_des));
    if(++k>1000)
    {
        pc.printf("x: %1.3f, i: %1.4f\r\n",x,i_des);
        k=0;
        }    
} // END OF updateLoop(void)
 
//******************************************************************************
 
 
// start timer as soon as Button is pressed
void pressed()
{
    t_but.start();
}
// Falling edge of button: enable/disable controller 
void released()
{
    // readout, stop and reset timer
    float ButtonTime = t_but.read();
    t_but.stop();
    t_but.reset();
    if(ButtonTime > 0.05f) 
    {   
        controller_active = !controller_active;
        if(controller_active)
            {
            pc.printf("Controller active\r\n");
            // reset controller here!!!        
            }
        else
            pc.printf("Controller disabled\r\n");
    }
}