Skip to content
Snippets Groups Projects
Commit 5e18f2b0 authored by fxk8y's avatar fxk8y :spider:
Browse files

Add debug stuff

parent bc2274c2
No related branches found
No related tags found
Loading
......@@ -16,6 +16,7 @@
// qthing stuff
#include <qthing>
//#include <qthing/mqtt_common.hpp>
#include "SiliconTorch/CyanBus.hpp"
// misc
......@@ -25,6 +26,7 @@
using nlohmann::json;
using SpiderLib::Time;
static const char* TAG = "SpiderFurnace";
......@@ -97,61 +99,89 @@ namespace SiliconTorch {
// Set-up PID controller
pidTask = new SpiderLib::Util::LambdaTask([&](){
if (CFG_EN_PIDTask) {
pidTask = new SpiderLib::Util::LambdaTask([&](){
TickType_t lastWakeTime = xTaskGetTickCount();
tc0age = Time::ms();
f32 error = 0.0f;
f32 sum_error = 0.0f;
f32 diff_error = 0.0f;
f32 last_error = 0.0f;
while (true) {
faultReg.value = tc0->readU8(MAX31856::SR::addr);
if (!hasFault()) {
f32 t = tc0->getTemperature();
TickType_t lastWakeTime = xTaskGetTickCount();
tc0age = Time::ms();
f32 deltaT = abs(t - temperature());
//if (deltaT < 0) deltaT *= -1.0f;
f32 error = 0.0f;
f32 sum_error = 0.0f;
f32 diff_error = 0.0f;
f32 last_error = 0.0f;
f32 tc0age_ = (Time::ms() - tc0age) / 1000.0f; // change to seconds
if (deltaT > tc0age_ * MaxTempChangePerSecond) { // temp changed too fast!
faultReg.OPEN = true; // mimic fault!
} else {
tc0dat->insert(t);
tc0age = Time::ms();
}
}
f32 t = temperature();
while (true) {
if (!hasFault() && t <= MAX_TEMP) {
faultReg.value = tc0->readU8(MAX31856::SR::addr);
error = targetTemperature - t;
sum_error += error; // TODO: "I festhalten"
diff_error = last_error - error;
last_error = error;
if (!hasFault()) {
f32 t = tc0->getTemperature();
f32 out = kP * error;
out += kI * sum_error;
out += kD * diff_error;
f32 deltaT = abs(t - temperature());
//if (deltaT < 0) deltaT *= -1.0f;
// if (out > MAX_PWM)
// TODO: "I festhalten" ??
f32 tc0age_ = (Time::ms() - tc0age) / 1000.0f; // change to seconds
if (deltaT > tc0age_ * MaxTempChangePerSecond) { // temp changed too fast!
faultReg.OPEN = true; // mimic fault!
setPWM(out);
} else {
tc0dat->insert(t);
tc0age = Time::ms();
setPWM(0.0f);
}
ESP_LOGI(TAG, "T: %.2f °C Fault: %s _i: %.2f PWM: %.2f", t, hasFault() ? "true" : "false", sum_error, pwmVal);
vTaskDelayUntil(&lastWakeTime, 1000 / TICK_FREQ / portTICK_PERIOD_MS);
}
});
f32 t = temperature();
} else {
if (!hasFault() && t <= MAX_TEMP) {
qthing::add_message_callback(deviceTopic(TAG, "setPWM"), [&](const str& message) {
setPWM(std::strtof(message.c_str(), NULL));
});
error = targetTemperature - t;
sum_error += error; // TODO: "I festhalten"
diff_error = last_error - error;
last_error = error;
}
f32 out = kP * error;
out += kI * sum_error;
out += kD * diff_error;
// if (out > MAX_PWM)
// TODO: "I festhalten" ??
if (CFG_EN_MQTT_PIDvals) {
setPWM(out);
} else {
setPWM(0.0f);
}
qthing::add_message_callback(deviceTopic(TAG, "kP"), [&](const str& message) {
kP = std::strtof(message.c_str(), NULL);
});
qthing::add_message_callback(deviceTopic(TAG, "kI"), [&](const str& message) {
kI = std::strtof(message.c_str(), NULL);
});
qthing::add_message_callback(deviceTopic(TAG, "kD"), [&](const str& message) {
kD = std::strtof(message.c_str(), NULL);
});
ESP_LOGI(TAG, "T: %.2f °C Fault: %s _i: %.2f PWM: %.2f", t, hasFault() ? "true" : "false", sum_error, pwmVal);
}
vTaskDelayUntil(&lastWakeTime, 1000 / TICK_FREQ / portTICK_PERIOD_MS);
}
});
}
void SpiderFurnace::setTargetTemperature(f32 t) {
......
......@@ -45,15 +45,23 @@ namespace SiliconTorch {
constexpr u8 IO_HEATER = 25;
enum FurnaceState {
RUNNING,
PAUSED,
STOPPED
};
// enum FurnaceState {
// RUNNING,
// PAUSED,
// STOPPED
// };
// TODO: ???
// Compile-time config
constexpr bool CFG_EN_PIDTask = false; // !!
constexpr bool CFG_EN_MQTT_PIDvals = true;
class SpiderFurnace : public ServiceManager::Service {
class SpiderFurnace : public ServiceManager::Service, public SpiderLib::HasMQTT {
public:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment