From 697147dabe8cd44e5c561660a2c7bca8288c3cae Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 3 Feb 2024 14:01:33 +0800 Subject: [PATCH] update --- usrc/main.cpp | 187 ++++++++++++++++++++++++++++++++------------ usrc/temperature_sensor.cpp | 1 + 2 files changed, 138 insertions(+), 50 deletions(-) diff --git a/usrc/main.cpp b/usrc/main.cpp index ac78d10..56cfee5 100644 --- a/usrc/main.cpp +++ b/usrc/main.cpp @@ -9,11 +9,13 @@ #include "sdk/components/step_motor_ctrl_module/step_motor_ctrl_module.hpp" #include "sdk\components\mini_servo_motor\feite_servo_motor.hpp" #include "sdk\components\mini_servo_motor\mini_servo_motor_ctrl_module.hpp" +#include "sdk\components\modbus\modbus_client.hpp" #include "sdk\components\pipette_module\pipette_ctrl_module_v2.hpp" #include "sdk\components\sensors\m3078\m3078_code_scaner.hpp" -#include "sdk\components\sub_modbus_module\sub_modbus_board_initer.hpp" #include "sdk\components\tmc\ic\ztmc4361A.hpp" #include "sdk\components\tmc\ic\ztmc5130.hpp" +// +#include "sdk\components\hardware\uart\zuart_dma_receiver.hpp" #include "temperature_sensor.hpp" #define TAG "main" @@ -26,23 +28,27 @@ extern void umain(); extern "C" { void StartDefaultTask(void const* argument) { umain(); } +class UARTSender : public ZIUartSender { + UART_HandleTypeDef* m_huart; + + public: + void init(UART_HandleTypeDef* huart) { m_huart = huart; } + virtual void send(const uint8_t* data, size_t len) { HAL_UART_Transmit(m_huart, (uint8_t*)data, len, 1000); } +}; + extern DMA_HandleTypeDef hdma_usart3_rx; extern DMA_HandleTypeDef hdma_usart3_tx; } - -static SubModbusBoardIniter modbusIniter; - /******************************************************************************* * GET_DEVICE_ID * *******************************************************************************/ -static ZGPIO ID0; -static ZGPIO ID1; -static ZGPIO ID2; -static ZGPIO ID3; -static ZGPIO ID4; static int32_t getDeviceId() { - static bool init = false; - + static bool init = false; + static ZGPIO ID0; + static ZGPIO ID1; + static ZGPIO ID2; + static ZGPIO ID3; + static ZGPIO ID4; if (!init) { ID0.initAsInput(ID0_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); ID1.initAsInput(ID1_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); @@ -51,51 +57,132 @@ static int32_t getDeviceId() { ID4.initAsInput(ID4_IO, ZGPIO::kMode_nopull, ZGPIO::kIRQ_noIrq, true); init = true; } - uint8_t id = ID0.getState() * 1 + ID1.getState() * 2 + ID2.getState() * 4 + ID3.getState() * 8 + ID4.getState() * 16; return id; } +/******************************************************************************* + * INIT_SUBMODULE * + *******************************************************************************/ +void nvs_init_cb() {} TemperatureSensor m_temperature_sensor[8]; + +static void initsubmodule() { + osDelay(1000); + { + m_temperature_sensor[0].initialize(&hadc1, ADC_CHANNEL_10); + m_temperature_sensor[1].initialize(&hadc1, ADC_CHANNEL_11); + m_temperature_sensor[2].initialize(&hadc1, ADC_CHANNEL_12); + m_temperature_sensor[3].initialize(&hadc1, ADC_CHANNEL_13); + m_temperature_sensor[4].initialize(&hadc1, ADC_CHANNEL_14); + } + { + /******************************************************************************* + * 温度传感器MODBUS CLIEN 初始化 * + *******************************************************************************/ + + static ZUARTDmaReceiver dmaUartReceiver; + static ZUARTDmaReceiver::hardware_config_t cfg = { + .huart = &PC_MODBUS_UART, + .dma_rx = &PC_MODBUS_UART_DMA_HANDLER, + .rxbuffersize = PC_MODBUS_UART_RX_BUF_SIZE, + .rxovertime_ms = 1, + }; + dmaUartReceiver.initialize(&cfg); + + static UARTSender uartSender; + uartSender.init(&PC_MODBUS_UART); + + ModulebusClient::Inst()->init( + &dmaUartReceiver, &uartSender, 1, // + [](uint16_t regadd, uint16_t& val) { + int32_t sendval = 0; + if (regadd == 0) { + m_temperature_sensor[0].getTemperature(sendval); + val = sendval; + } else if (regadd == 1) { + m_temperature_sensor[1].getTemperature(sendval); + val = sendval; + } else if (regadd == 2) { + m_temperature_sensor[2].getTemperature(sendval); + val = sendval; + } else if (regadd == 3) { + m_temperature_sensor[3].getTemperature(sendval); + val = sendval; + } else if (regadd == 4) { + m_temperature_sensor[4].getTemperature(sendval); + val = sendval; + } + }, // + [](uint16_t regadd, uint16_t val) {}); + } + { + // 115200 + /******************************************************************************* + * 试管帽夹舵机 * + *******************************************************************************/ + static FeiTeServoMotor feiteservomotor_bus; // 飞特舵机总线 + + // 飞特舵机总线 + ZASSERT(huart3.Init.BaudRate == 115200); + feiteservomotor_bus.initialize(&huart3, &hdma_usart3_rx, &hdma_usart3_tx); + + { + static MiniRobotCtrlModule mini_servo; + static MiniRobotCtrlModule::flash_config_t cfg = {0}; + cfg.default_torque = 330; + mini_servo.initialize(initer.get_module_id(1), &feiteservomotor_bus, 1, &cfg); + initer.register_module(&mini_servo); + } + { + static MiniRobotCtrlModule mini_servo; + static MiniRobotCtrlModule::flash_config_t cfg = {0}; + cfg.default_torque = 330; + mini_servo.initialize(initer.get_module_id(2), &feiteservomotor_bus, 2, &cfg); + initer.register_module(&mini_servo); + } + { + static MiniRobotCtrlModule mini_servo; + static MiniRobotCtrlModule::flash_config_t cfg = {0}; + cfg.default_torque = 330; + mini_servo.initialize(initer.get_module_id(3), &feiteservomotor_bus, 3, &cfg); + initer.register_module(&mini_servo); + } + { + static MiniRobotCtrlModule mini_servo; + static MiniRobotCtrlModule::flash_config_t cfg = {0}; + cfg.default_torque = 330; + mini_servo.initialize(initer.get_module_id(4), &feiteservomotor_bus, 4, &cfg); + initer.register_module(&mini_servo); + } + { + static MiniRobotCtrlModule mini_servo; + static MiniRobotCtrlModule::flash_config_t cfg = {0}; + cfg.default_torque = 330; + mini_servo.initialize(initer.get_module_id(5), &feiteservomotor_bus, 5, &cfg); + initer.register_module(&mini_servo); + } + } +} + /******************************************************************************* * MAIN * *******************************************************************************/ void umain() { - modbusIniter.init( - getDeviceId(), // - // subModuleIniter - []() { - m_temperature_sensor[0].initialize(&hadc1, ADC_CHANNEL_10); - m_temperature_sensor[1].initialize(&hadc1, ADC_CHANNEL_11); - m_temperature_sensor[2].initialize(&hadc1, ADC_CHANNEL_12); - m_temperature_sensor[3].initialize(&hadc1, ADC_CHANNEL_13); - m_temperature_sensor[4].initialize(&hadc1, ADC_CHANNEL_14); - }, - // on_reg_read_t - [](uint16_t regadd, uint16_t& val) { - int32_t sensval = 0; - if (regadd == 11) { - m_temperature_sensor[0].getTemperature(sensval); - // ZLOGI(TAG, "temperature1: %d", sensval); - val = (int16_t)sensval; - } else if (regadd == 12) { - m_temperature_sensor[1].getTemperature(sensval); - // ZLOGI(TAG, "temperature2: %d", sensval); - val = (int16_t)sensval; - } else if (regadd == 13) { - m_temperature_sensor[2].getTemperature(sensval); - // ZLOGI(TAG, "temperature3: %d", sensval); - val = (int16_t)sensval; - } else if (regadd == 14) { - m_temperature_sensor[3].getTemperature(sensval); - // ZLOGI(TAG, "temperature4: %d", sensval); - val = (int16_t)sensval; - } else if (regadd == 15) { - m_temperature_sensor[4].getTemperature(sensval); - // ZLOGI(TAG, "temperature5: %d", sensval); - val = (int16_t)sensval; - } - }, - // on_reg_write_t - [](uint16_t regadd, uint16_t val) {}); - modbusIniter.loop(); + ZCancmderSubboardIniter::cfg_t cfg = // + { + .deviceId = getDeviceId(), + .input_gpio = {}, + .output_gpio = {}, + .temperature_sensor = + { + &m_temperature_sensor[0], + &m_temperature_sensor[1], + &m_temperature_sensor[2], + &m_temperature_sensor[3], + &m_temperature_sensor[4], + }, + }; + initer.init(&cfg); + initsubmodule(); + initer.loop(); } diff --git a/usrc/temperature_sensor.cpp b/usrc/temperature_sensor.cpp index 46d0e05..163b2a9 100644 --- a/usrc/temperature_sensor.cpp +++ b/usrc/temperature_sensor.cpp @@ -45,4 +45,5 @@ int32_t TemperatureSensor::getTemperature(int32_t& sensorval) { // sum += adcval[i]; } sensorval = sum / 8.0; + return 0; }