over current protection
This commit is contained in:
parent
2609f4c558
commit
b43e507daa
@ -1,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<project>
|
|
||||||
<configuration id="it.baeyens.arduino.core.toolChain.release.1518476005" name="Release">
|
|
||||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
|
||||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
|
||||||
<provider class="it.baeyens.arduino.toolchain.ArduinoLanguageProvider" console="false" id="it.baeyens.arduino.languageSettingsProvider" keep-relative-paths="false" name="Arduino Compiler Settings" parameter="${COMMAND} -E -P -v -dD ${INPUTS}" prefer-non-shared="true">
|
|
||||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
|
||||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
|
||||||
</provider>
|
|
||||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
|
||||||
</extension>
|
|
||||||
</configuration>
|
|
||||||
</project>
|
|
@ -268,7 +268,7 @@ environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.
|
|||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.BOARD_NAME/value=Arduino Micro
|
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.BOARD_NAME/value=Arduino Micro
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/delimiter=\:
|
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/delimiter=\:
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/operation=replace
|
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/operation=replace
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/value=/dev/tty.usbmodemfd111
|
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.COM_PORT/value=/dev/tty.usbmodemfd1111
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/delimiter=\:
|
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/delimiter=\:
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/operation=replace
|
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/operation=replace
|
||||||
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/value=
|
environment/project/it.baeyens.arduino.core.toolChain.release.1518476005/JANTJE.EXTRA.C.COMPILE/value=
|
||||||
|
@ -7,28 +7,28 @@
|
|||||||
// #include "test.h"
|
// #include "test.h"
|
||||||
#include "uptime.h"
|
#include "uptime.h"
|
||||||
#include "meterBusMaster.h"
|
#include "meterBusMaster.h"
|
||||||
|
#include "overCurrentProt.h"
|
||||||
|
|
||||||
|
|
||||||
static CmdServer cmdServer(&Serial);
|
static CmdServer cmdServer(&Serial);
|
||||||
// static TestCmd testCmd;
|
// static TestCmd testCmd;
|
||||||
static Uptime uptime;
|
static Uptime uptime;
|
||||||
static MeterBusMaster meterBusMaster;
|
static MeterBusMaster meterBusMaster;
|
||||||
|
static OverCurrentProt overCurrentProt;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
cmdServer.begin();
|
cmdServer.begin();
|
||||||
// testCmd.registerYourself(&cmdServer);
|
// testCmd.registerYourself(&cmdServer);
|
||||||
|
overCurrentProt.begin(&cmdServer);
|
||||||
uptime.begin(&cmdServer);
|
uptime.begin(&cmdServer);
|
||||||
meterBusMaster.begin(&cmdServer);
|
meterBusMaster.begin(&cmdServer);
|
||||||
|
|
||||||
|
|
||||||
Serial.println("Good afternoon, Sir!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
void loop() {
|
||||||
cmdServer.exec();
|
cmdServer.exec();
|
||||||
|
overCurrentProt.exec();
|
||||||
uptime.exec();
|
uptime.exec();
|
||||||
meterBusMaster.exec();
|
meterBusMaster.exec();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -40,9 +40,9 @@ uint16_t stringToUInt8(String i, uint8_t index) {
|
|||||||
String MeasureCurrent::exec(String params) {
|
String MeasureCurrent::exec(String params) {
|
||||||
int currentInVal = analogRead(CURRENT_IN);
|
int currentInVal = analogRead(CURRENT_IN);
|
||||||
|
|
||||||
int current = currentInVal;
|
int current = ((double)currentInVal * U_UNIT) / R_SHUNT;
|
||||||
|
|
||||||
return String() + current;
|
return String() + current + String("mA");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,6 +14,8 @@ const uint8_t RX_ENABLE = LOW;
|
|||||||
const uint8_t RX_DISABLE = HIGH;
|
const uint8_t RX_DISABLE = HIGH;
|
||||||
|
|
||||||
const uint8_t CURRENT_IN = A0;
|
const uint8_t CURRENT_IN = A0;
|
||||||
|
const double U_UNIT = 4.9; // mV
|
||||||
|
const double R_SHUNT = 11.0;
|
||||||
|
|
||||||
|
|
||||||
class SendOctets : public Cmd, public ResponseCallback {
|
class SendOctets : public Cmd, public ResponseCallback {
|
||||||
|
66
overCurrentProt.cpp
Normal file
66
overCurrentProt.cpp
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
#include <arduino.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "overCurrentProt.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
volatile bool overCurrentMarker;
|
||||||
|
|
||||||
|
void overCurrentProtServiceRoutine() {
|
||||||
|
// switch off current
|
||||||
|
digitalWrite(CURRENT_SHUTDOWN, CURRENT_OFF);
|
||||||
|
|
||||||
|
// set marker
|
||||||
|
overCurrentMarker = true;
|
||||||
|
|
||||||
|
Serial.println("X");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OverCurrentProtCmd::OverCurrentProtCmd(OverCurrentProt *overCurrentProt) : m_overCurrentProt(overCurrentProt) {
|
||||||
|
}
|
||||||
|
|
||||||
|
String OverCurrentProtCmd::exec(String params) {
|
||||||
|
return String("") + m_overCurrentProt->getEventCnt();
|
||||||
|
}
|
||||||
|
|
||||||
|
OverCurrentResetCmd::OverCurrentResetCmd(OverCurrentProt *overCurrentProt) : m_overCurrentProt(overCurrentProt) {
|
||||||
|
}
|
||||||
|
|
||||||
|
String OverCurrentResetCmd::exec(String params) {
|
||||||
|
m_overCurrentProt->resetEventCnt();
|
||||||
|
return "done";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
OverCurrentProt::OverCurrentProt() : m_overCurrentProtCmd(this), m_overCurrentResetCmd(this), m_eventCnt(0), m_timestamp(0) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void OverCurrentProt::begin(CmdServer *cmdServer) {
|
||||||
|
m_overCurrentProtCmd.registerYourself(cmdServer);
|
||||||
|
m_overCurrentResetCmd.registerYourself(cmdServer);
|
||||||
|
pinMode(CURRENT_SHUTDOWN, OUTPUT);
|
||||||
|
digitalWrite(CURRENT_SHUTDOWN, CURRENT_ON);
|
||||||
|
overCurrentMarker = false;
|
||||||
|
attachInterrupt(CURRENT_INTERRUPT, overCurrentProtServiceRoutine, RISING);
|
||||||
|
Serial.println("OC ready");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void OverCurrentProt::exec() {
|
||||||
|
if ((m_timestamp == 0) && overCurrentMarker) {
|
||||||
|
m_eventCnt++;
|
||||||
|
m_timestamp = millis();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((m_timestamp != 0) && ((m_timestamp + TURN_ON_DELAY) < millis())) {
|
||||||
|
overCurrentMarker = false;
|
||||||
|
m_timestamp = 0;
|
||||||
|
digitalWrite(CURRENT_SHUTDOWN, CURRENT_ON);
|
||||||
|
}
|
||||||
|
}
|
56
overCurrentProt.h
Normal file
56
overCurrentProt.h
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
#ifndef OVERCURRENTPROT_H_
|
||||||
|
#define OVERCURRENTPROT_H_
|
||||||
|
|
||||||
|
|
||||||
|
#include "cmd.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define CURRENT_SHUTDOWN 5
|
||||||
|
#define CURRENT_ON 0
|
||||||
|
#define CURRENT_OFF 1
|
||||||
|
#define CURRENT_INTERRUPT 0
|
||||||
|
|
||||||
|
const unsigned long TURN_ON_DELAY = 10000; // ms
|
||||||
|
|
||||||
|
|
||||||
|
class OverCurrentProt;
|
||||||
|
|
||||||
|
class OverCurrentProtCmd : public Cmd {
|
||||||
|
public:
|
||||||
|
OverCurrentProtCmd(OverCurrentProt *overCurrentProt);
|
||||||
|
virtual String getCmdName() { return "OCPC"; }
|
||||||
|
virtual String getHelp() { return "OCP cnt"; }
|
||||||
|
virtual String exec(String params);
|
||||||
|
private:
|
||||||
|
OverCurrentProt *m_overCurrentProt;
|
||||||
|
};
|
||||||
|
|
||||||
|
class OverCurrentResetCmd : public Cmd {
|
||||||
|
public:
|
||||||
|
OverCurrentResetCmd(OverCurrentProt *overCurrentProt);
|
||||||
|
virtual String getCmdName() { return "OCRST"; }
|
||||||
|
virtual String getHelp() { return "OCP rst"; }
|
||||||
|
virtual String exec(String params);
|
||||||
|
private:
|
||||||
|
OverCurrentProt *m_overCurrentProt;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class OverCurrentProt {
|
||||||
|
public:
|
||||||
|
OverCurrentProt();
|
||||||
|
void begin(CmdServer *cmdServer);
|
||||||
|
void exec();
|
||||||
|
uint32_t getEventCnt() { return m_eventCnt; };
|
||||||
|
void resetEventCnt() { m_eventCnt = 0; };
|
||||||
|
private:
|
||||||
|
OverCurrentProtCmd m_overCurrentProtCmd;
|
||||||
|
OverCurrentResetCmd m_overCurrentResetCmd;
|
||||||
|
uint32_t m_eventCnt;
|
||||||
|
unsigned long m_timestamp;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* OVERCURRENTPROT_H_ */
|
Loading…
x
Reference in New Issue
Block a user