Browse Source

add blowser ctrl and air compressor ctrl code

DT100B
zhaohe 3 weeks ago
parent
commit
591ceda46e
  1. 18
      .cproject
  2. 4
      .mxproject
  3. 4
      .settings/stm32cubeide.project.prefs
  4. 2
      stm32halport
  5. 72
      transmit_disinfection_micro.ioc
  6. 129
      usrc/board/hal/dbdm_power_ctrl_board.cpp
  7. 11
      usrc/board/hal/dbdm_power_ctrl_board.hpp
  8. 20
      usrc/dmapp_service/air_compressor_ctrl_service.cpp
  9. 35
      usrc/dmapp_service/blower_ctrl_service.cpp

18
.cproject

@ -30,7 +30,7 @@
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoscanffloat.176411214" name="Use float with scanf from newlib-nano (-u _scanf_float)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoscanffloat" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat.164943344" name="Use float with printf from newlib-nano (-u _printf_float)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.nanoprintffloat" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.386899990" name="Toolchain" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.base.gnu-tools-for-stm32.12.3.rel1" valueType="string"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.runtimelibrary_cpp.572784456" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.runtimelibrary_cpp" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.runtimelibrary_cpp.value.standard_c_standard_cpp" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.runtimelibrary_cpp.572784456" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.runtimelibrary_cpp" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.runtimelibrary_cpp.value.standard_c_standard_cpp" valueType="enumerated"/>
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.553838709" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
<builder buildPath="${workspace_loc:/transmit_disinfection_micro}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.764087106" 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.1243726437" name="MCU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
@ -66,7 +66,7 @@
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/${ProjName}/app_protocols}&quot;"/>
</option>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.languagestandard.249988768" name="Language standard" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.languagestandard" useByScannerDiscovery="true" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.languagestandard.value.gnu18" valueType="enumerated"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.warnings.treataserror.1803030210" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.warnings.treataserror" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.warnings.treataserror.1803030210" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.warnings.treataserror" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.330299437" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
</tool>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.344817877" name="MCU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
@ -102,8 +102,8 @@
<listOptionValue builtIn="false" value="-Wno-unused-variable"/>
</option>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.nortti.878350755" name="Disable generation of information about every class with virtual functions (-fno-rtti)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.nortti" useByScannerDiscovery="false" value="false" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.warnings.treataserror.751036860" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.warnings.treataserror" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.noexceptions.439269168" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.noexceptions" value="false" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.warnings.treataserror.751036860" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.warnings.treataserror" useByScannerDiscovery="false" value="true" valueType="boolean"/>
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.noexceptions.439269168" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.noexceptions" useByScannerDiscovery="false" value="false" valueType="boolean"/>
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp.54112860" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.input.cpp"/>
</tool>
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.163881313" name="MCU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker"/>
@ -127,15 +127,15 @@
</toolChain>
</folderInfo>
<sourceEntries>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="ucomponents"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="stm32halport"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="stm32basic"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="stm32components"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="app_protocols"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="stm32basic"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="stm32components"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="stm32halport"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="ucomponents"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="usrc"/>
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
</sourceEntries>
</configuration>
</storageModule>

4
.mxproject
File diff suppressed because it is too large
View File

4
.settings/stm32cubeide.project.prefs

@ -1,6 +1,6 @@
2F62501ED4689FB349E356AB974DBE57=E1D44A1E495B58081025CCE424330771
2F62501ED4689FB349E356AB974DBE57=1A37C75E31949FC1CF47D46CC4BFA318
635E684B79701B039C64EA45C3F84D30=C8B026EBE17C208F17FB66CE4235156C
66BE74F758C12D739921AEA421D593D3=1
8DF89ED150041C4CBC7CB9A9CAA90856=E1D44A1E495B58081025CCE424330771
DC22A860405A8BF2F2C095E5B6529F12=EC6C4D369FD4F7EABFE17B3222B5F3A0
DC22A860405A8BF2F2C095E5B6529F12=04D228EE310336E74B34A2B70F9D8D14
eclipse.preferences.version=1

2
stm32halport

@ -1 +1 @@
Subproject commit 26fbb13a22589c870560ce43785ab1284ec9efb3
Subproject commit 501f90be82b57377614f982e133a0dd841927d0e

72
transmit_disinfection_micro.ioc

@ -71,9 +71,10 @@ Mcu.IP10=TIM1
Mcu.IP11=TIM3
Mcu.IP12=TIM6
Mcu.IP13=TIM7
Mcu.IP14=USART1
Mcu.IP15=USART2
Mcu.IP16=USART3
Mcu.IP14=TIM8
Mcu.IP15=USART1
Mcu.IP16=USART2
Mcu.IP17=USART3
Mcu.IP2=DMA
Mcu.IP3=FREERTOS
Mcu.IP4=IWDG
@ -82,38 +83,42 @@ Mcu.IP6=RCC
Mcu.IP7=RNG
Mcu.IP8=SPI1
Mcu.IP9=SYS
Mcu.IPNb=17
Mcu.IPNb=18
Mcu.Name=STM32F407V(E-G)Tx
Mcu.Package=LQFP100
Mcu.Pin0=PH0-OSC_IN
Mcu.Pin1=PH1-OSC_OUT
Mcu.Pin10=PB11
Mcu.Pin11=PC9
Mcu.Pin12=PA9
Mcu.Pin13=PA10
Mcu.Pin14=PA11
Mcu.Pin15=PA12
Mcu.Pin16=PA13
Mcu.Pin17=PA14
Mcu.Pin18=PD3
Mcu.Pin19=VP_CRC_VS_CRC
Mcu.Pin11=PD14
Mcu.Pin12=PC6
Mcu.Pin13=PC8
Mcu.Pin14=PC9
Mcu.Pin15=PA9
Mcu.Pin16=PA10
Mcu.Pin17=PA11
Mcu.Pin18=PA12
Mcu.Pin19=PA13
Mcu.Pin2=PC0
Mcu.Pin20=VP_FREERTOS_VS_CMSIS_V1
Mcu.Pin21=VP_IWDG_VS_IWDG
Mcu.Pin22=VP_RNG_VS_RNG
Mcu.Pin23=VP_SYS_VS_tim11
Mcu.Pin24=VP_TIM1_VS_ClockSourceINT
Mcu.Pin25=VP_TIM3_VS_ClockSourceINT
Mcu.Pin26=VP_TIM6_VS_ClockSourceINT
Mcu.Pin27=VP_TIM7_VS_ClockSourceINT
Mcu.Pin20=PA14
Mcu.Pin21=PD3
Mcu.Pin22=VP_CRC_VS_CRC
Mcu.Pin23=VP_FREERTOS_VS_CMSIS_V1
Mcu.Pin24=VP_IWDG_VS_IWDG
Mcu.Pin25=VP_RNG_VS_RNG
Mcu.Pin26=VP_SYS_VS_tim11
Mcu.Pin27=VP_TIM1_VS_ClockSourceINT
Mcu.Pin28=VP_TIM3_VS_ClockSourceINT
Mcu.Pin29=VP_TIM6_VS_ClockSourceINT
Mcu.Pin3=PA2
Mcu.Pin30=VP_TIM7_VS_ClockSourceINT
Mcu.Pin31=VP_TIM8_VS_ClockSourceINT
Mcu.Pin4=PA3
Mcu.Pin5=PA5
Mcu.Pin6=PA6
Mcu.Pin7=PA7
Mcu.Pin8=PC4
Mcu.Pin9=PB10
Mcu.PinsNb=28
Mcu.PinsNb=32
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32F407VETx
@ -182,9 +187,15 @@ PC0.Locked=true
PC0.Signal=GPXTI0
PC4.Locked=true
PC4.Signal=GPXTI4
PC6.Locked=true
PC6.Signal=S_TIM8_CH1
PC8.Locked=true
PC8.Signal=S_TIM3_CH3
PC9.Locked=true
PC9.Mode=Clock-out-2
PC9.Signal=RCC_MCO_2
PD14.Locked=true
PD14.Signal=GPIO_Output
PD3.Locked=true
PD3.Signal=GPIO_Output
PH0-OSC_IN.Mode=HSE-External-Oscillator
@ -269,6 +280,10 @@ SH.GPXTI0.0=GPIO_EXTI0
SH.GPXTI0.ConfNb=1
SH.GPXTI4.0=GPIO_EXTI4
SH.GPXTI4.ConfNb=1
SH.S_TIM3_CH3.0=TIM3_CH3,PWM Generation3 CH3
SH.S_TIM3_CH3.ConfNb=1
SH.S_TIM8_CH1.0=TIM8_CH1,PWM Generation1 CH1
SH.S_TIM8_CH1.ConfNb=1
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_128
SPI1.CalculateBaudRate=562.5 KBits/s
SPI1.Direction=SPI_DIRECTION_2LINES
@ -278,13 +293,20 @@ SPI1.VirtualType=VM_MASTER
TIM1.IPParameters=Period,Prescaler
TIM1.Period=9999
TIM1.Prescaler=143
TIM3.IPParameters=Prescaler,Period
TIM3.Period=9999
TIM3.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3
TIM3.IPParameters=Prescaler,Period,Channel-PWM Generation3 CH3,OCPolarity_3
TIM3.OCPolarity_3=TIM_OCPOLARITY_LOW
TIM3.Period=4999
TIM3.Prescaler=71
TIM6.IPParameters=Prescaler
TIM6.Prescaler=71
TIM7.IPParameters=Prescaler
TIM7.Prescaler=81
TIM8.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
TIM8.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
TIM8.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period,AutoReloadPreload
TIM8.Period=99
TIM8.Prescaler=143
USART1.BaudRate=460800
USART1.IPParameters=VirtualMode,BaudRate
USART1.VirtualMode=VM_ASYNC
@ -311,6 +333,8 @@ VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT
VP_TIM7_VS_ClockSourceINT.Mode=Enable_Timer
VP_TIM7_VS_ClockSourceINT.Signal=TIM7_VS_ClockSourceINT
VP_TIM8_VS_ClockSourceINT.Mode=Internal
VP_TIM8_VS_ClockSourceINT.Signal=TIM8_VS_ClockSourceINT
board=custom
rtos.0.ip=FREERTOS
isbadioc=false

129
usrc/board/hal/dbdm_power_ctrl_board.cpp

@ -1,6 +1,8 @@
#include "dbdm_power_ctrl_board.hpp"
using namespace iflytop;
void DBDMPowerCtrlBoard::HTIM3_INIT() {
void DBDMPowerCtrlBoard::INIT_PC8_AS_HTIM3_CH3_PWM_OUTPUT() {
__HAL_RCC_TIM3_CLK_ENABLE();
/* USER CODE BEGIN TIM3_Init 0 */
/* USER CODE END TIM3_Init 0 */
@ -13,11 +15,11 @@ void DBDMPowerCtrlBoard::HTIM3_INIT() {
/* USER CODE END TIM3_Init 1 */
htim3.Instance = TIM3;
htim3.Init.Prescaler = 143;
htim3.Init.Prescaler = 71;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 9999;
htim3.Init.Period = 4999;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim3) != HAL_OK) {
Error_Handler();
}
@ -37,16 +39,18 @@ void DBDMPowerCtrlBoard::HTIM3_INIT() {
sConfigOC.Pulse = 0;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) {
Error_Handler();
}
/* USER CODE BEGIN TIM3_Init 2 */
/* USER CODE END TIM3_Init 2 */
__HAL_RCC_GPIOC_CLK_ENABLE();
/**TIM3 GPIO Configuration
PC8 ------> TIM3_CH3
*/
__HAL_RCC_GPIOC_CLK_ENABLE();
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
@ -54,4 +58,115 @@ void DBDMPowerCtrlBoard::HTIM3_INIT() {
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF2_TIM3;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
TIM3_CH3_SET_DUTY(0);
}
void DBDMPowerCtrlBoard::TIM3_CH3_SET_DUTY(int32_t duty) {
duty = 100 - duty;
if (duty < 0) duty = 0;
if (duty > 100) duty = 100;
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = duty / 100.0 * __HAL_TIM_GET_AUTORELOAD(&htim3);
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_3);
HAL_TIM_PWM_Stop(&htim3, TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_3);
}
void DBDMPowerCtrlBoard::INIT_PC6_AS_HTIM8_CH1_PWM_OUTPUT() {
__HAL_RCC_TIM8_CLK_ENABLE();
/* USER CODE END TIM8_Init 0 */
TIM_ClockConfigTypeDef sClockSourceConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
TIM_OC_InitTypeDef sConfigOC = {0};
TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0};
/* USER CODE BEGIN TIM8_Init 1 */
/* USER CODE END TIM8_Init 1 */
htim8.Instance = TIM8;
htim8.Init.Prescaler = 143;
htim8.Init.CounterMode = TIM_COUNTERMODE_UP;
htim8.Init.Period = 99;
htim8.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
htim8.Init.RepetitionCounter = 0;
htim8.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
if (HAL_TIM_Base_Init(&htim8) != HAL_OK) {
Error_Handler();
}
sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
if (HAL_TIM_ConfigClockSource(&htim8, &sClockSourceConfig) != HAL_OK) {
Error_Handler();
}
if (HAL_TIM_PWM_Init(&htim8) != HAL_OK) {
Error_Handler();
}
sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&htim8, &sMasterConfig) != HAL_OK) {
Error_Handler();
}
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 0;
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(&htim8, &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.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE;
if (HAL_TIMEx_ConfigBreakDeadTime(&htim8, &sBreakDeadTimeConfig) != HAL_OK) {
Error_Handler();
}
/* USER CODE BEGIN TIM8_Init 2 */
/* USER CODE END TIM8_Init 2 */
// HAL_TIM_MspPostInit(&htim8);
__HAL_RCC_GPIOC_CLK_ENABLE();
/**TIM8 GPIO Configuration
PC6 ------> TIM8_CH1
*/
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
GPIO_InitStruct.Alternate = GPIO_AF3_TIM8;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
void DBDMPowerCtrlBoard::TIM8_CH1_SET_DUTY(int32_t duty) {
duty = 100 - duty;
if (duty < 0) duty = 0;
if (duty > 100) duty = 100;
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = duty / 100.0 * __HAL_TIM_GET_AUTORELOAD(&htim8);
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
HAL_TIM_PWM_ConfigChannel(&htim8, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Stop(&htim8, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1);
}

11
usrc/board/hal/dbdm_power_ctrl_board.hpp

@ -7,7 +7,16 @@
namespace iflytop {
class DBDMPowerCtrlBoard {
public:
static void HTIM3_INIT();
/**
* @brief
*
*/
static void INIT_PC8_AS_HTIM3_CH3_PWM_OUTPUT();
static void TIM3_CH3_SET_DUTY(int32_t duty);
static void INIT_PC6_AS_HTIM8_CH1_PWM_OUTPUT();
static void TIM8_CH1_SET_DUTY(int32_t duty);
private:
};
} // namespace iflytop

20
usrc/dmapp_service/air_compressor_ctrl_service.cpp

@ -16,7 +16,8 @@ typedef struct {
} IOAirCompressor_t;
typedef struct {
int32_t mark;
ZGPIO fbGpio; // 反馈引脚
uint16_t blowerFbCnt; // 反馈计数
} MiniPwmAirPump_t;
static AirCompressorType_t m_type = kAirCompressorType_notSet;
@ -50,6 +51,13 @@ void AirCompressorCtrlService::initialize() {
else if (PORT::isPowerCtrlBoard() && PORT::isDrawBarDM()) {
// PC6 pwm控制具体控制见
// PC4 反馈每圈1个脉冲
m_type = kAirCompressorType_MiniPwmAirPump;
DBDMPowerCtrlBoard::INIT_PC6_AS_HTIM8_CH1_PWM_OUTPUT(); //
m_miniPwmAirPump.fbGpio.initAsInput(PC4, kxs_gpio_nopull, kxs_gpio_rising_irq, false /*mirror*/); //
AppPeriodTaskMgr::ins()->regTask("GPIO-IRQ_CNT_READ", []() { m_miniPwmAirPump.blowerFbCnt = PC4_IRQ_CNT; },
500); // 每秒更新一次
}
}
bool AirCompressorCtrlService::isSupport() {
@ -67,6 +75,12 @@ int32_t AirCompressorCtrlService::ctrl(int32_t val) {
m_ioAirCompressor.ctrlGpio.write(val); // 控制空压机开关
m_power_level = val; // 更新功率等级
return 0; // 成功
} else if (m_type == kAirCompressorType_MiniPwmAirPump) {
if (val < 0) val = 0;
if (val > 100) val = 100;
m_power_level = val; // 更新功率等级
DBDMPowerCtrlBoard::TIM8_CH1_SET_DUTY(val); // 设置空压机PWM占空比
return 0; // 成功
}
return kerr_function_not_support; // 不支持的空压机类型
}
@ -77,8 +91,8 @@ void AirCompressorCtrlService::readState(int16_t* state, int32_t* maxnum) {
*maxnum = 2; // 返回空压机状态
} else {
state[0] = m_power_level;
state[1] = 0; // fbcnt
*maxnum = 2; // 返回空压机状态
state[1] = m_miniPwmAirPump.blowerFbCnt; // fbcnt
*maxnum = 2; // 返回空压机状态
}
}

35
usrc/dmapp_service/blower_ctrl_service.cpp

@ -29,11 +29,9 @@ typedef struct {
} HighPowerUartBlower;
typedef struct {
TIM_HandleTypeDef* htim;
uint32_t channle;
ZGPIO enGpio;
ZGPIO fbGpio;
uint16_t blowerFbCnt;
ZGPIO enGpio;
ZGPIO fbGpio;
uint16_t blowerFbCnt;
} PwmBlower;
static IOBlower ioblower;
@ -47,26 +45,6 @@ static int32_t m_open_ticket = 0;
static zmutex lock = {"BlowerCtrlService"};
void mini_pwm_blower_ctrl(int32_t duty) {
duty = 100 - duty;
if (duty < 0) duty = 0;
if (duty > 100) duty = 100;
TIM_OC_InitTypeDef sConfigOC = {0};
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = duty / 100.0 * __HAL_TIM_GET_AUTORELOAD(miniPwmBlower.htim);
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET;
sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET;
HAL_TIM_PWM_ConfigChannel(miniPwmBlower.htim, &sConfigOC, miniPwmBlower.channle);
HAL_TIM_PWM_Stop(miniPwmBlower.htim, miniPwmBlower.channle);
HAL_TIM_PWM_Start(miniPwmBlower.htim, miniPwmBlower.channle);
miniPwmBlower.enGpio.setState(duty != 0);
}
bool BlowerCtrlService::isSupport() {
if (PORT::isPowerCtrlBoard() && (PORT::isLargeSpaceDM() || PORT::isSamllSpaceDM() || PORT::isDT600B())) {
return true;
@ -131,9 +109,7 @@ void BlowerCtrlService::initialize() {
// 宁波锚点调速风机
m_blowerType = kMiniPwmBlower;
DBDMPowerCtrlBoard::HTIM3_INIT(); // TIM3
miniPwmBlower.htim = &htim3; // TIM1
miniPwmBlower.channle = TIM_CHANNEL_3; // TIM1_CH1 PC8
DBDMPowerCtrlBoard::INIT_PC8_AS_HTIM3_CH3_PWM_OUTPUT(); // TIM3
miniPwmBlower.fbGpio.initAsInput(PC9, kxs_gpio_nopull, kxs_gpio_rising_irq, false /*mirror*/); // PC9
miniPwmBlower.enGpio.initAsOutput(PC10, kxs_gpio_nopull, true, false); // PC10
@ -186,7 +162,8 @@ int32_t BlowerCtrlService::ctrl(int32_t val) {
* kMiniPwmBlower *
***********************************************************************************************************************/
case kMiniPwmBlower:
mini_pwm_blower_ctrl(toPowerVal);
DBDMPowerCtrlBoard::TIM3_CH3_SET_DUTY(toPowerVal); // 设置占空比
miniPwmBlower.enGpio.write(toOpen); // 控制风机开关
break;
default:

Loading…
Cancel
Save