Serial Wombat 18AB Firmware
outputScale.h
Go to the documentation of this file.
1 /*
2 Copyright 2021-2023 Broadwell Consulting Inc.
3 
4 Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10 
11 The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13 
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
17  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21 
22  Serial Wombat is a trademark of Broadwell Consulting Inc.
23 */
24 
25 #ifndef _OUTPUT_SCALE_
26 #define _OUTPUT_SCALE_
27 
28 #include <stdint.h>
29 #include "serialWombat.h"
30 
31 typedef enum
32 {
40 
41 typedef enum
42 {
47 
48 typedef struct outputScale_n
49 {
50  union{
51  int16_t transform_i16[7];
52  uint16_t transform_u16[7];
53  uint8_t transform_bytes[14];
54  struct{
55  uint16_t highLimit;
56  uint16_t lowLimit;
57  uint16_t outputHigh;
58  uint16_t outputLow;
59  uint16_t lastValue;
60  }hystersis;
61  struct{
62  int32_t integrator;
64  uint16_t kp;
65  uint16_t ki;
66  uint16_t kd;
67  }pid;
68 
69  struct{
70  int16_t increment;
71  uint16_t lastRampOutput;
72  int16_t slowIncrement;
74  }ramp;
75  };
76  uint16_t inputMin;
77  uint16_t inputMax;
78  uint16_t outputMin;
79  uint16_t outputMax;
80  uint16_t filterConstant;
81  uint16_t filterConstant2;
82  uint16_t currentOutput;
83  uint16_t commTimeout;
85  uint16_t commTimeoutValue;
86  uint16_t targetValue;
87  uint16_t lastValue;
88  uint8_t filterMode;
89  uint8_t transformMode;
90  uint8_t sourcePin;
91  uint8_t invert:1;
92  uint8_t active:1;
93  uint8_t sampleRate:4;
94 
96 
97 
98 void outputScaleInit(outputScale_t* outputScale);
99 
100 void outputScaleResetTimeout(outputScale_t* outputScale);
101 
102 uint16_t outputScaleProcess(outputScale_t* outputScale);
103 uint16_t outputScaleCommProcess(outputScale_t* outputScale);
104 
105 
106 #endif
outputScale_n::slowIncrementDifference
uint16_t slowIncrementDifference
Definition: outputScale.h:73
outputScale_n::filterMode
uint8_t filterMode
Definition: outputScale.h:88
outputScale_n::increment
int16_t increment
Definition: outputScale.h:70
OUTPUT_TRANSFORM_MODE_t
OUTPUT_TRANSFORM_MODE_t
Definition: outputScale.h:31
outputScale_n::outputLow
uint16_t outputLow
Definition: outputScale.h:58
OUTPUT_FILTER_MODE_NONE
@ OUTPUT_FILTER_MODE_NONE
Definition: outputScale.h:43
outputScale_n
Definition: outputScale.h:48
outputScale_n::highLimit
uint16_t highLimit
Definition: outputScale.h:55
outputScaleResetTimeout
void outputScaleResetTimeout(outputScale_t *outputScale)
Definition: outputScale.c:338
outputScale_n::kd
uint16_t kd
Definition: outputScale.h:66
OUTPUT_TRANSFORM_MODE_HYSTERESIS
@ OUTPUT_TRANSFORM_MODE_HYSTERESIS
Definition: outputScale.h:37
outputScale_n::inputMax
uint16_t inputMax
Definition: outputScale.h:77
outputScale_n::lastValue
uint16_t lastValue
Definition: outputScale.h:59
outputScale_n::transformMode
uint8_t transformMode
Definition: outputScale.h:89
outputScale_n::integrator
int32_t integrator
Definition: outputScale.h:62
outputScale_n::currentOutput
uint16_t currentOutput
Definition: outputScale.h:82
outputScale_n::sourcePin
uint8_t sourcePin
Definition: outputScale.h:90
outputScale_n::ki
uint16_t ki
Definition: outputScale.h:65
outputScale_n::targetValue
uint16_t targetValue
Definition: outputScale.h:86
outputScale_n::filterConstant
uint16_t filterConstant
Definition: outputScale.h:80
outputScale_n::outputHigh
uint16_t outputHigh
Definition: outputScale.h:57
outputScale_n::slowIncrement
int16_t slowIncrement
Definition: outputScale.h:72
OUTPUT_TRANSFORM_MODE_NONE
@ OUTPUT_TRANSFORM_MODE_NONE
Definition: outputScale.h:33
OUTPUT_FILTER_MODE_CHANGE_LIMIT
@ OUTPUT_FILTER_MODE_CHANGE_LIMIT
Definition: outputScale.h:44
outputScale_n::outputMax
uint16_t outputMax
Definition: outputScale.h:79
OUTPUT_FILTER_MODE_t
OUTPUT_FILTER_MODE_t
Definition: outputScale.h:41
outputScale_n::commTimeoutCounter
uint16_t commTimeoutCounter
Definition: outputScale.h:84
OUTPUT_TRANSFORM_MODE_PID_CONTROL
@ OUTPUT_TRANSFORM_MODE_PID_CONTROL
Definition: outputScale.h:36
outputScale_n::lastRampOutput
uint16_t lastRampOutput
Definition: outputScale.h:71
outputScale_n::hystersis
struct outputScale_n::@6::@8 hystersis
outputScale_n::invert
uint8_t invert
Definition: outputScale.h:91
OUTPUT_FILTER_MODE_FIRST_ORDER
@ OUTPUT_FILTER_MODE_FIRST_ORDER
Definition: outputScale.h:45
outputScale_n::pid
struct outputScale_n::@6::@9 pid
serialWombat.h
outputScale_n::lastProcessVariable
uint16_t lastProcessVariable
Definition: outputScale.h:63
outputScaleProcess
uint16_t outputScaleProcess(outputScale_t *outputScale)
Definition: outputScale.c:181
outputScale_n::transform_u16
uint16_t transform_u16[7]
Definition: outputScale.h:52
outputScale_n::kp
uint16_t kp
Definition: outputScale.h:64
outputScale_n::outputMin
uint16_t outputMin
Definition: outputScale.h:78
outputScale_n::commTimeoutValue
uint16_t commTimeoutValue
Definition: outputScale.h:85
outputScale_n::transform_i16
int16_t transform_i16[7]
Definition: outputScale.h:51
outputScale_n::transform_bytes
uint8_t transform_bytes[14]
Definition: outputScale.h:53
outputScale_n::lowLimit
uint16_t lowLimit
Definition: outputScale.h:56
outputScale_n::sampleRate
uint8_t sampleRate
Definition: outputScale.h:93
outputScale_n::filterConstant2
uint16_t filterConstant2
Definition: outputScale.h:81
outputScale_n::ramp
struct outputScale_n::@6::@10 ramp
OUTPUT_TRANSFORM_MODE_LINEAR
@ OUTPUT_TRANSFORM_MODE_LINEAR
Definition: outputScale.h:34
OUTPUT_TRANSFORM_MODE_RAMP
@ OUTPUT_TRANSFORM_MODE_RAMP
Definition: outputScale.h:38
outputScaleInit
void outputScaleInit(outputScale_t *outputScale)
Definition: outputScale.c:25
outputScale_n::active
uint8_t active
Definition: outputScale.h:92
outputScaleCommProcess
uint16_t outputScaleCommProcess(outputScale_t *outputScale)
Definition: outputScale.c:343
outputScale_n::commTimeout
uint16_t commTimeout
Definition: outputScale.h:83
OUTPUT_TRANSFORM_MODE_2D_LOOKUP
@ OUTPUT_TRANSFORM_MODE_2D_LOOKUP
Definition: outputScale.h:35
outputScale_n::inputMin
uint16_t inputMin
Definition: outputScale.h:76
outputScale_t
struct outputScale_n outputScale_t