mirror of
https://github.com/lucysrausch/hoverboard-firmware-hack.git
synced 2025-07-29 23:27:15 +02:00
fixed serial debug output, backward beep and low bat beeps work now together, low bat beeps can now be disabled, added inactivity timeout
This commit is contained in:
12
Src/bldc.c
12
Src/bldc.c
@ -165,18 +165,6 @@ void DMA1_Channel1_IRQHandler() {
|
||||
batteryVoltage = batteryVoltage * 0.999 + ((float)adc_buffer.batt1 * ((float)BAT_CALIB_REAL_VOLTAGE / (float)BAT_CALIB_ADC)) * 0.001;
|
||||
}
|
||||
|
||||
|
||||
#ifdef BEEPS_BACKWARD
|
||||
if (speed < -50 && enable == 1) {
|
||||
buzzerFreq = 5;
|
||||
buzzerPattern = 1;
|
||||
} else if (enable == 1) {
|
||||
buzzerFreq = 0;
|
||||
buzzerPattern = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//disable PWM when current limit is reached (current chopping)
|
||||
if(ABS((adc_buffer.dcl - offsetdcl) * MOTOR_AMP_CONV_DC_AMP) > DC_CUR_LIMIT || timeout > TIMEOUT || enable == 0) {
|
||||
LEFT_TIM->BDTR &= ~TIM_BDTR_MOE;
|
||||
|
@ -25,7 +25,7 @@ void setScopeChannel(uint8_t ch, int16_t val) {
|
||||
}
|
||||
|
||||
void consoleScope() {
|
||||
#ifdef DEBUG_SERIAL_SERVOTERM
|
||||
#if defined DEBUG_SERIAL_SERVOTERM && defined DEBUG_SERIAL_USART3
|
||||
uart_buf[0] = 0xff;
|
||||
uart_buf[1] = CLAMP(ch_buf[0]+127, 0, 255);
|
||||
uart_buf[2] = CLAMP(ch_buf[1]+127, 0, 255);
|
||||
@ -45,7 +45,7 @@ void consoleScope() {
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_SERIAL_ASCII
|
||||
#if defined DEBUG_SERIAL_ASCII && defined DEBUG_SERIAL_USART3
|
||||
memset(uart_buf, 0, sizeof(uart_buf));
|
||||
sprintf(uart_buf, "1:%i 2:%i 3:%i 4:%i 5:%i 6:%i 7:%i 8:%i\r\n", ch_buf[0], ch_buf[1], ch_buf[2], ch_buf[3], ch_buf[4], ch_buf[5], ch_buf[6], ch_buf[7]);
|
||||
|
||||
|
57
Src/main.c
57
Src/main.c
@ -67,6 +67,8 @@ extern uint8_t enable; // global variable for motor enable
|
||||
extern volatile uint32_t timeout; // global variable for timeout
|
||||
extern float batteryVoltage; // global variable for battery voltage
|
||||
|
||||
uint32_t inactivity_timeout_counter;
|
||||
|
||||
extern uint8_t nunchuck_data[6];
|
||||
#ifdef CONTROL_PPM
|
||||
extern volatile uint16_t ppm_captured_value[PPM_NUM_CHANNELS+1];
|
||||
@ -162,7 +164,7 @@ int main(void) {
|
||||
enable = 1; // enable motors
|
||||
|
||||
while(1) {
|
||||
HAL_Delay(5);
|
||||
HAL_Delay(DELAY_IN_MAIN_LOOP); //delay in ms
|
||||
|
||||
#ifdef CONTROL_NUNCHUCK
|
||||
Nunchuck_Read();
|
||||
@ -211,17 +213,19 @@ int main(void) {
|
||||
|
||||
|
||||
// ####### DEBUG SERIAL OUT #######
|
||||
#ifdef CONTROL_ADC
|
||||
setScopeChannel(0, (int)adc_buffer.l_tx2); // 1: ADC1
|
||||
setScopeChannel(1, (int)adc_buffer.l_rx2); // 2: ADC2
|
||||
#endif
|
||||
setScopeChannel(2, (int)speedR); // 3:
|
||||
setScopeChannel(3, (int)speedL); // 4:
|
||||
setScopeChannel(4, (int)adc_buffer.batt1); // 5: for battery voltage calibration
|
||||
setScopeChannel(5, (int)(batteryVoltage * 100.0f)); // 6: for verifying battery voltage calibration
|
||||
// setScopeChannel(6, (int)); // 7:
|
||||
// setScopeChannel(7, (int)); // 8:
|
||||
consoleScope();
|
||||
if (inactivity_timeout_counter % 10 == 0) {
|
||||
#ifdef CONTROL_ADC
|
||||
setScopeChannel(0, (int)adc_buffer.l_tx2); // 1: ADC1
|
||||
setScopeChannel(1, (int)adc_buffer.l_rx2); // 2: ADC2
|
||||
#endif
|
||||
setScopeChannel(2, (int)speedR); // 3:
|
||||
setScopeChannel(3, (int)speedL); // 4:
|
||||
setScopeChannel(4, (int)adc_buffer.batt1); // 5: for battery voltage calibration
|
||||
setScopeChannel(5, (int)(batteryVoltage * 100.0f)); // 6: for verifying battery voltage calibration
|
||||
// setScopeChannel(6, (int)); // 7:
|
||||
// setScopeChannel(7, (int)); // 8:
|
||||
consoleScope();
|
||||
}
|
||||
|
||||
|
||||
#ifdef ADDITIONAL_CODE
|
||||
@ -263,13 +267,16 @@ int main(void) {
|
||||
|
||||
|
||||
// ####### BATTERY VOLTAGE #######
|
||||
if (batteryVoltage < ((float)BAT_LOW_LVL1 * (float)BAT_NUMBER_OF_CELLS) && batteryVoltage > ((float)BAT_LOW_LVL2 * (float)BAT_NUMBER_OF_CELLS)) {
|
||||
if (BEEPS_BACKWARD && speed < -50) { // backward beep
|
||||
buzzerFreq = 5;
|
||||
buzzerPattern = 1;
|
||||
} else if (batteryVoltage < ((float)BAT_LOW_LVL1 * (float)BAT_NUMBER_OF_CELLS) && batteryVoltage > ((float)BAT_LOW_LVL2 * (float)BAT_NUMBER_OF_CELLS) && BAT_LOW_LVL1_ENABLE) { // low bat 1: slow beep
|
||||
buzzerFreq = 5;
|
||||
buzzerPattern = 42;
|
||||
} else if (batteryVoltage < ((float)BAT_LOW_LVL2 * (float)BAT_NUMBER_OF_CELLS) && batteryVoltage > ((float)BAT_LOW_DEAD * (float)BAT_NUMBER_OF_CELLS)) {
|
||||
} else if (batteryVoltage < ((float)BAT_LOW_LVL2 * (float)BAT_NUMBER_OF_CELLS) && batteryVoltage > ((float)BAT_LOW_DEAD * (float)BAT_NUMBER_OF_CELLS) && BAT_LOW_LVL2_ENABLE) { // low bat 2: fast beep
|
||||
buzzerFreq = 5;
|
||||
buzzerPattern = 6;
|
||||
} else if (batteryVoltage < ((float)BAT_LOW_DEAD * (float)BAT_NUMBER_OF_CELLS)) {
|
||||
} else if (batteryVoltage < ((float)BAT_LOW_DEAD * (float)BAT_NUMBER_OF_CELLS) && abs(speed) < 20) { // low bat 3: power off
|
||||
buzzerPattern = 0;
|
||||
enable = 0;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
@ -278,10 +285,28 @@ int main(void) {
|
||||
}
|
||||
HAL_GPIO_WritePin(OFF_PORT, OFF_PIN, 0);
|
||||
while(1) {}
|
||||
} else {
|
||||
} else { // do not beep
|
||||
buzzerFreq = 0;
|
||||
buzzerPattern = 0;
|
||||
}
|
||||
|
||||
|
||||
// ####### INACTIVITY TIMEOUT #######
|
||||
if (abs(speedL) > 50 || abs(speedR) > 50) {
|
||||
inactivity_timeout_counter = 0;
|
||||
} else {
|
||||
inactivity_timeout_counter ++;
|
||||
}
|
||||
if (inactivity_timeout_counter > (INACTIVITY_TIMEOUT * 60 * 1000) / (DELAY_IN_MAIN_LOOP + 1)) { // rest of main loop needs maybe 1ms
|
||||
buzzerPattern = 0;
|
||||
enable = 0;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
buzzerFreq = i;
|
||||
HAL_Delay(100);
|
||||
}
|
||||
HAL_GPIO_WritePin(OFF_PORT, OFF_PIN, 0);
|
||||
while(1) {}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user