added first draft of overvoltage protection by using dump load
This commit is contained in:
parent
b56710f04b
commit
c9bc24d8a7
|
@ -2,12 +2,14 @@
|
|||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="9fad4545-a424-4a82-86dc-76602cf3eef3" name="Default" comment="">
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/powerboard/src/main.c" afterPath="$PROJECT_DIR$/powerboard/src/main.c" />
|
||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
|
||||
</list>
|
||||
<ignored path="bikegenerator.iws" />
|
||||
<ignored path=".idea/workspace.xml" />
|
||||
<file path="/Makefile" changelist="9fad4545-a424-4a82-86dc-76602cf3eef3" time="1370979337668" ignored="false" />
|
||||
<file path="/Dummy.txt" changelist="9fad4545-a424-4a82-86dc-76602cf3eef3" time="1370989840314" ignored="false" />
|
||||
<file path="/main.c" changelist="9fad4545-a424-4a82-86dc-76602cf3eef3" time="1370991964646" ignored="false" />
|
||||
<option name="TRACKING_ENABLED" value="true" />
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
|
@ -80,7 +82,7 @@
|
|||
<file leaf-file-name="main.c" pinned="false" current="true" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/main.c">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="14" column="53" selection-start="265" selection-end="265" vertical-scroll-proportion="-1.0426009">
|
||||
<state line="122" column="12" selection-start="2842" selection-end="2842" vertical-scroll-proportion="1.8497758">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
|
@ -519,7 +521,7 @@
|
|||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/powerboard/src/main.c">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="14" column="53" selection-start="265" selection-end="265" vertical-scroll-proportion="-1.0426009">
|
||||
<state line="122" column="12" selection-start="2842" selection-end="2842" vertical-scroll-proportion="1.8497758">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
|
|
|
@ -22,10 +22,15 @@
|
|||
#define DUMP_ON PORT_SW |= _BV(DUMPSW)
|
||||
#define DUMP_OFF PORT_SW &= ~_BV(DUMPSW)
|
||||
|
||||
typedef enum {
|
||||
generated,
|
||||
consumed
|
||||
} power_source;
|
||||
#define OVERVOLTAGE1 144
|
||||
#define OVERVOLTAGE2 150
|
||||
#define OVERVOLTAGE_TIMEOUT1 20
|
||||
#define OVERVOLTAGE_TIMEOUT2 20
|
||||
|
||||
#define CURRENT_OFFSET 511
|
||||
#define CURRENT_PER_TICK 72
|
||||
#define TICKS_PER_VOLTAGE 6.6
|
||||
|
||||
|
||||
|
||||
volatile uint16_t syscounter = 0;
|
||||
|
@ -33,6 +38,10 @@ uint16_t voltage = 0;
|
|||
int16_t current_in = 0;
|
||||
int16_t current_out = 0;
|
||||
|
||||
uint16_t overvoltage_counter = 0;
|
||||
uint16_t overvoltage_off_counter = 0;
|
||||
|
||||
|
||||
void timer_init(void) {
|
||||
// clock is 8MHz
|
||||
TCCR1B |= _BV(WGM12) | _BV(CS11) | _BV(CS10) ; // CTC Mode for Timer 1 (16Bit) with prescale of 64
|
||||
|
@ -47,15 +56,15 @@ void ports_init(void) {
|
|||
}
|
||||
|
||||
void measure(void) {
|
||||
voltage = adc_read_avg(AD_V, 4) / 6.6;
|
||||
voltage = adc_read_avg(AD_V, 4) / TICKS_PER_VOLTAGE;
|
||||
|
||||
current_in = adc_read_avg(AD_I_GEN, 4);
|
||||
current_in -= 510;
|
||||
current_in *= 72;
|
||||
current_in -= VOLTAGE_OFFSET;
|
||||
current_in *= CURRENT_PER_TICK;
|
||||
|
||||
current_out = adc_read_avg(AD_I_LOAD, 4);
|
||||
current_out -= 511;
|
||||
current_out *= 72;
|
||||
current_out -= VOLTAGE_OFFSET;
|
||||
current_out *= CURRENT_PER_TICK;
|
||||
}
|
||||
|
||||
uint8_t get_power(uint16_t voltage, int16_t currents) {
|
||||
|
@ -79,41 +88,55 @@ int main(void) {
|
|||
|
||||
while(1) {
|
||||
|
||||
measure();
|
||||
if((syscounter % 100) == 0) {
|
||||
|
||||
uart_puts_P("Voltage: ");
|
||||
uart_puts ( itoa ( voltage, s, 10 ) );
|
||||
uart_puts_P("dV\r\n");
|
||||
measure();
|
||||
|
||||
uart_puts_P("Load: ");
|
||||
uart_puts ( itoa ( current_out, s, 10 ) );
|
||||
uart_puts_P("mA ");
|
||||
uart_puts_P("Voltage: ");
|
||||
uart_puts ( itoa ( voltage, s, 10 ) );
|
||||
uart_puts_P("dV\r\n");
|
||||
|
||||
uart_puts ( itoa ( get_power(voltage, current_out), s, 10 ) );
|
||||
uart_puts_P("W\r\n");
|
||||
uart_puts_P("Load: ");
|
||||
uart_puts ( itoa ( current_out, s, 10 ) );
|
||||
uart_puts_P("mA ");
|
||||
|
||||
uart_puts ( itoa ( get_power(voltage, current_out), s, 10 ) );
|
||||
uart_puts_P("W\r\n");
|
||||
|
||||
|
||||
uart_puts_P("Generator: ");
|
||||
uart_puts ( itoa ( current_in, s, 10 ) );
|
||||
uart_puts_P("mA ");
|
||||
uart_puts_P("Generator: ");
|
||||
uart_puts ( itoa ( current_in, s, 10 ) );
|
||||
uart_puts_P("mA ");
|
||||
|
||||
uart_puts ( itoa ( get_power(voltage, current_in), s, 10 ) );
|
||||
uart_puts_P("W\r\n");
|
||||
uart_puts ( itoa ( get_power(voltage, current_in), s, 10 ) );
|
||||
uart_puts_P("W\r\n");
|
||||
|
||||
|
||||
if(voltage > OVERVOLTAGE1) {
|
||||
overvoltage_off_counter = 0;
|
||||
overvoltage_counter++;
|
||||
} else {
|
||||
overvoltage_counter = 0;
|
||||
overvoltage_off_counter++;
|
||||
}
|
||||
|
||||
uart_puts_P("overvoltage_counter=");
|
||||
uart_puts ( itoa ( overvoltage_counter, s, 10 ) );
|
||||
uart_puts_P(" overvoltage_off_counter=");
|
||||
uart_puts ( itoa ( overvoltage_off_counter , s, 10 ) );
|
||||
|
||||
if(overvoltage_counter >= OVERVOLTAGE_TIMEOUT1) {
|
||||
overvoltage_off_counter = 0;
|
||||
DUMP_ON;
|
||||
}
|
||||
|
||||
if(overvoltage_off_counter >= OVERVOLTAGE_TIMEOUT1/2) {
|
||||
overvoltage_counter = 0;
|
||||
DUMP_OFF;
|
||||
}
|
||||
|
||||
|
||||
|
||||
wait(100);
|
||||
wait(100);
|
||||
wait(100);
|
||||
wait(100);
|
||||
//wait(100);
|
||||
//wait(100);
|
||||
wait(100);
|
||||
wait(100);
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return(0);
|
||||
|
@ -122,6 +145,7 @@ int main(void) {
|
|||
// system timer
|
||||
SIGNAL(TIMER1_COMPA_vect) {
|
||||
syscounter++;
|
||||
syscounter %= 60000;
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue