From b90b84d94c6ce287c71a0bb50ff9262647b95263 Mon Sep 17 00:00:00 2001 From: isakg22 Date: Wed, 14 Oct 2026 16:02:44 +0000 Subject: [PATCH] =?UTF-8?q?B=C3=A6tti=20vi=C3=B0=20interrupt=20(pin=20D2)?= =?UTF-8?q?=20til=20a=C3=B0=20sko=C3=B0a=20encoder=20lestur,=20umb=20fyrir?= =?UTF-8?q?=20Part=201=20=C3=AD=20verkefni?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/motor_controller.h | 2 +- include/operational_state.h | 2 +- src/rotary_encoder_driver.cpp | 24 +++++++++++++++++++----- zephyr/boards/nucleo_l432kc.overlay | 11 ++++++++++- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/include/motor_controller.h b/include/motor_controller.h index 4923ec9..4115db4 100644 --- a/include/motor_controller.h +++ b/include/motor_controller.h @@ -14,7 +14,7 @@ class State; class MotorController { private: - static constexpr double DEFAULT_REFERENCE_RPM = 40.0; + static constexpr double DEFAULT_REFERENCE_RPM = -40.0; static constexpr double PWM_PER_PERCENT = 255.0 / 100.0; //static const uint8_t LED_PIN = 5; // PB5 = D13 = LED_BUILTIN static constexpr uint8_t LED_PIN = Digital_out::STATUS_LED; diff --git a/include/operational_state.h b/include/operational_state.h index e56bde2..f213ce9 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 1 +#define LOG_CSV 0 #endif diff --git a/src/rotary_encoder_driver.cpp b/src/rotary_encoder_driver.cpp index b7b75d0..002fc5c 100644 --- a/src/rotary_encoder_driver.cpp +++ b/src/rotary_encoder_driver.cpp @@ -3,6 +3,13 @@ #include #include #include +#include +#include + +//#define ISR_PROBE_NODE DT_PATH(zephyr_user) + +static const struct gpio_dt_spec isr_probe = + GPIO_DT_SPEC_GET(DT_ALIAS(encoder_isr_probe), gpios); static const struct gpio_dt_spec encoder_c1 = GPIO_DT_SPEC_GET(DT_ALIAS(encoder_c1), gpios); @@ -24,11 +31,17 @@ RotaryEncoderDriver::RotaryEncoderDriver() int RotaryEncoderDriver::begin() { if (!gpio_is_ready_dt(&encoder_c1) || - !gpio_is_ready_dt(&encoder_c2)) { + !gpio_is_ready_dt(&encoder_c2) || + !gpio_is_ready_dt(&isr_probe)) { return -ENODEV; } - int ret = gpio_pin_configure_dt(&encoder_c1, GPIO_INPUT); + int ret = gpio_pin_configure_dt(&isr_probe, GPIO_OUTPUT_INACTIVE); + if (ret < 0) { + return ret; + } + + ret = gpio_pin_configure_dt(&encoder_c1, GPIO_INPUT); if (ret < 0) { return ret; } @@ -48,7 +61,6 @@ int RotaryEncoderDriver::begin() return ret; } - // C1 is active high, so “to active” means a rising edge. ret = gpio_pin_interrupt_configure_dt( &encoder_c1, GPIO_INT_EDGE_TO_ACTIVE); @@ -58,8 +70,8 @@ int RotaryEncoderDriver::begin() timer.set_callback(timer_expired, this); timer.init(SAMPLE_PERIOD_US); - reset_speed_measurement(); + return 0; } @@ -76,7 +88,9 @@ void RotaryEncoderDriver::gpio_edge_handler( encoder_c1_callback); if ((pins & BIT(encoder_c1.pin)) != 0U) { - encoder->update(); + encoder->update(); // Reads C2 and updates the count + gpio_pin_set_dt(&isr_probe, 1); // Marker rising edge + gpio_pin_set_dt(&isr_probe, 0); // Reset for the next interrupt } } diff --git a/zephyr/boards/nucleo_l432kc.overlay b/zephyr/boards/nucleo_l432kc.overlay index bac38e6..cca7b88 100644 --- a/zephyr/boards/nucleo_l432kc.overlay +++ b/zephyr/boards/nucleo_l432kc.overlay @@ -11,6 +11,7 @@ motor-flt = &motor_flt; motor-slp = &motor_slp; fault-test-button = &fault_test_button; + encoder-isr-probe = &encoder_isr_probe; }; buttons { @@ -36,7 +37,7 @@ label = "Fault test button"; }; }; - + motor_gpio_outputs { compatible = "gpio-leds"; @@ -49,6 +50,11 @@ gpios = <&gpioa 1 GPIO_ACTIVE_HIGH>; /* A1, PA1 */ label = "Motor sleep"; }; + + encoder_isr_probe: encoder_isr_probe { + gpios = <&gpioa 12 GPIO_ACTIVE_HIGH>; /* D2, PA12 */ + label = "Encoder ISR probe"; + }; }; motor_pwm_outputs { @@ -59,6 +65,9 @@ label = "Motor BIN1 PWM"; }; }; + zephyr,user { + encoder-isr-probe-gpios = <&gpioa 12 GPIO_ACTIVE_HIGH>; /* D2, PA12 */ + }; }; &timers1 {