```
refactor(device): 重构角度传感器模块并优化ADC电压计算 - 将 tle5012b 角度传感器相关文件重命名为 ang_sensor,统一接口命名 - 修正母线电压采样计算公式,增加 VCC_FACTOR 校正系数 - 移除 main.cpp 中重复和未使用的头文件引用 - 删除对旧角度传感器初始化函数的调用,改用新接口读取角度 ```
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
@@ -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 <cstdio>
|
||||
|
||||
#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;
|
||||
}
|
||||
@@ -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
|
||||
@@ -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 <cinttypes>
|
||||
#include <cstdio>
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
+2
-4
@@ -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 <cstdio>
|
||||
|
||||
// 全局变量定义
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user