Simple Battery measurement
This commit is contained in:
parent
4e7aeee1d9
commit
7db32ebe18
2
Makefile
2
Makefile
@ -641,6 +641,7 @@ OBJECTS += ./mbed-os/targets/TARGET_STM/trng_api.o
|
|||||||
OBJECTS += ./mbed-os/targets/TARGET_STM/us_ticker.o
|
OBJECTS += ./mbed-os/targets/TARGET_STM/us_ticker.o
|
||||||
|
|
||||||
OBJECTS += ./src/control/lpf.o
|
OBJECTS += ./src/control/lpf.o
|
||||||
|
OBJECTS += ./src/drivers/Battery.o
|
||||||
OBJECTS += ./src/drivers/MPU6000.o
|
OBJECTS += ./src/drivers/MPU6000.o
|
||||||
OBJECTS += ./src/drivers/MS5611.o
|
OBJECTS += ./src/drivers/MS5611.o
|
||||||
OBJECTS += ./src/drivers/stepper.o
|
OBJECTS += ./src/drivers/stepper.o
|
||||||
@ -652,7 +653,6 @@ OBJECTS += ./src/math/Utilities.o
|
|||||||
OBJECTS += ./src/serialization/RCProtocol.o
|
OBJECTS += ./src/serialization/RCProtocol.o
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
INCLUDE_PATHS += -I../
|
INCLUDE_PATHS += -I../
|
||||||
INCLUDE_PATHS += -I../.
|
INCLUDE_PATHS += -I../.
|
||||||
INCLUDE_PATHS += -I.././.
|
INCLUDE_PATHS += -I.././.
|
||||||
|
13
main.cpp
13
main.cpp
@ -11,6 +11,7 @@
|
|||||||
// Mmath
|
// Mmath
|
||||||
#include "src/math/Utilities.h"
|
#include "src/math/Utilities.h"
|
||||||
// Drivers
|
// Drivers
|
||||||
|
#include "src/drivers/Battery.h"
|
||||||
#include "src/drivers/MPU6000.h"
|
#include "src/drivers/MPU6000.h"
|
||||||
#include "src/drivers/stepper.h"
|
#include "src/drivers/stepper.h"
|
||||||
#include "src/drivers/servo.h"
|
#include "src/drivers/servo.h"
|
||||||
@ -53,6 +54,8 @@ Stepper motorR(PB_15, PB_14, PC_6);
|
|||||||
|
|
||||||
Servo servo(PA_0);
|
Servo servo(PA_0);
|
||||||
|
|
||||||
|
Lipo lipo(PC_1, 13.5242, 3);
|
||||||
|
|
||||||
// Interrupt pin from Gyro to MCU
|
// Interrupt pin from Gyro to MCU
|
||||||
InterruptIn gyroISR(PC_4);
|
InterruptIn gyroISR(PC_4);
|
||||||
// Madwick filter
|
// Madwick filter
|
||||||
@ -190,7 +193,7 @@ void runControl()
|
|||||||
motorL.setSpeed(controlOutput - steering);
|
motorL.setSpeed(controlOutput - steering);
|
||||||
motorR.setSpeed(controlOutput + steering);
|
motorR.setSpeed(controlOutput + steering);
|
||||||
|
|
||||||
// Blink LED at 1hz
|
// Blink LED at 1hz if active, 4hz otherwise
|
||||||
static int i = 0;
|
static int i = 0;
|
||||||
if (++i > (disabled ? 25 : 100))
|
if (++i > (disabled ? 25 : 100))
|
||||||
{
|
{
|
||||||
@ -221,7 +224,7 @@ void serialWrite()
|
|||||||
packetOut.BatteryLevel = 123;
|
packetOut.BatteryLevel = 123;
|
||||||
packetOut.Mode = 213;
|
packetOut.Mode = 213;
|
||||||
RC.setOutput(packetOut);
|
RC.setOutput(packetOut);
|
||||||
bool done;
|
bool done(false);
|
||||||
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
@ -233,6 +236,12 @@ void serialWrite()
|
|||||||
// writing a packet we sleep
|
// writing a packet we sleep
|
||||||
if (done)
|
if (done)
|
||||||
{
|
{
|
||||||
|
float voltage = lipo.getVoltage();
|
||||||
|
float charge = lipo.getCharge();
|
||||||
|
Lipo::State state = lipo.getState();
|
||||||
|
|
||||||
|
packetOut.BatteryLevel = charge*100;
|
||||||
|
RC.setOutput(packetOut);
|
||||||
Thread::wait(500);
|
Thread::wait(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
56
src/drivers/Battery.cpp
Normal file
56
src/drivers/Battery.cpp
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#include "src/drivers/Battery.h"
|
||||||
|
#include "src/math/Utilities.h"
|
||||||
|
|
||||||
|
using namespace math;
|
||||||
|
|
||||||
|
Lipo::Lipo(AnalogIn pin, float scale, int cells)
|
||||||
|
: m_pin(pin)
|
||||||
|
, m_scale(scale)
|
||||||
|
, m_cells(cells)
|
||||||
|
, m_state(Lipo::Full)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
float Lipo::getCharge()
|
||||||
|
{
|
||||||
|
float voltage = constrain(getCellVoltage(), 3.3f, 4.2f);
|
||||||
|
|
||||||
|
static float range = 4.2f - 3.3f;
|
||||||
|
|
||||||
|
return (voltage - 3.3f)/range;
|
||||||
|
}
|
||||||
|
|
||||||
|
float Lipo::getVoltage()
|
||||||
|
{
|
||||||
|
return m_pin.read()*m_scale;
|
||||||
|
}
|
||||||
|
|
||||||
|
Lipo::State Lipo::getState()
|
||||||
|
{
|
||||||
|
float cells = getCellVoltage();
|
||||||
|
|
||||||
|
if (cells < 3.3f)
|
||||||
|
{
|
||||||
|
return Lipo::Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cells < 3.5f)
|
||||||
|
{
|
||||||
|
return Lipo::Low;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cells < 4.1)
|
||||||
|
{
|
||||||
|
return Lipo::Okej;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Full;
|
||||||
|
}
|
||||||
|
|
||||||
|
float Lipo::getCellVoltage()
|
||||||
|
{
|
||||||
|
return getVoltage()/m_cells;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
34
src/drivers/Battery.h
Normal file
34
src/drivers/Battery.h
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#include "mbed.h"
|
||||||
|
|
||||||
|
class Lipo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Lipo(AnalogIn pin, float scale, int cells = 3);
|
||||||
|
|
||||||
|
//! Returns the charge in [0-1]
|
||||||
|
//! On a lipo the range is 3.3 - 4.2V
|
||||||
|
float getCharge();
|
||||||
|
|
||||||
|
float getVoltage();
|
||||||
|
|
||||||
|
enum State {
|
||||||
|
Full,
|
||||||
|
Okej,
|
||||||
|
Low,
|
||||||
|
Empty,
|
||||||
|
};
|
||||||
|
|
||||||
|
State getState();
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
float getCellVoltage();
|
||||||
|
|
||||||
|
AnalogIn m_pin;
|
||||||
|
|
||||||
|
float m_scale;
|
||||||
|
|
||||||
|
int m_cells;
|
||||||
|
|
||||||
|
State m_state;
|
||||||
|
};
|
@ -16,5 +16,18 @@ float constrain(float value, float range)
|
|||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
float constrain(float value, float min, float max)
|
||||||
|
{
|
||||||
|
if (value < min)
|
||||||
|
{
|
||||||
|
return min;
|
||||||
|
}
|
||||||
|
if (value > max)
|
||||||
|
{
|
||||||
|
return max;
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -7,4 +7,6 @@ namespace math {
|
|||||||
|
|
||||||
float constrain(float value, float range);
|
float constrain(float value, float range);
|
||||||
|
|
||||||
|
float constrain(float value, float min, float max);
|
||||||
|
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user