Induction Heating Device

Project Overview:

The idea of this product was created in April 2020 after doing an analysis of a consumer need to replace the standard butane torch. The mechanical design and electrical design are near completion allowing for the embedded software development to begin. The ideal candidate should have abundant experience interfacing with microcontroller-integrated peripherals (e.g. PWM, ADC, SPI, I2C) and extensive knowledge of ESP32/STM32 microcontrollers, sensor sampling/conditioning, system time management, and wireless protocols such as Bluetooth & Wi-Fi.

Electrical Schematic

ESP32-c3-mini-1 alternatic

ESP32 and temperature sensing

Latching Soft Power Switch

DCDC converter Circuit

Latching Soft Power Switch

DCDC converter Circuit

Custom ZVS circuit with mosfet control

Display

USB-UART controller

Auto Reset Circuit

USB-UART controller

User interface

  1. Home Screen: The diagram begins with a home screen that has options for users to interact with different functionalities such as Laser Configuration, Profile Selection, and Settings.
  2. Profiles: There are multiple profiles which a user can select from. Each profile has its own set of configurations which can include attributes like duration and intensity.
  3. Settings: The settings seem to allow the user to adjust Wi-Fi connectivity, Bluetooth connections, and software updates. There are also paths to handle different states like connected, not connected, and searching for networks or devices.
  4. Software Updates: The flowchart has a process to check for software updates which includes different outcomes such as an update being available, an update in process, and handling scenarios where the update fails.
  5. Connectivity: Both Wi-Fi and Bluetooth connectivity options are present, including the ability to search and select from available networks or devices and to input passwords for secure connections.
  6. Error Handling: There is a part of the flowchart dedicated to error handling, showing what the interface should do when certain errors occur, like a disconnection or a cancellation.

The color-coding in the flowchart indicates different states or processes, such as green

The home screen will consist of a “Settings Icon”, “Heat”, logo, and battery level”.

The user interface will be displayed on a 1.3in TFT IPS 24pin interface screen.

Firmware

The user control will be a 5-way button. In the middle will be a central Enter button that performs two functions: 1) “select” or proceed with a setting or function illustrated by the display or 2) Perform a microcontroller actuated soft power on/off of the device with 3 quick consecutive button clicks of the central button. Surrounding the middle button are the left, right, up, and down buttons

Manual and Auto heating

Manual Mode will display a page of the desired heating temperature, the Manual

heating icon i.e (), a home button in the upper left corner, a battery percentage in the upper right corner, as well as the current heating. The initial background color for now will be turquoise. The initial status is “Hold to Heat” requiring the user to hold the central button.  The user can double click the central button to toggle on the “Press to Heat” option.  While the user is holding the central button or has pressed the button (depending on chosen setting), home screen will first change the words “Press to Heat” or “Hold to Heat” to “Waiting for Device”. Once the coil has detected a workpiece then the screen will display “Heating” and the background color will change, for now it will be a breathing red. If the workpiece is not detected for 10s then the screen will display “Could not find Device” for a specified amount of time. While heating the temperature displayed will be the thermistor value read from our coils. Once the thermistor reads the desired temperature set in the settings the heating status will show “Ready” and the background color will change to green. Afterward the user has let go of the button in manual mode, or the specified duration has been reached, then the screen will show a cool down symbol and the text “Cooling Down”. In the case the user is in “Press to Heat” mode and the duration of the profile is not maximized; the user can double click the central button to add 10 seconds to the duration at anytime of the heating process.

Error Handling

Many of the errors have been described above. Additional Errors will be:

Device disconnected from coil.

Device unable to charge.

Incompatible Charger.

Failed to Connect to Bluetooth/Wifi

Unable to heat

Low Battery

ESp32 & Pinout

The particular model of the ESP32 used is the ESP32-C3-Mini-1, you can find the datasheet here, do not use any GPIO other than listed in below pinout:

GPIO 0 – ADC, Battery Voltage

GPIO 1 – ADC, Button Input, Left, Right, Up, Down, Enter

GPIO 2 – FSPIQ, LCD DISPLAY MISO

GPIO 3 – ADC, USB Voltage

GPIO 4 – ADC, Induction Current Sense

GPIO 5 – ADC, Induction Temperature

GPIO 6 – FSPICLK, LCD DISPLAY CLK

GPIO 7 – FSPID, LCD DISPLAY MOSI

GPIO 8 – LCD DISPLAY RST

GPIO 9 – Charge Control

GPIO 10 – FSPICS0, LCD DISPLAY CS

GPIO 11 – Induction heat control On/Off

GPIO 20 – Detect Workpiece attached

GPIO 21 – Device Power On/Off

This ESP32 integrates 2 SAR ADCs, ADC measurements are 12-bit and range from 0 V to a user configurable ADC attenuation voltage. Please ensure that all ADC measurements are using ADC_ATTEN_DB_11 which configures the measurable voltage range from 0mV ~ 2500mV.

Please refer to document below for proper ADC readings, including cautions about WiFi interaction.

https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/peripherals/adc.html

LCD Display

Use https://lvgl.io/ LVGL graphics library to display interface according to UI diagram seen later in this document. Make sure to use FSPI hardware pins in the following configuration:

MISO: GPIO2

MOSI: GPIO7

RESET: GPIO8

CS: GPIO10

CLK: GPIO6

LCD display controller is ST7789 and is 240×240 pixels.

Heating Control

Converting Thermistor Voltage for Temperature Feedback

Read temperature from thermistor using GPIO5 with variable name heaterTemp. The analog input range is from 0-2.5V which should be converted to temperature in C using formula provided later. Please make software conversion from raw 12-bit values to voltages using equation:

PID Control Loop

The heater circuit should consist of a two-stage PID loop with two forms of feedback: 1) heaterTemp which consists of a PID loop with current command output named outputCurrent, and 2) heaterCurrent which consists of a secondary PID loop with output to the heater Power Stage (using heaterEnable variable linked to GPIO11).

Turn on/off heater using GPIO 11 with variable name heaterEnable and read current using GPIO 4 linked to heaterCurrent. Heater control should be accurate and error minimal, use PID to tune the controller response to changes in temperature. DO NOT use other open-source PID library that does not follow our open-source guidelines. P, I, and D Parameters should be easily accessible and I_CAP should be available for setting as well. It should be easy to configure each coefficient if we decide to change the controller response.

Also implement a variable named powerScale which can be configured from 0 to 100. The default value for this is 100 which represents 100% heater power for a particular output power. This value can be changed to reduce the duty cycle of the heater, thus reducing amount of power used in the heating circuit. In the event of a Power Adapter Warning described later, the powerScale should be automatically reduced until the conditions for the power adapter warning are gone.

The heaterCurrent value should be calculated from a formula that will be provided later.

Alarm Limits

Implement safety limits for the heater temperature, there should be a highTempLim and lowTempLim which we can set easily. The default settings for these should be 0C and 700C respectively. If temperature read from thermistor exceeds either limit, temperature control should be disabled for safety reasons until returning to limit exceeded minus tempHysteresis value. For example if tempHysteresis value = 30C and heaterHighLim = 700C, heater control should not be restored until heaterTemp < heaterHighLimtempHysteresis = 670C. There should also be a setting control whether temperature is in Fahrenheit or Celsius and this should be additionally accessible by the user settings menu.

  Safety Interlock

GPIO20 is False when an open circuit is detected on the heater output (no coil inserted into the induction torch or no metal detected to heat). Heating is only possible when GPIO 20 with variable name workpieceAttached is True – this represents a safety interlock that the hardware is safe to use. An interrupt should be linked to the falling edge signal of workpieceAttached so that the microcontroller instantaneously shuts off heater power if the hardware fails or is unplugged.

Power Adapter Warning


The heater circuit draws power from a USB-C adapter that supplies a maximum of 100W. The current output command OutputCurrent) from the current PID loop should never exceed currentLimit which is automatically set based on voltage read from PowerVoltage before ever enabling the heater control.

powerVoltage is connected to GPIO 3, the reading is on a 8x scale of 0-2.5V analog input reading so that it corresponds to 0-20V USB reading. Voltages read at powerVoltage before the heater output is enabled should correspond to 5V, 9V, 15V, and 20V. The currentLimit variable should be set automatically according to the readings below:

Actual USB VoltagepowerVoltage ReadingCurrentLimit Setting
5V0.625V0, turn off the heater, display unsupported adapter warning
9V1.125V0, turn off the heater, display unsupported adapter warning
15V1.875V3A
20V2.5V4A

powerScale should be proportionally dropped according to any drops in the powerVoltage reading until the powerVoltage reading is stabilized.More c

The current used by the system should be compared over a configurable timescale which will average the reading. For example, heaterCurrent could be 3.4A over a 10ms timespan.

Bluetooth/WiFi Connectivity

Wireless interface to android/IOS applications that allows setting all the values on the induction torch as well as read settings and temperatures.

OTA Software Updates


The ESP32 should be able to monitor firmware versions for updates from an online server such as AWS, the firmware update process must be able to store a backup in case anything goes wrong and revert the update in the event of this. The firmware update should happen directly from the ESP32 through WiFi

General System Monitor

The ESP32 should monitor internal temperature sensor and compare to shutdownTemp and warningTemp. Exceeding warningTemp leads the ESP32 to display a indicator the user and block heating functions and exceeding shutdownTemp shuts off the device.

https://docs.espressif.com/projects/esp-idf/en/latest/esp32c3/api-reference/peripherals/temp_sensor.html#:~:text=The%20ESP32%2DC3%20has%20a,the%20chip%20is%20embedded%20in.

All analog readings should be filtered over a 3mS timescale, this includes heater temperature, current, etc.

The monitor should implement Coulomb counting to calculate battery percentage variable called batteryCharge displayed on the user interface. Separately, the monitor should read the battery voltage for safety reasons and store under batteryVoltage.The scale of this variable is 4X, so if voltage at ADC pin is 2V, then the actual Battery Voltage is 8V

If batteryVoltage reading exceeds maxBattVolts setting which defaults to 8.2V, then chargeControl should be set to false to prevent the lithium charger from turning on. Otherwise keep chargeControl = True. minBattVolts should default to 7V which corresponds to the voltage at which the system automatically powers Off – turning systemPower to False. Otherwise systemPower should = True. systemPower is linked to GPIO pin 21

The general monitor will also read the status of the buttons according to buttonInput variable linked to GPIO1. The values of buttonInput variable correspond like so:

buttonInput ReadingButtons Pressed
0VNo Buttons
0.5VEnter Button
1VLeft button
1.5VRight Button
2VDown Button
2.5VUp Button
Other VoltageIgnore reading

More Projects