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