Slow PWM drive to reduce some handle heating, Improve PWM power for ts80, add ts80 pulse for keep awake

This commit is contained in:
Ben V. Brown
2018-11-11 20:43:35 +11:00
parent 5b882c819c
commit 6a1572de81
5 changed files with 95 additions and 38 deletions

View File

@@ -9,11 +9,14 @@
#include <Settings.h>
#include <hardware.h>
const uint8_t tipResistance = 87;
uint8_t tipResistance = 85; //x10 ohms, 8.5 typical for ts100, 4.5 typical for ts80
const uint8_t maxPWM = 255;
history<uint16_t, oscillationPeriod> milliWattHistory = {{0}, 0, 0};
history<uint16_t, oscillationPeriod> milliWattHistory = { { 0 }, 0, 0 };
void setupPower(uint8_t res) {
tipResistance = res;
}
int32_t tempToMilliWatts(int32_t rawTemp, uint16_t mass, uint8_t rawC) {
// mass is in milliJ/*C, rawC is raw per degree C
@@ -26,14 +29,19 @@ int32_t tempToMilliWatts(int32_t rawTemp, uint16_t mass, uint8_t rawC) {
void setTipMilliWatts(int32_t mw) {
int32_t output = milliWattsToPWM(mw, systemSettings.voltageDiv / 10);
setTipPWM(output);
uint16_t actualMilliWatts = PWMToMilliWatts(output, systemSettings.voltageDiv / 10);
uint16_t actualMilliWatts = PWMToMilliWatts(output,
systemSettings.voltageDiv / 10);
milliWattHistory.update(actualMilliWatts);
}
uint8_t milliWattsToPWM(int32_t milliWatts, uint8_t divisor) {
int32_t v = getInputVoltageX10(divisor); // 1000 = 10v
int32_t availableMilliWatts = v*v / tipResistance;
//P = V^2 / R, v*v = v^2 * 100
// R = R*10
// P therefore is in V^2*10/R = W*10.
// Scale input milliWatts to the pwm rate
int32_t v = getInputVoltageX10(divisor);// 100 = 10v
int32_t availableMilliWatts = v * v / tipResistance;
int32_t pwm = maxPWM * milliWatts / availableMilliWatts;
if (pwm > maxPWM) {
@@ -46,5 +54,5 @@ uint8_t milliWattsToPWM(int32_t milliWatts, uint8_t divisor) {
int32_t PWMToMilliWatts(uint8_t pwm, uint8_t divisor) {
int32_t v = getInputVoltageX10(divisor);
return pwm * (v*v / tipResistance) / maxPWM;
return pwm * (v * v / tipResistance) / maxPWM;
}