diff --git a/include/operational_state.h b/include/operational_state.h index f213ce9..e56bde2 100644 --- a/include/operational_state.h +++ b/include/operational_state.h @@ -7,7 +7,7 @@ // Sett á 1 til að prenta CSV (time_ms,ref_rpm,actual_rpm,pwm) í Operational, // t.d. fyrir step og load response. Einnig hægt með build_flags = -D LOG_CSV=1 #ifndef LOG_CSV -#define LOG_CSV 0 +#define LOG_CSV 1 #endif diff --git a/src/motor_driver.cpp b/src/motor_driver.cpp index 5d3fd50..bc990ff 100644 --- a/src/motor_driver.cpp +++ b/src/motor_driver.cpp @@ -45,6 +45,9 @@ static const struct gpio_dt_spec bin2 = static const struct gpio_dt_spec motor_flt = GPIO_DT_SPEC_GET(DT_ALIAS(motor_flt), gpios); +static const struct gpio_dt_spec fault_test_button = + GPIO_DT_SPEC_GET(DT_ALIAS(fault_test_button), gpios); + static const struct gpio_dt_spec motor_slp = GPIO_DT_SPEC_GET(DT_ALIAS(motor_slp), gpios); @@ -87,12 +90,14 @@ void MotorDriver::begin() if (!pwm_is_ready_dt(&bin1_pwm) || !gpio_is_ready_dt(&bin2) || !gpio_is_ready_dt(&motor_flt) || + !gpio_is_ready_dt(&fault_test_button) || !gpio_is_ready_dt(&motor_slp)) { return; } if (gpio_pin_configure_dt(&bin2, GPIO_OUTPUT_INACTIVE) < 0 || gpio_pin_configure_dt(&motor_flt, GPIO_INPUT) < 0 || + gpio_pin_configure_dt(&fault_test_button, GPIO_INPUT) < 0 || gpio_pin_configure_dt(&motor_slp, GPIO_OUTPUT_INACTIVE) < 0) { return; } @@ -206,16 +211,33 @@ void MotorDriver::set(double pwm) } +// bool MotorDriver::fault_active() +// { +// //return !(PIND & (1 << PIND4)); + +// if (!initialized) { +// return true; // Fail safe if the driver did not initialize. +// } + +// // The overlay marks FLT as active low. gpio_pin_get_dt() returns +// // the logical active state, so 1 means a fault is active. +// const int fault = gpio_pin_get_dt(&motor_flt); +// return fault < 0 || fault != 0; +// } + bool MotorDriver::fault_active() { - //return !(PIND & (1 << PIND4)); - if (!initialized) { return true; // Fail safe if the driver did not initialize. } - // The overlay marks FLT as active low. gpio_pin_get_dt() returns - // the logical active state, so 1 means a fault is active. - const int fault = gpio_pin_get_dt(&motor_flt); - return fault < 0 || fault != 0; -} + const int driver_fault = gpio_pin_get_dt(&motor_flt); + const int button_fault = gpio_pin_get_dt(&fault_test_button); + + // Negative values indicate a GPIO read error, so treat them as a fault. + // With GPIO_ACTIVE_LOW, a pressed button reads as logical 1. + return driver_fault < 0 || + button_fault < 0 || + driver_fault != 0 || + button_fault != 0; +} \ No newline at end of file diff --git a/zephyr/boards/nucleo_l432kc.overlay b/zephyr/boards/nucleo_l432kc.overlay index 5d27c9f..bac38e6 100644 --- a/zephyr/boards/nucleo_l432kc.overlay +++ b/zephyr/boards/nucleo_l432kc.overlay @@ -10,6 +10,7 @@ motor-bin2 = &motor_bin2; motor-flt = &motor_flt; motor-slp = &motor_slp; + fault-test-button = &fault_test_button; }; buttons { @@ -29,8 +30,13 @@ gpios = <&gpioa 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* A0, PA0 */ label = "Motor fault"; }; + + fault_test_button: fault_test_button { + gpios = <&gpiob 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* D3, PB0 */ + label = "Fault test button"; + }; }; - + motor_gpio_outputs { compatible = "gpio-leds";