From 5ff379399155f33ef53d310a9ed1084e2e1f9d10 Mon Sep 17 00:00:00 2001 From: Eggert Jung Date: Mon, 4 Apr 2022 15:21:34 +0200 Subject: [PATCH] make force setpoint adjustable --- avrIOhelper/io-helper.h | 2 ++ main.c | 9 ++++++--- taenzer.c | 29 +++++++++++++++++++++++++---- taenzer.h | 2 +- 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/avrIOhelper/io-helper.h b/avrIOhelper/io-helper.h index 693b102..a684bce 100644 --- a/avrIOhelper/io-helper.h +++ b/avrIOhelper/io-helper.h @@ -148,6 +148,8 @@ void ioHelperEdgeDetector(void); #define BTN_SPULENWECHSEL BitPinK0 #define BTN_INIT BitPinF4 +#define BTN_KRAFT_PLUS BitPinD7 +#define BTN_KRAFT_MINUS BitPinG2 #define IN_TAENZER_HOME BitPinF0 #define IN_SPULE_HOME BitPinF1 diff --git a/main.c b/main.c index 04d400b..c47e3de 100644 --- a/main.c +++ b/main.c @@ -72,7 +72,7 @@ static void avr_init() } void send_info(void){ - char msg[6]; + char msg[10]; sprintf(msg, "%d", abzug_speed); mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/abzug/speed", msg, strlen(msg)); @@ -86,11 +86,14 @@ void send_info(void){ ltoa(kraftsensor_value, msg, 10); else msg[0] = '0'; - mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/kraft", msg, strlen(msg)); + mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/taenzer/pv_kraft", msg, strlen(msg)); int8_t temp = taenzer_state.pos / 10000; ltoa(temp, msg, 10); - mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/speicher/pos", msg, strlen(msg)); + mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/taenzer/pos", msg, strlen(msg)); + + itoa(taenzer_state.force_setpoint, msg, 10); + mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/taenzer/sp_kraft", msg, strlen(msg)); sprintf(msg, "%ld", millis()/1000); mqtt_pub(&mqtt_client, "/Filamentanlage/05_Abzug/state/uptime", msg, strlen(msg)); diff --git a/taenzer.c b/taenzer.c index b03419a..a404f12 100644 --- a/taenzer.c +++ b/taenzer.c @@ -6,11 +6,19 @@ #include +#define TAENZER_KRAFT_SETPOINT 12000 +#define TAENZER_KRAFT_HYST 1000 + + taenzer_state_t taenzer_state; -#define TAENZER_KRAFT_SETPOINT 12000 -#define TAENZER_KRAFT_HYST 2000 +taenzer_state_t taenzer_state = { + .homed = 0, + .pos = 0, + .force_setpoint = TAENZER_KRAFT_SETPOINT, +}; +void send_info(void); void do_taenzer(){ /* Homing */ @@ -24,9 +32,22 @@ void do_taenzer(){ taenzer_state.pos = 0; } + if (read_Input(BTN_KRAFT_PLUS, RISING)) { + taenzer_state.force_setpoint += 1000; +#if PLC_MQTT_ENABLED + send_info(); +#endif + } + if (read_Input(BTN_KRAFT_MINUS, RISING)) { + taenzer_state.force_setpoint -= 1000; +#if PLC_MQTT_ENABLED + send_info(); +#endif + } + /* Force regualtion */ - if(kraftsensor_valid && taenzer_state.homed){ - int16_t err = abs(kraftsensor_value - TAENZER_KRAFT_SETPOINT); + if(kraftsensor_valid && taenzer_state.homed && taenzer_state.pos >= 0 && taenzer_state.pos < 500000){ + int16_t err = (kraftsensor_value - taenzer_state.force_setpoint); if(err > 8000) err=8000; diff --git a/taenzer.h b/taenzer.h index 4e23e6f..599d536 100644 --- a/taenzer.h +++ b/taenzer.h @@ -6,8 +6,8 @@ typedef volatile struct { uint8_t homed; uint32_t pos; + int16_t force_setpoint; } taenzer_state_t; - extern taenzer_state_t taenzer_state; void do_taenzer(void);