9 Commits

Author SHA1 Message Date
aa440d63a1 Experiment 1; Looks good 2023-08-09 04:38:55 +03:00
01c8f289ea Wider Triac pulse; PID parameters are tuned 2023-08-09 02:07:22 +03:00
Anton Mukhin
fe65e6c97c generated schematic in PDF; Readme.md update 2023-08-03 13:03:18 +03:00
Anton Mukhin
e627d77f91 Readme.md update 2023-08-03 12:44:46 +03:00
Anton Mukhin
f5ccc129f6 One more image 2023-08-03 12:32:48 +03:00
67ad9e697c Removed test stuff; fan cooling after end pf a program; 2023-07-19 01:15:18 +03:00
69889f740e Firmware: migrated to CubeMX 6.8.1 2023-07-07 02:19:21 +03:00
248086f80b Firmware: Fans; PID; Removed testing stuff; many small amends 2023-07-07 02:17:24 +03:00
bcc34cae8b Merge branch 'hardware-rev2' 2023-02-22 23:10:44 +03:00
20 changed files with 431 additions and 175 deletions

View File

@@ -1 +1,26 @@
# PCB-Heater # PCB-Heater
PCB reflow station based on a heater plate.
- STM32 MCU
- Color TFT display
- Display Touch control
- Heats the PCB acording to a solder profile
Schematic:
[PDF](kicad/pcb-heater/pcb-heater.pdf)
**Firmware is in WIP stage!**
#### PCB renders
![TOP](/images/pcb-heater-PCB1.png)
![BOTTOM](/images/pcb-heater-PCB2.png)
#### Assembly renders
![CAD](/images/CAD1.png)
![Render](/images/PCB-Heater_render1.png)

View File

@@ -21,7 +21,9 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.554259374" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.554259374" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.262677090" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.262677090" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1482216284" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.1482216284" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1344937624" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.5 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32G070RBTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/FreeRTOS/Source/include | ../Drivers/CMSIS/Include | ../Core/Inc | ../Drivers/STM32G0xx_HAL_Driver/Inc | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 | ../Drivers/CMSIS/Device/ST/STM32G0xx/Include | ../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM0 || || || USE_HAL_DRIVER | STM32G070xx | CMSIS_device_header=&lt;stm32g0xx.h&gt; || || Drivers | Core/Startup | Middlewares | Core || || || ${workspace_loc:/${ProjName}/STM32G070RBTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || " valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1344937624" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32G070RBTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/FreeRTOS/Source/include | ../Drivers/CMSIS/Include | ../Core/Inc | ../Drivers/STM32G0xx_HAL_Driver/Inc | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 | ../Drivers/CMSIS/Device/ST/STM32G0xx/Include | ../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM0 || || || USE_HAL_DRIVER | STM32G070xx | CMSIS_device_header=&lt;stm32g0xx.h&gt; || || Drivers | Core/Startup | Middlewares | Core || || || ${workspace_loc:/${ProjName}/STM32G070RBTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1224262438" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="64" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.989318517" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1893601218" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/> <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1893601218" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/PCB-Heater}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1892196526" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/> <builder buildPath="${workspace_loc:/PCB-Heater}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1892196526" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1860582162" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1860582162" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
@@ -99,26 +101,27 @@
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.998246015" name="Release" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release"> <configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.998246015" name="Release" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release">
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.998246015." name="/" resourcePath=""> <folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.998246015." name="/" resourcePath="">
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.1071668352" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release"> <toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.1071668352" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.956496288" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32G070RBTx" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.956496288" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32G070RBTx" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1293906698" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1293906698" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.213198084" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.213198084" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.667446265" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.667446265" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1233208762" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.5 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32G070RBTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/FreeRTOS/Source/include | ../Drivers/CMSIS/Include | ../Core/Inc | ../Drivers/STM32G0xx_HAL_Driver/Inc | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 | ../Drivers/CMSIS/Device/ST/STM32G0xx/Include | ../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM0 || || || USE_HAL_DRIVER | STM32G070xx | CMSIS_device_header=&lt;stm32g0xx.h&gt; || || Drivers | Core/Startup | Middlewares | Core || || || ${workspace_loc:/${ProjName}/STM32G070RBTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || " valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.1233208762" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32G070RBTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Middlewares/Third_Party/FreeRTOS/Source/include | ../Drivers/CMSIS/Include | ../Core/Inc | ../Drivers/STM32G0xx_HAL_Driver/Inc | ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 | ../Drivers/CMSIS/Device/ST/STM32G0xx/Include | ../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy | ../Middlewares/Third_Party/FreeRTOS/Source/portable/GCC/ARM_CM0 || || || USE_HAL_DRIVER | STM32G070xx | CMSIS_device_header=&lt;stm32g0xx.h&gt; || || Drivers | Core/Startup | Middlewares | Core || || || ${workspace_loc:/${ProjName}/STM32G070RBTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1336430547" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="64" valueType="string"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1618910208" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/> <targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.1618910208" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/PCB-Heater}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1264878438" managedBuildOn="true" name="Gnu Make Builder.Release" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/> <builder buildPath="${workspace_loc:/PCB-Heater}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1264878438" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.909624158" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler"> <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.909624158" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.180943953" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.180943953" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1868373984" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/> <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1868373984" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
</tool> </tool>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1886124299" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler"> <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1886124299" name="MCU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1299569526" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g0" valueType="enumerated"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1299569526" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.983020817" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.983020817" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1545394168" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols"> <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1545394168" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
<listOptionValue builtIn="false" value="CMSIS_device_header=&lt;stm32g0xx.h&gt;"/> <listOptionValue builtIn="false" value="CMSIS_device_header=&lt;stm32g0xx.h&gt;"/>
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/> <listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
<listOptionValue builtIn="false" value="STM32G070xx"/> <listOptionValue builtIn="false" value="STM32G070xx"/>
</option> </option>
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.1227338823" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath"> <option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.1227338823" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath">
<listOptionValue builtIn="false" value="../Core/Inc"/> <listOptionValue builtIn="false" value="../Core/Inc"/>
<listOptionValue builtIn="false" value="../Drivers/STM32G0xx_HAL_Driver/Inc"/> <listOptionValue builtIn="false" value="../Drivers/STM32G0xx_HAL_Driver/Inc"/>
<listOptionValue builtIn="false" value="../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy"/> <listOptionValue builtIn="false" value="../Drivers/STM32G0xx_HAL_Driver/Inc/Legacy"/>
@@ -131,11 +134,11 @@
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1475878643" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/> <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1475878643" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool> </tool>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1623249817" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler"> <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1623249817" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.1508746326" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g0" valueType="enumerated"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.1508746326" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.1104854540" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.value.os" valueType="enumerated"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.1104854540" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.value.os" valueType="enumerated"/>
</tool> </tool>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.1774295902" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker"> <tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.1774295902" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.1410337642" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32G070RBTX_FLASH.ld}" valueType="string"/> <option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.1410337642" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32G070RBTX_FLASH.ld}" valueType="string"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.113680125" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input"> <inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.113680125" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/> <additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
<additionalInput kind="additionalinput" paths="$(LIBS)"/> <additionalInput kind="additionalinput" paths="$(LIBS)"/>
@@ -177,5 +180,12 @@
</scannerConfigBuildInfo> </scannerConfigBuildInfo>
</storageModule> </storageModule>
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/> <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
<storageModule moduleId="refreshScope"/> <storageModule moduleId="refreshScope" versionNumber="2">
<configuration configurationName="Debug">
<resource resourceType="PROJECT" workspacePath="/PCB-Heater"/>
</configuration>
<configuration configurationName="Release">
<resource resourceType="PROJECT" workspacePath="/PCB-Heater"/>
</configuration>
</storageModule>
</cproject> </cproject>

View File

@@ -5,7 +5,7 @@
<provider-reference id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.ui.UserLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="596919080754294639" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-690114333473919073" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>
@@ -17,7 +17,7 @@
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/> <provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/> <provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
<provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="596919080754294639" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true"> <provider class="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" console="false" env-hash="-690114333473919073" id="com.st.stm32cube.ide.mcu.toolchain.armnone.setup.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="MCU ARM GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/> <language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/> <language-scope id="org.eclipse.cdt.core.g++"/>
</provider> </provider>

View File

@@ -105,6 +105,7 @@ void Error_Handler(void);
#define TIM1_GC_GPIO_Port GPIOA #define TIM1_GC_GPIO_Port GPIOA
#define BUZZER_Pin GPIO_PIN_9 #define BUZZER_Pin GPIO_PIN_9
#define BUZZER_GPIO_Port GPIOB #define BUZZER_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
/* USER CODE END Private defines */ /* USER CODE END Private defines */

View File

@@ -49,6 +49,7 @@
void NMI_Handler(void); void NMI_Handler(void);
void HardFault_Handler(void); void HardFault_Handler(void);
void TIM6_IRQHandler(void); void TIM6_IRQHandler(void);
void TIM16_IRQHandler(void);
void TIM17_IRQHandler(void); void TIM17_IRQHandler(void);
/* USER CODE BEGIN EFP */ /* USER CODE BEGIN EFP */

View File

@@ -38,6 +38,8 @@ extern TIM_HandleTypeDef htim14;
extern TIM_HandleTypeDef htim15; extern TIM_HandleTypeDef htim15;
extern TIM_HandleTypeDef htim16;
extern TIM_HandleTypeDef htim17; extern TIM_HandleTypeDef htim17;
/* USER CODE BEGIN Private defines */ /* USER CODE BEGIN Private defines */
@@ -47,6 +49,7 @@ extern TIM_HandleTypeDef htim17;
void MX_TIM1_Init(void); void MX_TIM1_Init(void);
void MX_TIM14_Init(void); void MX_TIM14_Init(void);
void MX_TIM15_Init(void); void MX_TIM15_Init(void);
void MX_TIM16_Init(void);
void MX_TIM17_Init(void); void MX_TIM17_Init(void);
void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim);

View File

@@ -103,6 +103,10 @@ typedef struct {
#define SCR_DIALOG 3 #define SCR_DIALOG 3
#define SCR_BOOT 99 #define SCR_BOOT 99
//Pulses
#define P_WIDTH 40 // Triac gate Pulse width
#define P_DELAY 5 // Minimum delay before gate pulse
/* USER CODE END PD */ /* USER CODE END PD */
/* Private macro -------------------------------------------------------------*/ /* Private macro -------------------------------------------------------------*/
@@ -160,10 +164,13 @@ static uint8_t Stage = 0; //current stage of a profile
static float spp; //Seconds per pixel (horizontal) static float spp; //Seconds per pixel (horizontal)
static float dpp; //Degrees per pixel (vertical) static float dpp; //Degrees per pixel (vertical)
uint16_t Timer = 0; //Time counter uint16_t Timer = 0; //Time counter
uint16_t Timer10 = 0; //Time x10 counter
static uint8_t fanActive = 0; //Fans are active flag
static uint8_t Running = 0; //Running program flag
settings_t settings = { //settings structure settings_t settings = { //settings structure
20, // uint8_t temp_offset 20, // uint8_t temp_offset
0, // uint8_t color_scheme 0, // uint8_t color_scheme
0, // uint8_t btn_clicks 1, // uint8_t btn_clicks
100, // uint8_t brightness 100, // uint8_t brightness
0, // uint8_t language 0, // uint8_t language
1 // uint8_t boot_screen 1 // uint8_t boot_screen
@@ -183,13 +190,13 @@ const presets_t presets[4] = {
}; };
PIDController pid = { PIDController pid = {
.Kp = 40.0f, .Kp = 8.0f,
.Ki = 20.0f, .Ki = 0.2f,
.Kd = 5.0f, .Kd = 0.5f,
.T = 0.5f, //2 times per second .T = 0.25f, //2 times per second
.tau = 0.2f, //Low-pass filter (0 - no filter) .tau = 0.2f, //Low-pass filter (0 - no filter)
.limMin = 0.0f, .limMin = -100.0f,
.limMax = 969.0f .limMax = 100.0f
}; };
/* USER CODE END Variables */ /* USER CODE END Variables */
@@ -237,15 +244,19 @@ const osMutexAttr_t mutScreen_attributes = {
/* Private function prototypes -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */ /* USER CODE BEGIN FunctionPrototypes */
void btnPressed(uint8_t id); //buttons actions void btnPressed(uint8_t id); //buttons actions
void updateTInfo(void); void updateTInfo(uint16_t lvl);
void drawBootScreen(void); void drawBootScreen(void);
void drawMainScreen(void); void drawMainScreen(void);
void drawRunningScreen(void); void drawRunningScreen(void);
void drawSettingsScreen(void); void drawSettingsScreen(void);
void drawPlan(uint8_t use_mutex, uint8_t numbers, uint8_t wide); void drawPlan(uint8_t use_mutex, uint8_t numbers, uint8_t wide);
void playSound(uint8_t sound); //Play one of the beeps void playSound(uint8_t sound, uint8_t note); //Play one of the beeps
void playTestSound(); //Play a test sound
void setSoundPitch(uint8_t note); //Set sound pitch (note) 0-6 - A2-A8
void drawButton(uint8_t id, uint8_t func); //Draw a button by ID void drawButton(uint8_t id, uint8_t func); //Draw a button by ID
void setFansSpeed(uint8_t speed); //Set fans speed
void stopHeater(void); //Stop the heater and reset the PID
/* USER CODE END FunctionPrototypes */ /* USER CODE END FunctionPrototypes */
@@ -376,7 +387,7 @@ void svc_display(void *argument)
) { ) {
lastPressed = id; lastPressed = id;
playSound(S_CLICK); playSound(S_CLICK, 2);
osMutexAcquire(mutScreenHandle, osWaitForever); osMutexAcquire(mutScreenHandle, osWaitForever);
if (id < 4) { if (id < 4) {
@@ -441,9 +452,6 @@ void svc_sensor(void *argument)
/* Infinite loop */ /* Infinite loop */
float temp, res, res_old; float temp, res, res_old;
uint8_t i; uint8_t i;
uint16_t pulse;
int in, fr;
static char str[12] = {0};
PID_Init(&pid); PID_Init(&pid);
@@ -457,17 +465,9 @@ void svc_sensor(void *argument)
} }
if (temp >= 0.0f) { if (temp >= 0.0f) {
res = res / 3; res = res / 3;
//PID
if (Preset == 2) {
PID_Update(&pid, 35.0f, res);
pulse = (uint16_t)(pid.limMax - pid.out)+20;
TIM1->ARR = pulse+10;
TIM1->CCR2 = pulse;
}
} else { } else {
res = temp; res = temp;
PID_Init(&pid); stopHeater();
TIM1->CCR2 = 1020;
} }
Temperature = res; Temperature = res;
if (res != res_old) { if (res != res_old) {
@@ -475,19 +475,11 @@ void svc_sensor(void *argument)
osMessageQueuePut(tempUpdateHandle, &res, 0, 50); osMessageQueuePut(tempUpdateHandle, &res, 0, 50);
} }
//Draw PID value //If no program is running and T is more than 45C - turn on Fans; else - turn them off
if (Screen == SCR_RUNNING) { if (!Running && Temperature > 50.0f) setFansSpeed(100);
in = (int)(pid.out); if (!Running && Temperature <= 44.0f && fanActive) setFansSpeed(0);
fr = (int)((pid.out-in)*100);
snprintf(str, 7, "%3d.%02d", in, fr);
osMutexAcquire(mutScreenHandle, osWaitForever);
ST7793_SetFontSize(1);
ST7793_FillRect(Darkergray, 11, 180, 27, 192);
ST7793_DrawString(Black, Darkergray, str, 11, 180);
osMutexRelease(mutScreenHandle);
}
osDelay(500); osDelay(250);
} }
/* USER CODE END svc_sensor */ /* USER CODE END svc_sensor */
} }
@@ -533,18 +525,51 @@ void clockTick(void *argument)
uint16_t x, y; uint16_t x, y;
static uint16_t stime, stemp; //starting time and temperature for a stage static uint16_t stime, stemp; //starting time and temperature for a stage
static float dps; //degrees per second static float dps; //degrees per second
static uint16_t pulse; //to calculate pulse for TIM1
if (Temperature < 0.0f) { if (Temperature < 0.0f) {
osTimerStop(secTimerHandle); stopHeater();
return; return;
} }
if (Timer == 0) {
//PID
PID_Update(&pid, aimTemperature, Temperature);
if (pid.out >= 0.0f) {
pulse = (uint16_t)pid.out;
if (fanActive) setFansSpeed(0);
}
else {
pulse = 0;
setFansSpeed((uint8_t)(pid.out * -1));
}
TIM1->CCR2 = pulse;
//Draw PID value
if (Screen == SCR_RUNNING) {
snprintf(str, 7, "%3.2f", pid.out);
//snprintf(str, 7, "%3d.%02d", (int)pid.out, (int)((pid.out-(int)pid.out)*100));
osMutexAcquire(mutScreenHandle, osWaitForever);
ST7793_SetFontSize(1);
ST7793_FillRect(Darkergray, 11, 180, 27, 192);
ST7793_DrawString(Black, Darkergray, str, 11, 180);
snprintf(str, 7, "P:%4d", pulse);
ST7793_FillRect(Lightgray, 100, 50, 116, 62);
ST7793_DrawString(Black, Lightgray, str, 100, 50);
osMutexRelease(mutScreenHandle);
}
if (Timer == 0 && Timer10 == 0) {
stime = 0; stime = 0;
stemp = 20; stemp = 20;
dps = (presets[Preset].temperature[Stage] - stemp) / (float)(presets[Preset].time[Stage]); dps = (presets[Preset].temperature[Stage] - stemp) / (float)(presets[Preset].time[Stage]);
Running = 1;
} }
Timer10++;
if (Timer10%4 != 0) return;
Timer++; Timer++;
osMutexAcquire(mutScreenHandle, osWaitForever); osMutexAcquire(mutScreenHandle, osWaitForever);
@@ -553,7 +578,8 @@ void clockTick(void *argument)
ST7793_SetFontSize(2); ST7793_SetFontSize(2);
ST7793_DrawStringC(Yellow, Darkergray, "Done!", 210, 5); ST7793_DrawStringC(Yellow, Darkergray, "Done!", 210, 5);
osMutexRelease(mutScreenHandle); osMutexRelease(mutScreenHandle);
osTimerStop(secTimerHandle); stopHeater();
setFansSpeed(100);
return; return;
} }
@@ -580,63 +606,49 @@ void clockTick(void *argument)
//Calculate new aim temperature //Calculate new aim temperature
aimTemperature = (Timer - stime) * dps + stemp; aimTemperature = (Timer - stime) * dps + stemp;
snprintf(str, 8, "%3d.%02d", (int)aimTemperature, (int)((aimTemperature - (int)aimTemperature)*100)); snprintf(str, 8, "%3.2f", aimTemperature);
//snprintf(str, 8, "%3d.%02d", (int)aimTemperature, (int)((aimTemperature - (int)aimTemperature)*100));
ST7793_SetFontSize(1); ST7793_SetFontSize(1);
ST7793_DrawString(Black, Darkergray, str, 10, 140); ST7793_DrawString(Black, Darkergray, str, 10, 140);
osMutexRelease(mutScreenHandle); osMutexRelease(mutScreenHandle);
/* USER CODE END clockTick */ /* USER CODE END clockTick */
} }
/* Private application code --------------------------------------------------*/ /* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */ /* USER CODE BEGIN Application */
char str[10] = {0}; char str[10] = {0};
uint16_t lvl = 989; //uint16_t lvl = 989;
void btnPressed(uint8_t id) { void btnPressed(uint8_t id) {
switch (id) { switch (id) {
case BTN_PRE1: // PRE1 case BTN_PRE1: // PRE1
PID_Init(&pid);
TIM1->CCR2 = 1020;
ST7793_Brightness(99);
break; break;
case BTN_PRE2: // PRE2 case BTN_PRE2: // PRE2
lvl -= 50;
if (lvl < 60) lvl = 989;
TIM1->ARR = lvl+10;
TIM1->CCR2 = lvl;
//htim1.Instance->EGR |= 1;
updateTInfo();
ST7793_Brightness(75);
break; break;
case BTN_PRE3: // PRE3 case BTN_PRE3: // PRE3
PID_Init(&pid);
ST7793_Brightness(50);
break; break;
case BTN_PRE4: // PRE4 case BTN_PRE4: // PRE4
lvl += 50;
if (lvl > 930) lvl = 60;
TIM1->ARR = lvl+10;
TIM1->CCR2 = lvl;
updateTInfo();
ST7793_Brightness(25);
break; break;
case BTN_START: // START case BTN_START: // START
Timer = 0; Timer = 0;
Timer10 = 0;
Stage = 0; Stage = 0;
drawRunningScreen(); drawRunningScreen();
osTimerStart(secTimerHandle, 1000); osTimerStart(secTimerHandle, 250);
break; break;
case BTN_COG: // COG (Settings) case BTN_COG: // COG (Settings)
// drawBootScreen();
// osDelay(10000);
// drawMainScreen();
drawSettingsScreen(); drawSettingsScreen();
break; break;
case BTN_STOP: case BTN_STOP:
osTimerStop(secTimerHandle); stopHeater();
drawMainScreen(); drawMainScreen();
break; break;
case BTN_OK: case BTN_OK:
@@ -645,7 +657,7 @@ void btnPressed(uint8_t id) {
} }
} }
void updateTInfo(void) { void updateTInfo(uint16_t lvl) {
osMutexAcquire(mutScreenHandle, osWaitForever); osMutexAcquire(mutScreenHandle, osWaitForever);
ST7793_SetFontSize(1); ST7793_SetFontSize(1);
snprintf(str, 8, "T:%d", lvl); snprintf(str, 8, "T:%d", lvl);
@@ -818,7 +830,7 @@ void drawPlan(uint8_t use_mutex, uint8_t numbers, uint8_t wide) {
} }
//Play one of the beeps //Play one of the beeps
void playSound(uint8_t sound) { void playSound(uint8_t sound, uint8_t note) {
uint16_t time; uint16_t time;
uint8_t enabled = 1; uint8_t enabled = 1;
@@ -831,15 +843,52 @@ void playSound(uint8_t sound) {
break; break;
case S_CLICK: case S_CLICK:
if (!settings.btn_clicks) enabled = 0; if (!settings.btn_clicks) enabled = 0;
else time = 10; else time = 5;
break; break;
} }
if (enabled) { if (enabled) {
TIM17->ARR = time; setSoundPitch(note);
HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET); TIM16->ARR = time;
HAL_TIM_Base_Start_IT(&htim17); //HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET);
HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);
HAL_TIM_Base_Start_IT(&htim16);
} }
}
//Play a test sound
void playTestSound() {
static uint8_t i;
for (i=0; i<6; i++) {
setSoundPitch(i);
HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);
osDelay(500);
}
HAL_TIM_PWM_Stop(&htim17, TIM_CHANNEL_1);
}
//Set sound pitch
void setSoundPitch(uint8_t note) {
static const uint16_t notes[] = {
58182, //A2
29091, //A3
14545, //A4
7273, //A5
3636, //A6
1818, //A7
909 //A8
};
if (note > 6) note = 0;
htim17.Init.Period = notes[note];
HAL_TIM_Base_Init(&htim17);
TIM_OC_InitTypeDef conf = {0};
conf.OCMode = TIM_OCMODE_PWM1;
conf.Pulse = notes[note] >> 1;
conf.OCPolarity = TIM_OCPOLARITY_HIGH;
conf.OCFastMode = TIM_OCFAST_DISABLE;
HAL_TIM_PWM_ConfigChannel(&htim17, &conf, TIM_CHANNEL_1);
} }
//Draw a button by ID //Draw a button by ID
@@ -857,5 +906,31 @@ void drawButton(uint8_t id, uint8_t func) {
func func
); );
} }
//Set fans speed
void setFansSpeed(uint8_t speed) {
if (speed == 0) {
if (fanActive) {
HAL_TIM_PWM_Stop(&htim14, TIM_CHANNEL_1);
fanActive = 0;
}
} else {
if (speed > 100) speed = 100;
TIM14->CCR1 = speed;
if (!fanActive) {
fanActive = 1;
HAL_TIM_PWM_Start(&htim14, TIM_CHANNEL_1);
}
}
}
//Stop the heater and reset the PID
void stopHeater(void) {
if (osTimerIsRunning(secTimerHandle)) osTimerStop(secTimerHandle);
aimTemperature = 0.0f;
PID_Init(&pid);
TIM1->CCR2 = 0;
Running = 0;
}
/* USER CODE END Application */ /* USER CODE END Application */

View File

@@ -58,7 +58,7 @@ void MX_GPIO_Init(void)
|LCD_D4_Pin|LCD_D5_Pin|LCD_D6_Pin|LCD_D7_Pin, GPIO_PIN_RESET); |LCD_D4_Pin|LCD_D5_Pin|LCD_D6_Pin|LCD_D7_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(GPIOB, LCD_RS_Pin|LCD_WR_Pin|BUZZER_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, LCD_RS_Pin|LCD_WR_Pin, GPIO_PIN_RESET);
/*Configure GPIO pin Output Level */ /*Configure GPIO pin Output Level */
HAL_GPIO_WritePin(MAX_CS_GPIO_Port, MAX_CS_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(MAX_CS_GPIO_Port, MAX_CS_Pin, GPIO_PIN_SET);
@@ -99,12 +99,12 @@ void MX_GPIO_Init(void)
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
/*Configure GPIO pins : PBPin PBPin */ /*Configure GPIO pin : PtPin */
GPIO_InitStruct.Pin = MAX_CS_Pin|BUZZER_Pin; GPIO_InitStruct.Pin = MAX_CS_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_Init(MAX_CS_GPIO_Port, &GPIO_InitStruct);
} }

View File

@@ -98,8 +98,16 @@ int main(void)
MX_TIM15_Init(); MX_TIM15_Init();
MX_TIM14_Init(); MX_TIM14_Init();
MX_USART1_UART_Init(); MX_USART1_UART_Init();
MX_TIM16_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
__HAL_TIM_CLEAR_FLAG(&htim17, TIM_SR_UIF); //clear the update flag so it wont trigger right away;
// TIM1 - Zero crossing and Triac duty
// TIM14 - Cooling fans PWM
// TIM15 - LCD backlight PWM
// TIM16 - Count beep duration
// TIM17 - PWM for passive buzzer
__HAL_TIM_CLEAR_FLAG(&htim16, TIM_SR_UIF); //clear the update flag so it wont trigger right away;
if (ST7793_Init() != 0) { if (ST7793_Init() != 0) {
HAL_GPIO_WritePin(LED_Status_GPIO_Port, LED_Status_Pin, GPIO_PIN_SET); HAL_GPIO_WritePin(LED_Status_GPIO_Port, LED_Status_Pin, GPIO_PIN_SET);
while (1) {;} while (1) {;}
@@ -109,6 +117,14 @@ int main(void)
HAL_TIM_OnePulse_Start(&htim1, 2); HAL_TIM_OnePulse_Start(&htim1, 2);
//TIM1->CR1 |= TIM_CR1_CEN; //TIM1->CR1 |= TIM_CR1_CEN;
HAL_TIM_PWM_Start(&htim15, TIM_CHANNEL_1); HAL_TIM_PWM_Start(&htim15, TIM_CHANNEL_1);
HAL_TIM_Base_Start(&htim14);
//HAL_TIM_Base_Start(&htim17);
// Boot beep
HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1);
HAL_Delay(70);
HAL_TIM_PWM_Stop(&htim17, TIM_CHANNEL_1);
/* USER CODE END 2 */ /* USER CODE END 2 */
/* Init scheduler */ /* Init scheduler */
@@ -198,9 +214,10 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
} }
/* USER CODE BEGIN Callback 1 */ /* USER CODE BEGIN Callback 1 */
if (htim->Instance == TIM17) { if (htim->Instance == TIM16) {
HAL_TIM_Base_Stop_IT(&htim17); HAL_TIM_Base_Stop_IT(&htim16);
HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET); HAL_TIM_PWM_Stop(&htim17, TIM_CHANNEL_1);
//HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);
} }
/* USER CODE END Callback 1 */ /* USER CODE END Callback 1 */

View File

@@ -22,7 +22,7 @@ void PID_Init(PIDController *pid) {
float PID_Update(PIDController *pid, float setpoint, float measurement) { float PID_Update(PIDController *pid, float setpoint, float measurement) {
// PID = Kp + Ki * 1/s + Kd * s/(s*tau+1) // PID = Kp + Ki * 1/s + Kd * s/(s*tau+1)
// e = error tothe setpoint // e = error to the setpoint
// p[n] = Kp * e[n] // p[n] = Kp * e[n]
// i[n] = Ki*T/2 * (e[n]+e[n-1]) + i[n-1] // i[n] = Ki*T/2 * (e[n]+e[n-1]) + i[n-1]
// d[n] = 2*Kd/(2*tau+T) * (e[n]-e[n-1]) + (2*tau-T)/(2*tau+T) * d[n-1] // d[n] = 2*Kd/(2*tau+T) * (e[n]-e[n-1]) + (2*tau-T)/(2*tau+T) * d[n-1]

View File

@@ -20,6 +20,7 @@
/* Includes ------------------------------------------------------------------*/ /* Includes ------------------------------------------------------------------*/
#include "main.h" #include "main.h"
/* USER CODE BEGIN Includes */ /* USER CODE BEGIN Includes */
/* USER CODE END Includes */ /* USER CODE END Includes */

View File

@@ -72,6 +72,7 @@ HAL_StatusTypeDef HAL_InitTick(uint32_t TickPriority)
htim6.Instance = TIM6; htim6.Instance = TIM6;
/* Initialize TIMx peripheral as follow: /* Initialize TIMx peripheral as follow:
+ Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base. + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base.
+ Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock. + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock.
+ ClockDivision = 0 + ClockDivision = 0

View File

@@ -55,6 +55,7 @@
/* USER CODE END 0 */ /* USER CODE END 0 */
/* External variables --------------------------------------------------------*/ /* External variables --------------------------------------------------------*/
extern TIM_HandleTypeDef htim16;
extern TIM_HandleTypeDef htim17; extern TIM_HandleTypeDef htim17;
extern TIM_HandleTypeDef htim6; extern TIM_HandleTypeDef htim6;
@@ -116,6 +117,20 @@ void TIM6_IRQHandler(void)
/* USER CODE END TIM6_IRQn 1 */ /* USER CODE END TIM6_IRQn 1 */
} }
/**
* @brief This function handles TIM16 global interrupt.
*/
void TIM16_IRQHandler(void)
{
/* USER CODE BEGIN TIM16_IRQn 0 */
/* USER CODE END TIM16_IRQn 0 */
HAL_TIM_IRQHandler(&htim16);
/* USER CODE BEGIN TIM16_IRQn 1 */
/* USER CODE END TIM16_IRQn 1 */
}
/** /**
* @brief This function handles TIM17 global interrupt. * @brief This function handles TIM17 global interrupt.
*/ */

View File

@@ -27,6 +27,7 @@
TIM_HandleTypeDef htim1; TIM_HandleTypeDef htim1;
TIM_HandleTypeDef htim14; TIM_HandleTypeDef htim14;
TIM_HandleTypeDef htim15; TIM_HandleTypeDef htim15;
TIM_HandleTypeDef htim16;
TIM_HandleTypeDef htim17; TIM_HandleTypeDef htim17;
/* TIM1 init function */ /* TIM1 init function */
@@ -37,10 +38,8 @@ void MX_TIM1_Init(void)
/* USER CODE END TIM1_Init 0 */ /* USER CODE END TIM1_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_SlaveConfigTypeDef sSlaveConfig = {0}; TIM_SlaveConfigTypeDef sSlaveConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_IC_InitTypeDef sConfigIC = {0};
TIM_OC_InitTypeDef sConfigOC = {0}; TIM_OC_InitTypeDef sConfigOC = {0};
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
@@ -48,36 +47,23 @@ void MX_TIM1_Init(void)
/* USER CODE END TIM1_Init 1 */ /* USER CODE END TIM1_Init 1 */
htim1.Instance = TIM1; htim1.Instance = TIM1;
htim1.Init.Prescaler = 640-1; htim1.Init.Prescaler = 1;
htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
htim1.Init.Period = 999; htim1.Init.Period = 100-1;
htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim1.Init.RepetitionCounter = 0; htim1.Init.RepetitionCounter = 0;
htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim1) != HAL_OK) if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
{ {
Error_Handler(); Error_Handler();
} }
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_IC_Init(&htim1) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) if (HAL_TIM_PWM_Init(&htim1) != HAL_OK)
{ {
Error_Handler(); Error_Handler();
} }
if (HAL_TIM_OnePulse_Init(&htim1, TIM_OPMODE_SINGLE) != HAL_OK) sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;
{
Error_Handler();
}
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_COMBINED_RESETTRIGGER;
sSlaveConfig.InputTrigger = TIM_TS_TI1FP1; sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
sSlaveConfig.TriggerPolarity = TIM_INPUTCHANNELPOLARITY_RISING; sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING;
sSlaveConfig.TriggerFilter = 0; sSlaveConfig.TriggerFilter = 0;
if (HAL_TIM_SlaveConfigSynchro(&htim1, &sSlaveConfig) != HAL_OK) if (HAL_TIM_SlaveConfigSynchro(&htim1, &sSlaveConfig) != HAL_OK)
{ {
@@ -90,16 +76,8 @@ void MX_TIM1_Init(void)
{ {
Error_Handler(); Error_Handler();
} }
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigOC.Pulse = 0;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 0;
if (HAL_TIM_IC_ConfigChannel(&htim1, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM2;
sConfigOC.Pulse = 1020;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
@@ -147,9 +125,9 @@ void MX_TIM14_Init(void)
/* USER CODE END TIM14_Init 1 */ /* USER CODE END TIM14_Init 1 */
htim14.Instance = TIM14; htim14.Instance = TIM14;
htim14.Init.Prescaler = 0; htim14.Init.Prescaler = 10-1;
htim14.Init.CounterMode = TIM_COUNTERMODE_UP; htim14.Init.CounterMode = TIM_COUNTERMODE_UP;
htim14.Init.Period = 65535; htim14.Init.Period = 100-1;
htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim14.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; htim14.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim14) != HAL_OK) if (HAL_TIM_Base_Init(&htim14) != HAL_OK)
@@ -161,7 +139,7 @@ void MX_TIM14_Init(void)
Error_Handler(); Error_Handler();
} }
sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0; sConfigOC.Pulse = 100;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim14, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) if (HAL_TIM_PWM_ConfigChannel(&htim14, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
@@ -191,7 +169,7 @@ void MX_TIM15_Init(void)
/* USER CODE END TIM15_Init 1 */ /* USER CODE END TIM15_Init 1 */
htim15.Instance = TIM15; htim15.Instance = TIM15;
htim15.Init.Prescaler = 320-1; htim15.Init.Prescaler = 640-1;
htim15.Init.CounterMode = TIM_COUNTERMODE_UP; htim15.Init.CounterMode = TIM_COUNTERMODE_UP;
htim15.Init.Period = 100-1; htim15.Init.Period = 100-1;
htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim15.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
@@ -244,6 +222,37 @@ void MX_TIM15_Init(void)
/* USER CODE END TIM15_Init 2 */ /* USER CODE END TIM15_Init 2 */
HAL_TIM_MspPostInit(&htim15); HAL_TIM_MspPostInit(&htim15);
}
/* TIM16 init function */
void MX_TIM16_Init(void)
{
/* USER CODE BEGIN TIM16_Init 0 */
/* USER CODE END TIM16_Init 0 */
/* USER CODE BEGIN TIM16_Init 1 */
/* USER CODE END TIM16_Init 1 */
htim16.Instance = TIM16;
htim16.Init.Prescaler = 64000-1;
htim16.Init.CounterMode = TIM_COUNTERMODE_UP;
htim16.Init.Period = 999;
htim16.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim16.Init.RepetitionCounter = 0;
htim16.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
if (HAL_TIM_Base_Init(&htim16) != HAL_OK)
{
Error_Handler();
}
if (HAL_TIM_OnePulse_Init(&htim16, TIM_OPMODE_SINGLE) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN TIM16_Init 2 */
/* USER CODE END TIM16_Init 2 */
} }
/* TIM17 init function */ /* TIM17 init function */
void MX_TIM17_Init(void) void MX_TIM17_Init(void)
@@ -253,13 +262,16 @@ void MX_TIM17_Init(void)
/* USER CODE END TIM17_Init 0 */ /* USER CODE END TIM17_Init 0 */
TIM_OC_InitTypeDef sConfigOC = {0};
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
/* USER CODE BEGIN TIM17_Init 1 */ /* USER CODE BEGIN TIM17_Init 1 */
/* USER CODE END TIM17_Init 1 */ /* USER CODE END TIM17_Init 1 */
htim17.Instance = TIM17; htim17.Instance = TIM17;
htim17.Init.Prescaler = 64000-1; htim17.Init.Prescaler = 10-1;
htim17.Init.CounterMode = TIM_COUNTERMODE_UP; htim17.Init.CounterMode = TIM_COUNTERMODE_UP;
htim17.Init.Period = 999; htim17.Init.Period = 14545-1;
htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim17.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim17.Init.RepetitionCounter = 0; htim17.Init.RepetitionCounter = 0;
htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; htim17.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
@@ -267,13 +279,37 @@ void MX_TIM17_Init(void)
{ {
Error_Handler(); Error_Handler();
} }
if (HAL_TIM_OnePulse_Init(&htim17, TIM_OPMODE_SINGLE) != HAL_OK) if (HAL_TIM_PWM_Init(&htim17) != HAL_OK)
{
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 7272;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel(&htim17, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
{
Error_Handler();
}
sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE;
sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE;
sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF;
sBreakDeadTimeConfig.DeadTime = 0;
sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE;
sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH;
sBreakDeadTimeConfig.BreakFilter = 0;
sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_TIMEx_ConfigBreakDeadTime(&htim17, &sBreakDeadTimeConfig) != HAL_OK)
{ {
Error_Handler(); Error_Handler();
} }
/* USER CODE BEGIN TIM17_Init 2 */ /* USER CODE BEGIN TIM17_Init 2 */
/* USER CODE END TIM17_Init 2 */ /* USER CODE END TIM17_Init 2 */
HAL_TIM_MspPostInit(&htim17);
} }
@@ -326,6 +362,21 @@ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM15_MspInit 1 */ /* USER CODE END TIM15_MspInit 1 */
} }
else if(tim_baseHandle->Instance==TIM16)
{
/* USER CODE BEGIN TIM16_MspInit 0 */
/* USER CODE END TIM16_MspInit 0 */
/* TIM16 clock enable */
__HAL_RCC_TIM16_CLK_ENABLE();
/* TIM16 interrupt Init */
HAL_NVIC_SetPriority(TIM16_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(TIM16_IRQn);
/* USER CODE BEGIN TIM16_MspInit 1 */
/* USER CODE END TIM16_MspInit 1 */
}
else if(tim_baseHandle->Instance==TIM17) else if(tim_baseHandle->Instance==TIM17)
{ {
/* USER CODE BEGIN TIM17_MspInit 0 */ /* USER CODE BEGIN TIM17_MspInit 0 */
@@ -408,6 +459,27 @@ void HAL_TIM_MspPostInit(TIM_HandleTypeDef* timHandle)
/* USER CODE END TIM15_MspPostInit 1 */ /* USER CODE END TIM15_MspPostInit 1 */
} }
else if(timHandle->Instance==TIM17)
{
/* USER CODE BEGIN TIM17_MspPostInit 0 */
/* USER CODE END TIM17_MspPostInit 0 */
__HAL_RCC_GPIOB_CLK_ENABLE();
/**TIM17 GPIO Configuration
PB9 ------> TIM17_CH1
*/
GPIO_InitStruct.Pin = BUZZER_Pin;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM17;
HAL_GPIO_Init(BUZZER_GPIO_Port, &GPIO_InitStruct);
/* USER CODE BEGIN TIM17_MspPostInit 1 */
/* USER CODE END TIM17_MspPostInit 1 */
}
} }
@@ -454,6 +526,20 @@ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* tim_baseHandle)
/* USER CODE END TIM15_MspDeInit 1 */ /* USER CODE END TIM15_MspDeInit 1 */
} }
else if(tim_baseHandle->Instance==TIM16)
{
/* USER CODE BEGIN TIM16_MspDeInit 0 */
/* USER CODE END TIM16_MspDeInit 0 */
/* Peripheral clock disable */
__HAL_RCC_TIM16_CLK_DISABLE();
/* TIM16 interrupt Deinit */
HAL_NVIC_DisableIRQ(TIM16_IRQn);
/* USER CODE BEGIN TIM16_MspDeInit 1 */
/* USER CODE END TIM16_MspDeInit 1 */
}
else if(tim_baseHandle->Instance==TIM17) else if(tim_baseHandle->Instance==TIM17)
{ {
/* USER CODE BEGIN TIM17_MspDeInit 0 */ /* USER CODE BEGIN TIM17_MspDeInit 0 */

View File

@@ -28,7 +28,8 @@ Mcu.CPN=STM32G070RBT6
Mcu.Family=STM32G0 Mcu.Family=STM32G0
Mcu.IP0=ADC1 Mcu.IP0=ADC1
Mcu.IP1=FREERTOS Mcu.IP1=FREERTOS
Mcu.IP10=USART1 Mcu.IP10=TIM17
Mcu.IP11=USART1
Mcu.IP2=NVIC Mcu.IP2=NVIC
Mcu.IP3=RCC Mcu.IP3=RCC
Mcu.IP4=SPI2 Mcu.IP4=SPI2
@@ -36,8 +37,8 @@ Mcu.IP5=SYS
Mcu.IP6=TIM1 Mcu.IP6=TIM1
Mcu.IP7=TIM14 Mcu.IP7=TIM14
Mcu.IP8=TIM15 Mcu.IP8=TIM15
Mcu.IP9=TIM17 Mcu.IP9=TIM16
Mcu.IPNb=11 Mcu.IPNb=12
Mcu.Name=STM32G070RBTx Mcu.Name=STM32G070RBTx
Mcu.Package=LQFP64 Mcu.Package=LQFP64
Mcu.Pin0=PC12 Mcu.Pin0=PC12
@@ -68,25 +69,24 @@ Mcu.Pin30=PB9
Mcu.Pin31=VP_FREERTOS_VS_CMSIS_V2 Mcu.Pin31=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin32=VP_SYS_VS_tim6 Mcu.Pin32=VP_SYS_VS_tim6
Mcu.Pin33=VP_SYS_VS_DBSignals Mcu.Pin33=VP_SYS_VS_DBSignals
Mcu.Pin34=VP_TIM1_VS_ControllerModeCombinedResetTrigger Mcu.Pin34=VP_TIM1_VS_ControllerModeClock
Mcu.Pin35=VP_TIM1_VS_ClockSourceINT Mcu.Pin35=VP_TIM14_VS_ClockSourceINT
Mcu.Pin36=VP_TIM1_VS_OPM Mcu.Pin36=VP_TIM15_VS_ClockSourceINT
Mcu.Pin37=VP_TIM14_VS_ClockSourceINT Mcu.Pin37=VP_TIM16_VS_ClockSourceINT
Mcu.Pin38=VP_TIM15_VS_ClockSourceINT Mcu.Pin38=VP_TIM16_VS_OPM
Mcu.Pin39=VP_TIM17_VS_ClockSourceINT Mcu.Pin39=VP_TIM17_VS_ClockSourceINT
Mcu.Pin4=PC1 Mcu.Pin4=PC1
Mcu.Pin40=VP_TIM17_VS_OPM
Mcu.Pin5=PC2 Mcu.Pin5=PC2
Mcu.Pin6=PC3 Mcu.Pin6=PC3
Mcu.Pin7=PA0 Mcu.Pin7=PA0
Mcu.Pin8=PA1 Mcu.Pin8=PA1
Mcu.Pin9=PA2 Mcu.Pin9=PA2
Mcu.PinsNb=41 Mcu.PinsNb=40
Mcu.ThirdPartyNb=0 Mcu.ThirdPartyNb=0
Mcu.UserConstants= Mcu.UserConstants=
Mcu.UserName=STM32G070RBTx Mcu.UserName=STM32G070RBTx
MxCube.Version=6.6.1 MxCube.Version=6.9.1
MxDb.Version=DB.6.0.60 MxDb.Version=DB.6.0.91
NVIC.ForceEnableDMAVector=true NVIC.ForceEnableDMAVector=true
NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
@@ -96,6 +96,7 @@ NVIC.SavedPendsvIrqHandlerGenerated=true
NVIC.SavedSvcallIrqHandlerGenerated=true NVIC.SavedSvcallIrqHandlerGenerated=true
NVIC.SavedSystickIrqHandlerGenerated=true NVIC.SavedSystickIrqHandlerGenerated=true
NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:false\:true\:false\:true\:false NVIC.SysTick_IRQn=true\:3\:0\:false\:false\:false\:true\:false\:true\:false
NVIC.TIM16_IRQn=true\:3\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.TIM17_IRQn=true\:3\:0\:false\:false\:true\:true\:true\:true\:true NVIC.TIM17_IRQn=true\:3\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.TIM6_IRQn=true\:3\:0\:false\:false\:true\:false\:false\:true\:true NVIC.TIM6_IRQn=true\:3\:0\:false\:false\:true\:false\:false\:true\:true
NVIC.TimeBase=TIM6_IRQn NVIC.TimeBase=TIM6_IRQn
@@ -189,11 +190,10 @@ PB6.Signal=USART1_TX
PB7.Locked=true PB7.Locked=true
PB7.Mode=Asynchronous PB7.Mode=Asynchronous
PB7.Signal=USART1_RX PB7.Signal=USART1_RX
PB9.GPIOParameters=GPIO_Speed,GPIO_Label PB9.GPIOParameters=GPIO_Label
PB9.GPIO_Label=BUZZER PB9.GPIO_Label=BUZZER
PB9.GPIO_Speed=GPIO_SPEED_FREQ_HIGH
PB9.Locked=true PB9.Locked=true
PB9.Signal=GPIO_Output PB9.Signal=S_TIM17_CH1
PC1.GPIOParameters=GPIO_Label PC1.GPIOParameters=GPIO_Label
PC1.GPIO_Label=LCD_LED PC1.GPIO_Label=LCD_LED
PC1.Signal=S_TIM15_CH1 PC1.Signal=S_TIM15_CH1
@@ -252,12 +252,15 @@ ProjectManager.PreviousToolchain=STM32CubeIDE
ProjectManager.ProjectBuild=false ProjectManager.ProjectBuild=false
ProjectManager.ProjectFileName=PCB-Heater.ioc ProjectManager.ProjectFileName=PCB-Heater.ioc
ProjectManager.ProjectName=PCB-Heater ProjectManager.ProjectName=PCB-Heater
ProjectManager.ProjectStructure=
ProjectManager.RegisterCallBack= ProjectManager.RegisterCallBack=
ProjectManager.StackSize=0x400 ProjectManager.StackSize=0x400
ProjectManager.TargetToolchain=STM32CubeIDE ProjectManager.TargetToolchain=STM32CubeIDE
ProjectManager.ToolChainLocation= ProjectManager.ToolChainLocation=
ProjectManager.UAScriptAfterPath=
ProjectManager.UAScriptBeforePath=
ProjectManager.UnderRoot=true ProjectManager.UnderRoot=true
ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_TIM1_Init-TIM1-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_SPI2_Init-SPI2-false-HAL-true,6-MX_TIM17_Init-TIM17-false-HAL-true,7-MX_TIM15_Init-TIM15-false-HAL-true,8-MX_TIM14_Init-TIM14-false-HAL-true,9-MX_USART1_UART_Init-USART1-false-HAL-true ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_TIM1_Init-TIM1-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_SPI2_Init-SPI2-false-HAL-true,6-MX_TIM17_Init-TIM17-false-HAL-true,7-MX_TIM15_Init-TIM15-false-HAL-true,8-MX_TIM14_Init-TIM14-false-HAL-true,9-MX_USART1_UART_Init-USART1-false-HAL-true,10-MX_TIM16_Init-TIM16-false-HAL-true
RCC.ADCFreq_Value=64000000 RCC.ADCFreq_Value=64000000
RCC.AHBFreq_Value=64000000 RCC.AHBFreq_Value=64000000
RCC.APBFreq_Value=64000000 RCC.APBFreq_Value=64000000
@@ -289,9 +292,10 @@ SH.S_TIM14_CH1.0=TIM14_CH1,PWM Generation1 CH1
SH.S_TIM14_CH1.ConfNb=1 SH.S_TIM14_CH1.ConfNb=1
SH.S_TIM15_CH1.0=TIM15_CH1,PWM Generation1 CH1 SH.S_TIM15_CH1.0=TIM15_CH1,PWM Generation1 CH1
SH.S_TIM15_CH1.ConfNb=1 SH.S_TIM15_CH1.ConfNb=1
SH.S_TIM1_CH1.0=TIM1_CH1,Input_Capture1_from_TI1 SH.S_TIM17_CH1.0=TIM17_CH1,PWM Generation1 CH1
SH.S_TIM1_CH1.1=TIM1_CH1,TriggerSource_TI1FP1 SH.S_TIM17_CH1.ConfNb=1
SH.S_TIM1_CH1.ConfNb=2 SH.S_TIM1_CH1.0=TIM1_CH1,TriggerSource_TI1FP1
SH.S_TIM1_CH1.ConfNb=1
SH.S_TIM1_CH2.0=TIM1_CH2,PWM Generation2 CH2 SH.S_TIM1_CH2.0=TIM1_CH2,PWM Generation2 CH2
SH.S_TIM1_CH2.ConfNb=1 SH.S_TIM1_CH2.ConfNb=1
SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16 SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
@@ -301,29 +305,35 @@ SPI2.Direction=SPI_DIRECTION_2LINES_RXONLY
SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,DataSize,BaudRatePrescaler
SPI2.Mode=SPI_MODE_MASTER SPI2.Mode=SPI_MODE_MASTER
SPI2.VirtualType=VM_MASTER SPI2.VirtualType=VM_MASTER
TIM1.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE TIM1.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM1.AutomaticOutput=TIM_AUTOMATICOUTPUT_DISABLE TIM1.AutomaticOutput=TIM_AUTOMATICOUTPUT_DISABLE
TIM1.BreakState=TIM_BREAK_DISABLE TIM1.BreakState=TIM_BREAK_DISABLE
TIM1.Channel-Input_Capture1_from_TI1=TIM_CHANNEL_1
TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM1.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
TIM1.ICPolarity_CH1=TIM_INPUTCHANNELPOLARITY_RISING TIM1.IPParameters=AutoReloadPreload,Prescaler,Period,BreakState,AutomaticOutput,OCPolarity_2,Channel-PWM Generation2 CH2,OCMode_PWM-PWM Generation2 CH2,Pulse-PWM Generation2 CH2,OC2Preload_PWM
TIM1.IPParameters=AutoReloadPreload,Prescaler,Period,BreakState,AutomaticOutput,Channel-Input_Capture1_from_TI1,ICPolarity_CH1,OCPolarity_2,Channel-PWM Generation2 CH2,OCMode_PWM-PWM Generation2 CH2,Pulse-PWM Generation2 CH2,OC2Preload_PWM
TIM1.OC2Preload_PWM=DISABLE TIM1.OC2Preload_PWM=DISABLE
TIM1.OCMode_PWM-PWM\ Generation2\ CH2=TIM_OCMODE_PWM2 TIM1.OCMode_PWM-PWM\ Generation2\ CH2=TIM_OCMODE_PWM1
TIM1.OCPolarity_2=TIM_OCPOLARITY_HIGH TIM1.OCPolarity_2=TIM_OCPOLARITY_HIGH
TIM1.Period=999 TIM1.Period=100-1
TIM1.Prescaler=640-1 TIM1.Prescaler=1
TIM1.Pulse-PWM\ Generation2\ CH2=1020 TIM1.Pulse-PWM\ Generation2\ CH2=0
TIM14.Channel=TIM_CHANNEL_1 TIM14.Channel=TIM_CHANNEL_1
TIM14.IPParameters=Channel TIM14.IPParameters=Channel,Prescaler,Period,Pulse
TIM14.Period=100-1
TIM14.Prescaler=10-1
TIM14.Pulse=100
TIM15.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 TIM15.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
TIM15.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period TIM15.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period
TIM15.Period=100-1 TIM15.Period=100-1
TIM15.Prescaler=320-1 TIM15.Prescaler=640-1
TIM16.IPParameters=Prescaler,Period
TIM16.Period=999
TIM16.Prescaler=64000-1
TIM17.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE TIM17.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE
TIM17.IPParameters=Prescaler,Period,AutoReloadPreload TIM17.Channel=TIM_CHANNEL_1
TIM17.Period=999 TIM17.IPParameters=Prescaler,Period,AutoReloadPreload,Channel,Pulse
TIM17.Prescaler=64000-1 TIM17.Period=14545-1
TIM17.Prescaler=10-1
TIM17.Pulse=7272
USART1.IPParameters=VirtualMode-Asynchronous USART1.IPParameters=VirtualMode-Asynchronous
USART1.VirtualMode-Asynchronous=VM_ASYNC USART1.VirtualMode-Asynchronous=VM_ASYNC
VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
@@ -336,15 +346,14 @@ VP_TIM14_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM14_VS_ClockSourceINT.Signal=TIM14_VS_ClockSourceINT VP_TIM14_VS_ClockSourceINT.Signal=TIM14_VS_ClockSourceINT
VP_TIM15_VS_ClockSourceINT.Mode=Internal VP_TIM15_VS_ClockSourceINT.Mode=Internal
VP_TIM15_VS_ClockSourceINT.Signal=TIM15_VS_ClockSourceINT VP_TIM15_VS_ClockSourceINT.Signal=TIM15_VS_ClockSourceINT
VP_TIM16_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM16_VS_ClockSourceINT.Signal=TIM16_VS_ClockSourceINT
VP_TIM16_VS_OPM.Mode=OPM_bit
VP_TIM16_VS_OPM.Signal=TIM16_VS_OPM
VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer VP_TIM17_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT VP_TIM17_VS_ClockSourceINT.Signal=TIM17_VS_ClockSourceINT
VP_TIM17_VS_OPM.Mode=OPM_bit VP_TIM1_VS_ControllerModeClock.Mode=Clock Mode
VP_TIM17_VS_OPM.Signal=TIM17_VS_OPM VP_TIM1_VS_ControllerModeClock.Signal=TIM1_VS_ControllerModeClock
VP_TIM1_VS_ClockSourceINT.Mode=Internal
VP_TIM1_VS_ClockSourceINT.Signal=TIM1_VS_ClockSourceINT
VP_TIM1_VS_ControllerModeCombinedResetTrigger.Mode=Combined_Reset_Trigger_Mode
VP_TIM1_VS_ControllerModeCombinedResetTrigger.Signal=TIM1_VS_ControllerModeCombinedResetTrigger
VP_TIM1_VS_OPM.Mode=OPM_bit
VP_TIM1_VS_OPM.Signal=TIM1_VS_OPM
board=custom board=custom
rtos.0.ip=FREERTOS
isbadioc=false isbadioc=false

BIN
images/CAD1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 KiB

BIN
kicad/pcb-heater/BOM.xlsx Normal file

Binary file not shown.

View File

@@ -391,18 +391,23 @@
"rule_severities": { "rule_severities": {
"bus_definition_conflict": "error", "bus_definition_conflict": "error",
"bus_entry_needed": "error", "bus_entry_needed": "error",
"bus_label_syntax": "error",
"bus_to_bus_conflict": "error", "bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error", "bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error", "different_unit_footprint": "error",
"different_unit_net": "error", "different_unit_net": "error",
"duplicate_reference": "error", "duplicate_reference": "error",
"duplicate_sheet_names": "error", "duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error", "extra_units": "error",
"global_label_dangling": "warning", "global_label_dangling": "warning",
"hier_label_mismatch": "error", "hier_label_mismatch": "error",
"label_dangling": "error", "label_dangling": "error",
"lib_symbol_issues": "warning", "lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning", "multiple_net_names": "warning",
"net_not_bus_member": "warning", "net_not_bus_member": "warning",
"no_connect_connected": "warning", "no_connect_connected": "warning",
@@ -412,6 +417,7 @@
"pin_to_pin": "warning", "pin_to_pin": "warning",
"power_pin_not_driven": "error", "power_pin_not_driven": "error",
"similar_labels": "warning", "similar_labels": "warning",
"simulation_model_issue": "error",
"unannotated": "error", "unannotated": "error",
"unit_value_mismatch": "error", "unit_value_mismatch": "error",
"unresolved_variable": "error", "unresolved_variable": "error",
@@ -467,6 +473,8 @@
"schematic": { "schematic": {
"annotate_start_num": 0, "annotate_start_num": 0,
"drawing": { "drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0, "default_line_thickness": 6.0,
"default_text_size": 50.0, "default_text_size": 50.0,
"field_names": [], "field_names": [],
@@ -498,7 +506,11 @@
"page_layout_descr_file": "", "page_layout_descr_file": "",
"plot_directory": "", "plot_directory": "",
"spice_adjust_passive_values": false, "spice_adjust_passive_values": false,
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"", "spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65, "subpart_first_id": 65,
"subpart_id_separator": 0 "subpart_id_separator": 0
}, },

View File

@@ -6901,7 +6901,7 @@
(property "Reference" "F1" (at 143.51 32.385 90) (property "Reference" "F1" (at 143.51 32.385 90)
(effects (font (size 1.27 1.27))) (effects (font (size 1.27 1.27)))
) )
(property "Value" "0.5A" (at 144.145 35.56 90) (property "Value" "5A" (at 144.145 35.56 90)
(effects (font (size 1.27 1.27))) (effects (font (size 1.27 1.27)))
) )
(property "Footprint" "my_additions:Fuse_1808_0451_Holder_HandSolder" (at 149.86 32.385 0) (property "Footprint" "my_additions:Fuse_1808_0451_Holder_HandSolder" (at 149.86 32.385 0)

Binary file not shown.