Open FFBoard
Open source force feedback firmware
Loading...
Searching...
No Matches
voltagesense.cpp
Go to the documentation of this file.
1
/*
2
* voltagesense.cpp
3
*
4
* Created on: Feb 1, 2020
5
* Author: Yannick
6
*/
7
8
#include "
global_callbacks.h
"
9
#include "
constants.h
"
10
#include "
voltagesense.h
"
11
#include "
ErrorHandler.h
"
12
#include "
AdcHandler.h
"
13
#include "
FastAvg.h
"
14
15
bool
braking_flag
=
false
;
16
int32_t
maxVoltage
= 65000;
// Force braking
17
int32_t
voltageDiffActivate
= 5000;
18
int32_t
voltageDiffDeactivate
= 4000;
19
float
vSenseMult
= VOLTAGE_MULT_DEFAULT;
20
bool
brake_failure
=
false
;
21
int32_t
minVoltage
= 6500;
22
23
uint32_t
brakeActiveTime
= 0;
24
const
Error
resError
=
Error
(
ErrorCode::brakeResistorFailure
,
ErrorType::critical
,
"Brake resistor stuck on"
);
25
26
/*
27
* Multiplier to convert ADC counts to a sensed voltage on the vInt and vExt pins.
28
*/
29
void
setVSenseMult
(
float
vSenseMultiplier){
30
vSenseMult
= vSenseMultiplier;
31
}
32
33
/*
34
* vMax: maximum voltage where the brake pin goes always high
35
* vdiffAct: difference between vInt and vExt to activate brake pin
36
* vdiffDeact: difference when to deactivate brake pin again (must be lower than vdiffAct)
37
* Set vMax = 0 to completely deactivate the brake resistor function. DANGEROUS
38
*
39
*/
40
void
setupBrakePin
(int32_t vdiffAct,int32_t vdiffDeact,int32_t vMax){
41
maxVoltage
= vMax;
42
voltageDiffActivate
= vdiffAct;
43
voltageDiffDeactivate
= vdiffDeact;
44
}
45
46
float
adcValToVoltage
(uint32_t adcval){
47
if
(ADC_INTREF_VOL == 0){
48
return
0;
// Divbyzero
49
}
50
return
__LL_ADC_CALC_DATA_TO_VOLTAGE(ADC_INTREF_VOL,adcval,VSENSE_ADC_RES);
51
}
52
53
int32_t
getIntV
(){
54
return
adcValToVoltage
(VSENSE_ADC_BUF[ADC_CHAN_VINT]) *
vSenseMult
;
55
56
}
57
58
int32_t
getExtV
(){
59
return
adcValToVoltage
(VSENSE_ADC_BUF[ADC_CHAN_VEXT]) *
vSenseMult
;
60
}
61
62
void
brakeCheck
(){
63
if
(
maxVoltage
== 0 ||
brake_failure
){
64
return
;
65
}
66
int32_t
vint
=
getIntV
();
67
int32_t
vext
=
getExtV
();
68
69
if
(
vint
<
minVoltage
&&
vext
<
minVoltage
){
70
return
;
// Do not enable if device is unpowered (just measuring usb leakage)
71
}
72
73
bool
lastBrakingFlag =
braking_flag
;
74
braking_flag
= (
vint
>
vext
+
voltageDiffActivate
) ||
vint
>
maxVoltage
|| (
braking_flag
&& (
vint
>
vext
+
voltageDiffDeactivate
));
75
//(ADC_BUF[ADC_CHAN_VINT] > ADC_BUF[ADC_CHAN_VEXT]+400 || (ADC_BUF[ADC_CHAN_VINT] > 3000));
76
if
(
braking_flag
!= lastBrakingFlag){
77
if
(
braking_flag
){
78
brakeActiveTime
= HAL_GetTick();
79
}
else
{
80
brakeActiveTime
= 0;
81
}
82
}
83
if
(
brakeActiveTime
&& HAL_GetTick() -
brakeActiveTime
> 5000){
84
// Brake resistor active over 5s. Shut down.
85
brake_failure
=
true
;
86
HAL_GPIO_WritePin(DRV_BRAKE_GPIO_Port,DRV_BRAKE_Pin, GPIO_PIN_RESET);
87
// can not create error here in ISR
88
//ErrorHandler::addError(resError);
89
}
else
{
90
HAL_GPIO_WritePin(DRV_BRAKE_GPIO_Port,DRV_BRAKE_Pin,
braking_flag
? GPIO_PIN_SET:GPIO_PIN_RESET);
91
}
92
93
}
94
95
FastMovingAverage<int32_t>
chipTempAvg
{3};
96
__weak int32_t
getChipTemp
(){
97
#if !defined(TEMPSENSOR_ADC_VAL) || !defined(__LL_ADC_CALC_TEMPERATURE)
98
return
0;
99
#else
100
if
(!TEMPSENSOR_ADC_VAL || !ADC_INTREF_VOL){
101
return
0;
// divby0 risk
102
}
103
return
chipTempAvg
.addValue(__LL_ADC_CALC_TEMPERATURE(ADC_INTREF_VOL,TEMPSENSOR_ADC_VAL,TEMPSENSOR_ADC_RES));
104
#endif
105
106
}
AdcHandler.h
ErrorHandler.h
ErrorType::critical
@ critical
Definition
ErrorHandler.h:57
ErrorCode::brakeResistorFailure
@ brakeResistorFailure
Definition
ErrorHandler.h:28
FastAvg.h
FFBoardMain_commands::vint
@ vint
Definition
SystemCommands.h:14
FFBoardMain_commands::vext
@ vext
Definition
SystemCommands.h:14
Error
Definition
ErrorHandler.h:60
FastMovingAverage
Definition
FastAvg.h:63
constants.h
global_callbacks.h
brakeCheck
void brakeCheck()
Definition
voltagesense.cpp:62
resError
const Error resError
Definition
voltagesense.cpp:24
getIntV
int32_t getIntV()
Definition
voltagesense.cpp:53
chipTempAvg
FastMovingAverage< int32_t > chipTempAvg
Definition
voltagesense.cpp:95
adcValToVoltage
float adcValToVoltage(uint32_t adcval)
Definition
voltagesense.cpp:46
getChipTemp
__weak int32_t getChipTemp()
Definition
voltagesense.cpp:96
getExtV
int32_t getExtV()
Definition
voltagesense.cpp:58
braking_flag
bool braking_flag
Definition
voltagesense.cpp:15
setVSenseMult
void setVSenseMult(float vSenseMultiplier)
Definition
voltagesense.cpp:29
brake_failure
bool brake_failure
Definition
voltagesense.cpp:20
setupBrakePin
void setupBrakePin(int32_t vdiffAct, int32_t vdiffDeact, int32_t vMax)
Definition
voltagesense.cpp:40
vSenseMult
float vSenseMult
Definition
voltagesense.cpp:19
maxVoltage
int32_t maxVoltage
Definition
voltagesense.cpp:16
brakeActiveTime
uint32_t brakeActiveTime
Definition
voltagesense.cpp:23
minVoltage
int32_t minVoltage
Definition
voltagesense.cpp:21
voltageDiffDeactivate
int32_t voltageDiffDeactivate
Definition
voltagesense.cpp:18
voltageDiffActivate
int32_t voltageDiffActivate
Definition
voltagesense.cpp:17
voltagesense.h
Firmware
FFBoard
Src
voltagesense.cpp
Generated by
1.13.2