Merge branch 'master' into pinecil
This commit is contained in:
@@ -32,7 +32,7 @@ This project is considered feature complete for use as a soldering iron, *so ple
|
||||
* Boost mode lets you temporarily change the temperature when soldering (i.e. raise the temperature for short periods of time)
|
||||
* (TS100) Battery charge level indicator if power source set to a lipo cell count
|
||||
* (TS80) Power bank operating voltage is displayed
|
||||
* [Custom boot up logo support](Documentation/upgrading.md)
|
||||
* [Custom boot up logo support](Documentation/Upgrading.md)
|
||||
* Automatic LCD rotation based on the orientation
|
||||
* Supports both the version 1 and version 2 hardware (different accelerometers)
|
||||
|
||||
@@ -46,7 +46,7 @@ When on the main screen, the unit shows prompts for the two most common operatio
|
||||
* Holding the button near the tip will enter soldering temperature adjust mode (This is the same as the one in the soldering menu, just to let you edit before heating up)
|
||||
* Holding the button near the USB end will show the firmware version details
|
||||
|
||||
Detailed operation details are over in the [Menu information.](Documentation/menu.md)
|
||||
Detailed operation details are over in the [Menu information.](Documentation/Menu.md)
|
||||
|
||||
## Thanks
|
||||
|
||||
|
||||
@@ -774,7 +774,7 @@ def getSmallFontMap():
|
||||
"Ļ":"0x1f, 0x50, 0x30, 0x10, 0x10, 0x00,",
|
||||
"ļ":"0x00, 0x51, 0x3f, 0x10, 0x00, 0x00,",
|
||||
"Ľ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
|
||||
"ľ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
|
||||
"ľ":"0x00, 0x41, 0x7f, 0x40, 0x03, 0x00,",
|
||||
"Ŀ":"0x7f, 0x40, 0x40, 0x48, 0x40, 0x00,",
|
||||
"ŀ":"0x00, 0x41, 0x7f, 0x40, 0x08, 0x00,",
|
||||
"Ł":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
|
||||
@@ -813,7 +813,7 @@ def getSmallFontMap():
|
||||
"Ţ":"0x01, 0x41, 0x3f, 0x01, 0x01, 0x00,",
|
||||
"ţ":"0x02, 0x4f, 0x32, 0x10, 0x08, 0x00,",
|
||||
"Ť":"0x04, 0x05, 0x7e, 0x05, 0x04, 0x00,",
|
||||
"ť":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
|
||||
"ť":"0x04, 0x3e, 0x44, 0x40, 0x23, 0x00,",
|
||||
"Ŧ":"0x01, 0x09, 0x7f, 0x09, 0x01, 0x00,",
|
||||
"ŧ":"0x14, 0x3e, 0x54, 0x40, 0x20, 0x00,",
|
||||
"Ũ":"0x00, 0x00, 0x00, 0x00, 0x00, 0x00,",
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"UndervoltageString": "DC INSUFFICIENTE",
|
||||
"InputVoltageString": "V ingresso:",
|
||||
"WarningTipTempString": "Temp punta:",
|
||||
"BadTipString": "PUNTA NO",
|
||||
"BadTipString": "PUNTA KO",
|
||||
"SleepingSimpleString": "Zzz ",
|
||||
"SleepingAdvancedString": "Standby",
|
||||
"WarningSimpleString": "HOT!",
|
||||
|
||||
@@ -1,251 +1,253 @@
|
||||
{
|
||||
"languageCode": "SK",
|
||||
"languageLocalName": "Slovenský",
|
||||
"languageLocalName": "Slovenčina",
|
||||
"cyrillicGlyphs": false,
|
||||
"messages": {
|
||||
"SettingsCalibrationDone": "Calibration done!",
|
||||
"SettingsCalibrationWarning": "Najprv sa prosim uistite, ze hrot ma izbovu teplotu!",
|
||||
"SettingsResetWarning": "Are you sure to reset settings to default values?",
|
||||
"UVLOWarningString": "DC LOW",
|
||||
"UndervoltageString": "Undervoltage",
|
||||
"InputVoltageString": "Input V: ",
|
||||
"WarningTipTempString": "Tip Temp: ",
|
||||
"BadTipString": "BAD TIP",
|
||||
"SettingsCalibrationDone": "Kalibrácia hotová!",
|
||||
"SettingsCalibrationWarning": "Najprv sa prosím uistite, že hrot má izbovú teplotu!",
|
||||
"SettingsResetWarning": "Naozaj chcete obnovit nastavenia?",
|
||||
"UVLOWarningString": "Nízke U!",
|
||||
"UndervoltageString": "Nízke napätie",
|
||||
"InputVoltageString": "Vstupné U: ",
|
||||
"WarningTipTempString": "Tep. hrotu: ",
|
||||
"BadTipString": "ZLÝ HROT",
|
||||
"SleepingSimpleString": "Chrr",
|
||||
"SleepingAdvancedString": "Kludovy rezim...",
|
||||
"SleepingAdvancedString": "Kľudový režim...",
|
||||
"WarningSimpleString": "HOT!",
|
||||
"WarningAdvancedString": "HROT JE HORUCI !",
|
||||
"SleepingTipAdvancedString": "Tip:",
|
||||
"IdleTipString": "Tip:",
|
||||
"WarningAdvancedString": "HROT JE HORÚCI !",
|
||||
"SleepingTipAdvancedString": "Hrot:",
|
||||
"IdleTipString": "Hrot:",
|
||||
"IdleSetString": " Set:",
|
||||
"TipDisconnectedString": "TIP DISCONNECTED",
|
||||
"SolderingAdvancedPowerPrompt": "Power: ",
|
||||
"OffString": "Off",
|
||||
"ResetOKMessage": "Reset OK"
|
||||
"TipDisconnectedString": "HROT ODPOJENÝ",
|
||||
"SolderingAdvancedPowerPrompt": "Výkon: ",
|
||||
"OffString": "Vyp",
|
||||
"ResetOKMessage": "Reset OK",
|
||||
"YourGainMessage": "Zisk:",
|
||||
"SettingsResetMessage": "Nast. Obnovené!"
|
||||
},
|
||||
"characters": {
|
||||
"SettingRightChar": "R",
|
||||
"SettingRightChar": "P",
|
||||
"SettingLeftChar": "L",
|
||||
"SettingAutoChar": "A",
|
||||
"SettingFastChar": "F",
|
||||
"SettingSlowChar": "S",
|
||||
"SettingStartSolderingChar": "T",
|
||||
"SettingStartSleepChar": "S",
|
||||
"SettingFastChar": "R",
|
||||
"SettingSlowChar": "P",
|
||||
"SettingStartSolderingChar": "S",
|
||||
"SettingStartSleepChar": "K",
|
||||
"SettingStartSleepOffChar": "O",
|
||||
"SettingStartNoneChar": "F"
|
||||
"SettingStartNoneChar": "N"
|
||||
},
|
||||
"menuGroups": {
|
||||
"SolderingMenu": {
|
||||
"text2": [
|
||||
"Soldering",
|
||||
"Settings"
|
||||
"Nastavenie",
|
||||
"spájkovania"
|
||||
],
|
||||
"desc": "Soldering settings"
|
||||
"desc": "Nastavenie spájkovania"
|
||||
},
|
||||
"PowerSavingMenu": {
|
||||
"text2": [
|
||||
"Sleep",
|
||||
"Modes"
|
||||
"Úsporný",
|
||||
"režim"
|
||||
],
|
||||
"desc": "Power Saving Settings"
|
||||
"desc": "Nastavenia režimov úspory energie"
|
||||
},
|
||||
"UIMenu": {
|
||||
"text2": [
|
||||
"User",
|
||||
"Interface"
|
||||
"Nastavenie",
|
||||
"zobrazenia"
|
||||
],
|
||||
"desc": "User Interface settings"
|
||||
"desc": "Nastavenie zobrazenia"
|
||||
},
|
||||
"AdvancedMenu": {
|
||||
"text2": [
|
||||
"Advanced",
|
||||
"Options"
|
||||
"Pokročilé",
|
||||
"nastavenia"
|
||||
],
|
||||
"desc": "Advanced options"
|
||||
"desc": "Pokročilé nastavenia"
|
||||
}
|
||||
},
|
||||
"menuOptions": {
|
||||
"PowerSource": {
|
||||
"text2": [
|
||||
"PWRSC",
|
||||
""
|
||||
"text2": [
|
||||
"Zdroj",
|
||||
"napätia"
|
||||
],
|
||||
"desc": "Zdroj napatia. Nastavit napatie pre vypnutie (cutoff) <DC=10V, nS=n*3.3V pre LiIon clanky>"
|
||||
"desc": "Zdroj napätia. Nastavenie napätia pre vypnutie (cutoff) <DC=10V, nS=n*3.3V pre LiIon články>"
|
||||
},
|
||||
"SleepTemperature": {
|
||||
"text2": [
|
||||
"STMP",
|
||||
""
|
||||
"text2": [
|
||||
"Kľudová",
|
||||
"teplota"
|
||||
],
|
||||
"desc": "Kludova teplota (v nastavenych jednotkach)"
|
||||
"desc": "Kľudová teplota (v nastavených jednotkách)"
|
||||
},
|
||||
"SleepTimeout": {
|
||||
"text2": [
|
||||
"STME",
|
||||
""
|
||||
"text2": [
|
||||
"Kľudový",
|
||||
"režim po"
|
||||
],
|
||||
"desc": "Kludovy rezim po <sekundach/minutach>"
|
||||
},
|
||||
"ShutdownTimeout": {
|
||||
"text2": [
|
||||
"SHTME",
|
||||
""
|
||||
"text2": [
|
||||
"Vypnutie",
|
||||
"po"
|
||||
],
|
||||
"desc": "Cas na vypnutie <minuty>"
|
||||
"desc": "Čas na vypnutie <minuty>"
|
||||
},
|
||||
"MotionSensitivity": {
|
||||
"text2": [
|
||||
"MSENSE",
|
||||
""
|
||||
"text2": [
|
||||
"Citlivosť",
|
||||
"pohybu"
|
||||
],
|
||||
"desc": "Citlivost detekcie pohybu <0=Vyp, 1=Min ... 9=Max>"
|
||||
"desc": "Citlivosť detekcie pohybu <0=Vyp, 1=Min ... 9=Max>"
|
||||
},
|
||||
"TemperatureUnit": {
|
||||
"text2": [
|
||||
"TMPUNT",
|
||||
""
|
||||
"text2": [
|
||||
"Jednotka",
|
||||
"teploty"
|
||||
],
|
||||
"desc": "Jednotky merania teploty <C=stupne Celzia, F=stupne Fahrenheita>"
|
||||
},
|
||||
"AdvancedIdle": {
|
||||
"text2": [
|
||||
"ADVIDL",
|
||||
""
|
||||
"text2": [
|
||||
"Detaily v",
|
||||
"kľud. režime"
|
||||
],
|
||||
"desc": "Zobrazit detailne informacie v kludovom rezime <T=Zap, F=Vyp>"
|
||||
"desc": "Zobraziť detailné informácie v kľudovom režime <T=Zap, F=Vyp>"
|
||||
},
|
||||
"DisplayRotation": {
|
||||
"text2": [
|
||||
"DSPROT",
|
||||
""
|
||||
"text2": [
|
||||
"Orientácia",
|
||||
"displeja"
|
||||
],
|
||||
"desc": "Orientacia displeja <A=Auto, L=Lavak, R=Pravak>"
|
||||
"desc": "Orientácia displeja <A=Auto, L=Ľavák, P=Pravák>"
|
||||
},
|
||||
"BoostTemperature": {
|
||||
"text2": [
|
||||
"BTMP",
|
||||
""
|
||||
"text2": [
|
||||
"Boost",
|
||||
"teplota"
|
||||
],
|
||||
"desc": "Cielova teplota pre prudky nahrev (v nastavenych jednotkach)"
|
||||
"desc": "Cieľová teplota pre prudký náhrev (v nastavených jednotkách)"
|
||||
},
|
||||
"AutoStart": {
|
||||
"text2": [
|
||||
"ASTART",
|
||||
""
|
||||
"text2": [
|
||||
"Automatické",
|
||||
"spustenie"
|
||||
],
|
||||
"desc": "Pri starte spustit rezim spajkovania <T=Zap, F=Vyp, S=Spanok>"
|
||||
"desc": "Pri štarte spustiť režim spájkovania <S=Zap, N=Vyp, K=Spanok>"
|
||||
},
|
||||
"CooldownBlink": {
|
||||
"text2": [
|
||||
"CLBLNK",
|
||||
""
|
||||
"text2": [
|
||||
"Blikanie pri",
|
||||
"chladnutí"
|
||||
],
|
||||
"desc": "Blikanie ukazovatela teploty pocas chladnutia hrotu <T=Zap, F=Vyp>"
|
||||
"desc": "Blikanie ukazovateľa teploty počas chladnutia hrotu"
|
||||
},
|
||||
"TemperatureCalibration": {
|
||||
"text2": [
|
||||
"TMP CAL?",
|
||||
""
|
||||
"text2": [
|
||||
"Kalibrácia",
|
||||
"teploty"
|
||||
],
|
||||
"desc": "Kalibracia posunu hrotu"
|
||||
"desc": "Kalibrácia posunu teploty hrotu"
|
||||
},
|
||||
"SettingsReset": {
|
||||
"text2": [
|
||||
"RESET?",
|
||||
""
|
||||
"text2": [
|
||||
"Obnovenie",
|
||||
"nastavení"
|
||||
],
|
||||
"desc": "Tovarenske nastavenia"
|
||||
"desc": "Obnovenie nastavení na pôvodné hodnoty"
|
||||
},
|
||||
"VoltageCalibration": {
|
||||
"text2": [
|
||||
"CAL VIN?",
|
||||
""
|
||||
"text2": [
|
||||
"Kalibrácia",
|
||||
"vst. napätia"
|
||||
],
|
||||
"desc": "Kalibracia VIN. Kratke stlacenie meni nastavenie, dlhe stlacenie pre navrat"
|
||||
"desc": "Kalibrácia napätia. Krátke stlačenie mení nastavenie, dlhé stlačenie pre návrat"
|
||||
},
|
||||
"AdvancedSoldering": {
|
||||
"text2": [
|
||||
"ADVSLD",
|
||||
""
|
||||
"text2": [
|
||||
"Detaily počas",
|
||||
"spájkovania"
|
||||
],
|
||||
"desc": "Zobrazenie detailov pocas spajkovania <T=Zap, F=Vyp>"
|
||||
"desc": "Zobrazenie detailov počas spájkovania"
|
||||
},
|
||||
"ScrollingSpeed": {
|
||||
"text2": [
|
||||
"DESCSP",
|
||||
""
|
||||
"text2": [
|
||||
"Rýchlost",
|
||||
"skrolovania"
|
||||
],
|
||||
"desc": "Speed this text scrolls past at"
|
||||
"desc": "Rychlost pohybu tohoto textu"
|
||||
},
|
||||
"TipModel": {
|
||||
"text2": [
|
||||
"Tip",
|
||||
"Model"
|
||||
"text2": [
|
||||
"Typ",
|
||||
"hrotu"
|
||||
],
|
||||
"desc": "Tip Model selection"
|
||||
"desc": "Zvolenie hrotu"
|
||||
},
|
||||
"SimpleCalibrationMode": {
|
||||
"text2": [
|
||||
"Simple",
|
||||
"Calibration"
|
||||
"text2": [
|
||||
"Zjednodušená",
|
||||
"kalibrácia"
|
||||
],
|
||||
"desc": "Simple Calibration using Hot water"
|
||||
"desc": "Zjednodušená kalibrácia pomocou horúcej vody"
|
||||
},
|
||||
"AdvancedCalibrationMode": {
|
||||
"text2": [
|
||||
"Advanced",
|
||||
"Calibration"
|
||||
"text2": [
|
||||
"Pokročilá",
|
||||
"kalibrácia"
|
||||
],
|
||||
"desc": "Advanced calibration using thermocouple on the tip"
|
||||
"desc": "Pokročilá kalibrácia meraním teploty hrotu"
|
||||
},
|
||||
"PowerInput": {
|
||||
"text2": [
|
||||
"Power",
|
||||
"Wattage"
|
||||
"text2": [
|
||||
"Obmedzenie",
|
||||
"výkonu"
|
||||
],
|
||||
"desc": "Power Wattage of the power adapter used"
|
||||
"desc": "Obmedzenie výkonu podľa použitého zdroja"
|
||||
},
|
||||
"PowerLimit": {
|
||||
"text2": [
|
||||
"Power",
|
||||
"Limit"
|
||||
"text2": [
|
||||
"Obmedzenie",
|
||||
"výkonu"
|
||||
],
|
||||
"desc": "Maximum power the iron can use <Watts>"
|
||||
"desc": "Obmedzenie výkonu podľa použitého zdroja <watt>"
|
||||
},
|
||||
"ReverseButtonTempChange": {
|
||||
"text2": [
|
||||
"Key +-",
|
||||
"reverse?"
|
||||
"text2": [
|
||||
"Otočenie",
|
||||
"tlačidiel +/-"
|
||||
],
|
||||
"desc": "Reverse the tip temperature change buttons plus minus assignment."
|
||||
"desc": "Prehodenie tlačidiel na nastavovanie teploty"
|
||||
},
|
||||
"TempChangeShortStep": {
|
||||
"text2": [
|
||||
"Temp change",
|
||||
"short?"
|
||||
"text2": [
|
||||
"Malý krok",
|
||||
"teploty"
|
||||
],
|
||||
"desc": "Temperature change steps on short button press!"
|
||||
"desc": "Zmena teploty pri krátkom stlačení tlačidla"
|
||||
},
|
||||
"TempChangeLongStep": {
|
||||
"text2": [
|
||||
"Temp change",
|
||||
"long?"
|
||||
"text2": [
|
||||
"Veľký krok",
|
||||
"teploty"
|
||||
],
|
||||
"desc": "Temperature change steps on long button press!"
|
||||
"desc": "Zmena teploty pri držaní tlačidla"
|
||||
},
|
||||
"PowerPulsePower":{
|
||||
"text2": [
|
||||
"Power",
|
||||
"Pulse W"
|
||||
"PowerPulsePower": {
|
||||
"text2": [
|
||||
"Impulz",
|
||||
"W"
|
||||
],
|
||||
"desc": "Keep awake pulse power intensity"
|
||||
"desc": "Impulz udržujúci napájací zdroj zapnutý <watt>"
|
||||
},
|
||||
"TipGain": {
|
||||
"text2": [
|
||||
"Modify",
|
||||
"tip gain"
|
||||
"text2": [
|
||||
"Zisk",
|
||||
"hrotu"
|
||||
],
|
||||
"desc": "Tip gain"
|
||||
"desc": "Úprava zisku hrotu"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
#include <stdint.h>
|
||||
#include <stdbool.h>
|
||||
#include "BSP_Flash.h"
|
||||
#include "BSP_Power.h"
|
||||
#include "BSP_QC.h"
|
||||
#include "Defines.h"
|
||||
#include "Model_Config.h"
|
||||
#include "stdint.h"
|
||||
/*
|
||||
* BSP.h -- Board Support
|
||||
*
|
||||
@@ -16,11 +17,19 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// maximum htim2 PWM value
|
||||
extern const uint16_t powerPWM;
|
||||
// htim2.Init.Period, the full PWM cycle
|
||||
extern uint16_t totalPWM;
|
||||
|
||||
// Called first thing in main() to init the hardware
|
||||
void preRToSInit();
|
||||
// Called once the RToS has started for any extra work
|
||||
void postRToSInit();
|
||||
|
||||
// Called once from preRToSInit()
|
||||
void BSPInit(void);
|
||||
|
||||
// Called to reset the hardware watchdog unit
|
||||
void resetWatchdog();
|
||||
// Accepts a output level of 0.. to use to control the tip output PWM
|
||||
@@ -31,6 +40,9 @@ uint16_t getHandleTemperature();
|
||||
uint16_t getTipRawTemp(uint8_t refresh);
|
||||
// Returns the main DC input voltage, using the adjustable divisor + sample flag
|
||||
uint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample);
|
||||
// Switch to the most suitable PWM freq given the desired period;
|
||||
// returns true if the switch was performed and totalPWM changed
|
||||
bool tryBetterPWM(uint8_t pwm);
|
||||
|
||||
// Readers for the two buttons
|
||||
// !! Returns 1 if held down, 0 if released
|
||||
|
||||
@@ -12,6 +12,14 @@
|
||||
volatile uint16_t PWMSafetyTimer = 0;
|
||||
volatile uint8_t pendingPWM = 0;
|
||||
|
||||
const uint16_t powerPWM = 255;
|
||||
static const uint8_t holdoffTicks = 13; // delay of 7 ms
|
||||
static const uint8_t tempMeasureTicks = 17;
|
||||
|
||||
uint16_t totalPWM; //htim2.Init.Period, the full PWM cycle
|
||||
|
||||
static bool fastPWM;
|
||||
|
||||
//2 second filter (ADC is PID_TIM_HZ Hz)
|
||||
history<uint16_t, PID_TIM_HZ> rawTempFilter = {{0}, 0, 0};
|
||||
void resetWatchdog()
|
||||
@@ -206,6 +214,47 @@ void setTipPWM(uint8_t pulse)
|
||||
pendingPWM = pulse;
|
||||
}
|
||||
|
||||
static void switchToFastPWM(void)
|
||||
{
|
||||
fastPWM = true;
|
||||
totalPWM = powerPWM + tempMeasureTicks * 2;
|
||||
htim2.Instance->ARR = totalPWM;
|
||||
// ~3.5 Hz rate
|
||||
htim2.Instance->CCR1 = powerPWM + holdoffTicks * 2;
|
||||
// 2 MHz timer clock/2000 = 1 kHz tick rate
|
||||
htim2.Instance->PSC = 2000;
|
||||
}
|
||||
|
||||
static void switchToSlowPWM(void)
|
||||
{
|
||||
fastPWM = false;
|
||||
totalPWM = powerPWM + tempMeasureTicks;
|
||||
htim2.Instance->ARR = totalPWM;
|
||||
// ~1.84 Hz rate
|
||||
htim2.Instance->CCR1 = powerPWM + holdoffTicks;
|
||||
// 2 MHz timer clock/4000 = 500 Hz tick rate
|
||||
htim2.Instance->PSC = 4000;
|
||||
}
|
||||
|
||||
bool tryBetterPWM(uint8_t pwm)
|
||||
{
|
||||
if (fastPWM && pwm == powerPWM)
|
||||
{
|
||||
// maximum power for fast PWM reached, need to go slower to get more
|
||||
switchToSlowPWM();
|
||||
return true;
|
||||
}
|
||||
else if (!fastPWM && pwm < 230)
|
||||
{
|
||||
// 254 in fast PWM mode gives the same power as 239 in slow
|
||||
// allow for some reasonable hysteresis by switching only when it goes
|
||||
// below 230 (equivalent to 245 in fast mode)
|
||||
switchToFastPWM();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// These are called by the HAL after the corresponding events from the system
|
||||
// timers.
|
||||
|
||||
@@ -326,9 +375,13 @@ uint8_t getButtonB()
|
||||
return HAL_GPIO_ReadPin(KEY_B_GPIO_Port, KEY_B_Pin) == GPIO_PIN_RESET ? 1 : 0;
|
||||
}
|
||||
|
||||
void BSPInit(void)
|
||||
{
|
||||
switchToFastPWM();
|
||||
}
|
||||
|
||||
void reboot()
|
||||
{
|
||||
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
|
||||
@@ -315,13 +315,15 @@ static void MX_TIM2_Init(void) {
|
||||
// Timer 2 is fairly slow as its being used to run the PWM and trigger the ADC
|
||||
// in the PWM off time.
|
||||
htim2.Instance = TIM2;
|
||||
htim2.Init.Prescaler = 4000; //1mhz tick rate/800 = 1.25 KHz tick rate
|
||||
// dummy value, will be reconfigured by BSPInit()
|
||||
htim2.Init.Prescaler = 2000; // 2 MHz timer clock/2000 = 1 kHz tick rate
|
||||
|
||||
// pwm out is 10k from tim3, we want to run our PWM at around 10hz or slower on the output stage
|
||||
// These values give a rate of around 8Hz
|
||||
// These values give a rate of around 3.5 Hz for "fast" mode and 1.84 Hz for "slow"
|
||||
htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
htim2.Init.Period = 255 + 17;
|
||||
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4; // 4mhz before divide
|
||||
// dummy value, will be reconfigured by BSPInit()
|
||||
htim2.Init.Period = 255 + 17 * 2;
|
||||
htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV4; // 8 MHz (x2 APB1) before divide
|
||||
htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
htim2.Init.RepetitionCounter = 0;
|
||||
HAL_TIM_Base_Init(&htim2);
|
||||
@@ -337,7 +339,8 @@ static void MX_TIM2_Init(void) {
|
||||
HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig);
|
||||
|
||||
sConfigOC.OCMode = TIM_OCMODE_PWM1;
|
||||
sConfigOC.Pulse = 255 + 13; //13 -> Delay of 5ms
|
||||
// dummy value, will be reconfigured by BSPInit()
|
||||
sConfigOC.Pulse = 255 + 13 * 2; // 13 -> Delay of 7 ms
|
||||
//255 is the largest time period of the drive signal, and then offset ADC sample to be a bit delayed after this
|
||||
/*
|
||||
* It takes 4 milliseconds for output to be stable after PWM turns off.
|
||||
|
||||
@@ -17,6 +17,7 @@ void preRToSInit() {
|
||||
*/
|
||||
HAL_Init();
|
||||
Setup_HAL(); // Setup all the HAL objects
|
||||
BSPInit();
|
||||
#ifdef I2C_SOFT
|
||||
I2CBB::init();
|
||||
#endif
|
||||
|
||||
@@ -25,6 +25,4 @@ extern expMovingAverage<uint32_t, wattHistoryFilter> x10WattHistory;
|
||||
int32_t tempToX10Watts(int32_t rawTemp);
|
||||
void setTipX10Watts(int32_t mw);
|
||||
uint8_t X10WattsToPWM(int32_t milliWatts, uint8_t sample = 0);
|
||||
int32_t PWMToX10Watts(uint8_t pwm, uint8_t sample = 0);
|
||||
uint32_t availableW10(uint8_t sample) ;
|
||||
#endif /* POWER_HPP_ */
|
||||
|
||||
@@ -9,8 +9,7 @@
|
||||
#include <Settings.h>
|
||||
#include <BSP.h>
|
||||
|
||||
const uint16_t powerPWM = 255;
|
||||
const uint16_t totalPWM = 255 + 17; //htim2.Init.Period, the full PWM cycle
|
||||
static int32_t PWMToX10Watts(uint8_t pwm, uint8_t sample);
|
||||
|
||||
expMovingAverage<uint32_t, wattHistoryFilter> x10WattHistory = { 0 };
|
||||
|
||||
@@ -30,7 +29,7 @@ void setTipX10Watts(int32_t mw) {
|
||||
x10WattHistory.update(actualMilliWatts);
|
||||
}
|
||||
|
||||
uint32_t availableW10(uint8_t sample) {
|
||||
static uint32_t availableW10(uint8_t sample) {
|
||||
//P = V^2 / R, v*v = v^2 * 100
|
||||
// R = R*10
|
||||
// P therefore is in V^2*100/R*10 = W*10.
|
||||
@@ -56,15 +55,22 @@ uint8_t X10WattsToPWM(int32_t milliWatts, uint8_t sample) {
|
||||
}
|
||||
// if (milliWatts > (int(systemSettings.pidPowerLimit) * 10))
|
||||
// milliWatts = (int(systemSettings.pidPowerLimit) * 10);
|
||||
|
||||
//Calculate desired milliwatts as a percentage of availableW10
|
||||
uint32_t pwm = (powerPWM * milliWatts) / availableW10(sample);
|
||||
if (pwm > powerPWM) {
|
||||
pwm = powerPWM; //constrain to max PWM counter, shouldnt be possible, but small cost for safety to avoid wraps
|
||||
}
|
||||
uint32_t pwm;
|
||||
do {
|
||||
pwm = (powerPWM * milliWatts) / availableW10(sample);
|
||||
if (pwm > powerPWM) {
|
||||
// constrain to max PWM counter, shouldn't be possible,
|
||||
// but small cost for safety to avoid wraps
|
||||
pwm = powerPWM;
|
||||
}
|
||||
} while (tryBetterPWM(pwm));
|
||||
|
||||
return pwm;
|
||||
}
|
||||
|
||||
int32_t PWMToX10Watts(uint8_t pwm, uint8_t sample) {
|
||||
static int32_t PWMToX10Watts(uint8_t pwm, uint8_t sample) {
|
||||
uint32_t maxMW = availableW10(sample); //Get the milliwatts for the max pwm period
|
||||
//Then convert pwm into percentage of powerPWM to get the percentage of the max mw
|
||||
return (((uint32_t) pwm) * maxMW) / powerPWM;
|
||||
|
||||
@@ -50,10 +50,10 @@
|
||||
/**
|
||||
* Temp change settings
|
||||
*/
|
||||
#define TEMP_CHANGE_SHORT_STEP 1 // Default temp change short step +1
|
||||
#define TEMP_CHANGE_LONG_STEP 10 // Default temp change long step +10
|
||||
#define TEMP_CHANGE_SHORT_STEP_MAX 50 // Temp change short step MAX value
|
||||
#define TEMP_CHANGE_LONG_STEP_MAX 90 // Temp change long step MAX value
|
||||
#define TEMP_CHANGE_SHORT_STEP 1 // Default temp change short step +1
|
||||
#define TEMP_CHANGE_LONG_STEP 10 // Default temp change long step +10
|
||||
#define TEMP_CHANGE_SHORT_STEP_MAX 50 // Temp change short step MAX value
|
||||
#define TEMP_CHANGE_LONG_STEP_MAX 90 // Temp change long step MAX value
|
||||
|
||||
/* Power pulse for keeping power banks awake*/
|
||||
#define POWER_PULSE_INCREMENT 1
|
||||
@@ -77,9 +77,9 @@
|
||||
#define DETAILED_SOLDERING 0 // 0: Disable 1: Enable - Default 0
|
||||
#define DETAILED_IDLE 0 // 0: Disable 1: Enable - Default 0
|
||||
|
||||
#define CUT_OUT_SETTING 0 // default to no cut-off voltage (or 18W for TS80)
|
||||
#define TEMPERATURE_INF 0 // default to 0
|
||||
#define DESCRIPTION_SCROLL_SPEED 0 // 0: Slow 1: Fast - default to slow
|
||||
#define CUT_OUT_SETTING 0 // default to no cut-off voltage (or 18W for TS80)
|
||||
#define TEMPERATURE_INF 0 // default to 0
|
||||
#define DESCRIPTION_SCROLL_SPEED 0 // 0: Slow 1: Fast - default to slow
|
||||
|
||||
#define TIP_GAIN 210 // 21 uV/C * 10, uV per deg C constant of the tip, Tip uV * 10 / coeff = tip temp
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
#define VOLTAGE_DIV 467 // 467 - Default divider from schematic
|
||||
#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV
|
||||
#define PID_POWER_LIMIT 70 // Sets the max pwm power limit
|
||||
#define POWER_LIMIT 0 // 0 watts default limit
|
||||
#define POWER_LIMIT 0 // 0 watts default limit
|
||||
#define MAX_POWER_LIMIT 65 //
|
||||
#define POWER_LIMIT_STEPS 5 //
|
||||
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100
|
||||
@@ -111,7 +111,7 @@
|
||||
#define VOLTAGE_DIV 467 // 467 - Default divider from schematic
|
||||
#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV
|
||||
#define PID_POWER_LIMIT 70 // Sets the max pwm power limit
|
||||
#define POWER_LIMIT 0 // 0 watts default limit
|
||||
#define POWER_LIMIT 0 // 0 watts default limit
|
||||
#define MAX_POWER_LIMIT 65 //
|
||||
#define POWER_LIMIT_STEPS 5 //
|
||||
#define OP_AMP_GAIN_STAGE OP_AMP_GAIN_STAGE_TS100
|
||||
@@ -139,12 +139,12 @@
|
||||
|
||||
#ifdef MODEL_TS100
|
||||
const int32_t tipMass = 45; // X10 watts to raise 1 deg C in 1 second
|
||||
const uint8_t tipResistance = 85; //x10 ohms, 8.5 typical for ts100, 4.5 typical for ts80
|
||||
const uint8_t tipResistance = 75; //x10 ohms, 7.5 typical for ts100 tips
|
||||
#endif
|
||||
|
||||
#ifdef MODEL_Pinecil
|
||||
const int32_t tipMass = 45; // X10 watts to raise 1 deg C in 1 second
|
||||
const uint8_t tipResistance = 85; //x10 ohms, 8.5 typical for ts100, 4.5 typical for ts80
|
||||
const uint8_t tipResistance = 75; //x10 ohms, 7.5 typical for ts100 tips
|
||||
#endif
|
||||
|
||||
#ifdef MODEL_TS80
|
||||
|
||||
Reference in New Issue
Block a user