13 changed files with 88 additions and 214 deletions
-
4.settings/language.settings.xml
-
2stm32basic
-
2stm32components
-
1transmit_disinfection_micro (1).launch
-
2ucomponents/preportional_valve/preportional_valve_ctrl.cpp
-
8usrc/app/dmapp.cpp
-
163usrc/app/dmapp.cpp.bak
-
4usrc/app_main.cpp
-
3usrc/board/hal/hal.hpp
-
40usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.cpp
-
1usrc/board/hal/large_space_dm_liquid_ctrl_board_hal.hpp
-
59usrc/board/hal/zhal_initer.cpp
-
13usrc/board/hal/zhal_initer.hpp
@ -1 +1 @@ |
|||||
Subproject commit 7628a01fff313fd263d7de7e93d7d652b4325e59 |
|
||||
|
Subproject commit bed34d48c7e2a5e019af3a567d4de3b47702c4dc |
@ -1 +1 @@ |
|||||
Subproject commit b3cae2e4945639f0148a5e3034b039f5679151e3 |
|
||||
|
Subproject commit a3069a8005dcb8277f95d0341551c145fac2a046 |
@ -1,163 +0,0 @@ |
|||||
#include "dmapp.hpp" |
|
||||
|
|
||||
/** |
|
||||
* @brief |
|
||||
* 小空间和大空间硬件一样 |
|
||||
* 管道式----- |
|
||||
* 液路控制板 |
|
||||
* 相比于大空间消毒机,不同的点: |
|
||||
* 1.增加比例阀控制 |
|
||||
* 2.空压机通道控制 |
|
||||
* 功率板 |
|
||||
* 相比于大空间消毒机,不同的点: |
|
||||
* 1. 风机改成鼓风机(可控风速) |
|
||||
* 拉杆箱------ |
|
||||
* 液路控制板 |
|
||||
* 功率板 |
|
||||
*/ |
|
||||
|
|
||||
using namespace iflytop; |
|
||||
using namespace transmit_disfection_protocol; |
|
||||
#define TAG "DMAPP" |
|
||||
|
|
||||
DisinfectionApp* DisinfectionApp::ins() { |
|
||||
static DisinfectionApp instance; |
|
||||
return &instance; |
|
||||
} |
|
||||
|
|
||||
const char* DisinfectionApp::getName() { return "DisinfectionApp"; } |
|
||||
|
|
||||
void DisinfectionApp::initialize() { |
|
||||
int btid = PublicBoard::ins()->getBoardTypeId(); |
|
||||
// only support |
|
||||
// large space disinfection machine, |
|
||||
// small space disinfection machine, |
|
||||
// pipe disinfection machine, |
|
||||
ZASSERT(PORT::isLargeSpaceDM() || PORT::isLargeSpaceDM() || PORT::isPipeDM()); |
|
||||
|
|
||||
// 加热片 |
|
||||
if (PORT::isPowerCtrlBoard()) { |
|
||||
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); |
|
||||
heaterCtrler.initialize(PC7, &hadc1, ADC_CHANNEL_2, &hadc1, ADC_CHANNEL_4); |
|
||||
} |
|
||||
|
|
||||
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard)) { |
|
||||
} else if (isBoardType(kDrawBarDMPowerCtrlBoard)) { |
|
||||
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); |
|
||||
heaterCtrler.initialize(PC7, NULL, 0, &hadc1, ADC_CHANNEL_1); |
|
||||
} |
|
||||
|
|
||||
// 风机 |
|
||||
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard)) { |
|
||||
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); |
|
||||
blowerCtrler.initialize(PC5, &hadc1, ADC_CHANNEL_1); |
|
||||
} else if (isBoardType(kPipeDMPowerCtrlBoard)) { |
|
||||
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); |
|
||||
LargeSpaceDmPowerCtrlBoardHal::HUART2_INIT(9600, UART_STOPBITS_1); |
|
||||
blowerCtrler.initializeAsHighPowerUartBlower(&huart2, &hadc1, ADC_CHANNEL_1); |
|
||||
} else if (isBoardType(kDrawBarDMPowerCtrlBoard)) { |
|
||||
DBDMPowerCtrlBoard::HTIM3_INIT(); |
|
||||
blowerCtrler.initializeAsMiniPwmBlower(&htim3, TIM_CHANNEL_3, PC6 /*en*/, PC9 /*fb*/); |
|
||||
} |
|
||||
|
|
||||
// 空压机 |
|
||||
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard)) { |
|
||||
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); |
|
||||
airComCtrler.initialize(PC3, &hadc1, ADC_CHANNEL_0); |
|
||||
} else if (isBoardType(kDrawBarDMLiquidCtrlBoard)) { |
|
||||
airComCtrler.initialize(PD14, NULL, 0); |
|
||||
} |
|
||||
|
|
||||
// 气密性测试空压机 |
|
||||
// kfn_air_tightness_test_ac_ctrl |
|
||||
if (isBoardType(kPipeDMPowerCtrlBoard)) { |
|
||||
REG_LAMADA_FN(kfn_air_tightness_test_ac_ctrl, [&](ProcessContext* cxt) { |
|
||||
airComCtrler.open(GET_PARAM(0)); |
|
||||
zcanbus_send_ack(cxt->packet, NULL, 0); |
|
||||
}); |
|
||||
REG_LAMADA_FN(kfn_air_tightness_test_ac_is_open, [&](ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, airComCtrler.isOpen()); }); |
|
||||
|
|
||||
} else if (isBoardType(kDrawBarDMLiquidCtrlBoard)) { |
|
||||
static ZGPIO airCompressorCtrlGpio; |
|
||||
airCompressorCtrlGpio.initAsOutput(PD15, kxs_gpio_nopull, true, false); |
|
||||
REG_LAMADA_FN(kfn_air_tightness_test_ac_ctrl, [&](ProcessContext* cxt) { |
|
||||
airCompressorCtrlGpio.write(GET_PARAM(0)); |
|
||||
zcanbus_send_ack(cxt->packet, NULL, 0); |
|
||||
}); |
|
||||
REG_LAMADA_FN(kfn_air_tightness_test_ac_is_open, [&](ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, airCompressorCtrlGpio.read()); }); |
|
||||
} |
|
||||
|
|
||||
// H2O2传感器 |
|
||||
if (isBoardType(kLargeSpaceDMPowerCtrlBoard, kSmallSpaceDMPowerCtrlBoard, kPipeDMPowerCtrlBoard, kDrawBarDMPowerCtrlBoard)) { |
|
||||
LargeSpaceDmPowerCtrlBoardHal::HUART3_INIT(19200, UART_STOPBITS_2); |
|
||||
LargeSpaceDmPowerCtrlBoardHal::HADC1_INIT(); |
|
||||
osDelay(3000); |
|
||||
h2o2Sensor.initialize(&huart3, &hadc1, ADC_CHANNEL_3); |
|
||||
} |
|
||||
|
|
||||
// 水浸传感器 |
|
||||
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard)) { |
|
||||
ZLOGI(TAG, "WaterSensor init"); |
|
||||
evaporationBinWS.initAsInput(PC7, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); |
|
||||
deviceBottomWS.initAsInput(PC8, kxs_gpio_nopull, kxs_gpio_no_irq, true /*mirror*/); |
|
||||
|
|
||||
REG_LAMADA_FN(kfn_device_bottom_water_sensor_read_state, [&](ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, deviceBottomWS.read()); }); |
|
||||
REG_LAMADA_FN(kfn_evaporation_tank_water_sensor_read_state, [&](ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, evaporationBinWS.read()); }); |
|
||||
} |
|
||||
|
|
||||
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) { |
|
||||
// TMC电机初始化 |
|
||||
ZLOGI(TAG, "TMCMotorGroup init"); |
|
||||
LargeSpaceDMLiquidCtrlBoardHal::HSPI1_INIT(); |
|
||||
tmcPowerGroup.initialize(PB2, {&hspi1, PA4 /*cs*/, PB12 /*en*/}, {&hspi1, PC4 /*cs*/, PB13 /*en*/}); |
|
||||
} |
|
||||
|
|
||||
// 三色指示灯 |
|
||||
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard)) { |
|
||||
// 三色指示灯初始化 |
|
||||
ZLOGI(TAG, "WarningLightDriver init"); |
|
||||
wlDriver.initialize(PD8, PD7, PD9, PD10); |
|
||||
} |
|
||||
|
|
||||
// 压力传感器初始化 |
|
||||
if (isBoardType(kLargeSpaceDMLiquidCtrlBoard, kSmallSpaceDMLiquidCtrlBoard, kPipeDMLiquidCtrlBoard, kDrawBarDMLiquidCtrlBoard)) { |
|
||||
ZLOGI(TAG, "PXXPSBus init"); |
|
||||
osDelay(1500); // 等待传感器上电 |
|
||||
LargeSpaceDMLiquidCtrlBoardHal::HUART3_INIT(9600, UART_STOPBITS_1); |
|
||||
psBus.initialize(&huart3); |
|
||||
} |
|
||||
// 比例阀初始化 |
|
||||
if (isBoardType(kPipeDMLiquidCtrlBoard)) { |
|
||||
ZLOGI(TAG, "ProportionalValveCtrl init"); |
|
||||
LargeSpaceDMLiquidCtrlBoardHal::HUART2_INIT(9600); |
|
||||
proportionalValveCtrl.initialize(&huart2); |
|
||||
} |
|
||||
|
|
||||
// 气密性测试通道 |
|
||||
if (isBoardType(kPipeDMLiquidCtrlBoard)) { |
|
||||
static ZGPIO airTightnessTestChGpio; |
|
||||
static ZGPIO eValve; |
|
||||
static bool state = false; |
|
||||
airTightnessTestChGpio.initAsOutput(PD15, kxs_gpio_nopull, true, false); |
|
||||
eValve.initAsOutput(PD14, kxs_gpio_nopull, false, true); |
|
||||
|
|
||||
REG_LAMADA_FN(kfn_air_tightness_test_cutoff_ch, [&](ProcessContext* cxt) { |
|
||||
airTightnessTestChGpio.write(1); // 内管路,气密性测试 |
|
||||
eValve.write(0); // 电磁阀闭合 |
|
||||
state = true; |
|
||||
zcanbus_send_ack(cxt->packet, NULL, 0); |
|
||||
}); |
|
||||
REG_LAMADA_FN(kfn_air_tightness_test_release_ch, [&](ProcessContext* cxt) { |
|
||||
airTightnessTestChGpio.write(0); // 连接空气 |
|
||||
eValve.write(1); // 电磁阀打开 |
|
||||
state = false; |
|
||||
zcanbus_send_ack(cxt->packet, NULL, 0); |
|
||||
}); |
|
||||
// kfn_air_tightness_test_is_cutoff |
|
||||
REG_LAMADA_FN(kfn_air_tightness_test_is_cutoff, [&](ProcessContext* cxt) { zcanbus_send_ack(cxt->packet, state); }); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
/*********************************************************************************************************************** |
|
||||
* PROTOCOL_BIND * |
|
||||
***********************************************************************************************************************/ |
|
@ -0,0 +1,59 @@ |
|||||
|
#include "zhal_initer.hpp"
|
||||
|
|
||||
|
#include "base/appdep.hpp"
|
||||
|
|
||||
|
using namespace iflytop; |
||||
|
|
||||
|
void ZHALIniter::HUART2_INIT(Pin_t tx, Pin_t rx, int baudrate, uint32_t StopBits) { |
||||
|
|
||||
|
__HAL_RCC_USART2_CLK_ENABLE(); |
||||
|
__HAL_RCC_DMA1_CLK_ENABLE(); |
||||
|
zaf_enable_clock(tx); |
||||
|
zaf_enable_clock(rx); |
||||
|
|
||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0}; |
||||
|
|
||||
|
huart2.Instance = USART2; |
||||
|
huart2.Init.BaudRate = baudrate; |
||||
|
huart2.Init.WordLength = UART_WORDLENGTH_8B; |
||||
|
huart2.Init.StopBits = StopBits; |
||||
|
huart2.Init.Parity = UART_PARITY_NONE; |
||||
|
huart2.Init.Mode = UART_MODE_TX_RX; |
||||
|
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE; |
||||
|
huart2.Init.OverSampling = UART_OVERSAMPLING_16; |
||||
|
if (HAL_UART_Init(&huart2) != HAL_OK) { |
||||
|
Error_Handler(); |
||||
|
} |
||||
|
|
||||
|
GPIO_InitStruct.Pin = chip_get_pinoff(tx); |
||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART2; |
||||
|
HAL_GPIO_Init(chip_get_gpio(tx), &GPIO_InitStruct); |
||||
|
|
||||
|
GPIO_InitStruct.Pin = chip_get_pinoff(rx); |
||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; |
||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL; |
||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; |
||||
|
GPIO_InitStruct.Alternate = GPIO_AF7_USART2; |
||||
|
HAL_GPIO_Init(chip_get_gpio(rx), &GPIO_InitStruct); |
||||
|
|
||||
|
|
||||
|
/* USART2 interrupt Init */ |
||||
|
HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); |
||||
|
HAL_NVIC_EnableIRQ(USART2_IRQn); |
||||
|
|
||||
|
|
||||
|
|
||||
|
/* USART2 interrupt Init */ |
||||
|
HAL_NVIC_SetPriority(USART2_IRQn, 5, 0); |
||||
|
HAL_NVIC_EnableIRQ(USART2_IRQn); |
||||
|
|
||||
|
__HAL_RCC_DMA1_CLK_ENABLE(); |
||||
|
HalUtils::uartdmainit(&huart2, &hdma1_stream5, DMA_CHANNEL_4, &hdma1_stream6, DMA_CHANNEL_4); |
||||
|
HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0); |
||||
|
HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); |
||||
|
HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 5, 0); |
||||
|
HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn); |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
#pragma once
|
||||
|
#include <stddef.h>
|
||||
|
#include <stdio.h>
|
||||
|
|
||||
|
#include "base/appdep.hpp"
|
||||
|
namespace iflytop { |
||||
|
class ZHALIniter { |
||||
|
public: |
||||
|
static void HUART2_INIT(Pin_t tx, Pin_t rx, int baudrate, uint32_t StopBits); |
||||
|
|
||||
|
private: |
||||
|
}; |
||||
|
} // namespace iflytop
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue