change currentConsumed to 3 digits
This commit is contained in:
parent
7797090f30
commit
f33fe75d89
|
@ -64,6 +64,13 @@ float wheelcircumference=0.5278; //wheel diameter in m. 8.4cm radius -> 0.084m*2
|
||||||
float currentConsumed=0; //Ah
|
float currentConsumed=0; //Ah
|
||||||
|
|
||||||
|
|
||||||
|
//Driving parameters
|
||||||
|
int16_t minimum_constant_cmd_reduce=1; //reduce cmd every loop by this constant amount when freewheeling/braking
|
||||||
|
int16_t brake_cmdreduce_proportional=100; //cmd gets reduced by an amount proportional to brake position (ignores freewheeling). cmd_new-=brake_cmdreduce_proportional / second @ full brake. with BREAK_CMDREDUCE_CONSTANT=1000 car would stop with full brake at least after a second (ignoring influence of brake current control/freewheeling)
|
||||||
|
float startbrakecurrent=3; //Ampere. "targeted brake current @full brake". at what point to start apply brake proportional to brake_pos. for everything above that cmd is reduced by freewheel_break_factor
|
||||||
|
float startbrakecurrent_offset=0.1; //offset start point for breaking, because of reading fluctuations around 0A. set this slightly above idle current reading
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define PIN_START A9
|
#define PIN_START A9
|
||||||
#define PIN_LED_START 2 //Enginge start led
|
#define PIN_LED_START 2 //Enginge start led
|
||||||
|
@ -379,8 +386,8 @@ void writeLog(HardwareSerial &SerialRef, unsigned long time, MotorParameter &mpf
|
||||||
SerialRef.print(fbrear.speedL_meas); SerialRef.print(","); //invert speed, because left wheels are negated
|
SerialRef.print(fbrear.speedL_meas); SerialRef.print(","); //invert speed, because left wheels are negated
|
||||||
SerialRef.print(-fbrear.speedR_meas); SerialRef.print(",");
|
SerialRef.print(-fbrear.speedR_meas); SerialRef.print(",");
|
||||||
|
|
||||||
SerialRef.print(fbfront.boardTemp/10.0); SerialRef.print(","); //in degC
|
SerialRef.print(fbfront.boardTemp/10.0,1); SerialRef.print(","); //in degC
|
||||||
SerialRef.print(fbrear.boardTemp/10.0); SerialRef.print(","); //in degC
|
SerialRef.print(fbrear.boardTemp/10.0,1); SerialRef.print(","); //in degC
|
||||||
SerialRef.print(fbfront.batVoltage/100.0); SerialRef.print(","); //in V
|
SerialRef.print(fbfront.batVoltage/100.0); SerialRef.print(","); //in V
|
||||||
SerialRef.print(fbrear.batVoltage/100.0); SerialRef.print(","); //in V
|
SerialRef.print(fbrear.batVoltage/100.0); SerialRef.print(","); //in V
|
||||||
|
|
||||||
|
@ -389,7 +396,7 @@ void writeLog(HardwareSerial &SerialRef, unsigned long time, MotorParameter &mpf
|
||||||
SerialRef.print(brake); SerialRef.print(",");
|
SerialRef.print(brake); SerialRef.print(",");
|
||||||
SerialRef.print(meanSpeedms); SerialRef.print(","); // m/s
|
SerialRef.print(meanSpeedms); SerialRef.print(","); // m/s
|
||||||
SerialRef.print(trip); SerialRef.print(","); //in m
|
SerialRef.print(trip); SerialRef.print(","); //in m
|
||||||
SerialRef.print(currentConsumed); SerialRef.println(); //in Ah (Amphours)
|
SerialRef.print(currentConsumed,3); SerialRef.println(); //in Ah (Amphours)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -493,14 +500,18 @@ void failChecks() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendCMD() {
|
void sendCMD() {
|
||||||
#define MINIMUM_CONSTANT_CMD_REDUCE 1 //reduce cmd every loop by this constant amount when freewheeling/braking
|
/* ## FOR REFERENCE:
|
||||||
#define BREAK_CMDREDUCE_PROPORTIONAL 100 //cmd gets reduced by an amount proportional to brake position (ignores freewheeling). cmd_new-=BREAK_CMDREDUCE_PROPORTIONAL / second @ full brake. with BREAK_CMDREDUCE_CONSTANT=1000 car would stop with full brake at least after a second (ignoring influence of brake current control/freewheeling)
|
int16_t minimum_constant_cmd_reduce=1; //reduce cmd every loop by this constant amount when freewheeling/braking
|
||||||
int16_t cmdreduce_constant=map(brake_pos,0,1000,0,(int16_t)(BREAK_CMDREDUCE_PROPORTIONAL*SENDPERIOD/1000)); //reduce cmd value every cycle
|
int16_t brake_cmdreduce_proportional=100; //cmd gets reduced by an amount proportional to brake position (ignores freewheeling). cmd_new-=brake_cmdreduce_proportional / second @ full brake. with BREAK_CMDREDUCE_CONSTANT=1000 car would stop with full brake at least after a second (ignoring influence of brake current control/freewheeling)
|
||||||
#define STARTBREAKCURRENT 3 //Ampere. "targeted brake current @full brake". at what point to start apply brake proportional to brake_pos. for everything above that cmd is reduced by freewheel_break_factor
|
float startbrakecurrent=3; //Ampere. "targeted brake current @full brake". at what point to start apply brake proportional to brake_pos. for everything above that cmd is reduced by freewheel_break_factor
|
||||||
#define STARTBREAKCURRENT_OFFSET 0.1 //offset start point for breaking, because of reading fluctuations around 0A. set this slightly above idle current reading
|
float startbrakecurrent_offset=0.1; //offset start point for breaking, because of reading fluctuations around 0A. set this slightly above idle current reading
|
||||||
float brakepedal_current_multiplier=STARTBREAKCURRENT/1000.0; //how much breaking (in Ampere) for unit of brake_pos (0<=brake_pos<=1000)
|
*/
|
||||||
|
|
||||||
float freewheel_current=STARTBREAKCURRENT_OFFSET-brake_pos*brakepedal_current_multiplier; //above which driving current cmd send will be reduced more. increase value to decrease breaking. values <0 increases breaking above freewheeling
|
float brakepedal_current_multiplier=startbrakecurrent/1000.0; //how much breaking (in Ampere) for unit of brake_pos (0<=brake_pos<=1000)
|
||||||
|
|
||||||
|
int16_t cmdreduce_constant=map(brake_pos,0,1000,0,(int16_t)(brake_cmdreduce_proportional*SENDPERIOD/1000)); //reduce cmd value every cycle
|
||||||
|
|
||||||
|
float freewheel_current=startbrakecurrent_offset-brake_pos*brakepedal_current_multiplier; //above which driving current cmd send will be reduced more. increase value to decrease breaking. values <0 increases breaking above freewheeling
|
||||||
float freewheel_break_factor=500.0; //speed cmd units per amp per second. 1A over freewheel_current decreases cmd speed by this amount (on average)
|
float freewheel_break_factor=500.0; //speed cmd units per amp per second. 1A over freewheel_current decreases cmd speed by this amount (on average)
|
||||||
motorparamsFront.filtered_curL=filterMedian(motorparamsFront.curL_DC)/50.0; //in Amps
|
motorparamsFront.filtered_curL=filterMedian(motorparamsFront.curL_DC)/50.0; //in Amps
|
||||||
motorparamsFront.filtered_curR=filterMedian(motorparamsFront.curR_DC)/50.0; //in Amps
|
motorparamsFront.filtered_curR=filterMedian(motorparamsFront.curR_DC)/50.0; //in Amps
|
||||||
|
@ -518,7 +529,7 @@ void sendCMD() {
|
||||||
if (filtered_currentAll>freewheel_current) { //drive current too high
|
if (filtered_currentAll>freewheel_current) { //drive current too high
|
||||||
cmd_send-= max(0, (filtered_currentAll-freewheel_current)*freewheel_break_factor*(SENDPERIOD/1000.0)); //how much current over freewheel current, multiplied by factor. reduces cmd_send value
|
cmd_send-= max(0, (filtered_currentAll-freewheel_current)*freewheel_break_factor*(SENDPERIOD/1000.0)); //how much current over freewheel current, multiplied by factor. reduces cmd_send value
|
||||||
}
|
}
|
||||||
cmd_send-=max(MINIMUM_CONSTANT_CMD_REDUCE,cmdreduce_constant); //reduce slowly anyways
|
cmd_send-=max(minimum_constant_cmd_reduce,cmdreduce_constant); //reduce slowly anyways
|
||||||
cmd_send=constrain(cmd_send,0,1000);
|
cmd_send=constrain(cmd_send,0,1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue