Added Interlock

Fixed PID regulation functionality

git-svn-id: https://svn.vbchaos.nl/svn/hsb/trunk@250 05563f52-14a8-4384-a975-3d1654cca0fa
This commit is contained in:
mmi
2017-10-12 07:16:50 +00:00
parent 3df93a80d7
commit 54b6afe5a3
19 changed files with 504 additions and 261 deletions

View File

@@ -0,0 +1,114 @@
// -----------------------------------------------------------------------------
/// @file Interlock.c
/// @brief Description
// -----------------------------------------------------------------------------
// Micro-Key bv
// Industrieweg 28, 9804 TG Noordhorn
// Postbus 92, 9800 AB Zuidhorn
// The Netherlands
// Tel: +31 594 503020
// Fax: +31 594 505825
// Email: support@microkey.nl
// Web: www.microkey.nl
// -----------------------------------------------------------------------------
/// $Revision$
/// $Author$
/// $Date$
// (c) 2017 Micro-Key bv
// -----------------------------------------------------------------------------
/// @file Interlock.c
/// @ingroup {group_name}
// -----------------------------------------------------------------------------
// Include files
// -----------------------------------------------------------------------------
#include "Interlock.h"
// -----------------------------------------------------------------------------
// Constant and macro definitions
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Type definitions
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// File-scope variables
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Function declarations
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Function definitions
// -----------------------------------------------------------------------------
ErrorStatus Interlock_construct(struct Interlock* self, struct Gpio* NO, EXTI_InitTypeDef NOEXTI, struct Gpio* NC, EXTI_InitTypeDef NCEXTI)
{
ErrorStatus returnValue = SUCCESS;
if (!self->initialized)
{
self->NO.io = NO;
self->NO.ioEXTI = NOEXTI;
self->NC.io = NC;
self->NC.ioEXTI = NCEXTI;
self->initialized = true;
}
else
{
returnValue = ERROR;
}
return returnValue;
}
void Interlock_getStatus(struct Interlock* self, FunctionalState* command, int* NO, int* NC)
{
*command = self->NO.ioEXTI.EXTI_LineCmd;
IODevice_read((struct IODevice*)self->NO.io, (char*)NO, 1, NULL);
IODevice_read((struct IODevice*)self->NC.io, (char*)NC, 1, NULL);
}
bool Interlock_isClosed(struct Interlock* self)
{
bool returnValue;
char no;
char nc;
IODevice_read((struct IODevice*)self->NO.io, &no, 1, NULL);
IODevice_read((struct IODevice*)self->NC.io, &nc, 1, NULL);
if ((no != 0) && (nc == 0))
{
returnValue = true;
}
else
{
returnValue = false;
}
return returnValue;
}
void Interlock_setEXTI(struct Interlock* self, FunctionalState command)
{
self->NO.ioEXTI.EXTI_LineCmd = command;
EXTI_Init(&self->NO.ioEXTI);
self->NC.ioEXTI.EXTI_LineCmd = command;
EXTI_Init(&self->NC.ioEXTI);
}

View File

@@ -89,20 +89,18 @@ ErrorStatus PID_construct(struct Pid* self, int Kp, int Ki, int Kd, int iMin, in
}
int PID_calculate(struct Pid* self, int input, int error)
int PID_calculate(struct Pid* self, int error)
{
int returnValue = 0;
int dTerm;
int pTerm;
input *= PID_FIXED_POINT_FACTOR;
error *= PID_FIXED_POINT_FACTOR;
if (self->initialized)
{
// Calculate integral
self->iTerm += (self->Ki * error);
// Control integrator
if (self->iTerm > self->iMax)
{
@@ -114,14 +112,14 @@ int PID_calculate(struct Pid* self, int input, int error)
}
// Calculate differential
dTerm = (input - self->input_d1) * self->Kd;
dTerm = ((error - self->input_d1) * self->Kd);
// Calculate proportional
pTerm = self->Kp * error;
pTerm = (self->Kp * error);
LOGGER_WARNING(mainLog, "pTerm %d, Kp %d, error %d", pTerm, self->Kp, error);
returnValue = (self->iTerm + dTerm + pTerm) / PID_FIXED_POINT_FACTOR;
self->input_d1 = input;
self->input_d1 = error;
}
else
{

View File

@@ -69,7 +69,6 @@ static int nhd0420_cursorRowOffset[NHD0420_NUMBER_OF_ROWS] =
static ErrorStatus setState(const struct DisplayDevice* self, DisplayDevice_functionalState state);
static ErrorStatus write(const struct DisplayDevice* self, const char* buffer, size_t length, size_t row, size_t column);
static ErrorStatus clear(const struct DisplayDevice* self);
static ErrorStatus clearLine(const struct DisplayDevice* self, size_t row);
static ErrorStatus setBrightness(const struct DisplayDevice* self, size_t brightness);
static ErrorStatus setContrast(const struct DisplayDevice* self, size_t contrast);
@@ -95,7 +94,7 @@ ErrorStatus NHD0420_construct(struct NHD0420* self, const struct IODevice* devic
ddParameters.brightnessMax = NHD0420_BRIGHTNESS_MAX;
ddParameters.contrastMin = NHD0420_CONTRAST_MIN;
ddParameters.contrastMax = NHD0420_CONTRAST_MAX;
DisplayDevice_construct(&self->displayDevice, &ddParameters, NULL, setState, write, clear, clearLine, setBrightness, setContrast, NULL);
DisplayDevice_construct(&self->displayDevice, &ddParameters, NULL, setState, write, clear, NULL, setBrightness, setContrast, NULL);
self->initialized = true;
NHD0420_sendData(self, "Hallo", 5);
@@ -422,37 +421,6 @@ static ErrorStatus clear(const struct DisplayDevice* self)
}
static ErrorStatus clearLine(const struct DisplayDevice* self, size_t row)
{
ErrorStatus returnValue = SUCCESS;
if (self->initialized)
{
// Set cursor on display
returnValue = NHD0420_setCursorToPosition((const struct NHD0420*)self, row, 1);
char buffer[self->parameters.numberOfColumns];
int loopcounter;
for (loopcounter = 0; loopcounter < self->parameters.numberOfColumns; loopcounter++)
{
buffer[loopcounter] = 0x20;
}
if (returnValue == SUCCESS)
{
returnValue = NHD0420_sendData((const struct NHD0420*)self, buffer, self->parameters.numberOfColumns);
}
}
else
{
returnValue = ERROR;
}
return returnValue;
}
static ErrorStatus setBrightness(const struct DisplayDevice* self, size_t brightness)
{
if (self->initialized)