mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Temperature code updates (#1814)
* Create a typedef for temperatures * Quick parse replace temp types * Fixup for fast/slow PWM on PinecilV2 * Update PIDThread.cpp * Pinecil small tips need less smoothing * Remove incorrect comment * Remove unused function * Update PinecilV2 Tune as well
This commit is contained in:
@@ -8,6 +8,7 @@
|
||||
#include "TipThermoModel.h"
|
||||
#include "BSP.h"
|
||||
#include "Settings.h"
|
||||
#include "Types.h"
|
||||
#include "Utils.h"
|
||||
#include "configuration.h"
|
||||
#include "main.hpp"
|
||||
@@ -54,45 +55,41 @@ uint32_t TipThermoModel::convertTipRawADCTouV(uint16_t rawADC, bool ski
|
||||
return valueuV;
|
||||
}
|
||||
|
||||
uint32_t TipThermoModel::convertTipRawADCToDegC(uint16_t rawADC) { return convertuVToDegC(convertTipRawADCTouV(rawADC)); }
|
||||
uint32_t TipThermoModel::convertTipRawADCToDegF(uint16_t rawADC) { return convertuVToDegF(convertTipRawADCTouV(rawADC)); }
|
||||
TemperatureType_t TipThermoModel::convertTipRawADCToDegC(uint16_t rawADC) { return convertuVToDegC(convertTipRawADCTouV(rawADC)); }
|
||||
TemperatureType_t TipThermoModel::convertTipRawADCToDegF(uint16_t rawADC) { return convertuVToDegF(convertTipRawADCTouV(rawADC)); }
|
||||
|
||||
uint32_t TipThermoModel::convertuVToDegF(uint32_t tipuVDelta) { return convertCtoF(convertuVToDegC(tipuVDelta)); }
|
||||
TemperatureType_t TipThermoModel::convertuVToDegF(uint32_t tipuVDelta) { return convertCtoF(convertuVToDegC(tipuVDelta)); }
|
||||
|
||||
uint32_t TipThermoModel::convertCtoF(uint32_t degC) {
|
||||
TemperatureType_t TipThermoModel::convertCtoF(TemperatureType_t degC) {
|
||||
//(Y °C × 9/5) + 32 =Y°F
|
||||
return (32 + ((degC * 9) / 5));
|
||||
}
|
||||
|
||||
uint32_t TipThermoModel::convertFtoC(uint32_t degF) {
|
||||
TemperatureType_t TipThermoModel::convertFtoC(TemperatureType_t degF) {
|
||||
//(Y°F − 32) × 5/9 = Y°C
|
||||
if (degF < 32) {
|
||||
return 0;
|
||||
}
|
||||
return ((degF - 32) * 5) / 9;
|
||||
}
|
||||
uint32_t TipThermoModel::getTipInC(bool sampleNow) {
|
||||
int32_t currentTipTempInC = TipThermoModel::convertTipRawADCToDegC(getTipRawTemp(sampleNow));
|
||||
TemperatureType_t TipThermoModel::getTipInC(bool sampleNow) {
|
||||
TemperatureType_t currentTipTempInC = TipThermoModel::convertTipRawADCToDegC(getTipRawTemp(sampleNow));
|
||||
currentTipTempInC += getHandleTemperature(sampleNow) / 10; // Add handle offset
|
||||
|
||||
// Power usage indicates that our tip temp is lower than our thermocouple temp.
|
||||
// I found a number that doesn't unbalance the existing PID, causing overshoot.
|
||||
// This could be tuned in concert with PID parameters...
|
||||
|
||||
if (currentTipTempInC < 0) {
|
||||
return 0;
|
||||
}
|
||||
return currentTipTempInC;
|
||||
}
|
||||
|
||||
uint32_t TipThermoModel::getTipInF(bool sampleNow) {
|
||||
uint32_t currentTipTempInF = getTipInC(sampleNow);
|
||||
currentTipTempInF = convertCtoF(currentTipTempInF);
|
||||
TemperatureType_t TipThermoModel::getTipInF(bool sampleNow) {
|
||||
TemperatureType_t currentTipTempInF = getTipInC(sampleNow);
|
||||
currentTipTempInF = convertCtoF(currentTipTempInF);
|
||||
return currentTipTempInF;
|
||||
}
|
||||
|
||||
uint32_t TipThermoModel::getTipMaxInC() {
|
||||
uint32_t maximumTipTemp = TipThermoModel::convertTipRawADCToDegC(ADC_MAX_READING - 1);
|
||||
TemperatureType_t TipThermoModel::getTipMaxInC() {
|
||||
TemperatureType_t maximumTipTemp = TipThermoModel::convertTipRawADCToDegC(ADC_MAX_READING - 1);
|
||||
maximumTipTemp += getHandleTemperature(0) / 10; // Add handle offset
|
||||
return maximumTipTemp - 1;
|
||||
}
|
||||
|
||||
@@ -8,26 +8,27 @@
|
||||
#ifndef SRC_TIPTHERMOMODEL_H_
|
||||
#define SRC_TIPTHERMOMODEL_H_
|
||||
#include "BSP.h"
|
||||
#include "Types.h"
|
||||
#include "stdint.h"
|
||||
class TipThermoModel {
|
||||
public:
|
||||
// These are the main two functions
|
||||
static uint32_t getTipInC(bool sampleNow = false);
|
||||
static uint32_t getTipInF(bool sampleNow = false);
|
||||
static TemperatureType_t getTipInC(bool sampleNow = false);
|
||||
static TemperatureType_t getTipInF(bool sampleNow = false);
|
||||
|
||||
// Calculates the maximum temperature can can be read by the ADC range
|
||||
static uint32_t getTipMaxInC();
|
||||
static TemperatureType_t getTipMaxInC();
|
||||
|
||||
static uint32_t convertTipRawADCToDegC(uint16_t rawADC);
|
||||
static uint32_t convertTipRawADCToDegF(uint16_t rawADC);
|
||||
static TemperatureType_t convertTipRawADCToDegC(uint16_t rawADC);
|
||||
static TemperatureType_t convertTipRawADCToDegF(uint16_t rawADC);
|
||||
// Returns the uV of the tip reading before the op-amp compensating for pullups
|
||||
static uint32_t convertTipRawADCTouV(uint16_t rawADC, bool skipCalOffset = false);
|
||||
static uint32_t convertCtoF(uint32_t degC);
|
||||
static uint32_t convertFtoC(uint32_t degF);
|
||||
static uint32_t convertTipRawADCTouV(uint16_t rawADC, bool skipCalOffset = false);
|
||||
static TemperatureType_t convertCtoF(TemperatureType_t degC);
|
||||
static TemperatureType_t convertFtoC(TemperatureType_t degF);
|
||||
|
||||
private:
|
||||
static uint32_t convertuVToDegC(uint32_t tipuVDelta);
|
||||
static uint32_t convertuVToDegF(uint32_t tipuVDelta);
|
||||
static TemperatureType_t convertuVToDegC(uint32_t tipuVDelta);
|
||||
static TemperatureType_t convertuVToDegF(uint32_t tipuVDelta);
|
||||
};
|
||||
|
||||
#endif /* SRC_TIPTHERMOMODEL_H_ */
|
||||
|
||||
Reference in New Issue
Block a user