From 867a37ff79d263ee6626e6b9f522f62ad6919733 Mon Sep 17 00:00:00 2001 From: cbb <2625274797@qq.com> Date: Fri, 31 Oct 2025 01:17:52 +0800 Subject: [PATCH] =?UTF-8?q?```=20refactor(device):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E8=A7=92=E5=BA=A6=E4=BC=A0=E6=84=9F=E5=99=A8=E6=A8=A1=E5=9D=97?= =?UTF-8?q?=E5=B9=B6=E4=BC=98=E5=8C=96ADC=E7=94=B5=E5=8E=8B=E8=AE=A1?= =?UTF-8?q?=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 tle5012b 角度传感器相关文件重命名为 ang_sensor,统一接口命名 - 修正母线电压采样计算公式,增加 VCC_FACTOR 校正系数 - 移除 main.cpp 中重复和未使用的头文件引用 - 删除对旧角度传感器初始化函数的调用,改用新接口读取角度 ``` --- Robot_V2/Robot_V2.cproject.yml | 4 +- Robot_V2/device/ADC.cpp | 8 ++-- Robot_V2/device/Timer.cpp | 1 + .../device/{tle5012b.cpp => ang_sensor.cpp} | 38 ++++++------------- Robot_V2/device/{tle5012b.h => ang_sensor.h} | 6 +-- Robot_V2/device/test.cpp | 4 -- Robot_V2/main.cpp | 6 +-- 7 files changed, 24 insertions(+), 43 deletions(-) rename Robot_V2/device/{tle5012b.cpp => ang_sensor.cpp} (70%) rename Robot_V2/device/{tle5012b.h => ang_sensor.h} (73%) diff --git a/Robot_V2/Robot_V2.cproject.yml b/Robot_V2/Robot_V2.cproject.yml index 97f75c2..6fff240 100644 --- a/Robot_V2/Robot_V2.cproject.yml +++ b/Robot_V2/Robot_V2.cproject.yml @@ -14,8 +14,8 @@ project: files: - file: device/Can.cpp - file: device/Can.h - - file: device/tle5012b.cpp - - file: device/tle5012b.h + - file: device/ang_sensor.cpp + - file: device/ang_sensor.h - file: device/ADC.cpp - file: device/adc.h - file: device/Timer.cpp diff --git a/Robot_V2/device/ADC.cpp b/Robot_V2/device/ADC.cpp index 1268fb2..66f7a54 100644 --- a/Robot_V2/device/ADC.cpp +++ b/Robot_V2/device/ADC.cpp @@ -129,7 +129,8 @@ float sampler::get_vbus_voltage() { * 如果计算结果超出有效范围(-40到255摄氏度),则重新采样计算。 */ void sampler::update_mcu_temp() { - memmove(mcu_temp_samples, mcu_temp_samples + 1, FILTER_SIZE * sizeof(float)); + memmove(mcu_temp_samples, mcu_temp_samples + 1, + FILTER_SIZE * sizeof(float)); mcu_temp_samples[FILTER_SIZE] = (1.43f - adc_value[0] * ADC_SCALE) * TEMP_FACTOR + 35.0f; } @@ -138,7 +139,8 @@ void sampler::update_mcu_temp() { * @brief 更新MCU温度 */ void sampler::update_drv_temp() { - memmove(drv_temp_samples, drv_temp_samples + 1, FILTER_SIZE * sizeof(float)); + memmove(drv_temp_samples, drv_temp_samples + 1, + FILTER_SIZE * sizeof(float)); float R_now = (float)adc_value[1] / (4096 - (float)adc_value[1]) * 4700; drv_temp_samples[FILTER_SIZE] = 1.0f / (0.00335f + 0.00025f * log(R_now / 10000.0f)) - 273.15f; @@ -165,5 +167,5 @@ void sampler::update_current() { */ void sampler::update_vbus_voltage() { memmove(vbus_samples, vbus_samples + 1, FILTER_SIZE * sizeof(float)); - vbus_samples[FILTER_SIZE] = adc_value[5] * ADC_SCALE; + vbus_samples[FILTER_SIZE] = adc_value[5] * ADC_SCALE * VCC_FACTOR; } \ No newline at end of file diff --git a/Robot_V2/device/Timer.cpp b/Robot_V2/device/Timer.cpp index da16973..0022769 100644 --- a/Robot_V2/device/Timer.cpp +++ b/Robot_V2/device/Timer.cpp @@ -1,6 +1,7 @@ #include "Timer.h" #include "Can.h" #include "DengFOC.h" +#include "ang_sensor.h" #include "Timer.h" #include "adc.h" #include "gd32c10x.h" diff --git a/Robot_V2/device/tle5012b.cpp b/Robot_V2/device/ang_sensor.cpp similarity index 70% rename from Robot_V2/device/tle5012b.cpp rename to Robot_V2/device/ang_sensor.cpp index e77a899..363ebf4 100644 --- a/Robot_V2/device/tle5012b.cpp +++ b/Robot_V2/device/ang_sensor.cpp @@ -1,22 +1,14 @@ -#include "tle5012b.h" +#include "ang_sensor.h" #include "core_cmInstr.h" #include "gd32c10x_gpio.h" #include "gd32c10x_spi.h" #include "stdbool.h" #include "systick.h" - -#define SPI_TX_OFF() \ - do { \ - gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, \ - GPIO_PIN_5); \ - } while (0) -#define SPI_TX_ON() \ - do { \ - gpio_init(GPIOB, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5); \ - } while (0) +#include #define SPI_CS_ENABLE() gpio_bit_reset(GPIOA, GPIO_PIN_15) #define SPI_CS_DISABLE() gpio_bit_set(GPIOA, GPIO_PIN_15) +constexpr float ANGLE_FACTOR = 1.0f / 65536.0f * 360.0f; /** * @brief Send or read half word through SPI @@ -81,7 +73,7 @@ void KHT7823_gpio_init(void) { GPIO_PIN_3 | GPIO_PIN_5); /* PB4 → MISO, 浮空输入 */ gpio_init(GPIOB, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, - GPIO_PIN_4 | GPIO_PIN_10); + GPIO_PIN_4 | GPIO_PIN_10 | GPIO_PIN_11); } /** * @brief Initialize SPI module @@ -92,15 +84,15 @@ void KHT7823_spi_init(void) { spi_parameter_struct spi_init_str; spi_struct_para_init(&spi_init_str); - /* SPI参数:16bit, 主机, 全双工, CPOL=0 CPHA=1, MSB first */ + /* SPI参数:16bit, 主机, 全双工, CPOL=1 CPHA=1, MSB first */ spi_init_str.device_mode = SPI_MASTER; spi_init_str.trans_mode = SPI_TRANSMODE_FULLDUPLEX; spi_init_str.frame_size = SPI_FRAMESIZE_16BIT; spi_init_str.clock_polarity_phase = SPI_CK_PL_HIGH_PH_2EDGE; spi_init_str.nss = SPI_NSS_SOFT; spi_init_str.endian = SPI_ENDIAN_MSB; - - spi_init_str.prescale = SPI_PSC_16; /* 8MHz @ 128MHz */ + + spi_init_str.prescale = 24; /* 5MHz @ 120MHz */ spi_init(SPI0, &spi_init_str); spi_nss_output_enable(SPI0); spi_nssp_mode_enable(SPI0); @@ -113,23 +105,15 @@ void KHT7823_init(void) { } float KHT7823_readAngle() { - u16 u16Command = 0x4000; + u16 u16Command = 0x0000; // 读取角度命令 float ang = 0; - SPI_CS_ENABLE(); - // 2. 发送命令1,同时接收回答1 - SPI_DATA(SPI0) = u16Command; - while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_TBE)) - ; // 等待发送缓冲区空 - while (RESET == spi_i2s_flag_get(SPI0, SPI_FLAG_RBNE)) - ; // 等待接收缓冲区满 - u16 u16data = SPI_DATA(SPI0); // 读取回答1 - + // 发送命令1,同时接收回答1 + u16 u16data = spi_rw_half_word(SPI0, u16Command); SPI_CS_DISABLE(); - // 将15位角度值转换为角度(0-360度) - ang = ((float)u16data * 360.0f) / 32767.0f; + ang = u16data * ANGLE_FACTOR; return ang; } \ No newline at end of file diff --git a/Robot_V2/device/tle5012b.h b/Robot_V2/device/ang_sensor.h similarity index 73% rename from Robot_V2/device/tle5012b.h rename to Robot_V2/device/ang_sensor.h index cf42134..f57d4d2 100644 --- a/Robot_V2/device/tle5012b.h +++ b/Robot_V2/device/ang_sensor.h @@ -1,5 +1,5 @@ -#ifndef _5012B_H -#define _5012B_H +#ifndef _angsensor_H +#define _angsensor_H #ifdef __cplusplus extern "C" { #endif @@ -8,7 +8,7 @@ extern "C" { void KHT7823_init(void); u16 spi_rw_half_word(u32 spi_periph, const u16 i_HalfWord); -void KHT7823_readAngle(void); +float KHT7823_readAngle(void); #ifdef __cplusplus } #endif diff --git a/Robot_V2/device/test.cpp b/Robot_V2/device/test.cpp index 22547a5..a8b44a6 100644 --- a/Robot_V2/device/test.cpp +++ b/Robot_V2/device/test.cpp @@ -3,12 +3,10 @@ #include "Timer.h" #include "adc.h" #include "core_cm4.h" -#include "device/tle5012b.h" #include "initial.h" #include "main.h" #include "sys/initial.h" #include "systick.h" -#include "tle5012b.h" #include #include @@ -31,8 +29,6 @@ void test_1111() { // printf(" the angle is %2.2f\r\n", tle5012b_read()); printf("\n----------------------------------------------------\n"); - // TLI5012B测试 - Test_TLI5012B(); } // can_loopback_test(); } \ No newline at end of file diff --git a/Robot_V2/main.cpp b/Robot_V2/main.cpp index b8aee29..3bbb0b8 100644 --- a/Robot_V2/main.cpp +++ b/Robot_V2/main.cpp @@ -6,12 +6,10 @@ #include "adc.h" #include "core_cm4.h" #include "core_cm4.h" -#include "device/tle5012b.h" +#include "ang_sensor.h" #include "gd32c10x_gpio.h" #include "initial.h" -#include "sys/initial.h" #include "systick.h" -#include "tle5012b.h" #include // 全局变量定义 @@ -35,7 +33,7 @@ int main(void) { while (1) { /* clear the FWDGT reset flag */ // std::printf("1\n"); - // KHT7823_init(); + // delay_1ms(100); fwdgt_counter_reload(); CAN0_transmiter.communication_check(); }