mirror of
https://github.com/Ralim/IronOS.git
synced 2025-02-26 07:53:55 +00:00
Rough tip resistance progress
This commit is contained in:
@@ -16,6 +16,13 @@ extern "C" {
|
||||
// Can be used to check any details for the power system
|
||||
void power_check();
|
||||
|
||||
// Returns the tip resistance in x10 ohms, so 7.5 = 75; 14=140 etc
|
||||
uint8_t getTipResitanceX10();
|
||||
|
||||
// Called when device is idle to allow measuring tip resistance
|
||||
void startMeasureTipResistance();
|
||||
void FinishMeasureTipResistance();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -223,3 +223,47 @@ bool isTipDisconnected() {
|
||||
void setStatusLED(const enum StatusLED state) {
|
||||
// Dont have one
|
||||
}
|
||||
|
||||
uint8_t lastTipResistance = 75; // default safe
|
||||
uint32_t lastTipReadinguV = 0;
|
||||
uint8_t getTipResitanceX10() {
|
||||
// Return tip resistance in x10 ohms
|
||||
// We can measure this using the op-amp
|
||||
return lastTipResistance;
|
||||
}
|
||||
void startMeasureTipResistance() {
|
||||
|
||||
if (isTipDisconnected()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// We want to calculate lastTipResistance
|
||||
// If tip is connected, and the tip is cold and the tip is not being heated
|
||||
// We can use the GPIO to inject a small current into the tip and measure this
|
||||
// The gpio is 5.1k -> diode -> tip -> gnd
|
||||
// Which is around 0.65mA this will induce:
|
||||
// 6 ohm tip -> 3.9mV (Real world ~= 3320)
|
||||
// 8 ohm tip -> 5.2mV (Real world ~= 4500)
|
||||
// Which is definitely measureable
|
||||
// Taking shortcuts here as we know we only really have to pick apart 6 and 8 ohm tips
|
||||
// These are reported as 60 and 75 respectively
|
||||
lastTipReadinguV = TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0));
|
||||
gpio_write(TIP_RESISTANCE_SENSE, 1);
|
||||
// Wait for next ADC measurement
|
||||
}
|
||||
|
||||
void FinishMeasureTipResistance() {
|
||||
gpio_write(TIP_RESISTANCE_SENSE, 0);
|
||||
if (isTipDisconnected()) {
|
||||
return;
|
||||
}
|
||||
// read the tip uV with the current source on
|
||||
uint32_t newReading = (TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0)));
|
||||
if (newReading < lastTipReadinguV) {
|
||||
return;
|
||||
}
|
||||
// newReading -= lastTipReadinguV;
|
||||
MSG("Tip Delta %lu, %lu %lu \r\n", newReading - lastTipReadinguV, newReading, lastTipReadinguV);
|
||||
newReading -= lastTipReadinguV;
|
||||
lastTipReadinguV = newReading;
|
||||
}
|
||||
@@ -23,6 +23,7 @@ history<uint16_t, ADC_Filter_Smooth> ADC_Vin;
|
||||
history<uint16_t, ADC_Filter_Smooth> ADC_Temp;
|
||||
history<uint16_t, ADC_Filter_Smooth> ADC_Tip;
|
||||
|
||||
|
||||
void adc_fifo_irq(void) {
|
||||
if (ADC_GetIntStatus(ADC_INT_FIFO_READY) == SET) {
|
||||
bool wakePID = false;
|
||||
|
||||
@@ -29,8 +29,9 @@ void hardware_init() {
|
||||
gpio_set_mode(TMP36_INPUT_Pin, GPIO_INPUT_MODE);
|
||||
gpio_set_mode(TIP_TEMP_Pin, GPIO_INPUT_MODE);
|
||||
gpio_set_mode(VIN_Pin, GPIO_INPUT_MODE);
|
||||
gpio_set_mode(TIP_RESISTANCE_SENSE, GPIO_INPUT_MODE);
|
||||
|
||||
gpio_set_mode(TIP_RESISTANCE_SENSE, GPIO_OUTPUT_PP_MODE);
|
||||
gpio_write(TIP_RESISTANCE_SENSE, 0);
|
||||
MSG("Magic Starting\r\n");
|
||||
setup_timer_scheduler();
|
||||
setup_adc();
|
||||
setup_pwm();
|
||||
|
||||
@@ -116,17 +116,17 @@
|
||||
#ifdef MODEL_Magic
|
||||
#define ADC_VDD_MV 3200 // ADC max reading millivolts
|
||||
#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C
|
||||
#define VOLTAGE_DIV 600 // 290 - Default divider from schematic
|
||||
#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV
|
||||
#define VOLTAGE_DIV 600 // 600 - Default divider from schematic
|
||||
#define CALIBRATION_OFFSET 800 // 900 - Default adc offset in uV
|
||||
#define MIN_CALIBRATION_OFFSET 100 // Min value for calibration
|
||||
#define PID_POWER_LIMIT 70 // Sets the max pwm power limit
|
||||
#define PID_POWER_LIMIT 220 // Sets the max pwm power limit
|
||||
#define POWER_LIMIT 0 // 0 watts default limit
|
||||
#define MAX_POWER_LIMIT 70 //
|
||||
#define MAX_POWER_LIMIT 220 //
|
||||
#define POWER_LIMIT_STEPS 5 //
|
||||
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_PINECIL // Uses TS100 resistors
|
||||
#define TEMP_uV_LOOKUP_HAKKO // Use Hakko lookup table
|
||||
#define USB_PD_VMAX 20 // Maximum voltage for PD to negotiate
|
||||
#define PID_TIM_HZ (8) // Tick rate of the PID loop
|
||||
#define PID_TIM_HZ (10) // Tick rate of the PID loop
|
||||
#define MAX_TEMP_C 450 // Max soldering temp selectable °C
|
||||
#define MAX_TEMP_F 850 // Max soldering temp selectable °F
|
||||
#define MIN_TEMP_C 10 // Min soldering temp selectable °C
|
||||
|
||||
Reference in New Issue
Block a user