diff --git a/Project/HC32F460/MDK/HC32F460.uvoptx b/Project/HC32F460/MDK/HC32F460.uvoptx index 5b7904c..fbc0027 100644 --- a/Project/HC32F460/MDK/HC32F460.uvoptx +++ b/Project/HC32F460/MDK/HC32F460.uvoptx @@ -145,7 +145,7 @@ 0 CMSIS_AGDI - -X"Any" -UAny -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM) + -X"Any" -UAny -O206 -S0 -C0 -P00000000 -N00("") -D00(00000000) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K.FLM -FS00 -FL080000 -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FF1HC32F460_otp.FLM -FS13000C00 -FL13FC -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM) 0 @@ -444,8 +444,8 @@ 0 1 - 1 - 0 + 0 + 1 0 @@ -493,8 +493,8 @@ 255 - 1 - 0 + 0 + 1 1 1 1 @@ -503,7 +503,7 @@ 1 1 1 - 0 + 1 1 1 1 @@ -517,7 +517,7 @@ 1 0 0 - -1 + 0 @@ -528,8 +528,15 @@ - + BIN\UL2CM3.DLL + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K -FS00 -FL080000 -FF1HC32F460_otp -FS13000C00 -FL13FC -FP0($$Device:HC32F460PETB$FlashARM\HC32F460_512K.FLM) -FP1($$Device:HC32F460PETB$FlashARM\HC32F460_otp.FLM)) + + 0 @@ -573,6 +580,13 @@ + + 1 + 1 + 0 + 2 + 1000000 + diff --git a/Project/HC32F460/MDK/RTE/_Release/RTE_Components.h b/Project/HC32F460/MDK/RTE/_Release/RTE_Components.h index d14f6b2..8cff5cb 100644 --- a/Project/HC32F460/MDK/RTE/_Release/RTE_Components.h +++ b/Project/HC32F460/MDK/RTE/_Release/RTE_Components.h @@ -3,7 +3,7 @@ * Auto generated Run-Time-Environment Configuration File * *** Do not modify ! *** * - * Project: 'BombSensor' + * Project: 'HC32F460' * Target: 'Release' */ diff --git a/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.c b/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.c index 089160e..bc3a684 100644 --- a/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.c +++ b/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.c @@ -1,8 +1,8 @@ #include "BeepAndLed.h" #include "beepAndLed.h" -#include "main.h" // 包含BUZZER_ON/OFF, LED等宏定义 +#include "main.h" // 鍖呭惈BUZZER_ON/OFF, LED绛夊畯瀹氫箟 -// ========== 变量定义 ========== +// ========== 鍙橀噺瀹氫箟 ========== static BeeperCtrl_t g_beeper = { .state = BEEPER_STATE_IDLE, .is_active = 0, @@ -12,28 +12,28 @@ static BeeperCtrl_t g_beeper = { .off_ms = 0 }; -// 延时计数器(供滴答定时器使用) +// 寤舵椂璁℃暟鍣紙渚涙淮绛斿畾鏃跺櫒浣跨敤锛 uint32_t BeepAndLedCollDelay1mSCnt = 0; -// ========== 硬件控制函数(根据您的实际宏定义修改)========== +// ========== 纭欢鎺у埗鍑芥暟锛堟牴鎹偍鐨勫疄闄呭畯瀹氫箟淇敼锛========== static void Beeper_HW_On(void) { - BUZZER_ON(); // 请替换为您的实际宏 - LED_GREEN_OFF(); // 请替换为您的实际宏 - LED_RED_ON(); // 请替换为您的实际宏 + BUZZER_ON(); // 璇锋浛鎹负鎮ㄧ殑瀹為檯瀹 + LED_GREEN_OFF(); // 璇锋浛鎹负鎮ㄧ殑瀹為檯瀹 + LED_RED_ON(); // 璇锋浛鎹负鎮ㄧ殑瀹為檯瀹 } static void Beeper_HW_Off(void) { - BUZZER_OFF(); // 请替换为您的实际宏 - LED_GREEN_ON(); // 请替换为您的实际宏 - LED_RED_OFF(); // 请替换为您的实际宏 + BUZZER_OFF(); // 璇锋浛鎹负鎮ㄧ殑瀹為檯瀹 + LED_GREEN_ON(); // 璇锋浛鎹负鎮ㄧ殑瀹為檯瀹 + LED_RED_OFF(); // 璇锋浛鎹负鎮ㄧ殑瀹為檯瀹 } -// ========== 实现函数 ========== +// ========== 瀹炵幇鍑芥暟 ========== /** - * @brief 蜂鸣器初始化 + * @brief 铚傞福鍣ㄥ垵濮嬪寲 */ void Beeper_Init(void) { @@ -41,47 +41,47 @@ void Beeper_Init(void) } /** - * @brief 开始鸣响(非阻塞) - * @param on_ms 鸣响时间(ms) - * @param off_ms 间隔时间(ms) - * @param repeat 重复次数(0表示无效) + * @brief 寮濮嬮福鍝嶏紙闈為樆濉烇級 + * @param on_ms 楦e搷鏃堕棿(ms) + * @param off_ms 闂撮殧鏃堕棿(ms) + * @param repeat 閲嶅娆℃暟锛0琛ㄧず鏃犳晥锛 * - * @example Beeper_Start(200, 100, 3); // 鸣200ms,停100ms,重复3次 + * @example Beeper_Start(200, 100, 3); // 楦200ms锛屽仠100ms锛岄噸澶3娆 */ void Beeper_Start(uint16_t on_ms, uint16_t off_ms, uint8_t repeat) { if (repeat == 0) return; - // 如果已经在鸣响,可以选择停止并重新开始 + // 濡傛灉宸茬粡鍦ㄩ福鍝嶏紝鍙互閫夋嫨鍋滄骞堕噸鏂板紑濮 if (g_beeper.is_active) { - Beeper_Stop(); // 停止当前,重新开始新的 - // return; // 或者选择忽略新请求 + Beeper_Stop(); // 鍋滄褰撳墠锛岄噸鏂板紑濮嬫柊鐨 + // return; // 鎴栬呴夋嫨蹇界暐鏂拌姹 } - // 保存参数 + // 淇濆瓨鍙傛暟 g_beeper.on_ms = on_ms; g_beeper.off_ms = off_ms; g_beeper.repeat = repeat; g_beeper.repeat_done = 0; g_beeper.is_active = 1; - // 开启蜂鸣器 + // 寮鍚渹楦e櫒 Beeper_HW_On(); - // 设置延时计数器(开启状态延时) + // 璁剧疆寤舵椂璁℃暟鍣紙寮鍚姸鎬佸欢鏃讹級 BeepAndLedCollDelay1mSCnt = on_ms; g_beeper.state = BEEPER_STATE_ON; } /** - * @brief 停止鸣响 + * @brief 鍋滄楦e搷 */ void Beeper_Stop(void) { - // 关闭硬件 + // 鍏抽棴纭欢 Beeper_HW_Off(); - // 重置状态机 + // 閲嶇疆鐘舵佹満 g_beeper.state = BEEPER_STATE_IDLE; g_beeper.is_active = 0; g_beeper.repeat = 0; @@ -90,8 +90,8 @@ void Beeper_Stop(void) } /** - * @brief 蜂鸣器状态机更新(放在main.c的while(1)中循环调用) - * @note 必须在滴答定时器更新BeepAndLedCollDelay1mSCnt后才能正确工作 + * @brief 铚傞福鍣ㄧ姸鎬佹満鏇存柊锛堟斁鍦╩ain.c鐨剋hile(1)涓惊鐜皟鐢級 + * @note 蹇呴』鍦ㄦ淮绛斿畾鏃跺櫒鏇存柊BeepAndLedCollDelay1mSCnt鍚庢墠鑳芥纭伐浣 */ void BeeperLoopHandler(void) { @@ -101,20 +101,20 @@ void BeeperLoopHandler(void) switch (g_beeper.state) { case BEEPER_STATE_ON: - // 蜂鸣器开启状态,等待计数器归零 + // 铚傞福鍣ㄥ紑鍚姸鎬侊紝绛夊緟璁℃暟鍣ㄥ綊闆 if (BeepAndLedCollDelay1mSCnt == 0) { - // 延时结束,关闭蜂鸣器 + // 寤舵椂缁撴潫锛屽叧闂渹楦e櫒 Beeper_HW_Off(); g_beeper.repeat_done++; - // 检查是否完成所有重复 + // 妫鏌ユ槸鍚﹀畬鎴愭墍鏈夐噸澶 if (g_beeper.repeat_done >= g_beeper.repeat) { - // 全部完成,结束 + // 鍏ㄩ儴瀹屾垚锛岀粨鏉 g_beeper.is_active = 0; g_beeper.state = BEEPER_STATE_IDLE; } else { - // 还有下次,进入等待状态 + // 杩樻湁涓嬫锛岃繘鍏ョ瓑寰呯姸鎬 BeepAndLedCollDelay1mSCnt = g_beeper.off_ms; g_beeper.state = BEEPER_STATE_OFF; } @@ -122,9 +122,9 @@ void BeeperLoopHandler(void) break; case BEEPER_STATE_OFF: - // 蜂鸣器关闭等待状态(间隔时间) + // 铚傞福鍣ㄥ叧闂瓑寰呯姸鎬侊紙闂撮殧鏃堕棿锛 if (BeepAndLedCollDelay1mSCnt == 0) { - // 间隔结束,开启下一次鸣响 + // 闂撮殧缁撴潫锛屽紑鍚笅涓娆¢福鍝 Beeper_HW_On(); BeepAndLedCollDelay1mSCnt = g_beeper.on_ms; @@ -140,8 +140,8 @@ void BeeperLoopHandler(void) } /** - * @brief 查询是否正在鸣响 - * @return true:正在鸣响, false:空闲 + * @brief 鏌ヨ鏄惁姝e湪楦e搷 + * @return true:姝e湪楦e搷, false:绌洪棽 */ bool Beeper_IsPlaying(void) { @@ -149,7 +149,7 @@ bool Beeper_IsPlaying(void) } /** - * @brief 手动开启蜂鸣器(不计入状态机) + * @brief 鎵嬪姩寮鍚渹楦e櫒锛堜笉璁″叆鐘舵佹満锛 */ void Beeper_On(void) { @@ -157,7 +157,7 @@ void Beeper_On(void) } /** - * @brief 手动关闭蜂鸣器(不计入状态机) + * @brief 鎵嬪姩鍏抽棴铚傞福鍣紙涓嶈鍏ョ姸鎬佹満锛 */ void Beeper_Off(void) { @@ -165,8 +165,8 @@ void Beeper_Off(void) } /** - * @brief 清除延时计数器(由滴答定时器调用) - * @note 这个函数放在滴答定时器的1ms中断中调用 + * @brief 娓呴櫎寤舵椂璁℃暟鍣紙鐢辨淮绛斿畾鏃跺櫒璋冪敤锛 + * @note 杩欎釜鍑芥暟鏀惧湪婊寸瓟瀹氭椂鍣ㄧ殑1ms涓柇涓皟鐢 */ void Beeper_ClearDelay(void) { diff --git a/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.h b/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.h index bd8fded..92856b8 100644 --- a/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.h +++ b/Project/HC32F460/source/Module/BeepAndLed/BeepAndLed.h @@ -5,35 +5,35 @@ #include #include "bsp.h" -// ========== 蜂鸣器状态机状态定义 ========== +// ========== 铚傞福鍣ㄧ姸鎬佹満鐘舵佸畾涔 ========== typedef enum { - BEEPER_STATE_IDLE = 0, // 空闲 - BEEPER_STATE_ON, // 蜂鸣器开启延时中 - BEEPER_STATE_OFF, // 蜂鸣器关闭延时中 - BEEPER_STATE_WAIT // 等待下一次鸣响 + BEEPER_STATE_IDLE = 0, // 绌洪棽 + BEEPER_STATE_ON, // 铚傞福鍣ㄥ紑鍚欢鏃朵腑 + BEEPER_STATE_OFF, // 铚傞福鍣ㄥ叧闂欢鏃朵腑 + BEEPER_STATE_WAIT // 绛夊緟涓嬩竴娆¢福鍝 } BeeperState_t; -// ========== 蜂鸣器控制结构体 ========== +// ========== 铚傞福鍣ㄦ帶鍒剁粨鏋勪綋 ========== typedef struct { - BeeperState_t state; // 当前状态 - uint16_t on_ms; // 鸣响时间(ms) - uint16_t off_ms; // 间隔时间(ms) - uint8_t repeat; // 重复次数 - uint8_t repeat_done; // 已完成次数 - uint8_t is_active; // 是否激活 + BeeperState_t state; // 褰撳墠鐘舵 + uint16_t on_ms; // 楦e搷鏃堕棿(ms) + uint16_t off_ms; // 闂撮殧鏃堕棿(ms) + uint8_t repeat; // 閲嶅娆℃暟 + uint8_t repeat_done; // 宸插畬鎴愭鏁 + uint8_t is_active; // 鏄惁婵娲 } BeeperCtrl_t; -// ========== 外部可访问变量 ========== -extern uint32_t BeepAndLedCollDelay1mSCnt; // 延时计数器(在beepAndLed.c中定义) +// ========== 澶栭儴鍙闂彉閲 ========== +extern uint32_t BeepAndLedCollDelay1mSCnt; // 寤舵椂璁℃暟鍣紙鍦╞eepAndLed.c涓畾涔夛級 -// ========== API函数 ========== -void Beeper_Init(void); // 初始化 -void Beeper_Start(uint16_t on_ms, uint16_t off_ms, uint8_t repeat); // 开始鸣响(非阻塞) -void Beeper_Stop(void); // 停止鸣响 -void BeeperLoopHandler(void); // 状态机更新(放在while(1)中) -bool Beeper_IsPlaying(void); // 查询是否正在鸣响 -void Beeper_On(void); // 手动开启蜂鸣器 -void Beeper_Off(void); // 手动关闭蜂鸣器 -void Beeper_ClearDelay(void); // 清除延时计数器(供滴答定时器使用) +// ========== API鍑芥暟 ========== +void Beeper_Init(void); // 鍒濆鍖 +void Beeper_Start(uint16_t on_ms, uint16_t off_ms, uint8_t repeat); // 寮濮嬮福鍝嶏紙闈為樆濉烇級 +void Beeper_Stop(void); // 鍋滄楦e搷 +void BeeperLoopHandler(void); // 鐘舵佹満鏇存柊锛堟斁鍦╳hile(1)涓級 +bool Beeper_IsPlaying(void); // 鏌ヨ鏄惁姝e湪楦e搷 +void Beeper_On(void); // 鎵嬪姩寮鍚渹楦e櫒 +void Beeper_Off(void); // 鎵嬪姩鍏抽棴铚傞福鍣 +void Beeper_ClearDelay(void); // 娓呴櫎寤舵椂璁℃暟鍣紙渚涙淮绛斿畾鏃跺櫒浣跨敤锛 #endif /* _BEEP_AND_LED_H_ */ diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.h b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.h index c7c009b..7bfe909 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.h +++ b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTLOW.h @@ -28,22 +28,22 @@ /*Definition of conversion time corresponding to repeatability setting*/ /* - 10Hz //建立时间300ms - 40Hz //建立时间75ms - 640Hz //建立时间6.25ms - 1280Hz //建立时间3.125ms + 10Hz //寤虹珛鏃堕棿300ms + 40Hz //寤虹珛鏃堕棿75ms + 640Hz //寤虹珛鏃堕棿6.25ms + 1280Hz //寤虹珛鏃堕棿3.125ms */ #define tCon_10Hz 300 /* ms. */ #define tCon_40Hz 75 /* ms. */ #define tCon_640Hz 7 /* ms. */ #define tCon_1280Hz 4 /* ms. */ -#define PORT_A 1 //采集通道A -//#define PORT_B 1 //采集通道B -#define PORT_TEMP 0 //采集温度 -#define PORT_JUMP 0 //内短采集 -#define PACK_NUM 1 //一次采集的数据包数量 -#define FILTER_NUM 0 //滤波数 +#define PORT_A 1 //閲囬泦閫氶亾A +//#define PORT_B 1 //閲囬泦閫氶亾B +#define PORT_TEMP 0 //閲囬泦娓╁害 +#define PORT_JUMP 0 //鍐呯煭閲囬泦 +#define PACK_NUM 1 //涓娆¢噰闆嗙殑鏁版嵁鍖呮暟閲 +#define FILTER_NUM 0 //婊ゆ尝鏁 typedef enum{ LLCS1237_STATUS_IDLE, @@ -59,10 +59,10 @@ typedef struct{ LeftLowCS1237Status_m Status; uint32_t CS1237Delay1mSCnt; - int32_t AinA_AD;//AINAad数据 - //int32_t AinB_AD;//AINBad数据 - int32_t Temp_AD;//温度ad数据 - int32_t Jump_AD;//内短ad数据 + int32_t AinA_AD;//AINAad鏁版嵁 + //int32_t AinB_AD;//AINBad鏁版嵁 + int32_t Temp_AD;//娓╁害ad鏁版嵁 + int32_t Jump_AD;//鍐呯煭ad鏁版嵁 } LEFTLOW_CS1237Var_t; diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.h b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.h index 1483092..e422a5d 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.h +++ b/Project/HC32F460/source/Module/CS1237/CS1237_LEFTUP.h @@ -30,22 +30,22 @@ /*Definition of conversion time corresponding to repeatability setting*/ /* - 10Hz //建立时间300ms - 40Hz //建立时间75ms - 640Hz //建立时间6.25ms - 1280Hz //建立时间3.125ms + 10Hz //寤虹珛鏃堕棿300ms + 40Hz //寤虹珛鏃堕棿75ms + 640Hz //寤虹珛鏃堕棿6.25ms + 1280Hz //寤虹珛鏃堕棿3.125ms */ #define tCon_10Hz 300 /* ms. */ #define tCon_40Hz 75 /* ms. */ #define tCon_640Hz 7 /* ms. */ #define tCon_1280Hz 4 /* ms. */ -#define PORT_A 1 //采集通道A -//#define PORT_B 1 //采集通道B -#define PORT_TEMP 0 //采集温度 -#define PORT_JUMP 0 //内短采集 -#define PACK_NUM 1 //一次采集的数据包数量 -#define FILTER_NUM 0 //滤波数 +#define PORT_A 1 //閲囬泦閫氶亾A +//#define PORT_B 1 //閲囬泦閫氶亾B +#define PORT_TEMP 0 //閲囬泦娓╁害 +#define PORT_JUMP 0 //鍐呯煭閲囬泦 +#define PACK_NUM 1 //涓娆¢噰闆嗙殑鏁版嵁鍖呮暟閲 +#define FILTER_NUM 0 //婊ゆ尝鏁 typedef enum{ LUCS1237_STATUS_IDLE, @@ -61,10 +61,10 @@ typedef struct{ LeftUpCS1237Status_m Status; uint32_t CS1237Delay1mSCnt; - int32_t AinA_AD;//AINAad数据 - //int32_t AinB_AD;//AINBad数据 - int32_t Temp_AD;//温度ad数据 - int32_t Jump_AD;//内短ad数据 + int32_t AinA_AD;//AINAad鏁版嵁 + //int32_t AinB_AD;//AINBad鏁版嵁 + int32_t Temp_AD;//娓╁害ad鏁版嵁 + int32_t Jump_AD;//鍐呯煭ad鏁版嵁 } LEFTUP_CS1237Var_t; diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.h b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.h index 732a0a5..2b37a82 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.h +++ b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTLOW.h @@ -28,22 +28,22 @@ /*Definition of conversion time corresponding to repeatability setting*/ /* - 10Hz //建立时间300ms - 40Hz //建立时间75ms - 640Hz //建立时间6.25ms - 1280Hz //建立时间3.125ms + 10Hz //寤虹珛鏃堕棿300ms + 40Hz //寤虹珛鏃堕棿75ms + 640Hz //寤虹珛鏃堕棿6.25ms + 1280Hz //寤虹珛鏃堕棿3.125ms */ #define tCon_10Hz 300 /* ms. */ #define tCon_40Hz 75 /* ms. */ #define tCon_640Hz 7 /* ms. */ #define tCon_1280Hz 4 /* ms. */ -#define PORT_A 1 //采集通道A -//#define PORT_B 1 //采集通道B -#define PORT_TEMP 0 //采集温度 -#define PORT_JUMP 0 //内短采集 -#define PACK_NUM 1 //一次采集的数据包数量 -#define FILTER_NUM 0 //滤波数 +#define PORT_A 1 //閲囬泦閫氶亾A +//#define PORT_B 1 //閲囬泦閫氶亾B +#define PORT_TEMP 0 //閲囬泦娓╁害 +#define PORT_JUMP 0 //鍐呯煭閲囬泦 +#define PACK_NUM 1 //涓娆¢噰闆嗙殑鏁版嵁鍖呮暟閲 +#define FILTER_NUM 0 //婊ゆ尝鏁 typedef enum{ RLCS1237_STATUS_IDLE, @@ -59,10 +59,10 @@ typedef struct{ RightLowCS1237Status_m Status; uint32_t CS1237Delay1mSCnt; - int32_t AinA_AD;//AINAad数据 - //int32_t AinB_AD;//AINBad数据 - int32_t Temp_AD;//温度ad数据 - int32_t Jump_AD;//内短ad数据 + int32_t AinA_AD;//AINAad鏁版嵁 + //int32_t AinB_AD;//AINBad鏁版嵁 + int32_t Temp_AD;//娓╁害ad鏁版嵁 + int32_t Jump_AD;//鍐呯煭ad鏁版嵁 } RIGHTLOW_CS1237Var_t; diff --git a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.h b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.h index 4a91bc1..71d82a5 100644 --- a/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.h +++ b/Project/HC32F460/source/Module/CS1237/CS1237_RIGHTUP.h @@ -30,22 +30,22 @@ /*Definition of conversion time corresponding to repeatability setting*/ /* - 10Hz //建立时间300ms - 40Hz //建立时间75ms - 640Hz //建立时间6.25ms - 1280Hz //建立时间3.125ms + 10Hz //寤虹珛鏃堕棿300ms + 40Hz //寤虹珛鏃堕棿75ms + 640Hz //寤虹珛鏃堕棿6.25ms + 1280Hz //寤虹珛鏃堕棿3.125ms */ #define tCon_10Hz 300 /* ms. */ #define tCon_40Hz 75 /* ms. */ #define tCon_640Hz 7 /* ms. */ #define tCon_1280Hz 4 /* ms. */ -#define PORT_A 1 //采集通道A -//#define PORT_B 1 //采集通道B -#define PORT_TEMP 0 //采集温度 -#define PORT_JUMP 0 //内短采集 -#define PACK_NUM 1 //一次采集的数据包数量 -#define FILTER_NUM 0 //滤波数 +#define PORT_A 1 //閲囬泦閫氶亾A +//#define PORT_B 1 //閲囬泦閫氶亾B +#define PORT_TEMP 0 //閲囬泦娓╁害 +#define PORT_JUMP 0 //鍐呯煭閲囬泦 +#define PACK_NUM 1 //涓娆¢噰闆嗙殑鏁版嵁鍖呮暟閲 +#define FILTER_NUM 0 //婊ゆ尝鏁 typedef enum{ RUCS1237_STATUS_IDLE, @@ -61,10 +61,10 @@ typedef struct{ RightUpCS1237Status_m Status; uint32_t CS1237Delay1mSCnt; - int32_t AinA_AD;//AINAad数据 - //int32_t AinB_AD;//AINBad数据 - int32_t Temp_AD;//温度ad数据 - int32_t Jump_AD;//内短ad数据 + int32_t AinA_AD;//AINAad鏁版嵁 + //int32_t AinB_AD;//AINBad鏁版嵁 + int32_t Temp_AD;//娓╁害ad鏁版嵁 + int32_t Jump_AD;//鍐呯煭ad鏁版嵁 } RIGHTUP_CS1237Var_t; diff --git a/Project/HC32F460/source/Module/SX127x/sx127x.c b/Project/HC32F460/source/Module/SX127x/sx127x.c index 35c6977..02abb91 100644 --- a/Project/HC32F460/source/Module/SX127x/sx127x.c +++ b/Project/HC32F460/source/Module/SX127x/sx127x.c @@ -303,11 +303,11 @@ void Sx1276LoRaInit(void (*RxCallBack)(uint8_t *rBuff, uint8_t rlen)) //SpreadingFactor if( LoRaPara.SpreadFactor == SX1276_SF_64){ SX1276LoRaSetNbTrigPeaks(5); - SX1276LoRaSetLowDatarateOptimize(true); //低数据速率设置 + SX1276LoRaSetLowDatarateOptimize(true); //浣庢暟鎹熺巼璁剧疆 } else{ SX1276LoRaSetNbTrigPeaks(3); - SX1276LoRaSetLowDatarateOptimize(false); //低数据速率设置 + SX1276LoRaSetLowDatarateOptimize(false); //浣庢暟鎹熺巼璁剧疆 } LoRaPara.RegBuff.RegModemConfig2 = (LoRaPara.RegBuff.RegModemConfig2 & RFLR_MODEMCONFIG2_SF_MASK ) | LoRaPara.SpreadFactor; //PacketCrcOn @@ -449,8 +449,8 @@ void Sx1276LoRaWakeup(void) } //////////////////////////////////////// -//配置本层参数的函数 -//频道表 +//閰嶇疆鏈眰鍙傛暟鐨勫嚱鏁 +//棰戦亾琛 const uint32_t gdwSx1276ChannelTbl[SX1276_CHANNEL_MAX]={ FREQ_CENT-FREQ_DEV*8, FREQ_CENT-FREQ_DEV*7, FREQ_CENT-FREQ_DEV*6, FREQ_CENT-FREQ_DEV*5, FREQ_CENT-FREQ_DEV*4, FREQ_CENT-FREQ_DEV*3, FREQ_CENT-FREQ_DEV*2, FREQ_CENT-FREQ_DEV*1, diff --git a/Project/HC32F460/source/Module/SX127x/sx127x.h b/Project/HC32F460/source/Module/SX127x/sx127x.h index 5680776..b258e81 100644 --- a/Project/HC32F460/source/Module/SX127x/sx127x.h +++ b/Project/HC32F460/source/Module/SX127x/sx127x.h @@ -636,7 +636,7 @@ typedef enum{ SX1276_IH_ON= (1) }Sx1276ImplicitHeaderOnType; -//可变速率 +//鍙彉閫熺巼 typedef struct _AutoSfType{ Sx1276SpreadFactorType Sf; uint8_t ucRssiMin, ucRssiMax; @@ -743,13 +743,13 @@ typedef struct { //Down Link: //CH0-47:500.3-509.7MHz -#define USE_915MHZ 0//=1使用915 =0使用433 +#define USE_915MHZ 0//=1浣跨敤915 =0浣跨敤433 #if (USE_915MHZ == 1) - //中心频率,不定义则默认为449000000Hz + //涓績棰戠巼锛屼笉瀹氫箟鍒欓粯璁や负449000000Hz #define FREQ_CENT 915000000ul - //860MHz-1GHz使用PA功放,不定义则默认不使用 - //SX127x不定义,HOPERF模块需要定义 + //860MHz-1GHz浣跨敤PA鍔熸斁锛屼笉瀹氫箟鍒欓粯璁や笉浣跨敤 + //SX127x涓嶅畾涔夛紝HOPERF妯″潡闇瑕佸畾涔 #define USE_LORA_860_PA #endif diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.c b/Project/HC32F460/source/Module/dc_motor/dc_motor.c index 56b8e46..f2bb4b8 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.c +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.c @@ -5,10 +5,10 @@ -// 全局变量 +// 鍏ㄥ眬鍙橀噺 volatile MotorState g_motorState = MOTOR_STOPPED; volatile MotorCommand g_motorCmd = MOTOR_CMD_STOP; -volatile MotorDirection g_motorDirection = DIR_STOPPED; // 新增运行方向标志位 +volatile MotorDirection g_motorDirection = DIR_STOPPED; // 鏂板杩愯鏂瑰悜鏍囧織浣 volatile uint16_t g_motorSpeed = 0; volatile uint16_t g_accelTimer = 0; @@ -32,7 +32,7 @@ void DCMOTORDBGOnOff(uint8_t OnOff) } #if(MCU == HC32F460JETA) -#if(0) //旧版本PCB +#if(0) //鏃х増鏈琍CB /* Timer4 CNT */ #define TIMER4_UNIT (M4_TMR41) #define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */ @@ -50,7 +50,7 @@ void DCMOTORDBGOnOff(uint8_t OnOff) #define TIMER4_PWM_L_PIN (Pin13) #endif -#if(1) //V2.1版本PCB +#if(1) //V2.1鐗堟湰PCB /* Timer4 CNT */ #define TIMER4_UNIT (M4_TMR41) #define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */ @@ -76,22 +76,22 @@ uint16_t init_adc_val; uint16_t AdcInitCnt = 0; -#define Adc 0.80566 //3.3/4096=0.00080566 //ADC分辨率 +#define Adc 0.80566 //3.3/4096=0.00080566 //ADC鍒嗚鲸鐜 uint16_t g_adc_val[ADC_CH_NUM]; extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL]; -/************************************* 第二部分 电压电流温度采集 **********************************************/ +/************************************* 绗簩閮ㄥ垎 鐢靛帇鐢垫祦娓╁害閲囬泦 **********************************************/ /* Rt = Rp *exp(B*(1/T1-1/T2)) - Rt 是热敏电阻在T1温度下的阻值; - Rp是热敏电阻在T2常温下的标称阻值; - exp是e的n次方,e是自然常数,就是自然对数的底数,近似等于 2.7182818; - B值是热敏电阻的重要参数,教程中用到的热敏电阻B值为3380; - 这里T1和T2指的是开尔文温度,T2是常温25℃,即(273.15+25)K - T1就是所求的温度 + Rt 鏄儹鏁忕數闃诲湪T1娓╁害涓嬬殑闃诲硷紱 + Rp鏄儹鏁忕數闃诲湪T2甯告俯涓嬬殑鏍囩О闃诲硷紱 + exp鏄痚鐨刵娆℃柟锛宔鏄嚜鐒跺父鏁帮紝灏辨槸鑷劧瀵规暟鐨勫簳鏁帮紝杩戜技绛変簬 2.7182818锛 + B鍊兼槸鐑晱鐢甸樆鐨勯噸瑕佸弬鏁帮紝鏁欑▼涓敤鍒扮殑鐑晱鐢甸樆B鍊间负3380锛 + 杩欓噷T1鍜孴2鎸囩殑鏄紑灏旀枃娓╁害锛孴2鏄父娓25鈩冿紝鍗(273.15+25)K + T1灏辨槸鎵姹傜殑娓╁害 */ const float Rp = 10000.0f; /* 10K */ @@ -100,12 +100,12 @@ const float Bx = 3380.0f; /* B */ const float Ka = 273.15f; /** - * @brief 计算温度值 - * @param para: 温度采集对应ADC通道的值(已滤波) - * @note 计算温度分为两步: - 1.根据ADC采集到的值计算当前对应的Rt - 2.根据Rt计算对应的温度值 - * @retval 温度值 + * @brief 璁$畻娓╁害鍊 + * @param para: 娓╁害閲囬泦瀵瑰簲ADC閫氶亾鐨勫硷紙宸叉护娉級 + * @note 璁$畻娓╁害鍒嗕负涓ゆ锛 + 1.鏍规嵁ADC閲囬泦鍒扮殑鍊艰绠楀綋鍓嶅搴旂殑Rt + 2.鏍规嵁Rt璁$畻瀵瑰簲鐨勬俯搴﹀ + * @retval 娓╁害鍊 */ float get_temp(uint16_t para) { @@ -113,97 +113,97 @@ float get_temp(uint16_t para) float temp; /* - 第一步: - Rt = 3.3 * 4700 / VTEMP - 4700 ,其中VTEMP就是温度检测通道采集回来的电压值,VTEMP = ADC值* 3.3/4096 - 由此我们可以计算出当前Rt的值:Rt = 3.3f * 4700.0f / (para * 3.3f / 4096.0f ) - 4700.0f; + 绗竴姝ワ細 + Rt = 3.3 * 4700 / VTEMP - 4700 ,鍏朵腑VTEMP灏辨槸娓╁害妫娴嬮氶亾閲囬泦鍥炴潵鐨勭數鍘嬪,VTEMP = ADC鍊* 3.3/4096 + 鐢辨鎴戜滑鍙互璁$畻鍑哄綋鍓峈t鐨勫硷細Rt = 3.3f * 4700.0f / (para * 3.3f / 4096.0f ) - 4700.0f; */ - Rt = 3.3f * 4700.0f / (para * 3.3f / 4096.0f ) - 4700.0f; /* 根据当前ADC值计算出Rt的值 */ + Rt = 3.3f * 4700.0f / (para * 3.3f / 4096.0f ) - 4700.0f; /* 鏍规嵁褰撳墠ADC鍊艰绠楀嚭Rt鐨勫 */ /* - 第二步: - 根据当前Rt的值来计算对应温度值:Rt = Rp *exp(B*(1/T1-1/T2)) + 绗簩姝ワ細 + 鏍规嵁褰撳墠Rt鐨勫兼潵璁$畻瀵瑰簲娓╁害鍊硷細Rt = Rp *exp(B*(1/T1-1/T2)) */ - temp = Rt / Rp; /* 解出exp(B*(1/T1-1/T2)) ,即temp = exp(B*(1/T1-1/T2)) */ - temp = log(temp); /* 解出B*(1/T1-1/T2) ,即temp = B*(1/T1-1/T2) */ - temp /= Bx; /* 解出1/T1-1/T2 ,即temp = 1/T1-1/T2 */ - temp += (1.0f / T2); /* 解出1/T1 ,即temp = 1/T1 */ - temp = 1.0f / (temp); /* 解出T1 ,即temp = T1 */ - temp -= Ka; /* 计算T1对应的摄氏度 */ - return temp; /* 返回温度值 */ + temp = Rt / Rp; /* 瑙e嚭exp(B*(1/T1-1/T2)) 锛屽嵆temp = exp(B*(1/T1-1/T2)) */ + temp = log(temp); /* 瑙e嚭B*(1/T1-1/T2) 锛屽嵆temp = B*(1/T1-1/T2) */ + temp /= Bx; /* 瑙e嚭1/T1-1/T2 锛屽嵆temp = 1/T1-1/T2 */ + temp += (1.0f / T2); /* 瑙e嚭1/T1 锛屽嵆temp = 1/T1 */ + temp = 1.0f / (temp); /* 瑙e嚭T1 锛屽嵆temp = T1 */ + temp -= Ka; /* 璁$畻T1瀵瑰簲鐨勬憚姘忓害 */ + return temp; /* 杩斿洖娓╁害鍊 */ } /** - * @brief 计算ADC的平均值(滤波) - * @param * p :存放ADC值的指针地址 - * @note 此函数对电压、温度、电流对应的ADC值进行滤波, - * p[0]-p[2]对应的分别是电压、温度和电流 - * @retval 无 + * @brief 璁$畻ADC鐨勫钩鍧囧硷紙婊ゆ尝锛 + * @param * p 锛氬瓨鏀続DC鍊肩殑鎸囬拡鍦板潃 + * @note 姝ゅ嚱鏁板鐢靛帇銆佹俯搴︺佺數娴佸搴旂殑ADC鍊艰繘琛屾护娉紝 + * p[0]-p[2]瀵瑰簲鐨勫垎鍒槸鐢靛帇銆佹俯搴﹀拰鐢垫祦 + * @retval 鏃 */ void calc_adc_val(uint16_t * p) { uint32_t temp[3] = {0,0,0}; int i; - for(i=0;i= 1; i--) /* 冒泡排序*/ + for (i = 10; i >= 1; i--) /* 鍐掓场鎺掑簭*/ { for (j = 0; j < (i - 1); j++) { - if (speed_arr[j] > speed_arr[j + 1]) /* 数值比较 */ + if (speed_arr[j] > speed_arr[j + 1]) /* 鏁板兼瘮杈 */ { - temp = speed_arr[j]; /* 数值换位 */ + temp = speed_arr[j]; /* 鏁板兼崲浣 */ speed_arr[j] = speed_arr[j + 1]; speed_arr[j + 1] = temp; } @@ -212,17 +212,17 @@ void speed_computer(int32_t encode_now, uint8_t ms) temp = 0.0; - for (i = 2; i < 8; i++) /* 去除两边高低数据 */ + for (i = 2; i < 8; i++) /* 鍘婚櫎涓よ竟楂樹綆鏁版嵁 */ { - temp += speed_arr[i]; /* 将中间数值累加 */ + temp += speed_arr[i]; /* 灏嗕腑闂存暟鍊肩疮鍔 */ } - temp = (float)(temp / 6); /*求速度平均值*/ + temp = (float)(temp / 6); /*姹傞熷害骞冲潎鍊*/ - /* 一阶低通滤波 - * 公式为:Y(n)= qX(n) + (1-q)Y(n-1) - * 其中X(n)为本次采样值;Y(n-1)为上次滤波输出值;Y(n)为本次滤波输出值,q为滤波系数 - * q值越小则上一次输出对本次输出影响越大,整体曲线越平稳,但是对于速度变化的响应也会越慢 + /* 涓闃朵綆閫氭护娉 + * 鍏紡涓猴細Y(n)= qX(n) + (1-q)Y(n-1) + * 鍏朵腑X(n)涓烘湰娆¢噰鏍峰硷紱Y(n-1)涓轰笂娆℃护娉㈣緭鍑哄硷紱Y(n)涓烘湰娆℃护娉㈣緭鍑哄硷紝q涓烘护娉㈢郴鏁 + * q鍊艰秺灏忓垯涓婁竴娆¤緭鍑哄鏈杈撳嚭褰卞搷瓒婂ぇ锛屾暣浣撴洸绾胯秺骞崇ǔ锛屼絾鏄浜庨熷害鍙樺寲鐨勫搷搴斾篃浼氳秺鎱 */ g_motor_data.speed = (float)( ((float)0.48 * temp) + (g_motor_data.speed * (float)0.52) ); k = 0; @@ -233,70 +233,70 @@ void speed_computer(int32_t encode_now, uint8_t ms) } /***************************************************************************************** -* 函数名称: get_current -* 功能描述: 获取工作电流函数 -* 参 数: 无 -* 返 回 值: 电流值 +* 鍑芥暟鍚嶇О: get_current +* 鍔熻兘鎻忚堪: 鑾峰彇宸ヤ綔鐢垫祦鍑芥暟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鐢垫祦鍊 *****************************************************************************************/ float get_current(void) { - return g_motor_data.current; /* 返回工作电流值 */ + return g_motor_data.current; /* 杩斿洖宸ヤ綔鐢垫祦鍊 */ } /***************************************************************************************** -* 函数名称: get_volatage -* 功能描述: 获取工作电压函数 -* 参 数: 无 -* 返 回 值: 电压值 +* 鍑芥暟鍚嶇О: get_volatage +* 鍔熻兘鎻忚堪: 鑾峰彇宸ヤ綔鐢靛帇鍑芥暟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鐢靛帇鍊 *****************************************************************************************/ float get_volatage(void) { - return g_motor_data.volatage; /* 返回工作电压值 */ + return g_motor_data.volatage; /* 杩斿洖宸ヤ綔鐢靛帇鍊 */ } /***************************************************************************************** -* 函数名称: get_Temperature -* 功能描述: 获取工作温度函数 -* 参 数: 无 -* 返 回 值: 温度值 +* 鍑芥暟鍚嶇О: get_Temperature +* 鍔熻兘鎻忚堪: 鑾峰彇宸ヤ綔娓╁害鍑芥暟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 娓╁害鍊 *****************************************************************************************/ float get_Temperature(void) { - return g_motor_data.current; /* 返回工作温度值 */ + return g_motor_data.current; /* 杩斿洖宸ヤ綔娓╁害鍊 */ } /***************************************************************************************** -* 函数名称: get_speed -* 功能描述: 获取电机实际转速值函数 -* 参 数: 无 -* 返 回 值: 电压值 +* 鍑芥暟鍚嶇О: get_speed +* 鍔熻兘鎻忚堪: 鑾峰彇鐢垫満瀹為檯杞熷煎嚱鏁 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鐢靛帇鍊 *****************************************************************************************/ float get_speed(void) { - return g_motor_data.speed; /* 返回电机实际转速值 */ + return g_motor_data.speed; /* 杩斿洖鐢垫満瀹為檯杞熷 */ } /***************************************************************************************** -* 函数名称: get_location -* 功能描述: 获取电机实际位置函数 -* 参 数: 无 -* 返 回 值: 电压值 +* 鍑芥暟鍚嶇О: get_location +* 鍔熻兘鎻忚堪: 鑾峰彇鐢垫満瀹為檯浣嶇疆鍑芥暟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鐢靛帇鍊 *****************************************************************************************/ float get_location(void) { - return g_motor_data.speed; /* 返回电机实际位置 */ + return g_motor_data.speed; /* 杩斿洖鐢垫満瀹為檯浣嶇疆 */ } /***************************************************************************************** -* 函数名称: Adc1mSRoutine -* 功能描述: Adc 1毫秒服务函数 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: Adc1mSRoutine +* 鍔熻兘鎻忚堪: Adc 1姣鏈嶅姟鍑芥暟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ -bool AdcInitStatus = false; //ADC初始化状态标志位 -volatile bool AdcInitSta = false; //ADC电流电压采集初始化标志位 -uint16_t AdcDly = 0; //ADC采样定时计数 +bool AdcInitStatus = false; //ADC鍒濆鍖栫姸鎬佹爣蹇椾綅 +volatile bool AdcInitSta = false; //ADC鐢垫祦鐢靛帇閲囬泦鍒濆鍖栨爣蹇椾綅 +uint16_t AdcDly = 0; //ADC閲囨牱瀹氭椂璁℃暟 void Adc1mSRoutine(void) { if(AdcInitStatus == false) @@ -311,17 +311,17 @@ void Adc1mSRoutine(void) /***************************************************************************************** -* 函数名称: AdcLoopHander -* 功能描述: Adc主循环函数 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: AdcLoopHander +* 鍔熻兘鎻忚堪: Adc涓诲惊鐜嚱鏁 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void AdcLoopHander(void) { uint32_t temp = 0; int i; float temp_c = 0.0; - //开机等待电流数据稳定1秒,采集稳定电流值为初始值 + //寮鏈虹瓑寰呯數娴佹暟鎹ǔ瀹1绉掞紝閲囬泦绋冲畾鐢垫祦鍊间负鍒濆鍊 if((AdcInitStatus == true) && (AdcInitSta == false)) { ADC_Start(); @@ -335,19 +335,19 @@ void AdcLoopHander(void) else { while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete); - for(i=0;i 0) { - init_adc_val /= 2; /* 取平均值 */ + init_adc_val /= 2; /* 鍙栧钩鍧囧 */ } } DCMOTOR_DBG_LOG("init_adc_val %d.\n", init_adc_val); AdcInitSta = true; } } - //计算ADC采样值并滤波 + //璁$畻ADC閲囨牱鍊煎苟婊ゆ尝 if(AdcDly == 0) { float BatVoltage = 0; @@ -356,7 +356,7 @@ void AdcLoopHander(void) { while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete); DMA_Cmd(M4_DMA1, Disable); - calc_adc_val(g_adc_val); /* 计算ADC的平均值 */ + calc_adc_val(g_adc_val); /* 璁$畻ADC鐨勫钩鍧囧 */ // DCMOTOR_DBG_LOG("ADC1_IN1 value %d.\t Temp:%.1fC \r\n", g_adc_val[0u], get_temp((float)g_adc_val[0]*Adc)); // DCMOTOR_DBG_LOG("ADC2_IN2 value %d.\t Valtage:%.1fV \r\n", g_adc_val[1u], (float)g_adc_val[1]*ADC2VBUS); @@ -365,8 +365,8 @@ void AdcLoopHander(void) // g_motor_data.current = temp_c; - g_motor_data.current = (float)((g_motor_data.current * (float)0.60) + ((float)0.40 * temp_c)); /* 一阶低通滤波 */ - if (abs(g_motor_data.current) <= 20) /* 过滤掉微弱浮动电流 */ + g_motor_data.current = (float)((g_motor_data.current * (float)0.60) + ((float)0.40 * temp_c)); /* 涓闃朵綆閫氭护娉 */ + if (abs(g_motor_data.current) <= 20) /* 杩囨护鎺夊井寮辨诞鍔ㄧ數娴 */ { g_motor_data.current = 0.0; } @@ -429,7 +429,7 @@ void Timer41_Init(uint8_t dir) /* Timer4 OCO : Initialize OCO configuration structure */ stcOcoInit.enOccrBufMode = OccrBufTrsfByCntZero; stcOcoInit.enOcmrBufMode = OcmrBufTrsfByCntZero; - stcOcoInit.enPortLevel = E_OC_Port; /*输出低电平到OC端口*/ + stcOcoInit.enPortLevel = E_OC_Port; /*杈撳嚭浣庣數骞冲埌OC绔彛*/ stcOcoInit.enOcoIntCmd = Disable; TIMER4_OCO_Init(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, &stcOcoInit); /* Initialize OCO high channel */ TIMER4_OCO_Init(TIMER4_UNIT, enOcoLowCh, &stcOcoInit); /* Initialize OCO low channel */ @@ -504,14 +504,14 @@ void Timer41_Init(uint8_t dir) PORT_SetFunc(TIMER4_PWM_L_PORT, TIMER4_PWM_L_PIN, Func_Tim4, Disable); /* Timer4 PWM: Initialize PWM configuration structure */ - //重载定时器中断 + //閲嶈浇瀹氭椂鍣ㄤ腑鏂 stcPwmInit.enRtIntMaskCmd = Enable; - //计数时钟分频 - stcPwmInit.enClkDiv = PwmPlckDiv1; /*滤波计数器和死区计数器的计数时钟分频*/ - //PWM输出极性控制 - stcPwmInit.enOutputState = E_PWM_OS; /*输出PWMH信号不改变电平,输出PWML信号反转*/ - //PWM输出模式 - stcPwmInit.enMode = PwmThroughMode; /*直通模式*/ + //璁℃暟鏃堕挓鍒嗛 + stcPwmInit.enClkDiv = PwmPlckDiv1; /*婊ゆ尝璁℃暟鍣ㄥ拰姝诲尯璁℃暟鍣ㄧ殑璁℃暟鏃堕挓鍒嗛*/ + //PWM杈撳嚭鏋佹ф帶鍒 + stcPwmInit.enOutputState = E_PWM_OS; /*杈撳嚭PWMH淇″彿涓嶆敼鍙樼數骞筹紝杈撳嚭PWML淇″彿鍙嶈浆*/ + //PWM杈撳嚭妯″紡 + stcPwmInit.enMode = PwmThroughMode; /*鐩撮氭ā寮*/ TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */ /* Clear && Start CNT */ @@ -549,8 +549,8 @@ void Timer41_Init(void) stcCntInit.enClk = Timer4CntPclk; stcCntInit.enClkDiv = Timer4CntPclkDiv4; /* CNT clock divide */ stcCntInit.u16Cycle = TIMER4_CNT_CYCLE_VAL; -// stcCntInit.enCntMode = Timer4CntSawtoothWave; //锯齿波模式 - stcCntInit.enCntMode = Timer4CntTriangularWave; //三角波模式Timer4CntTriangularWave +// stcCntInit.enCntMode = Timer4CntSawtoothWave; //閿娇娉㈡ā寮 + stcCntInit.enCntMode = Timer4CntTriangularWave; //涓夎娉㈡ā寮廡imer4CntTriangularWave stcCntInit.enZeroIntCmd = Disable; stcCntInit.enPeakIntCmd = Disable; stcCntInit.enZeroIntMsk = Timer4CntIntMask0; @@ -560,7 +560,7 @@ void Timer41_Init(void) /* Timer4 OCO : Initialize OCO configuration structure */ stcOcoInit.enOccrBufMode = OccrBufDisable; stcOcoInit.enOcmrBufMode = OcmrBufDisable; - stcOcoInit.enPortLevel = OcPortLevelHigh; /*输出高电平到OC端口*/ + stcOcoInit.enPortLevel = OcPortLevelHigh; /*杈撳嚭楂樼數骞冲埌OC绔彛*/ stcOcoInit.enOcoIntCmd = Disable; TIMER4_OCO_Init(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, &stcOcoInit); /* Initialize OCO high channel */ TIMER4_OCO_Init(TIMER4_UNIT, enOcoLowCh, &stcOcoInit); /* Initialize OCO low channel */ @@ -629,14 +629,14 @@ void Timer41_Init(void) PORT_SetFunc(TIMER4_PWM_L_PORT, TIMER4_PWM_L_PIN, Func_Tim4, Disable); /* Timer4 PWM: Initialize PWM configuration structure */ - //重载定时器中断 + //閲嶈浇瀹氭椂鍣ㄤ腑鏂 stcPwmInit.enRtIntMaskCmd = Enable; - //计数时钟分频 - stcPwmInit.enClkDiv = PwmPlckDiv1; /*滤波计数器和死区计数器的计数时钟分频*/ - //PWM输出极性控制 - stcPwmInit.enOutputState = PwmHPwmLReverse; /*输出PWMH信号不改变电平,输出PWML信号反转*/ - //PWM输出模式 - stcPwmInit.enMode = PwmThroughMode; /*直通模式*/ + //璁℃暟鏃堕挓鍒嗛 + stcPwmInit.enClkDiv = PwmPlckDiv1; /*婊ゆ尝璁℃暟鍣ㄥ拰姝诲尯璁℃暟鍣ㄧ殑璁℃暟鏃堕挓鍒嗛*/ + //PWM杈撳嚭鏋佹ф帶鍒 + stcPwmInit.enOutputState = PwmHPwmLReverse; /*杈撳嚭PWMH淇″彿涓嶆敼鍙樼數骞筹紝杈撳嚭PWML淇″彿鍙嶈浆*/ + //PWM杈撳嚭妯″紡 + stcPwmInit.enMode = PwmThroughMode; /*鐩撮氭ā寮*/ TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */ /* Clear && Start CNT */ @@ -795,9 +795,9 @@ void Timer61B_Init(void) /** - * @brief 电机初始化 - * @param 无 - * @retval 无 + * @brief 鐢垫満鍒濆鍖 + * @param 鏃 + * @retval 鏃 */ void dcmotor_init(void) { @@ -814,30 +814,30 @@ void dcmotor_init(void) // PORT_Init(PortA, Pin03, &stcPortInit); // PORT_SetBits(PortA, Pin03); -// /* SD拉低,关闭输出 */ +// /* SD鎷変綆锛屽叧闂緭鍑 */ // Timer41_Init(); - dcmotor_stop(); /* 停止电机 */ - dcmotor_dir(0); /* 设置正转 */ - dcmotor_speed(0); /* 速度设置为0 */ - dcmotor_start(); /* 开启电机 */ + dcmotor_stop(); /* 鍋滄鐢垫満 */ + dcmotor_dir(0); /* 璁剧疆姝h浆 */ + dcmotor_speed(0); /* 閫熷害璁剧疆涓0 */ + dcmotor_start(); /* 寮鍚數鏈 */ } /** - * @brief 电机开启 - * @param 无 - * @retval 无 + * @brief 鐢垫満寮鍚 + * @param 鏃 + * @retval 鏃 */ void dcmotor_start(void) { - ENABLE_MOTOR; /* 拉高SD引脚,开启电机 */ + ENABLE_MOTOR; /* 鎷夐珮SD寮曡剼锛屽紑鍚數鏈 */ } /** - * @brief 电机停止 - * @param 无 - * @retval 无 + * @brief 鐢垫満鍋滄 + * @param 鏃 + * @retval 鏃 */ void dcmotor_stop(void) { @@ -854,10 +854,10 @@ void dcmotor_stop(void) } /** - * @brief 电机旋转方向设置 - * @param para:方向 0正转,1反转 - * @note 以电机正面,顺时针方向旋转为正转 - * @retval 无 + * @brief 鐢垫満鏃嬭浆鏂瑰悜璁剧疆 + * @param para:鏂瑰悜 0姝h浆锛1鍙嶈浆 + * @note 浠ョ數鏈烘闈紝椤烘椂閽堟柟鍚戞棆杞负姝h浆 + * @retval 鏃 */ void dcmotor_dir(uint8_t para) { @@ -865,14 +865,14 @@ void dcmotor_dir(uint8_t para) Timer6_StopCount(M4_TMR61); Timer6_DeInit(M4_TMR61); - if (para == 0) /* 正转 */ + if (para == 0) /* 姝h浆 */ { Timer61A_Init(); } - else if (para == 1) /* 反转 */ + else if (para == 1) /* 鍙嶈浆 */ { Timer61B_Init(); } @@ -883,12 +883,12 @@ void dcmotor_dir(uint8_t para) #if(TIMER == TIMER4) TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, 0); TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, 0u); - if (para == 0) /* 正转 */ + if (para == 0) /* 姝h浆 */ { TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, 0); TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, 0u); } - else if (para == 1) /* 反转 */ + else if (para == 1) /* 鍙嶈浆 */ { TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, 0); TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, 0u); @@ -898,9 +898,9 @@ void dcmotor_dir(uint8_t para) } /** - * @brief 电机速度设置 - * @param para:比较寄存器值 - * @retval 无 + * @brief 鐢垫満閫熷害璁剧疆 + * @param para:姣旇緝瀵勫瓨鍣ㄥ + * @retval 鏃 */ void dcmotor_speed(uint16_t para) { @@ -914,14 +914,14 @@ void dcmotor_speed(uint16_t para) #endif #if(TIMER == TIMER4) - TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, g_motorSpeed); //正转 - TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, g_motorSpeed); //反转 + TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, g_motorSpeed); //姝h浆 + TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, g_motorSpeed); //鍙嶈浆 #endif dcmotor_stop(); return; } - if(Motor_GetDirection() == DIR_REVERSE) //反转 + if(Motor_GetDirection() == DIR_REVERSE) //鍙嶈浆 { #if(TIMER == TIMER6) Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed); //Set General Compare RegisterA Value @@ -929,12 +929,12 @@ void dcmotor_speed(uint16_t para) #endif #if(TIMER == TIMER4) - TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, g_motorSpeed); //反转 + TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, g_motorSpeed); //鍙嶈浆 #endif DCMOTOR_DBG_LOG("REVERSE\tnewSpeed = %d\r\n", g_motorSpeed); } - else if(Motor_GetDirection() == DIR_FORWARD) //正转 + else if(Motor_GetDirection() == DIR_FORWARD) //姝h浆 { #if(TIMER == TIMER6) Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, 10000-g_motorSpeed); //Set General Compare RegisterA Value @@ -942,7 +942,7 @@ void dcmotor_speed(uint16_t para) #endif #if(TIMER == TIMER4) - TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, g_motorSpeed); //正转 + TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, g_motorSpeed); //姝h浆 #endif DCMOTOR_DBG_LOG("FORWARD\tnewSpeed = %d\r\n", g_motorSpeed); } @@ -951,10 +951,10 @@ void dcmotor_speed(uint16_t para) #endif /** - * @brief 电机控制 - * @param para: pwm比较值 ,正数电机为正转,负数为反转 - * @note 根据传入的参数控制电机的转向和速度 - * @retval 无 + * @brief 鐢垫満鎺у埗 + * @param para: pwm姣旇緝鍊 ,姝f暟鐢垫満涓烘杞紝璐熸暟涓哄弽杞 + * @note 鏍规嵁浼犲叆鐨勫弬鏁版帶鍒剁數鏈虹殑杞悜鍜岄熷害 + * @retval 鏃 */ void motor_pwm_set(float para) { @@ -969,7 +969,7 @@ void motor_pwm_set(float para) if (val > 0) { g_motorDirection = DIR_FORWARD; - dcmotor_dir(0); /* 正转 */ + dcmotor_dir(0); /* 姝h浆 */ #if(TIMER == TIMER6) dcmotor_speed(10000-val); #endif @@ -981,7 +981,7 @@ void motor_pwm_set(float para) else { g_motorDirection = DIR_REVERSE; - dcmotor_dir(1); /* 反转 */ + dcmotor_dir(1); /* 鍙嶈浆 */ #if(TIMER == TIMER6) dcmotor_speed(-val); #endif @@ -996,9 +996,9 @@ void motor_pwm_set(float para) -// 设置电机方向 +// 璁剧疆鐢垫満鏂瑰悜 void Motor_SetDirection(uint8_t dir) { - // 更新方向标志位 + // 鏇存柊鏂瑰悜鏍囧織浣 if (dir == 0) { g_motorDirection = DIR_FORWARD; // Up(); @@ -1012,32 +1012,32 @@ void Motor_SetDirection(uint8_t dir) { } -// 电机控制接口 +// 鐢垫満鎺у埗鎺ュ彛 void Motor_Control(MotorCommand cmd) { g_motorCmd = cmd; } -// 获取电机当前方向 +// 鑾峰彇鐢垫満褰撳墠鏂瑰悜 MotorDirection Motor_GetDirection(void) { return g_motorDirection; } -// 设置电机速度 +// 璁剧疆鐢垫満閫熷害 void Motor_SetSpeed(uint16_t speed) { g_motorSpeed = (speed > MAX_SPEED) ? MAX_SPEED : speed; - // 当速度为零时,更新方向状态为停止 + // 褰撻熷害涓洪浂鏃讹紝鏇存柊鏂瑰悜鐘舵佷负鍋滄 if (g_motorSpeed == 0) { g_motorDirection = DIR_STOPPED; } - if(Motor_GetDirection() == DIR_REVERSE) //反转 + if(Motor_GetDirection() == DIR_REVERSE) //鍙嶈浆 { // Adt_SetCompareValue(M0P_ADTIM4, AdtCompareC, PWM_PERIOD - g_motorSpeed); // DBG_LOG("REVERSE\tnewSpeed = %d\r\n", g_motorSpeed); } - else if(Motor_GetDirection() == DIR_FORWARD) //正转 + else if(Motor_GetDirection() == DIR_FORWARD) //姝h浆 { // Adt_SetCompareValue(M0P_ADTIM5, AdtCompareC, g_motorSpeed); // DBG_LOG("FORWARD\tnewSpeed = %d\r\n", g_motorSpeed); @@ -1145,27 +1145,27 @@ void DcmotorLoopHandler(void) { Dcmotor1msStatus = false; - // 电机状态机处理 + // 鐢垫満鐘舵佹満澶勭悊 switch (g_motorState) { case MOTOR_STOPPED: // Motor_SetSpeed(0); // motor_pwm_set(0); dcmotor_speed(0); - // 检测新命令 + // 妫娴嬫柊鍛戒护 if (g_motorCmd == MOTOR_CMD_FORWARD) { - Motor_SetDirection(0); // 设置正转方向 + Motor_SetDirection(0); // 璁剧疆姝h浆鏂瑰悜 g_motorState = MOTOR_ACCELERATING; accelCounter = 0; -// Motor_SetSpeed(ACCEL_STEP); // 初始速度 +// Motor_SetSpeed(ACCEL_STEP); // 鍒濆閫熷害 // motor_pwm_set(ACCEL_STEP); dcmotor_speed(ACCEL_STEP); } else if (g_motorCmd == MOTOR_CMD_REVERSE) { - Motor_SetDirection(1); // 设置反转方向 + Motor_SetDirection(1); // 璁剧疆鍙嶈浆鏂瑰悜 g_motorState = MOTOR_ACCELERATING; accelCounter = 0; -// Motor_SetSpeed(ACCEL_STEP); // 初始速度 +// Motor_SetSpeed(ACCEL_STEP); // 鍒濆閫熷害 // motor_pwm_set(ACCEL_STEP); dcmotor_speed(ACCEL_STEP); TIMER4_CNT_ClearCountVal(TIMER4_UNIT); @@ -1174,40 +1174,40 @@ void DcmotorLoopHandler(void) break; case MOTOR_ACCELERATING: - // 加速过程 + // 鍔犻熻繃绋 if (++accelCounter >= ACCEL_INTERVAL) { accelCounter = 0; uint16_t newSpeed = g_motorSpeed + ACCEL_STEP; if (newSpeed >= MAX_SPEED) { newSpeed = MAX_SPEED; - g_motorState = MOTOR_RUNNING; // 达到最大速度,进入匀速 + g_motorState = MOTOR_RUNNING; // 杈惧埌鏈澶ч熷害锛岃繘鍏ュ寑閫 } // Motor_SetSpeed(newSpeed); // motor_pwm_set(newSpeed); dcmotor_speed(newSpeed); } - // 检查停止命令 + // 妫鏌ュ仠姝㈠懡浠 if (g_motorCmd == MOTOR_CMD_STOP) { g_motorState = MOTOR_DECELERATING; } break; case MOTOR_RUNNING: - // 检查停止命令 + // 妫鏌ュ仠姝㈠懡浠 if (g_motorCmd == MOTOR_CMD_STOP) { g_motorState = MOTOR_DECELERATING; } - // 检查方向改变命令 + // 妫鏌ユ柟鍚戞敼鍙樺懡浠 else if ((g_motorCmd == MOTOR_CMD_FORWARD && g_motorDirection != DIR_FORWARD) || (g_motorCmd == MOTOR_CMD_REVERSE && g_motorDirection != DIR_REVERSE)) { - g_motorState = MOTOR_DECELERATING; // 需要先减速停止 + g_motorState = MOTOR_DECELERATING; // 闇瑕佸厛鍑忛熷仠姝 } break; case MOTOR_DECELERATING: - // 减速过程 + // 鍑忛熻繃绋 if (++accelCounter >= ACCEL_INTERVAL) { accelCounter = 0; // if (g_motorSpeed > DECEL_STEP) { @@ -1219,7 +1219,7 @@ void DcmotorLoopHandler(void) // Motor_SetSpeed(0); // motor_pwm_set(0); dcmotor_speed(0); - g_motorState = MOTOR_STOPPED; // 减速完成,进入停止状态 + g_motorState = MOTOR_STOPPED; // 鍑忛熷畬鎴愶紝杩涘叆鍋滄鐘舵 } } break; diff --git a/Project/HC32F460/source/Module/dc_motor/dc_motor.h b/Project/HC32F460/source/Module/dc_motor/dc_motor.h index 172d40b..12b171d 100644 --- a/Project/HC32F460/source/Module/dc_motor/dc_motor.h +++ b/Project/HC32F460/source/Module/dc_motor/dc_motor.h @@ -2,9 +2,9 @@ #ifndef __DCMOTOR_H #define __DCMOTOR_H -#define ADC_CH_NUM 3 /* 需要转换的通道数目 */ -#define ADC_COLL 100 /* 单采集次数 */ -#define ADC_SUM ADC_CH_NUM * ADC_COLL /* 总采集次数 */ +#define ADC_CH_NUM 3 /* 闇瑕佽浆鎹㈢殑閫氶亾鏁扮洰 */ +#define ADC_COLL 100 /* 鍗曢噰闆嗘鏁 */ +#define ADC_SUM ADC_CH_NUM * ADC_COLL /* 鎬婚噰闆嗘鏁 */ @@ -20,26 +20,26 @@ #define TIMER4 0 #define TIMER6 1 -#define TIMER TIMER4 //HC32F460单片机PWM输出控制定时器选择 +#define TIMER TIMER4 //HC32F460鍗曠墖鏈篜WM杈撳嚭鎺у埗瀹氭椂鍣ㄩ夋嫨 #endif -// 电机控制参数 -#define PWM_PERIOD TIM_PERIOD // PWM周期值 (ARR) -#define MAX_SPEED 480 // 最大速度(PWM占空比) -#define ACCEL_STEP 10 // 加速步进值 -#define DECEL_STEP 10 // 减速步进值 -#define ACCEL_INTERVAL 10 // 加减速间隔(ms) +// 鐢垫満鎺у埗鍙傛暟 +#define PWM_PERIOD TIM_PERIOD // PWM鍛ㄦ湡鍊 (ARR) +#define MAX_SPEED 480 // 鏈澶ч熷害(PWM鍗犵┖姣) +#define ACCEL_STEP 10 // 鍔犻熸杩涘 +#define DECEL_STEP 10 // 鍑忛熸杩涘 +#define ACCEL_INTERVAL 10 // 鍔犲噺閫熼棿闅(ms) -// 电机控制命令 +// 鐢垫満鎺у埗鍛戒护 typedef enum { MOTOR_CMD_STOP, MOTOR_CMD_FORWARD, MOTOR_CMD_REVERSE } MotorCommand; -// 电机运行状态机 +// 鐢垫満杩愯鐘舵佹満 typedef enum { MOTOR_STOPPED, MOTOR_ACCELERATING, @@ -48,7 +48,7 @@ typedef enum { } MotorState; -// 电机转动方向 +// 鐢垫満杞姩鏂瑰悜 typedef enum { DIR_STOPPED, DIR_FORWARD, @@ -57,19 +57,19 @@ typedef enum { -/************************************* 第一部分 电压电流温度采集 ******************************/ +/************************************* 绗竴閮ㄥ垎 鐢靛帇鐢垫祦娓╁害閲囬泦 ******************************/ -/* 电流计算公式: - * I=(最终输出电压-初始参考电压)/(6*0.02)A - * ADC值转换为电压值:电压=ADC值*3.3/4096,这里电压单位为V,我们换算成mV,4096/1000=4.096,后面就直接算出为mA - * 整合公式可以得出电流 I= (当前ADC值-初始参考ADC值)* (3.3 / 4.096 / 0.12) +/* 鐢垫祦璁$畻鍏紡锛 + * I=锛堟渶缁堣緭鍑虹數鍘-鍒濆鍙傝冪數鍘嬶級/锛6*0.02锛堿 + * ADC鍊艰浆鎹负鐢靛帇鍊硷細鐢靛帇=ADC鍊*3.3/4096锛岃繖閲岀數鍘嬪崟浣嶄负V锛屾垜浠崲绠楁垚mV,4096/1000=4.096锛屽悗闈㈠氨鐩存帴绠楀嚭涓簃A + * 鏁村悎鍏紡鍙互寰楀嚭鐢垫祦 I= 锛堝綋鍓岮DC鍊-鍒濆鍙傝傾DC鍊硷級* 锛3.3 / 4.096 / 0.12锛 */ #define ADC2CURT (float)(3.3f / 4.096f / 0.12f) -/* 电压计算公式: +/* 鐢靛帇璁$畻鍏紡锛 * V_POWER = V_BUS * 25 - * ADC值转换为电压值:电压=ADC值*3.3/4096 - * 整合公式可以得出电压V_POWER= ADC值 *(3.3f * 25 / 4096) + * ADC鍊艰浆鎹负鐢靛帇鍊硷細鐢靛帇=ADC鍊*3.3/4096 + * 鏁村悎鍏紡鍙互寰楀嚭鐢靛帇V_POWER= ADC鍊 *锛3.3f * 25 / 4096锛 */ #define ADC2VBUS (float)(3.3f * 25 / 4096) @@ -80,63 +80,63 @@ typedef enum { -/* 停止引脚操作宏定义 - * 此引脚控制H桥是否生效以达到开启和关闭电机的效果 +/* 鍋滄寮曡剼鎿嶄綔瀹忓畾涔 + * 姝ゅ紩鑴氭帶鍒禜妗ユ槸鍚︾敓鏁堜互杈惧埌寮鍚拰鍏抽棴鐢垫満鐨勬晥鏋 */ #define SHUTDOWN1_Pin Pin07 #define SHUTDOWN1_GPIO_Port PortB //#define SHUTDOWN2_Pin GPIO_PIN_2 //#define SHUTDOWN2_GPIO_Port GPIOF -#define SHUTDOWN_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOF_CLK_ENABLE(); }while(0) /* PF口时钟使能 */ +#define SHUTDOWN_GPIO_CLK_ENABLE() do{ __HAL_RCC_GPIOF_CLK_ENABLE(); }while(0) /* PF鍙f椂閽熶娇鑳 */ #if(MCU == HC32F460JETA) -/* 电机停止引脚定义 这里默认是接口1 */ +/* 鐢垫満鍋滄寮曡剼瀹氫箟 杩欓噷榛樿鏄帴鍙1 */ #define ENABLE_MOTOR PORT_SetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin) #define DISABLE_MOTOR PORT_ResetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin) #endif /******************************************************************************************/ -/* 编码器参数结构体 */ +/* 缂栫爜鍣ㄥ弬鏁扮粨鏋勪綋 */ typedef struct { - int encode_old; /* 上一次计数值 */ - int encode_now; /* 当前计数值 */ - float speed; /* 编码器速度 */ + int encode_old; /* 涓婁竴娆¤鏁板 */ + int encode_now; /* 褰撳墠璁℃暟鍊 */ + float speed; /* 缂栫爜鍣ㄩ熷害 */ } ENCODE_TypeDef; -extern ENCODE_TypeDef g_encode; /* 编码器参数变量 */ +extern ENCODE_TypeDef g_encode; /* 缂栫爜鍣ㄥ弬鏁板彉閲 */ -/************************************* 第三部分 编码器测速 ****************************************************/ +/************************************* 绗笁閮ㄥ垎 缂栫爜鍣ㄦ祴閫 ****************************************************/ -#define ROTO_RATIO 44 /* 线数*倍频系数,即11*4=44 */ -#define REDUCTION_RATIO 30 /* 减速比30:1 */ +#define ROTO_RATIO 44 /* 绾挎暟*鍊嶉绯绘暟锛屽嵆11*4=44 */ +#define REDUCTION_RATIO 30 /* 鍑忛熸瘮30:1 */ -/* 电机参数结构体 */ +/* 鐢垫満鍙傛暟缁撴瀯浣 */ typedef struct { - uint8_t state; /*电机状态*/ - float current; /*电机电流*/ - float volatage; /*电机电压*/ - float power; /*电机功率*/ - float speed; /*电机实际速度*/ - float location; /*电机位置*/ - int32_t motor_pwm; /*设置比较值大小 */ + uint8_t state; /*鐢垫満鐘舵*/ + float current; /*鐢垫満鐢垫祦*/ + float volatage; /*鐢垫満鐢靛帇*/ + float power; /*鐢垫満鍔熺巼*/ + float speed; /*鐢垫満瀹為檯閫熷害*/ + float location; /*鐢垫満浣嶇疆*/ + int32_t motor_pwm; /*璁剧疆姣旇緝鍊煎ぇ灏 */ } Motor_TypeDef; -extern Motor_TypeDef g_motor_data; /*电机参数变量*/ +extern Motor_TypeDef g_motor_data; /*鐢垫満鍙傛暟鍙橀噺*/ /*********************************************************************************************************************/ -void dcmotor_init(void); /* 直流有刷电机初始化 */ -void dcmotor_start(void); /* 开启电机 */ -void dcmotor_stop(void); /* 关闭电机 */ -void dcmotor_dir(uint8_t para); /* 设置电机方向 */ -void dcmotor_speed(uint16_t para); /* 设置电机速度 */ -void motor_pwm_set(float para); /* 电机控制 */ +void dcmotor_init(void); /* 鐩存祦鏈夊埛鐢垫満鍒濆鍖 */ +void dcmotor_start(void); /* 寮鍚數鏈 */ +void dcmotor_stop(void); /* 鍏抽棴鐢垫満 */ +void dcmotor_dir(uint8_t para); /* 璁剧疆鐢垫満鏂瑰悜 */ +void dcmotor_speed(uint16_t para); /* 璁剧疆鐢垫満閫熷害 */ +void motor_pwm_set(float para); /* 鐢垫満鎺у埗 */ float get_temp(uint16_t para); @@ -147,17 +147,17 @@ void calc_adc_val(uint16_t * p); void Encoder (void); -//外部调用接口函数 -MotorDirection Motor_GetDirection(void);/* 获取电机转动方向 */ -void Motor_Control(MotorCommand cmd); /* 电机控制 */ +//澶栭儴璋冪敤鎺ュ彛鍑芥暟 +MotorDirection Motor_GetDirection(void);/* 鑾峰彇鐢垫満杞姩鏂瑰悜 */ +void Motor_Control(MotorCommand cmd); /* 鐢垫満鎺у埗 */ void Dcmotor1msRoutine(void); void DcmotorLoopHandler(void); -float get_current(void); /* 获取工作电流 */ -float get_volatage(void); /* 获取工作电压 */ -float get_Temperature(void); /* 获取工作温度 */ -float get_speed(void); /* 获取电机转速 */ -float get_location(void); /* 获取电机位置 */ +float get_current(void); /* 鑾峰彇宸ヤ綔鐢垫祦 */ +float get_volatage(void); /* 鑾峰彇宸ヤ綔鐢靛帇 */ +float get_Temperature(void); /* 鑾峰彇宸ヤ綔娓╁害 */ +float get_speed(void); /* 鑾峰彇鐢垫満杞 */ +float get_location(void); /* 鑾峰彇鐢垫満浣嶇疆 */ #endif diff --git a/Project/HC32F460/source/Module/mmc5983/mmc5983.c b/Project/HC32F460/source/Module/mmc5983/mmc5983.c index 8b03eed..aab1174 100644 --- a/Project/HC32F460/source/Module/mmc5983/mmc5983.c +++ b/Project/HC32F460/source/Module/mmc5983/mmc5983.c @@ -11,11 +11,11 @@ static bool MMC5983IntFlag; static MMC5983Var_t MMC5983Var; /***************************************************************************************** -* 函数名称: MMC5983_Write_Reg -* 功能描述: MMC5983写寄存器 -* 参 数: reg 寄存器地址 - val 寄存器数据 -* 返 回 值: 成功返回true,失败返回false +* 鍑芥暟鍚嶇О: MMC5983_Write_Reg +* 鍔熻兘鎻忚堪: MMC5983鍐欏瘎瀛樺櫒 +* 鍙 鏁: reg 瀵勫瓨鍣ㄥ湴鍧 + val 瀵勫瓨鍣ㄦ暟鎹 +* 杩 鍥 鍊: 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse *****************************************************************************************/ static bool MMC5983_Write_Reg(uint8_t reg, uint8_t val) { @@ -23,10 +23,10 @@ static bool MMC5983_Write_Reg(uint8_t reg, uint8_t val) } /***************************************************************************************** -* 函数名称: MMC5983_Read_Reg -* 功能描述: MMC5983读寄存器 -* 参 数: reg 寄存器地址 -* 返 回 值: 返回寄存器值 +* 鍑芥暟鍚嶇О: MMC5983_Read_Reg +* 鍔熻兘鎻忚堪: MMC5983璇诲瘎瀛樺櫒 +* 鍙 鏁: reg 瀵勫瓨鍣ㄥ湴鍧 +* 杩 鍥 鍊: 杩斿洖瀵勫瓨鍣ㄥ *****************************************************************************************/ static uint8_t MMC5983_Read_Reg(uint8_t reg) { @@ -37,12 +37,12 @@ static uint8_t MMC5983_Read_Reg(uint8_t reg) } /***************************************************************************************** -* 函数名称: MMC5983_Read_Buffer -* 功能描述: MMC5983读数据 -* 参 数: reg 寄存器地址 - buffer 读取数据输出缓存入口 - len 读取长度 -* 返 回 值: 成功返回true,失败返回false +* 鍑芥暟鍚嶇О: MMC5983_Read_Buffer +* 鍔熻兘鎻忚堪: MMC5983璇绘暟鎹 +* 鍙 鏁: reg 瀵勫瓨鍣ㄥ湴鍧 + buffer 璇诲彇鏁版嵁杈撳嚭缂撳瓨鍏ュ彛 + len 璇诲彇闀垮害 +* 杩 鍥 鍊: 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse *****************************************************************************************/ static bool MMC5983_Read_Buffer(uint8_t reg, void *buffer, uint8_t len) { @@ -50,27 +50,27 @@ static bool MMC5983_Read_Buffer(uint8_t reg, void *buffer, uint8_t len) } /***************************************************************************************** -* 函数名称: MMC5983StartCov -* 功能描述: MMC5983开启连续转换 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: MMC5983StartCov +* 鍔熻兘鎻忚堪: MMC5983寮鍚繛缁浆鎹 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void MMC5983StartCov(void) { - MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换 + MMC5983RegCtrl2 Ctrl2Reg; //寮鍚/鍏抽棴杩炵画杞崲 Ctrl2Reg.Byte = 0x00; Ctrl2Reg.Bit.Cm_freq = 0x04; - Ctrl2Reg.Bit.Cmm_en = 1; //连续设1,单次设0 + Ctrl2Reg.Bit.Cmm_en = 1; //杩炵画璁1锛屽崟娆¤0 Ctrl2Reg.Bit.Prd_set = 3; - Ctrl2Reg.Bit.En_prd_set = 1; //连续设1,单次设0 + Ctrl2Reg.Bit.En_prd_set = 1; //杩炵画璁1锛屽崟娆¤0 MMC5983_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte); } /***************************************************************************************** -* 函数名称: MMC5983_Init -* 功能描述: MMC5983初始化 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: MMC5983_Init +* 鍔熻兘鎻忚堪: MMC5983鍒濆鍖 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void MMC5983_Init(void) { @@ -93,12 +93,12 @@ static void MMC5983_Init(void) MMC5983_Write_Reg(MMC5983_CTRL_1, Ctrl1Reg.Byte); MMC5983Delay(15); - MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换 + MMC5983RegCtrl2 Ctrl2Reg; //寮鍚/鍏抽棴杩炵画杞崲 Ctrl2Reg.Byte = 0x00; Ctrl2Reg.Bit.Cm_freq = 0x04; - Ctrl2Reg.Bit.Cmm_en = 0; //连续设1,单次设0 + Ctrl2Reg.Bit.Cmm_en = 0; //杩炵画璁1锛屽崟娆¤0 Ctrl2Reg.Bit.Prd_set = 3; - Ctrl2Reg.Bit.En_prd_set = 0; //连续设1,单次设0 + Ctrl2Reg.Bit.En_prd_set = 0; //杩炵画璁1锛屽崟娆¤0 MMC5983_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte); MMC5983RegCtrl3 Ctrl3Reg; @@ -121,12 +121,12 @@ static void MMC5983_Init(void) } /***************************************************************************************** -* 函数名称: MMC5983_Read -* 功能描述: MMC5983读取原始数据 -* 参 数: MagAdcX X轴数据 - MagAdcY Y轴数据 - MagAdcZ Z轴数据 -* 返 回 值: 成功返回true,失败返回false +* 鍑芥暟鍚嶇О: MMC5983_Read +* 鍔熻兘鎻忚堪: MMC5983璇诲彇鍘熷鏁版嵁 +* 鍙 鏁: MagAdcX X杞存暟鎹 + MagAdcY Y杞存暟鎹 + MagAdcZ Z杞存暟鎹 +* 杩 鍥 鍊: 鎴愬姛杩斿洖true锛屽け璐ヨ繑鍥瀎alse *****************************************************************************************/ static bool MMC5983_Read(int32_t *MagAdcX, int32_t *MagAdcY, int32_t *MagAdcZ) { @@ -142,10 +142,10 @@ static bool MMC5983_Read(int32_t *MagAdcX, int32_t *MagAdcY, int32_t *MagAdcZ) } /***************************************************************************************** -* 函数名称: MMC5983_Get_Mag -* 功能描述: 外部获取MMC5983磁场强度数据 -* 参 数: mag 读取数据输出缓存入口 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: MMC5983_Get_Mag +* 鍔熻兘鎻忚堪: 澶栭儴鑾峰彇MMC5983纾佸満寮哄害鏁版嵁 +* 鍙 鏁: mag 璇诲彇鏁版嵁杈撳嚭缂撳瓨鍏ュ彛 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void MMC5983_Get_Mag(float *mag) { @@ -164,10 +164,10 @@ void MMC5983_Get_Mag(float *mag) } /***************************************************************************************** -* 函数名称: MMC5983LoopHandler -* 功能描述: MMC5983循环处理函数 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: MMC5983LoopHandler +* 鍔熻兘鎻忚堪: MMC5983寰幆澶勭悊鍑芥暟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ extern void MmcDataProcessCallBack(float *Mag); @@ -251,16 +251,16 @@ void MMC5983LoopHandler(void) case MMC5983_STATUS_STOP:{ MMC5983Stop(); MMC5983Var.Status = MMC5983_STATUS_IDLE; - //MMC5983Var.Status = MMC5983_STATUS_START;//持续工作 + //MMC5983Var.Status = MMC5983_STATUS_START;//鎸佺画宸ヤ綔 break;} } } /***************************************************************************************** -* 函数名称: LeftMMC59831mSRoutine -* 功能描述: MMC59831ms时基循环处理函数 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: LeftMMC59831mSRoutine +* 鍔熻兘鎻忚堪: MMC59831ms鏃跺熀寰幆澶勭悊鍑芥暟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void MMC59831mSRoutine(void) { @@ -269,10 +269,10 @@ void MMC59831mSRoutine(void) } /***************************************************************************************** -* 函数名称: LeftMMC5983Init -* 功能描述: MMC5983初始化 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: LeftMMC5983Init +* 鍔熻兘鎻忚堪: MMC5983鍒濆鍖 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void MMC5983Init(void) { @@ -285,10 +285,10 @@ void MMC5983Init(void) } /***************************************************************************************** -* 函数名称: LeftMMC5983Start -* 功能描述: MMC5983启动 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: LeftMMC5983Start +* 鍔熻兘鎻忚堪: MMC5983鍚姩 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void MMC5983Start(void) { @@ -301,21 +301,21 @@ void MMC5983Start(void) } /***************************************************************************************** -* 函数名称: LeftMMC5983StartRead -* 功能描述: MMC5983启动读取 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: LeftMMC5983StartRead +* 鍔熻兘鎻忚堪: MMC5983鍚姩璇诲彇 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void MMC5983StartRead(void) { - MMC5983_Init();//读取时重新初始化 + MMC5983_Init();//璇诲彇鏃堕噸鏂板垵濮嬪寲 } /***************************************************************************************** -* 函数名称: MMC5983Stop -* 功能描述: MMC5983停止 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: MMC5983Stop +* 鍔熻兘鎻忚堪: MMC5983鍋滄 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void MMC5983Stop(void) { @@ -331,10 +331,10 @@ void MMC5983Stop(void) } /***************************************************************************************** -* 函数名称: LeftMMC5983IntCallBack -* 功能描述: MMC5983中断回调 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: LeftMMC5983IntCallBack +* 鍔熻兘鎻忚堪: MMC5983涓柇鍥炶皟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void MMC5983IntCallBack(void) { diff --git a/Project/HC32F460/source/User/Inc/Algorithm.h b/Project/HC32F460/source/User/Inc/Algorithm.h index 7ab0351..728a327 100644 --- a/Project/HC32F460/source/User/Inc/Algorithm.h +++ b/Project/HC32F460/source/User/Inc/Algorithm.h @@ -11,20 +11,20 @@ #define CRC16_BASE 0xA001 -// 峰值谷值检查结果结构体 +// 宄板艰胺鍊兼鏌ョ粨鏋滅粨鏋勪綋 typedef struct { - bool peaks_positive; // 所有峰值是否大于0 - bool valleys_negative; // 所有谷值是否小于0 - int peak_count; // 检测到的峰值数量 - int valley_count; // 检测到的谷值数量 + bool peaks_positive; // 鎵鏈夊嘲鍊兼槸鍚﹀ぇ浜0 + bool valleys_negative; // 鎵鏈夎胺鍊兼槸鍚﹀皬浜0 + int peak_count; // 妫娴嬪埌鐨勫嘲鍊兼暟閲 + int valley_count; // 妫娴嬪埌鐨勮胺鍊兼暟閲 } PeakValleyCheck; -// 趋势分析结果结构体 +// 瓒嬪娍鍒嗘瀽缁撴灉缁撴瀯浣 typedef struct { - double slope; // 线性斜率 - int sign_changes; // 符号变化次数 - char trend_type; // 趋势类型 - char steepness; // 陡峭度 + double slope; // 绾挎ф枩鐜 + int sign_changes; // 绗﹀彿鍙樺寲娆℃暟 + char trend_type; // 瓒嬪娍绫诲瀷 + char steepness; // 闄″抄搴 } TrendResult; PeakValleyCheck check_peaks_valleys(int data[], int length); diff --git a/Project/HC32F460/source/User/Inc/Debug.h b/Project/HC32F460/source/User/Inc/Debug.h index d61e4db..7c4ef94 100644 --- a/Project/HC32F460/source/User/Inc/Debug.h +++ b/Project/HC32F460/source/User/Inc/Debug.h @@ -11,7 +11,7 @@ void vcom_Send( char *format, ... ); void vcom_Send2(uint8_t *sData, uint16_t len); -#define DBG_LOG2(x, y) vcom_Send2(x, y) //打印长度超过缓存DEBUG_BUFF_SIZE_MAX的信息 +#define DBG_LOG2(x, y) vcom_Send2(x, y) //鎵撳嵃闀垮害瓒呰繃缂撳瓨DEBUG_BUFF_SIZE_MAX鐨勪俊鎭 #define DBG_LOG(...) vcom_Send(__VA_ARGS__) #define DBG_LOG_F(fmt,arg...) LOG("[%s] "fmt,__FUNCTION__,##arg) diff --git a/Project/HC32F460/source/User/Inc/bsp.h b/Project/HC32F460/source/User/Inc/bsp.h index 7de4721..566cc9a 100644 --- a/Project/HC32F460/source/User/Inc/bsp.h +++ b/Project/HC32F460/source/User/Inc/bsp.h @@ -9,28 +9,28 @@ #include "hc32_ddl.h" -/*模块启用与关闭*/ -#define USE_DEBUG 1 //DEBUG开关,0、关闭,1、启用 -#define USE_AD 1 //AD获取选择,0、关闭,1、启用 -#define USE_WDT 0 //看门狗选择,0、关闭,1启用 -#define USE_EXFALSE 0 //外部FALSE存储选择,0、关闭,1、启用 -#define USE_RTC 0 //RTC时钟开关,0、关闭,1、开启 -#define USE_LPTIM0 0 //LPTIM0开关,0、关闭,1、开启 -#define USE_DMA 1 //DMA开关,0、关闭,1、开启 -#define USE_RS485 0 //RS485开关,0、关闭,1、启用 -#define USE_I2C1 0 //I2C1开关,0、关闭,1、启用 -#define USE_SPI1 0 //SPI1开关,0、关闭,1、启用 -#define USE_SPI3 0 //SPI3开关,0、关闭,1、启用 +/*妯″潡鍚敤涓庡叧闂*/ +#define USE_DEBUG 1 //DEBUG寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 +#define USE_AD 1 //AD鑾峰彇閫夋嫨锛0銆佸叧闂紝1銆佸惎鐢 +#define USE_WDT 0 //鐪嬮棬鐙楅夋嫨锛0銆佸叧闂紝1鍚敤 +#define USE_EXFALSE 0 //澶栭儴FALSE瀛樺偍閫夋嫨锛0銆佸叧闂紝1銆佸惎鐢 +#define USE_RTC 0 //RTC鏃堕挓寮鍏筹紝0銆佸叧闂紝1銆佸紑鍚 +#define USE_LPTIM0 0 //LPTIM0寮鍏筹紝0銆佸叧闂紝1銆佸紑鍚 +#define USE_DMA 1 //DMA寮鍏筹紝0銆佸叧闂紝1銆佸紑鍚 +#define USE_RS485 0 //RS485寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 +#define USE_I2C1 0 //I2C1寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 +#define USE_SPI1 0 //SPI1寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 +#define USE_SPI3 0 //SPI3寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 #define USE_USART3 1 -#define USE_BOOTLOADER 0 //BOOTLOADER开关,0、关闭,1、启用 +#define USE_BOOTLOADER 0 //BOOTLOADER寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 -#define USE_CS1237_LEFTUP 1 //左上CS1237开关,0、关闭,1、启用 -#define USE_CS1237_LEFTLOW 1 //左下CS1237开关,0、关闭,1、启用 -#define USE_CS1237_RIGHTUP 1 //右上CS1237开关,0、关闭,1、启用 -#define USE_CS1237_RIGHTLOW 1 //右下CS1237开关,0、关闭,1、启用 +#define USE_CS1237_LEFTUP 1 //宸︿笂CS1237寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 +#define USE_CS1237_LEFTLOW 1 //宸︿笅CS1237寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 +#define USE_CS1237_RIGHTUP 1 //鍙充笂CS1237寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 +#define USE_CS1237_RIGHTLOW 1 //鍙充笅CS1237寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 -#define USE_AGC 1 //算法控制开关,0、关闭,1、启用 +#define USE_AGC 1 //绠楁硶鎺у埗寮鍏筹紝0銆佸叧闂紝1銆佸惎鐢 //<<---------------------------- MCU -------------------------------->> //< DEBUG #if(USE_DEBUG == 1) @@ -142,103 +142,103 @@ #define RTC_IRQn Int001_IRQn #endif //<<----------------------------- CS1237 ------------------------------->> -//< 左上 CS1237 +//< 宸︿笂 CS1237 #if(USE_CS1237_LEFTUP == 1) #define LEFTUP_CS1237_IRQn (Int001_IRQn) #define LEFTUP_CS1237_DOUT_PORTx (PortB) #define LEFTUP_CS1237_DOUT_PINx (Pin10) -#define SET_LEFTUP_CS1237_DOUT() PORT_SetBits(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx)//拉高 -#define CLR_LEFTUP_CS1237_DOUT() PORT_ResetBits(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx)//拉低 +#define SET_LEFTUP_CS1237_DOUT() PORT_SetBits(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx)//鎷夐珮 +#define CLR_LEFTUP_CS1237_DOUT() PORT_ResetBits(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx)//鎷変綆 #define GET_LEFTUP_CS1237_DOUT() PORT_GetBit(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx) #define LEFTUP_CS1237_SCLK_PORTx (PortB) #define LEFTUP_CS1237_SCLK_PINx (Pin02) -#define SET_LEFTUP_CS1237_SCLK() PORT_SetBits(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx)//拉高 -#define CLR_LEFTUP_CS1237_SCLK() PORT_ResetBits(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx)//拉低 +#define SET_LEFTUP_CS1237_SCLK() PORT_SetBits(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx)//鎷夐珮 +#define CLR_LEFTUP_CS1237_SCLK() PORT_ResetBits(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx)//鎷変綆 #endif -//< 左下 CS1237 +//< 宸︿笅 CS1237 #if(USE_CS1237_LEFTLOW == 1) #define LEFTLOW_CS1237_IRQn (Int002_IRQn) #define LEFTLOW_CS1237_DOUT_PORTx (PortB) #define LEFTLOW_CS1237_DOUT_PINx (Pin01) -#define SET_LEFTLOW_CS1237_DOUT() PORT_SetBits(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx)//拉高 -#define CLR_LEFTLOW_CS1237_DOUT() PORT_ResetBits(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx)//拉低 +#define SET_LEFTLOW_CS1237_DOUT() PORT_SetBits(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx)//鎷夐珮 +#define CLR_LEFTLOW_CS1237_DOUT() PORT_ResetBits(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx)//鎷変綆 #define GET_LEFTLOW_CS1237_DOUT() PORT_GetBit(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx) #define LEFTLOW_CS1237_SCLK_PORTx (PortB) #define LEFTLOW_CS1237_SCLK_PINx (Pin00) -#define SET_LEFTLOW_CS1237_SCLK() PORT_SetBits(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx)//拉高 -#define CLR_LEFTLOW_CS1237_SCLK() PORT_ResetBits(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx)//拉低 +#define SET_LEFTLOW_CS1237_SCLK() PORT_SetBits(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx)//鎷夐珮 +#define CLR_LEFTLOW_CS1237_SCLK() PORT_ResetBits(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx)//鎷変綆 #endif -//< 右上 CS1237 +//< 鍙充笂 CS1237 #if(USE_CS1237_RIGHTUP == 1) #define RIGHTUP_CS1237_IRQn (Int003_IRQn) #define RIGHTUP_CS1237_DOUT_PORTx (PortA) #define RIGHTUP_CS1237_DOUT_PINx (Pin04) -#define SET_RIGHTUP_CS1237_DOUT() PORT_SetBits(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx)//拉高 -#define CLR_RIGHTUP_CS1237_DOUT() PORT_ResetBits(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx)//拉低 +#define SET_RIGHTUP_CS1237_DOUT() PORT_SetBits(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx)//鎷夐珮 +#define CLR_RIGHTUP_CS1237_DOUT() PORT_ResetBits(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx)//鎷変綆 #define GET_RIGHTUP_CS1237_DOUT() PORT_GetBit(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx) #define RIGHTUP_CS1237_SCLK_PORTx (PortA) #define RIGHTUP_CS1237_SCLK_PINx (Pin05) -#define SET_RIGHTUP_CS1237_SCLK() PORT_SetBits(RIGHTUP_CS1237_SCLK_PORTx, RIGHTUP_CS1237_SCLK_PINx)//拉高 -#define CLR_RIGHTUP_CS1237_SCLK() PORT_ResetBits(RIGHTUP_CS1237_SCLK_PORTx, RIGHTUP_CS1237_SCLK_PINx)//拉低 +#define SET_RIGHTUP_CS1237_SCLK() PORT_SetBits(RIGHTUP_CS1237_SCLK_PORTx, RIGHTUP_CS1237_SCLK_PINx)//鎷夐珮 +#define CLR_RIGHTUP_CS1237_SCLK() PORT_ResetBits(RIGHTUP_CS1237_SCLK_PORTx, RIGHTUP_CS1237_SCLK_PINx)//鎷変綆 #endif -//< 右下 CS1237 +//< 鍙充笅 CS1237 #if(USE_CS1237_RIGHTLOW == 1) #define RIGHTLOW_CS1237_IRQn (Int004_IRQn) #define RIGHTLOW_CS1237_DOUT_PORTx (PortA) #define RIGHTLOW_CS1237_DOUT_PINx (Pin06) -#define SET_RIGHTLOW_CS1237_DOUT() PORT_SetBits(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx)//拉高 -#define CLR_RIGHTLOW_CS1237_DOUT() PORT_ResetBits(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx)//拉低 +#define SET_RIGHTLOW_CS1237_DOUT() PORT_SetBits(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx)//鎷夐珮 +#define CLR_RIGHTLOW_CS1237_DOUT() PORT_ResetBits(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx)//鎷変綆 #define GET_RIGHTLOW_CS1237_DOUT() PORT_GetBit(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx) #define RIGHTLOW_CS1237_SCLK_PORTx (PortA) #define RIGHTLOW_CS1237_SCLK_PINx (Pin07) -#define SET_RIGHTLOW_CS1237_SCLK() PORT_SetBits(RIGHTLOW_CS1237_SCLK_PORTx, RIGHTLOW_CS1237_SCLK_PINx)//拉高 -#define CLR_RIGHTLOW_CS1237_SCLK() PORT_ResetBits(RIGHTLOW_CS1237_SCLK_PORTx, RIGHTLOW_CS1237_SCLK_PINx)//拉低 +#define SET_RIGHTLOW_CS1237_SCLK() PORT_SetBits(RIGHTLOW_CS1237_SCLK_PORTx, RIGHTLOW_CS1237_SCLK_PINx)//鎷夐珮 +#define CLR_RIGHTLOW_CS1237_SCLK() PORT_ResetBits(RIGHTLOW_CS1237_SCLK_PORTx, RIGHTLOW_CS1237_SCLK_PINx)//鎷変綆 #endif //< BIT0 #define TWIN_BIT0_PORTx (PortB) #define TWIN_BIT0_PINx (Pin12) -#define SET_TWIN_BIT0() PORT_SetBits(TWIN_BIT0_PORTx, TWIN_BIT0_PINx)//拉高 -#define CLR_TWIN_BIT0() PORT_ResetBits(TWIN_BIT0_PORTx, TWIN_BIT0_PINx)//拉低 +#define SET_TWIN_BIT0() PORT_SetBits(TWIN_BIT0_PORTx, TWIN_BIT0_PINx)//鎷夐珮 +#define CLR_TWIN_BIT0() PORT_ResetBits(TWIN_BIT0_PORTx, TWIN_BIT0_PINx)//鎷変綆 #define GET_BIT0_DOUT() PORT_GetBit(TWIN_BIT0_PORTx, TWIN_BIT0_PINx) //< BIT1 #define TWIN_BIT1_PORTx (PortB) #define TWIN_BIT1_PINx (Pin13) -#define SET_TWIN_BIT1() PORT_SetBits(TWIN_BIT1_PORTx, TWIN_BIT1_PINx)//拉高 -#define CLR_TWIN_BIT1() PORT_ResetBits(TWIN_BIT1_PORTx, TWIN_BIT1_PINx)//拉低 +#define SET_TWIN_BIT1() PORT_SetBits(TWIN_BIT1_PORTx, TWIN_BIT1_PINx)//鎷夐珮 +#define CLR_TWIN_BIT1() PORT_ResetBits(TWIN_BIT1_PORTx, TWIN_BIT1_PINx)//鎷変綆 #define GET_BIT1_DOUT() PORT_GetBit(TWIN_BIT1_PORTx, TWIN_BIT1_PINx) //< BUZZER #define BUZZER_PORTx (PortB) #define BUZZER_PINx (Pin15) -#define BUZZER_ON() PORT_SetBits(BUZZER_PORTx, BUZZER_PINx)//拉高 -#define BUZZER_OFF() PORT_ResetBits(BUZZER_PORTx, BUZZER_PINx)//拉低 +#define BUZZER_ON() PORT_SetBits(BUZZER_PORTx, BUZZER_PINx)//鎷夐珮 +#define BUZZER_OFF() PORT_ResetBits(BUZZER_PORTx, BUZZER_PINx)//鎷変綆 //< LED #define LED_GREEN_PORTx (PortA) #define LED_GREEN_PINx (Pin08) -#define LED_GREEN_ON() PORT_SetBits(LED_GREEN_PORTx, LED_GREEN_PINx)//拉高 -#define LED_GREEN_OFF() PORT_ResetBits(LED_GREEN_PORTx, LED_GREEN_PINx)//拉低 +#define LED_GREEN_ON() PORT_SetBits(LED_GREEN_PORTx, LED_GREEN_PINx)//鎷夐珮 +#define LED_GREEN_OFF() PORT_ResetBits(LED_GREEN_PORTx, LED_GREEN_PINx)//鎷変綆 #define LED_RED_PORTx (PortA) #define LED_RED_PINx (Pin09) -#define LED_RED_ON() PORT_SetBits(LED_RED_PORTx, LED_RED_PINx)//拉高 -#define LED_RED_OFF() PORT_ResetBits(LED_RED_PORTx, LED_RED_PINx)//拉低 +#define LED_RED_ON() PORT_SetBits(LED_RED_PORTx, LED_RED_PINx)//鎷夐珮 +#define LED_RED_OFF() PORT_ResetBits(LED_RED_PORTx, LED_RED_PINx)//鎷変綆 typedef struct { - int32_t ControlLevel;//控制等级 - int32_t DBGWaveOut;//调试波形输出 -}__attribute__ ((packed))LayoutPara_t, *LayoutPara;//上位机下发的配置参数 + int32_t ControlLevel;//鎺у埗绛夌骇 + int32_t DBGWaveOut;//璋冭瘯娉㈠舰杈撳嚭 +}__attribute__ ((packed))LayoutPara_t, *LayoutPara;//涓婁綅鏈轰笅鍙戠殑閰嶇疆鍙傛暟 typedef struct { LayoutPara_t Layout; - uint32_t FactoryFlag;//出厂标志位 + uint32_t FactoryFlag;//鍑哄巶鏍囧織浣 }AppPara_T, *pAppPara; #define SAVE_APP_PARA(addr) FlashWrite(addr, sizeof(App.Para) / 4) diff --git a/Project/HC32F460/source/User/Inc/main.h b/Project/HC32F460/source/User/Inc/main.h index 78b14f1..5d18e99 100644 --- a/Project/HC32F460/source/User/Inc/main.h +++ b/Project/HC32F460/source/User/Inc/main.h @@ -41,48 +41,48 @@ //#define BDC_UP() Motor_Control(MOTOR_CMD_FORWARD) //#define BDC_DOWN() Motor_Control(MOTOR_CMD_REVERSE) -/*控制等级*/ +/*鎺у埗绛夌骇*/ typedef enum { - LEVEL_1 = 1, // 一级 - LEVEL_2 = 2, // 二级 - LEVEL_3 = 3, // 三级 - LEVEL_4 = 4, // 四级 - LEVEL_5 = 5 // 五级 + LEVEL_1 = 1, // 涓绾 + LEVEL_2 = 2, // 浜岀骇 + LEVEL_3 = 3, // 涓夌骇 + LEVEL_4 = 4, // 鍥涚骇 + LEVEL_5 = 5 // 浜旂骇 }ControlLevel_m; -/*设备阈值*/ +/*璁惧闃堝*/ typedef struct{ int32_t Slope_VPT; int32_t Stop_VPT; - int32_t LeftUpVPT;//左上设备阈值 - int32_t LeftLowVPT;//左下设备阈值 - int32_t RightUpVPT;//右上设备阈值 - int32_t RightLowVPT;//右下设备阈值 + int32_t LeftUpVPT;//宸︿笂璁惧闃堝 + int32_t LeftLowVPT;//宸︿笅璁惧闃堝 + int32_t RightUpVPT;//鍙充笂璁惧闃堝 + int32_t RightLowVPT;//鍙充笅璁惧闃堝 - int32_t LeftUpShieldVPT; //左上屏蔽阈值 - int32_t LeftLowShieldVPT; //左下屏蔽阈值 - int32_t RightUpShieldVPT; //右上屏蔽阈值 - int32_t RightLowShieldVPT; //右下屏蔽阈值 + int32_t LeftUpShieldVPT; //宸︿笂灞忚斀闃堝 + int32_t LeftLowShieldVPT; //宸︿笅灞忚斀闃堝 + int32_t RightUpShieldVPT; //鍙充笂灞忚斀闃堝 + int32_t RightLowShieldVPT; //鍙充笅灞忚斀闃堝 - int32_t LeftUp_Org_AdZero;//左上设备原始AD零点 - int32_t LeftLow_Org_AdZero;//左下设备原始AD零点 - int32_t RightUp_Org_AdZero;//右上设备原始AD零点 - int32_t RightLow_Org_AdZero;//右下设备原始AD零点 + int32_t LeftUp_Org_AdZero;//宸︿笂璁惧鍘熷AD闆剁偣 + int32_t LeftLow_Org_AdZero;//宸︿笅璁惧鍘熷AD闆剁偣 + int32_t RightUp_Org_AdZero;//鍙充笂璁惧鍘熷AD闆剁偣 + int32_t RightLow_Org_AdZero;//鍙充笅璁惧鍘熷AD闆剁偣 }ADTrack_t; -typedef struct{//电机参数 - bool InitialFlag;//初始标志位 +typedef struct{//鐢垫満鍙傛暟 + bool InitialFlag;//鍒濆鏍囧織浣 bool RestFlag; bool CaliFlag; - bool LoopOne;//循环一次标志位 - int16_t Current_height;//当前高度mm - int16_t CaliNum;//标校数量 - int32_t LU_HeightStress[488];//左上传感器对应高度应力 - int32_t LL_HeightStress[488];//左下传感器对应高度应力 - int32_t RU_HeightStress[488];//右上传感器对应高度应力 - int32_t RL_HeightStress[488];//右上传感器对应高度应力 + bool LoopOne;//寰幆涓娆℃爣蹇椾綅 + int16_t Current_height;//褰撳墠楂樺害mm + int16_t CaliNum;//鏍囨牎鏁伴噺 + int32_t LU_HeightStress[488];//宸︿笂浼犳劅鍣ㄥ搴旈珮搴﹀簲鍔 + int32_t LL_HeightStress[488];//宸︿笅浼犳劅鍣ㄥ搴旈珮搴﹀簲鍔 + int32_t RU_HeightStress[488];//鍙充笂浼犳劅鍣ㄥ搴旈珮搴﹀簲鍔 + int32_t RL_HeightStress[488];//鍙充笂浼犳劅鍣ㄥ搴旈珮搴﹀簲鍔 }MotorPara_t; -/*数据读取状态机*/ +/*鏁版嵁璇诲彇鐘舵佹満*/ typedef enum { READ_STATUS_IDLE, READ_STATUS_START, @@ -97,7 +97,7 @@ typedef enum { READ_STATUS_SUPPORT_CONT }ReadStatus_m; -/*主程序状态机*/ +/*涓荤▼搴忕姸鎬佹満*/ typedef enum { APP_STATUS_IDLE, APP_STATUS_ON, @@ -128,7 +128,7 @@ typedef struct{ }Uart3Rx_t; typedef struct { - AppStatus_m Status;//状态 + AppStatus_m Status;//鐘舵 ReadStatus_m RStatus; AppPara_T Para; Uart1Rx_t RxUart1Data; @@ -149,12 +149,12 @@ typedef struct { uint32_t HeightContRolCnt; uint8_t FeedDogDlyCnt; - bool CaliZeroFlag;//校零标志位 - bool SideFlag;//侧压标志位 - bool UpFlag;//上升标志位 - bool DownFlag;//下降标志位 - bool StopFlag;//停止标志位 - bool EmeFlag;//应急标志位 + bool CaliZeroFlag;//鏍¢浂鏍囧織浣 + bool SideFlag;//渚у帇鏍囧織浣 + bool UpFlag;//涓婂崌鏍囧織浣 + bool DownFlag;//涓嬮檷鏍囧織浣 + bool StopFlag;//鍋滄鏍囧織浣 + bool EmeFlag;//搴旀ユ爣蹇椾綅 bool LeftRunFalg; bool RightRunFalg; bool CentreRunFalg; diff --git a/Project/HC32F460/source/User/Src/Algorithm.c b/Project/HC32F460/source/User/Src/Algorithm.c index 281118e..50a2e92 100644 --- a/Project/HC32F460/source/User/Src/Algorithm.c +++ b/Project/HC32F460/source/User/Src/Algorithm.c @@ -7,28 +7,28 @@ #include #include -#include // 用于 abs() 函数 +#include // 鐢ㄤ簬 abs() 鍑芥暟 /** - * @brief 比较两个数组对应位置的绝对值差值,统计满足条件的个数 + * @brief 姣旇緝涓や釜鏁扮粍瀵瑰簲浣嶇疆鐨勭粷瀵瑰煎樊鍊硷紝缁熻婊¤冻鏉′欢鐨勪釜鏁 * - * 判断条件:|arr1[i] - zero1| + offset > |arr2[i] - zero2| + * 鍒ゆ柇鏉′欢锛殀arr1[i] - zero1| + offset > |arr2[i] - zero2| * - * @param arr1 数组1指针 - * @param arr2 数组2指针 - * @param length 要比较的数组长度(截取值) - * @param zero1 数组1的零点值 - * @param zero2 数组2的零点值 - * @param offset 补偿值 - * @return int 满足条件的个数 + * @param arr1 鏁扮粍1鎸囬拡 + * @param arr2 鏁扮粍2鎸囬拡 + * @param length 瑕佹瘮杈冪殑鏁扮粍闀垮害锛堟埅鍙栧硷級 + * @param zero1 鏁扮粍1鐨勯浂鐐瑰 + * @param zero2 鏁扮粍2鐨勯浂鐐瑰 + * @param offset 琛ュ伩鍊 + * @return int 婊¤冻鏉′欢鐨勪釜鏁 * - * @note 如果 length 为0,返回0 - * @note 如果 arr1 或 arr2 为 NULL,返回0 + * @note 濡傛灉 length 涓0锛岃繑鍥0 + * @note 濡傛灉 arr1 鎴 arr2 涓 NULL锛岃繑鍥0 */ int CompareAndCountAbs(const int32_t *arr1, const int32_t *arr2, uint16_t length, int32_t zero1, int32_t zero2, int32_t offset) { - // 参数校验 + // 鍙傛暟鏍¢獙 if (arr1 == NULL || arr2 == NULL || length == 0) { return 0; } @@ -36,11 +36,11 @@ int CompareAndCountAbs(const int32_t *arr1, const int32_t *arr2, uint16_t length int count = 0; for (uint16_t i = 0; i < length; i++) { - // 计算绝对值 + // 璁$畻缁濆鍊 int32_t abs1 = abs(arr1[i] - zero1); int32_t abs2 = abs(arr2[i] - zero2); - // 判断:|arr1[i] - zero1| + offset > |arr2[i] - zero2| + // 鍒ゆ柇锛殀arr1[i] - zero1| + offset > |arr2[i] - zero2| if (abs1 + offset > abs2) { count++; } @@ -49,16 +49,16 @@ int CompareAndCountAbs(const int32_t *arr1, const int32_t *arr2, uint16_t length return count; } /** - * 加强特定区域的平滑处理(使用更小的权重衰减,更平滑的效果) + * 鍔犲己鐗瑰畾鍖哄煙鐨勫钩婊戝鐞嗭紙浣跨敤鏇村皬鐨勬潈閲嶈“鍑忥紝鏇村钩婊戠殑鏁堟灉锛 * - * @param arr 待处理的int32_t数组 - * @param size 数组的大小 - * @param windowSize 滑动窗口大小 - * @param enhanceStart 加强区域的起始索引(包含) - * @param enhanceEnd 加强区域的结束索引(包含) - * @param enhanceFactor 加强因子(>1表示更强的平滑,建议2-5) - * @param verbose 是否打印详细调试信息 - * @return 返回修正的次数 + * @param arr 寰呭鐞嗙殑int32_t鏁扮粍 + * @param size 鏁扮粍鐨勫ぇ灏 + * @param windowSize 婊戝姩绐楀彛澶у皬 + * @param enhanceStart 鍔犲己鍖哄煙鐨勮捣濮嬬储寮曪紙鍖呭惈锛 + * @param enhanceEnd 鍔犲己鍖哄煙鐨勭粨鏉熺储寮曪紙鍖呭惈锛 + * @param enhanceFactor 鍔犲己鍥犲瓙锛>1琛ㄧず鏇村己鐨勫钩婊戯紝寤鸿2-5锛 + * @param verbose 鏄惁鎵撳嵃璇︾粏璋冭瘯淇℃伅 + * @return 杩斿洖淇鐨勬鏁 */ int weightedMovingAverageWithEnhance(int32_t arr[], int size, int windowSize, int enhanceStart, int enhanceEnd, @@ -67,7 +67,7 @@ int weightedMovingAverageWithEnhance(int32_t arr[], int size, int windowSize, int32_t *temp = (int32_t*)malloc(size * sizeof(int32_t)); if (temp == NULL) { - DBG_LOG("内存分配失败!\n"); + DBG_LOG("鍐呭瓨鍒嗛厤澶辫触锛乗n"); return 0; } @@ -75,31 +75,31 @@ int weightedMovingAverageWithEnhance(int32_t arr[], int size, int windowSize, int fixCount = 0; if (verbose) { - DBG_LOG("加权移动平均平滑 (窗口大小: %d)\n", windowSize); - DBG_LOG("加强平滑区域: [%d - %d], 加强因子: %.1f\n", enhanceStart, enhanceEnd, enhanceFactor); + DBG_LOG("鍔犳潈绉诲姩骞冲潎骞虫粦 (绐楀彛澶у皬: %d)\n", windowSize); + DBG_LOG("鍔犲己骞虫粦鍖哄煙: [%d - %d], 鍔犲己鍥犲瓙: %.1f\n", enhanceStart, enhanceEnd, enhanceFactor); DBG_LOG("========================================\n"); } for (int i = 0; i < size; i++) { - // 判断是否在加强区域内 + // 鍒ゆ柇鏄惁鍦ㄥ姞寮哄尯鍩熷唴 int isEnhanced = (i >= enhanceStart && i <= enhanceEnd); - // 计算窗口边界 + // 璁$畻绐楀彛杈圭晫 int start = (i - halfWindow) < 0 ? 0 : (i - halfWindow); int end = (i + halfWindow) >= size ? (size - 1) : (i + halfWindow); - // 计算加权平均值 + // 璁$畻鍔犳潈骞冲潎鍊 double weightedSum = 0; double weightSum = 0; for (int j = start; j <= end; j++) { - // 权重:距离越近权重越大 + // 鏉冮噸锛氳窛绂昏秺杩戞潈閲嶈秺澶 int distance = abs(j - i); double weight = 1.0 / (distance + 1); - // 如果在加强区域内,且当前点不是中心点,可以调整权重 + // 濡傛灉鍦ㄥ姞寮哄尯鍩熷唴锛屼笖褰撳墠鐐逛笉鏄腑蹇冪偣锛屽彲浠ヨ皟鏁存潈閲 if (isEnhanced && j != i) { - // 加强区域内的参考点权重提高,使平滑效果更强 + // 鍔犲己鍖哄煙鍐呯殑鍙傝冪偣鏉冮噸鎻愰珮锛屼娇骞虫粦鏁堟灉鏇村己 weight *= enhanceFactor; } @@ -111,8 +111,8 @@ int weightedMovingAverageWithEnhance(int32_t arr[], int size, int windowSize, if (newValue != arr[i]) { if (verbose && fixCount < 50) { - DBG_LOG("位置 [%d]: %d -> %d %s\n", i, arr[i], newValue, - isEnhanced ? "[加强区域]" : ""); + DBG_LOG("浣嶇疆 [%d]: %d -> %d %s\n", i, arr[i], newValue, + isEnhanced ? "[鍔犲己鍖哄煙]" : ""); } temp[i] = newValue; fixCount++; @@ -121,13 +121,13 @@ int weightedMovingAverageWithEnhance(int32_t arr[], int size, int windowSize, } } - // 写回原数组 + // 鍐欏洖鍘熸暟缁 memcpy(arr, temp, size * sizeof(int32_t)); free(temp); if (verbose) { DBG_LOG("========================================\n"); - DBG_LOG("共修正 %d 个点(加强区域修正了更多点)\n", fixCount); + DBG_LOG("鍏变慨姝 %d 涓偣锛堝姞寮哄尯鍩熶慨姝d簡鏇村鐐癸級\n", fixCount); } return fixCount; @@ -136,7 +136,7 @@ int finalCheck(int arr[], int size, int threshold, int verbose) { int problemCount = 0; if (verbose) { - DBG_LOG("\n========== 最终检查 ==========\n"); + DBG_LOG("\n========== 鏈缁堟鏌 ==========\n"); } for (int i = 1; i < size - 1; i++) { @@ -146,32 +146,32 @@ int finalCheck(int arr[], int size, int threshold, int verbose) { if (diffPrev > threshold && diffNext > threshold) { problemCount++; if (verbose) { - DBG_LOG("警告: 位置 [%d] 仍有突变问题 (前差%d, 后差%d)\n", i, diffPrev, diffNext); + DBG_LOG("璀﹀憡: 浣嶇疆 [%d] 浠嶆湁绐佸彉闂 (鍓嶅樊%d, 鍚庡樊%d)\n", i, diffPrev, diffNext); } } } - // 检查首尾 + // 妫鏌ラ灏 if (size >= 2) { if (abs(arr[0] - arr[1]) > threshold * 2) { problemCount++; if (verbose) { - DBG_LOG("警告: 位置 [0] 仍有突变问题 (与第二元素差%d)\n", abs(arr[0] - arr[1])); + DBG_LOG("璀﹀憡: 浣嶇疆 [0] 浠嶆湁绐佸彉闂 (涓庣浜屽厓绱犲樊%d)\n", abs(arr[0] - arr[1])); } } if (abs(arr[size-1] - arr[size-2]) > threshold * 2) { problemCount++; if (verbose) { - DBG_LOG("警告: 位置 [%d] 仍有突变问题 (与前元素差%d)\n", size-1, abs(arr[size-1] - arr[size-2])); + DBG_LOG("璀﹀憡: 浣嶇疆 [%d] 浠嶆湁绐佸彉闂 (涓庡墠鍏冪礌宸%d)\n", size-1, abs(arr[size-1] - arr[size-2])); } } } if (verbose) { if (problemCount == 0) { - DBG_LOG("检查通过!没有发现突变点\n"); + DBG_LOG("妫鏌ラ氳繃锛佹病鏈夊彂鐜扮獊鍙樼偣\n"); } else { - DBG_LOG("发现 %d 个问题点\n", problemCount); + DBG_LOG("鍙戠幇 %d 涓棶棰樼偣\n", problemCount); } DBG_LOG("========================================\n"); } @@ -179,13 +179,13 @@ int finalCheck(int arr[], int size, int threshold, int verbose) { return problemCount; } /** - * 使用滑动窗口修正突变值,并打印修改信息 + * 浣跨敤婊戝姩绐楀彛淇绐佸彉鍊硷紝骞舵墦鍗颁慨鏀逛俊鎭 * - * @param arr 待处理的int类型数组 - * @param size 数组的大小 - * @param windowSize 滑动窗口大小(建议奇数) - * @param threshold 突变阈值 - * @return 返回修正的次数 + * @param arr 寰呭鐞嗙殑int绫诲瀷鏁扮粍 + * @param size 鏁扮粍鐨勫ぇ灏 + * @param windowSize 婊戝姩绐楀彛澶у皬锛堝缓璁鏁帮級 + * @param threshold 绐佸彉闃堝 + * @return 杩斿洖淇鐨勬鏁 */ int fixWithMedianIterative(int arr[], int size, int windowSize, int threshold, int maxIterations, int verbose) { if (arr == NULL || size <= 2 || windowSize < 3) { @@ -199,13 +199,13 @@ int fixWithMedianIterative(int arr[], int size, int windowSize, int threshold, i int *temp = (int*)malloc(size * sizeof(int)); if (temp == NULL) { - DBG_LOG("内存分配失败!\n"); + DBG_LOG("鍐呭瓨鍒嗛厤澶辫触锛乗n"); return 0; } if (verbose) { - DBG_LOG("========== 开始迭代修正 (中位数窗口) ==========\n"); - DBG_LOG("数组大小: %d, 窗口大小: %d, 阈值: %d, 最大迭代: %d\n", + DBG_LOG("========== 寮濮嬭凯浠d慨姝 (涓綅鏁扮獥鍙) ==========\n"); + DBG_LOG("鏁扮粍澶у皬: %d, 绐楀彛澶у皬: %d, 闃堝: %d, 鏈澶ц凯浠: %d\n", size, windowSize, threshold, maxIterations); DBG_LOG("========================================\n"); } @@ -216,40 +216,40 @@ int fixWithMedianIterative(int arr[], int size, int windowSize, int threshold, i memcpy(temp, arr, size * sizeof(int)); if (verbose) { - DBG_LOG("\n第 %d 次迭代:\n", iteration + 1); + DBG_LOG("\n绗 %d 娆¤凯浠:\n", iteration + 1); DBG_LOG("----------------------------------------\n"); } - // 处理所有点 + // 澶勭悊鎵鏈夌偣 for (int i = 0; i < size; i++) { int isAbnormal = 0; - // 判断是否为异常点 + // 鍒ゆ柇鏄惁涓哄紓甯哥偣 if (i > 0 && i < size - 1) { - // 中间点:检查前后突变 + // 涓棿鐐癸細妫鏌ュ墠鍚庣獊鍙 int diffPrev = abs(arr[i] - arr[i-1]); int diffNext = abs(arr[i+1] - arr[i]); if (diffPrev > threshold && diffNext > threshold) { isAbnormal = 1; } } else if (i == 0 && size >= 2) { - // 首元素:检查与第二个元素的差异 + // 棣栧厓绱狅細妫鏌ヤ笌绗簩涓厓绱犵殑宸紓 if (abs(arr[0] - arr[1]) > threshold * 2) { isAbnormal = 1; } } else if (i == size - 1 && size >= 2) { - // 尾元素:检查与倒数第二个元素的差异 + // 灏惧厓绱狅細妫鏌ヤ笌鍊掓暟绗簩涓厓绱犵殑宸紓 if (abs(arr[size-1] - arr[size-2]) > threshold * 2) { isAbnormal = 1; } } if (isAbnormal) { - // 计算窗口边界 + // 璁$畻绐楀彛杈圭晫 int start = (i - halfWindow) < 0 ? 0 : (i - halfWindow); int end = (i + halfWindow) >= size ? (size - 1) : (i + halfWindow); - // 收集窗口内的值(排除自身) + // 鏀堕泦绐楀彛鍐呯殑鍊硷紙鎺掗櫎鑷韩锛 int windowActualSize = end - start + 1; int *window = (int*)malloc(windowActualSize * sizeof(int)); if (window == NULL) continue; @@ -263,7 +263,7 @@ int fixWithMedianIterative(int arr[], int size, int windowSize, int threshold, i int correctedValue; if (idx > 0) { - // 排序找中位数 + // 鎺掑簭鎵句腑浣嶆暟 for (int m = 0; m < idx - 1; m++) { for (int n = 0; n < idx - m - 1; n++) { if (window[n] > window[n+1]) { @@ -275,7 +275,7 @@ int fixWithMedianIterative(int arr[], int size, int windowSize, int threshold, i } correctedValue = window[idx / 2]; } else { - // 没有参考值,使用相邻点平均 + // 娌℃湁鍙傝冨硷紝浣跨敤鐩搁偦鐐瑰钩鍧 if (i > 0 && i < size - 1) { correctedValue = (arr[i-1] + arr[i+1]) / 2; } else if (i == 0) { @@ -287,7 +287,7 @@ int fixWithMedianIterative(int arr[], int size, int windowSize, int threshold, i if (correctedValue != arr[i]) { if (verbose) { - DBG_LOG("位置 [%d]: %d -> %d (窗口[%d-%d], 中位数:%d)\n", + DBG_LOG("浣嶇疆 [%d]: %d -> %d (绐楀彛[%d-%d], 涓綅鏁:%d)\n", i, arr[i], correctedValue, start, end, correctedValue); } temp[i] = correctedValue; @@ -303,7 +303,7 @@ int fixWithMedianIterative(int arr[], int size, int windowSize, int threshold, i memcpy(arr, temp, size * sizeof(int)); totalFixCount += iterFixCount; if (verbose) { - DBG_LOG("本次修正了 %d 个点\n", iterFixCount); + DBG_LOG("鏈淇浜 %d 涓偣\n", iterFixCount); } } @@ -314,55 +314,55 @@ int fixWithMedianIterative(int arr[], int size, int windowSize, int threshold, i if (verbose) { DBG_LOG("========================================\n"); - DBG_LOG("迭代完成!共进行了 %d 次迭代,总修正 %d 个点\n", iteration, totalFixCount); + DBG_LOG("杩唬瀹屾垚锛佸叡杩涜浜 %d 娆¤凯浠o紝鎬讳慨姝 %d 涓偣\n", iteration, totalFixCount); DBG_LOG("========================================\n"); } return totalFixCount; } /***************************************************************************************** -* 函数名称: check_peaks_valleys_ratio -* 功能描述: 检查数据的峰值是否大于0,谷值是否小于0(忽略0值) -* 参 数: data, 数据 - length, 数据长度 -* 返 回 值: 结果返回峰值谷值检查结果结构体 +* 鍑芥暟鍚嶇О: check_peaks_valleys_ratio +* 鍔熻兘鎻忚堪: 妫鏌ユ暟鎹殑宄板兼槸鍚﹀ぇ浜0锛岃胺鍊兼槸鍚﹀皬浜0锛堝拷鐣0鍊硷級 +* 鍙 鏁: data, 鏁版嵁 + length, 鏁版嵁闀垮害 +* 杩 鍥 鍊: 缁撴灉杩斿洖宄板艰胺鍊兼鏌ョ粨鏋滅粨鏋勪綋 *****************************************************************************************/ PeakValleyCheck check_peaks_valleys(int data[], int length) { PeakValleyCheck result = {true, true, 0, 0}; - // 如果数据长度小于3,无法形成有效的峰值/谷值 + // 濡傛灉鏁版嵁闀垮害灏忎簬3锛屾棤娉曞舰鎴愭湁鏁堢殑宄板/璋峰 if (length < 3) { return result; } int i = 0; - // 跳过开头的0值 + // 璺宠繃寮澶寸殑0鍊 while (i < length && data[i] == 0) { i++; } - // 遍历数据点 + // 閬嶅巻鏁版嵁鐐 while (i < length) { - // 1. 寻找下一个非零点作为起点 + // 1. 瀵绘壘涓嬩竴涓潪闆剁偣浣滀负璧风偣 int start = i; while (i < length && data[i] == 0) { i++; } if (i >= length) break; - // 2. 寻找当前非零段的结束点 + // 2. 瀵绘壘褰撳墠闈為浂娈电殑缁撴潫鐐 int end = i; while (end < length && data[end] != 0) { end++; } - end--; // 指向最后一个非零点 + end--; // 鎸囧悜鏈鍚庝竴涓潪闆剁偣 - // 3. 在当前非零段中检测峰值和谷值 + // 3. 鍦ㄥ綋鍓嶉潪闆舵涓娴嬪嘲鍊煎拰璋峰 for (int j = i; j <= end; j++) { - // 跳过边界点 + // 璺宠繃杈圭晫鐐 if (j == i || j == end) continue; - // 检查是否为峰值(大于左右相邻的非零点) + // 妫鏌ユ槸鍚︿负宄板硷紙澶т簬宸﹀彸鐩搁偦鐨勯潪闆剁偣锛 if (data[j] > data[j-1] && data[j] > data[j+1]) { result.peak_count++; if (data[j] <= 0) { @@ -370,7 +370,7 @@ PeakValleyCheck check_peaks_valleys(int data[], int length) { } } - // 检查是否为谷值(小于左右相邻的非零点) + // 妫鏌ユ槸鍚︿负璋峰硷紙灏忎簬宸﹀彸鐩搁偦鐨勯潪闆剁偣锛 if (data[j] < data[j-1] && data[j] < data[j+1]) { result.valley_count++; if (data[j] >= 0) { @@ -379,33 +379,33 @@ PeakValleyCheck check_peaks_valleys(int data[], int length) { } } - // 移动到下一段 + // 绉诲姩鍒颁笅涓娈 i = end + 1; } return result; } /***************************************************************************************** -* 函数名称: analyze_trend -* 功能描述: 趋势分析函数 -* 参 数: data, 数据 - length, 数据长度 -* 返 回 值: 结果返回趋势分析结构体 +* 鍑芥暟鍚嶇О: analyze_trend +* 鍔熻兘鎻忚堪: 瓒嬪娍鍒嗘瀽鍑芥暟 +* 鍙 鏁: data, 鏁版嵁 + length, 鏁版嵁闀垮害 +* 杩 鍥 鍊: 缁撴灉杩斿洖瓒嬪娍鍒嗘瀽缁撴瀯浣 *****************************************************************************************/ TrendResult analyze_trend(int data[], int length) { TrendResult result = {0}; #if 1 - // 0. 检查有效数据长度 + // 0. 妫鏌ユ湁鏁堟暟鎹暱搴 if (length < 2) { DBG_LOG("Data deficient\r\n"); return result; } - // 1. 计算线性回归斜率 + // 1. 璁$畻绾挎у洖褰掓枩鐜 double sum_x = 0, sum_y = 0, sum_xy = 0, sum_x2 = 0; for (int i = 0; i < length; i++) { - double x = i; // 时间序列 (0,1,2,...) + double x = i; // 鏃堕棿搴忓垪 (0,1,2,...) double y = data[i]; sum_x += x; sum_y += y; @@ -416,15 +416,15 @@ TrendResult analyze_trend(int data[], int length) { double numerator = length * sum_xy - sum_x * sum_y; double denominator = length * sum_x2 - sum_x * sum_x; - // 处理分母为零的情况 + // 澶勭悊鍒嗘瘝涓洪浂鐨勬儏鍐 if (fabs(denominator) > 1e-10) { result.slope = numerator / denominator; } #endif #if 0 - // 2. 计算振荡特征(差分符号变化次数) + // 2. 璁$畻鎸崱鐗瑰緛锛堝樊鍒嗙鍙峰彉鍖栨鏁帮級 int sign_changes = 0; - int prev_sign = 0; // 0=未初始化, 1=正, -1=负 + int prev_sign = 0; // 0=鏈垵濮嬪寲, 1=姝, -1=璐 for (int i = 1; i < length; i++) { int diff = data[i] - data[i-1]; @@ -440,66 +440,66 @@ TrendResult analyze_trend(int data[], int length) { result.sign_changes = sign_changes; #endif #if 0 - // 3. 动态计算阈值(基于数据长度) - int oscillation_threshold = (int)(0.4 * (length - 1)); // 40%的变化率 - double slope_threshold = 0.05 * (length / 20.0); // 长度标准化 + // 3. 鍔ㄦ佽绠楅槇鍊硷紙鍩轰簬鏁版嵁闀垮害锛 + int oscillation_threshold = (int)(0.4 * (length - 1)); // 40%鐨勫彉鍖栫巼 + double slope_threshold = 0.05 * (length / 20.0); // 闀垮害鏍囧噯鍖 #endif #if 0 - // 4. 趋势判断 + // 4. 瓒嬪娍鍒ゆ柇 if (sign_changes >= oscillation_threshold) { - //DBG_LOG("Oscillating trend\r\n");//振荡趋势 + //DBG_LOG("Oscillating trend\r\n");//鎸崱瓒嬪娍 result.trend_type = 0; } else if (fabs(result.slope) < slope_threshold) { - //DBG_LOG("Smooth trend\r\n");//平稳趋势 + //DBG_LOG("Smooth trend\r\n");//骞崇ǔ瓒嬪娍 result.trend_type = 1; } else if (result.slope > 0) { - //DBG_LOG("Up trend\r\n");//上升趋势 + //DBG_LOG("Up trend\r\n");//涓婂崌瓒嬪娍 result.trend_type = 2; } else { - //DBG_LOG("Down trend\r\n");//下降趋势 + //DBG_LOG("Down trend\r\n");//涓嬮檷瓒嬪娍 result.trend_type = 3; } #endif #if 0 - // 5. 陡峭判断 + // 5. 闄″抄鍒ゆ柇 double abs_slope = fabs(result.slope); if (abs_slope > 0.8) { - //DBG_LOG("Steeply");//陡峭 + //DBG_LOG("Steeply");//闄″抄 result.sign_changes = 0; } else if (abs_slope > 0.3) { - //DBG_LOG("Obvious");//明显 + //DBG_LOG("Obvious");//鏄庢樉 result.sign_changes = 1; } else if (abs_slope > 0.1) { - //DBG_LOG("Mild");//温和 + //DBG_LOG("Mild");//娓╁拰 result.sign_changes = 2; } else { - //DBG_LOG("gentle");//平缓 + //DBG_LOG("gentle");//骞崇紦 result.sign_changes = 3; } #endif return result; } /***************************************************************************************** -* 函数名称: calculateAverage -* 功能描述: 计算平均值 -* 参 数: arr, 数据 - size, 数据长度 -* 返 回 值: 结果返回 long long 防溢出 +* 鍑芥暟鍚嶇О: calculateAverage +* 鍔熻兘鎻忚堪: 璁$畻骞冲潎鍊 +* 鍙 鏁: arr, 鏁版嵁 + size, 鏁版嵁闀垮害 +* 杩 鍥 鍊: 缁撴灉杩斿洖 long long 闃叉孩鍑 *****************************************************************************************/ float calculateAverage(int *arr, int size) { int sum = 0; for (int i = 0; i < size; i++) { - sum += arr[i]; // 累加数组中的每个元素 + sum += arr[i]; // 绱姞鏁扮粍涓殑姣忎釜鍏冪礌 } - return (float)sum / size; // 返回平均值 + return (float)sum / size; // 杩斿洖骞冲潎鍊 } /***************************************************************************************** -* 函数名称: slope -* 功能描述: 计算斜率 -* 参 数: x_data, x轴数据 - y_data, y轴数据 -* 返 回 值: 结果返回 long long 防溢出 +* 鍑芥暟鍚嶇О: slope +* 鍔熻兘鎻忚堪: 璁$畻鏂滅巼 +* 鍙 鏁: x_data, x杞存暟鎹 + y_data, y杞存暟鎹 +* 杩 鍥 鍊: 缁撴灉杩斿洖 long long 闃叉孩鍑 *****************************************************************************************/ double slope(int32_t *x_data, int32_t *y_data, int n) { @@ -514,30 +514,30 @@ double slope(int32_t *x_data, int32_t *y_data, int n) return sum_xy / sum_xx; } /***************************************************************************************** -* 函数名称: power -* 功能描述: 快速幂算法 -* 参 数: base, 滤波数据 - exponent, 滤波数据长度 -* 返 回 值: 结果返回 long long 防溢出 +* 鍑芥暟鍚嶇О: power +* 鍔熻兘鎻忚堪: 蹇熷箓绠楁硶 +* 鍙 鏁: base, 婊ゆ尝鏁版嵁 + exponent, 婊ゆ尝鏁版嵁闀垮害 +* 杩 鍥 鍊: 缁撴灉杩斿洖 long long 闃叉孩鍑 *****************************************************************************************/ long long power(int base, unsigned int exponent) { long long result = 1; while (exponent > 0) { if (exponent % 2 == 1) { - result *= base; // 指数为奇数时累乘 + result *= base; // 鎸囨暟涓哄鏁版椂绱箻 } - base *= base; // 底数平方 - exponent /= 2; // 指数折半 + base *= base; // 搴曟暟骞虫柟 + exponent /= 2; // 鎸囨暟鎶樺崐 } return result; } /***************************************************************************************** -* 函数名称: IntFilter_16t -* 功能描述: 16位数据中值滤波函数 -* 参 数: Data, 滤波数据 - Cnt, 滤波数据长度 - FilterCnt, 滤除的数据长度,必须为2的倍数 -* 返 回 值: 滤波后的16位数据 +* 鍑芥暟鍚嶇О: IntFilter_16t +* 鍔熻兘鎻忚堪: 16浣嶆暟鎹腑鍊兼护娉㈠嚱鏁 +* 鍙 鏁: Data, 婊ゆ尝鏁版嵁 + Cnt, 婊ゆ尝鏁版嵁闀垮害 + FilterCnt, 婊ら櫎鐨勬暟鎹暱搴︼紝蹇呴』涓2鐨勫嶆暟 +* 杩 鍥 鍊: 婊ゆ尝鍚庣殑16浣嶆暟鎹 *****************************************************************************************/ int IntFilter_16t(int16_t *Data, uint8_t Cnt, uint8_t FilterCnt) { @@ -563,12 +563,12 @@ int IntFilter_16t(int16_t *Data, uint8_t Cnt, uint8_t FilterCnt) } /***************************************************************************************** -* 函数名称: IntFilter_32t -* 功能描述: 32位数据中值滤波函数 -* 参 数: Data, 滤波数据 - Cnt, 滤波数据长度 - FilterCnt, 滤除的数据长度,必须为2的倍数 -* 返 回 值: 滤波后的32位数据 +* 鍑芥暟鍚嶇О: IntFilter_32t +* 鍔熻兘鎻忚堪: 32浣嶆暟鎹腑鍊兼护娉㈠嚱鏁 +* 鍙 鏁: Data, 婊ゆ尝鏁版嵁 + Cnt, 婊ゆ尝鏁版嵁闀垮害 + FilterCnt, 婊ら櫎鐨勬暟鎹暱搴︼紝蹇呴』涓2鐨勫嶆暟 +* 杩 鍥 鍊: 婊ゆ尝鍚庣殑32浣嶆暟鎹 *****************************************************************************************/ int IntFilter_32t(int32_t *Data, uint8_t Cnt, uint8_t FilterCnt) { @@ -593,12 +593,12 @@ int IntFilter_32t(int32_t *Data, uint8_t Cnt, uint8_t FilterCnt) return (sum / (Cnt - FilterCnt)); } /***************************************************************************************** -* 函数名称: IntFilter_u32t -* 功能描述: 32位无符号位数据中值滤波函数 -* 参 数: Data, 滤波数据 - Cnt, 滤波数据长度 - FilterCnt, 滤除的数据长度,必须为2的倍数 -* 返 回 值: 滤波后的32位数据 +* 鍑芥暟鍚嶇О: IntFilter_u32t +* 鍔熻兘鎻忚堪: 32浣嶆棤绗﹀彿浣嶆暟鎹腑鍊兼护娉㈠嚱鏁 +* 鍙 鏁: Data, 婊ゆ尝鏁版嵁 + Cnt, 婊ゆ尝鏁版嵁闀垮害 + FilterCnt, 婊ら櫎鐨勬暟鎹暱搴︼紝蹇呴』涓2鐨勫嶆暟 +* 杩 鍥 鍊: 婊ゆ尝鍚庣殑32浣嶆暟鎹 *****************************************************************************************/ uint32_t IntFilter_u32t(uint32_t *Data, uint8_t Cnt, uint8_t FilterCnt) { @@ -623,12 +623,12 @@ uint32_t IntFilter_u32t(uint32_t *Data, uint8_t Cnt, uint8_t FilterCnt) return (sum / (Cnt - FilterCnt)); } /***************************************************************************************** -* 函数名称: IntFilter_Float -* 功能描述: 32位浮点数数据中值滤波函数 -* 参 数: Data, 滤波数据 - Cnt, 滤波数据长度 - FilterCnt, 滤除的数据长度,必须为2的倍数 -* 返 回 值: 滤波后的32位数据 +* 鍑芥暟鍚嶇О: IntFilter_Float +* 鍔熻兘鎻忚堪: 32浣嶆诞鐐规暟鏁版嵁涓兼护娉㈠嚱鏁 +* 鍙 鏁: Data, 婊ゆ尝鏁版嵁 + Cnt, 婊ゆ尝鏁版嵁闀垮害 + FilterCnt, 婊ら櫎鐨勬暟鎹暱搴︼紝蹇呴』涓2鐨勫嶆暟 +* 杩 鍥 鍊: 婊ゆ尝鍚庣殑32浣嶆暟鎹 *****************************************************************************************/ float IntFilter_Float(float *Data, uint8_t Cnt, uint8_t FilterCnt) { @@ -653,11 +653,11 @@ float IntFilter_Float(float *Data, uint8_t Cnt, uint8_t FilterCnt) return (sum / (Cnt - FilterCnt)); } /***************************************************************************************** -* 函数名称: AverageFilter_u32t -* 功能描述: 32位数据均值滤波函数,去除了最大值和最小值 -* 参 数: Data, 滤波数据 - Cnt, 滤波数据长度 -* 返 回 值: 滤波后的32位数据 +* 鍑芥暟鍚嶇О: AverageFilter_u32t +* 鍔熻兘鎻忚堪: 32浣嶆暟鎹潎鍊兼护娉㈠嚱鏁,鍘婚櫎浜嗘渶澶у煎拰鏈灏忓 +* 鍙 鏁: Data, 婊ゆ尝鏁版嵁 + Cnt, 婊ゆ尝鏁版嵁闀垮害 +* 杩 鍥 鍊: 婊ゆ尝鍚庣殑32浣嶆暟鎹 *****************************************************************************************/ uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt) { @@ -678,7 +678,7 @@ uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt) return sum / 2; } - for (uint8_t i = 0; i < Cnt; i++)//找出最大值 + for (uint8_t i = 0; i < Cnt; i++)//鎵惧嚭鏈澶у { if (Data[i] > max) { @@ -686,7 +686,7 @@ uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt) } } - for (uint8_t i = 0; i < Cnt; i++)//找出最小值 + for (uint8_t i = 0; i < Cnt; i++)//鎵惧嚭鏈灏忓 { if (Data[i] < min) { @@ -694,7 +694,7 @@ uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt) } } - for(int i = 0; i < Cnt; i++){//求和 + for(int i = 0; i < Cnt; i++){//姹傚拰 sum += Data[i]; } @@ -702,11 +702,11 @@ uint32_t AverageFilter_u32t(uint32_t *Data, uint8_t Cnt) } /***************************************************************************************** -* 函数名称: AverageFilter_32t -* 功能描述: 32位数据均值滤波函数,去除了最大值和最小值 -* 参 数: Data, 滤波数据 - Cnt, 滤波数据长度 -* 返 回 值: 滤波后的32位数据 +* 鍑芥暟鍚嶇О: AverageFilter_32t +* 鍔熻兘鎻忚堪: 32浣嶆暟鎹潎鍊兼护娉㈠嚱鏁,鍘婚櫎浜嗘渶澶у煎拰鏈灏忓 +* 鍙 鏁: Data, 婊ゆ尝鏁版嵁 + Cnt, 婊ゆ尝鏁版嵁闀垮害 +* 杩 鍥 鍊: 婊ゆ尝鍚庣殑32浣嶆暟鎹 *****************************************************************************************/ int AverageFilter_32t(int32_t *Data, uint8_t Cnt) { @@ -726,7 +726,7 @@ int AverageFilter_32t(int32_t *Data, uint8_t Cnt) return sum / 2; } - for (uint8_t i = 0; i < Cnt; i++)//找出最大值 + for (uint8_t i = 0; i < Cnt; i++)//鎵惧嚭鏈澶у { if (Data[i] > max) { @@ -734,7 +734,7 @@ int AverageFilter_32t(int32_t *Data, uint8_t Cnt) } } - for (uint8_t i = 0; i < Cnt; i++)//找出最小值 + for (uint8_t i = 0; i < Cnt; i++)//鎵惧嚭鏈灏忓 { if (Data[i] < min) { @@ -742,24 +742,24 @@ int AverageFilter_32t(int32_t *Data, uint8_t Cnt) } } - for(int i = 0; i < Cnt; i++){//求和 + for(int i = 0; i < Cnt; i++){//姹傚拰 sum += Data[i]; } return (sum - max - min) / (Cnt - 2); } /***************************************************************************************** -* 函数名称: Fitting_Polynomial -* 功能描述: 根据数组AD[], Actual[]列出的一组数据,用最小二乘法求它的拟合曲线,默认3阶 - 近似解析表达式为y = a3*x^3 + a2*x^2 + a1*x + a0; -* 参 数: AD, AD芯片采样值 - Actual, 实际标校值 - Cnt, 拟合数据个数 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: Fitting_Polynomial +* 鍔熻兘鎻忚堪: 鏍规嵁鏁扮粍AD[], Actual[]鍒楀嚭鐨勪竴缁勬暟鎹紝鐢ㄦ渶灏忎簩涔樻硶姹傚畠鐨勬嫙鍚堟洸绾,榛樿3闃 + 杩戜技瑙f瀽琛ㄨ揪寮忎负y = a3*x^3 + a2*x^2 + a1*x + a0; +* 鍙 鏁: AD, AD鑺墖閲囨牱鍊 + Actual, 瀹為檯鏍囨牎鍊 + Cnt, 鎷熷悎鏁版嵁涓暟 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt) { - static const uint8_t rank_ = 3;//拟合阶数3 + static const uint8_t rank_ = 3;//鎷熷悎闃舵暟3 double atemp[2 * (rank_ + 1)], b[rank_ + 1], a[rank_ + 1][rank_ + 1]; int i, j, k; @@ -778,22 +778,22 @@ void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt) atemp[0] = Cnt; - for(i = 0; i < rank_ + 1; i++){ //构建线性方程组系数矩阵,b[]不变 + for(i = 0; i < rank_ + 1; i++){ //鏋勫缓绾挎ф柟绋嬬粍绯绘暟鐭╅樀锛宐[]涓嶅彉 k = i; for(j = 0; j < rank_ + 1; j++) a[i][j] = atemp[k++]; } - //以下为高斯列主元消去法解线性方程组 - for(k = 0; k < rank_ + 1 - 1; k++){ //n - 1列 + //浠ヤ笅涓洪珮鏂垪涓诲厓娑堝幓娉曡В绾挎ф柟绋嬬粍 + for(k = 0; k < rank_ + 1 - 1; k++){ //n - 1鍒 int column = k; double mainelement = a[k][k]; - for(i = k; i < rank_ + 1; i++) //找主元素 + for(i = k; i < rank_ + 1; i++) //鎵句富鍏冪礌 if(fabs(a[i][k]) > mainelement){ mainelement = fabs(a[i][k]); column = i; } - for(j = k; j < rank_ + 1; j++){ //交换两行 + for(j = k; j < rank_ + 1; j++){ //浜ゆ崲涓よ double atemp = a[k][j]; a[k][j] = a[column][j]; a[column][j] = atemp; @@ -802,19 +802,19 @@ void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt) b[k] = b[column]; b[column] = btemp; - for(i = k + 1; i < rank_ + 1; i++){ //消元过程 + for(i = k + 1; i < rank_ + 1; i++){ //娑堝厓杩囩▼ double Mik = a[i][k] / a[k][k]; for(j = k; j < rank_ + 1; j++) a[i][j] -= Mik * a[k][j]; b[i] -= Mik * b[k]; } } - b[rank_ + 1 - 1] /= a[rank_ + 1 - 1][rank_ + 1 - 1]; //回代过程 + b[rank_ + 1 - 1] /= a[rank_ + 1 - 1][rank_ + 1 - 1]; //鍥炰唬杩囩▼ for(i = rank_ + 1 - 2; i >= 0; i--){ double sum = 0; for(j = i + 1; j < rank_ + 1; j++) sum += a[i][j] * b[j]; b[i] = (b[i] - sum) / a[i][i]; - }//高斯列主元消去法结束 + }//楂樻柉鍒椾富鍏冩秷鍘绘硶缁撴潫 DBG_LOG("P(x) = %.16fx^3%+.16fx^2%+.16fx%+.16f\r\n", b[3], b[2], b[1], b[0]); @@ -825,46 +825,46 @@ void Fitting_Polynomial(double *AD, double *Actual, uint8_t Cnt) } /***************************************************************************************** -* 函数名称: get_K -* 功能描述: 斜率计算 -* 参 数: count,数据个数 数组行(列)的个数 数组的行列数目相等 - dataCol_X[count],数据的列数据 - dataRow_Y[count],数据的行数据 -* 返 回 值: k 斜率 +* 鍑芥暟鍚嶇О: get_K +* 鍔熻兘鎻忚堪: 鏂滅巼璁$畻 +* 鍙 鏁: count锛屾暟鎹釜鏁 鏁扮粍琛(鍒)鐨勪釜鏁 鏁扮粍鐨勮鍒楁暟鐩浉绛 + dataCol_X[count]锛屾暟鎹殑鍒楁暟鎹 + dataRow_Y[count]锛屾暟鎹殑琛屾暟鎹 +* 杩 鍥 鍊: k 鏂滅巼 *****************************************************************************************/ float get_K(uint8_t count , int32_t *dataCol_X, int32_t *dataRow_Y) { - float k = 0;//斜率 - float aveCol_X = 0;//列的平均值x - float aveRow_Y = 0;//行的平均值y - int32_t sum_XY = 0;//行列的总和xy - int32_t sumRow_Y = 0;//行的总和y - int32_t sumCol_X = 0;//列的总和x - int32_t sumCol_X2 = 0;//列的总和x^2 + float k = 0;//鏂滅巼 + float aveCol_X = 0;//鍒楃殑骞冲潎鍊紉 + float aveRow_Y = 0;//琛岀殑骞冲潎鍊紋 + int32_t sum_XY = 0;//琛屽垪鐨勬诲拰xy + int32_t sumRow_Y = 0;//琛岀殑鎬诲拰y + int32_t sumCol_X = 0;//鍒楃殑鎬诲拰x + int32_t sumCol_X2 = 0;//鍒楃殑鎬诲拰x^2 for(uint16_t i = 0 ; i < count ; i++) { - sumCol_X += dataCol_X[i];//求列x的总和 - sumRow_Y += dataRow_Y[i];//求行y的总和 - sumCol_X2 += dataCol_X[i] * dataCol_X[i];//求x^2的总和 - sum_XY += (dataCol_X[i] * dataRow_Y[i]);//求xy的总和 + sumCol_X += dataCol_X[i];//姹傚垪x鐨勬诲拰 + sumRow_Y += dataRow_Y[i];//姹傝y鐨勬诲拰 + sumCol_X2 += dataCol_X[i] * dataCol_X[i];//姹倄^2鐨勬诲拰 + sum_XY += (dataCol_X[i] * dataRow_Y[i]);//姹倄y鐨勬诲拰 } - aveCol_X = 1.0 * sumCol_X / count;//求平均值 + aveCol_X = 1.0 * sumCol_X / count;//姹傚钩鍧囧 aveRow_Y = 1.0 * sumRow_Y / count; - k = (sum_XY - aveCol_X * aveRow_Y * count) / //根据公式求斜率 + k = (sum_XY - aveCol_X * aveRow_Y * count) / //鏍规嵁鍏紡姹傛枩鐜 (sumCol_X2 - aveCol_X * aveCol_X * count); return k; } /***************************************************************************************** -* 函数名称: TrendAnalyse -* 功能描述: 判断数组中的值的总体趋势 -* 参 数: Data, +* 鍑芥暟鍚嶇О: TrendAnalyse +* 鍔熻兘鎻忚堪: 鍒ゆ柇鏁扮粍涓殑鍊肩殑鎬讳綋瓒嬪娍 +* 鍙 鏁: Data, Cnt, VPT, -* 返 回 值: true或false +* 杩 鍥 鍊: true鎴杅alse *****************************************************************************************/ int8_t TrendAnalyse(int32_t *Data, uint8_t Cnt, int32_t VPT) { @@ -889,26 +889,26 @@ int8_t TrendAnalyse(int32_t *Data, uint8_t Cnt, int32_t VPT) } } if(zero > (Cnt-(Cnt / 5))) - Trend = 0;//振荡趋势 + Trend = 0;//鎸崱瓒嬪娍 else if(plus > (Cnt-(Cnt/ 5))) - Trend = 1;//上升趋势 + Trend = 1;//涓婂崌瓒嬪娍 else if(minus > (Cnt-(Cnt/ 5))) - Trend = -1;//下降趋势 + Trend = -1;//涓嬮檷瓒嬪娍 - return Trend;//总趋势 + return Trend;//鎬昏秼鍔 } /***************************************************************************************** -* 函数名称: Waveform_Up -* 功能描述: 找出一段波形的波峰值 - dCnt, 波形数据长度 - pCnt, 要查找波峰数 - vlue, 返回的波峰值 -* 返 回 值: true或false +* 鍑芥暟鍚嶇О: Waveform_Up +* 鍔熻兘鎻忚堪: 鎵惧嚭涓娈垫尝褰㈢殑娉㈠嘲鍊 + dCnt, 娉㈠舰鏁版嵁闀垮害 + pCnt, 瑕佹煡鎵炬尝宄版暟 + vlue, 杩斿洖鐨勬尝宄板 +* 杩 鍥 鍊: true鎴杅alse *****************************************************************************************/ void Waveform_Up(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue) { uint8_t peak[pCnt]; - for(uint8_t i = 0, j = 0; i < dCnt; i++)//找出峰值地址 + for(uint8_t i = 0, j = 0; i < dCnt; i++)//鎵惧嚭宄板煎湴鍧 { if(Data[i] < Data[i + 1] && Data[i + 1] > Data[i + 2]) { @@ -923,17 +923,17 @@ void Waveform_Up(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue) } } /***************************************************************************************** -* 函数名称: Waveform_Down -* 功能描述: 找出一段波形的波谷值 - dCnt, 波形数据长度 - pCnt, 要查找波谷数 - vlue, 返回的波谷值 -* 返 回 值: true或false +* 鍑芥暟鍚嶇О: Waveform_Down +* 鍔熻兘鎻忚堪: 鎵惧嚭涓娈垫尝褰㈢殑娉㈣胺鍊 + dCnt, 娉㈠舰鏁版嵁闀垮害 + pCnt, 瑕佹煡鎵炬尝璋锋暟 + vlue, 杩斿洖鐨勬尝璋峰 +* 杩 鍥 鍊: true鎴杅alse *****************************************************************************************/ void Waveform_Down(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue) { uint8_t peak[pCnt]; - for(uint8_t i = 0, j = 0; i < dCnt; i++)//找出峰值地址 + for(uint8_t i = 0, j = 0; i < dCnt; i++)//鎵惧嚭宄板煎湴鍧 { if(Data[i] > Data[i + 1] && Data[i + 1] < Data[i + 2]) { @@ -948,12 +948,12 @@ void Waveform_Down(int32_t *Data, uint8_t dCnt, uint8_t pCnt, int32_t *vlue) } } /***************************************************************************************** -* 函数名称: count_most_greater -* 功能描述: 判断数组中的值是否大部分大于 target -* 参 数: arr, +* 鍑芥暟鍚嶇О: count_most_greater +* 鍔熻兘鎻忚堪: 鍒ゆ柇鏁扮粍涓殑鍊兼槸鍚﹀ぇ閮ㄥ垎澶т簬 target +* 鍙 鏁: arr, size, target, -* 返 回 值: true或false +* 杩 鍥 鍊: true鎴杅alse *****************************************************************************************/ bool count_most_greater(int32_t *arr, uint8_t size, int32_t target) { @@ -967,12 +967,12 @@ bool count_most_greater(int32_t *arr, uint8_t size, int32_t target) return true; } /***************************************************************************************** -* 函数名称: count_greater -* 功能描述: 判断数组中的值是否全部大于 target -* 参 数: arr, +* 鍑芥暟鍚嶇О: count_greater +* 鍔熻兘鎻忚堪: 鍒ゆ柇鏁扮粍涓殑鍊兼槸鍚﹀叏閮ㄥぇ浜 target +* 鍙 鏁: arr, size, target, -* 返 回 值: true或false +* 杩 鍥 鍊: true鎴杅alse *****************************************************************************************/ bool count_greater(int32_t *arr, uint8_t size, int32_t target) { @@ -983,12 +983,12 @@ bool count_greater(int32_t *arr, uint8_t size, int32_t target) return true; } /***************************************************************************************** -* 函数名称: count_smaller -* 功能描述: 判断数组中的值是否全部小于 target -* 参 数: arr, +* 鍑芥暟鍚嶇О: count_smaller +* 鍔熻兘鎻忚堪: 鍒ゆ柇鏁扮粍涓殑鍊兼槸鍚﹀叏閮ㄥ皬浜 target +* 鍙 鏁: arr, size, target, -* 返 回 值: true或false +* 杩 鍥 鍊: true鎴杅alse *****************************************************************************************/ bool count_smaller(int32_t *arr, uint8_t size, int32_t target) { @@ -1000,12 +1000,12 @@ bool count_smaller(int32_t *arr, uint8_t size, int32_t target) } /***************************************************************************************** -* 函数名称: CRC_Modbus -* 功能描述: CRC16计算函数 -* 参 数: wBase, 多项式 - Para,校验数据入口 - Data, 校验数据长度入口 -* 返 回 值: crc16校验值 +* 鍑芥暟鍚嶇О: CRC_Modbus +* 鍔熻兘鎻忚堪: CRC16璁$畻鍑芥暟 +* 鍙 鏁: wBase, 澶氶」寮 + Para锛屾牎楠屾暟鎹叆鍙 + Data, 鏍¢獙鏁版嵁闀垮害鍏ュ彛 +* 杩 鍥 鍊: crc16鏍¢獙鍊 *****************************************************************************************/ uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length) { @@ -1028,18 +1028,18 @@ uint16_t CRC_Modbus(uint16_t wBase, uint8_t *para, uint16_t length) } /***************************************************************************************** -* 函数名称: CRC_Sum -* 功能描述: 从第二个字节开始,求和取反 -* 参 数: _pbuff,校验数据入口 - _cmdLen,校验数据长度入口 -* 返 回 值: cmd_sum,校验值(一个字节) +* 鍑芥暟鍚嶇О: CRC_Sum +* 鍔熻兘鎻忚堪: 浠庣浜屼釜瀛楄妭寮濮嬶紝姹傚拰鍙栧弽 +* 鍙 鏁: _pbuff锛屾牎楠屾暟鎹叆鍙 + _cmdLen锛屾牎楠屾暟鎹暱搴﹀叆鍙 +* 杩 鍥 鍊: cmd_sum锛屾牎楠屽(涓涓瓧鑺) *****************************************************************************************/ uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen) { uint8_t cmd_sum=0; uint16_t i; - for(i=1;i<_cmdLen;i++)//从1开始,跳过第一个字节 + for(i=1;i<_cmdLen;i++)//浠1寮濮嬶紝璺宠繃绗竴涓瓧鑺 { cmd_sum += _pbuff[i]; } @@ -1048,29 +1048,29 @@ uint8_t CRC_Sum(uint8_t *_pbuff, uint16_t _cmdLen) return cmd_sum; } /***************************************************************************************** -* 函数名称: isAllZero -* 功能描述: 判断一个数组的值是否全部为0 -* 参 数: arr,数组 - size,长度 -* 返 回 值: true或false +* 鍑芥暟鍚嶇О: isAllZero +* 鍔熻兘鎻忚堪: 鍒ゆ柇涓涓暟缁勭殑鍊兼槸鍚﹀叏閮ㄤ负0 +* 鍙 鏁: arr锛屾暟缁 + size锛岄暱搴 +* 杩 鍥 鍊: true鎴杅alse *****************************************************************************************/ bool isAllZero(uint8_t *arr, int size) { for (int i = 0; i < size; i++) { if (arr[i] != 0) { - return false; // 如果数组中有一个元素不为0,则返回false + return false; // 濡傛灉鏁扮粍涓湁涓涓厓绱犱笉涓0锛屽垯杩斿洖false } } - return true; // 遍历完数组后,若所有元素都为0,则返回true + return true; // 閬嶅巻瀹屾暟缁勫悗锛岃嫢鎵鏈夊厓绱犻兘涓0锛屽垯杩斿洖true } /***************************************************************************************** -* 函数名称: HexToAscii -* 功能描述: 16进制转ASCII码 -* 参 数: HexData,16进制数组 - ASCData,ASCII码 - sLen,数据长度 -* 返 回 值: true或false +* 鍑芥暟鍚嶇О: HexToAscii +* 鍔熻兘鎻忚堪: 16杩涘埗杞珹SCII鐮 +* 鍙 鏁: HexData锛16杩涘埗鏁扮粍 + ASCData锛孉SCII鐮 + sLen锛屾暟鎹暱搴 +* 杩 鍥 鍊: true鎴杅alse *****************************************************************************************/ void HexToAscii(uint8_t *HexData, char *ASCData, uint8_t sLen) { diff --git a/Project/HC32F460/source/User/Src/Debug.c b/Project/HC32F460/source/User/Src/Debug.c index 5b720e1..8273d5c 100644 --- a/Project/HC32F460/source/User/Src/Debug.c +++ b/Project/HC32F460/source/User/Src/Debug.c @@ -55,27 +55,27 @@ void vcom_Send( char *format, ... ) va_end(args); } -// 定义一个函数vcom_Print,用于打印字符串 +// 瀹氫箟涓涓嚱鏁皏com_Print锛岀敤浜庢墦鍗板瓧绗︿覆 void vcom_Print(uint8_t sLen) { - // 定义一个字符指针CurChar + // 瀹氫箟涓涓瓧绗︽寚閽圕urChar char* CurChar; - // 初始化ir + // 鍒濆鍖杋r ir = 0; - // 当ir小于sLen时,循环执行 + // 褰搃r灏忎簬sLen鏃讹紝寰幆鎵ц while(ir < sLen) { - // 获取字符指针CurChar + // 鑾峰彇瀛楃鎸囬拡CurChar CurChar = &buff[ir++]; - // 调用DebugUartSend函数,发送CurChar指向的字符,次数为1 + // 璋冪敤DebugUartSend鍑芥暟锛屽彂閫丆urChar鎸囧悜鐨勫瓧绗︼紝娆℃暟涓1 DebugUartSend((uint8_t*)CurChar, 1); } } -// 定义一个函数vcom_Send2,用于发送字符串 +// 瀹氫箟涓涓嚱鏁皏com_Send2锛岀敤浜庡彂閫佸瓧绗︿覆 void vcom_Send2(uint8_t *sData, uint16_t len) { - // 遍历sData,将每个元素发送到DebugUartSend + // 閬嶅巻sData锛屽皢姣忎釜鍏冪礌鍙戦佸埌DebugUartSend for(int i = 0; i < len; i++) { DebugUartSend(&sData[i], 1); } @@ -90,7 +90,7 @@ void DebugLoopHandler(void) return; //for(argv[argc] = strtok(RxBuff, " "); argv[argc] != NULL; argv[++argc] = strtok(NULL, " ")); - // 解析字符串,将参数放入argv数组中 + // 瑙f瀽瀛楃涓诧紝灏嗗弬鏁版斁鍏rgv鏁扮粍涓 argp = strtok(RxBuff, " "); for(int i = 0; i < 10; i++) { if(argp != NULL) { @@ -103,19 +103,19 @@ void DebugLoopHandler(void) } } - // 获取第一个参数,并将其赋值给argp + // 鑾峰彇绗竴涓弬鏁帮紝骞跺皢鍏惰祴鍊肩粰argp argp = strtok(argv[argc], "'\r'"); - // 如果argp不为空,则将argp的值赋值给argv[argc],并将argc加1 + // 濡傛灉argp涓嶄负绌猴紝鍒欏皢argp鐨勫艰祴鍊肩粰argv[argc]锛屽苟灏哸rgc鍔1 if(argp != NULL) { argv[argc++] = argp; } - // 否则,将RxLen设置为0,并返回 + // 鍚﹀垯锛屽皢RxLen璁剧疆涓0锛屽苟杩斿洖 else { RxLen = 0; return; } - // 遍历DebugFun数组,查找argv[0]是否与DBGCmd匹配,若匹配则调用DBGExec函数 + // 閬嶅巻DebugFun鏁扮粍锛屾煡鎵綼rgv[0]鏄惁涓嶥BGCmd鍖归厤锛岃嫢鍖归厤鍒欒皟鐢―BGExec鍑芥暟 for(int i = 0; i < DEBUG_CMD_CNT; i++) { if(strcmp(argv[0], DebugFun[i].DBGCmd) == 0) DebugFun[i].DBGExec(argc, argv); @@ -130,54 +130,54 @@ void DebugLoopHandler(void) uint32_t RxTimeCurrent; uint32_t RxTimeLast = 0; -// 函数:Dbg1msRoutine -// 功能:1ms调试时钟routine +// 鍑芥暟锛欴bg1msRoutine +// 鍔熻兘锛1ms璋冭瘯鏃堕挓routine void Dbg1msRoutine(void) { - // 如果1ms调试时钟计数器大于0 + // 濡傛灉1ms璋冭瘯鏃堕挓璁℃暟鍣ㄥぇ浜0 if(DebugRxTimeOut1mSCnt > 0) - // 1ms调试时钟计数器减1 + // 1ms璋冭瘯鏃堕挓璁℃暟鍣ㄥ噺1 DebugRxTimeOut1mSCnt--; } -// 定义函数DbgUsartRxIrqCallback,用于处理串口接收中断 +// 瀹氫箟鍑芥暟DbgUsartRxIrqCallback锛岀敤浜庡鐞嗕覆鍙f帴鏀朵腑鏂 void DbgUsartRxIrqCallback(void) { - // 如果1分钟超时计数器为0,则清空RxLen + // 濡傛灉1鍒嗛挓瓒呮椂璁℃暟鍣ㄤ负0锛屽垯娓呯┖RxLen if(DebugRxTimeOut1mSCnt == 0) RxLen = 0; - // 重置1分钟超时计数器 + // 閲嶇疆1鍒嗛挓瓒呮椂璁℃暟鍣 DebugRxTimeOut1mSCnt = 3; - // 读取串口接收到的数据 + // 璇诲彇涓插彛鎺ユ敹鍒扮殑鏁版嵁 uint8_t Data = DbgUartRec(); - // 如果RxLen小于128,则将数据添加到RxBuff中 + // 濡傛灉RxLen灏忎簬128锛屽垯灏嗘暟鎹坊鍔犲埌RxBuff涓 if(RxLen < 128) { RxBuff[RxLen++] = Data; } // DBG_LOG("RxBuff = %s\n", RxBuff); -// RS485_Flag=1;//接收标志为置1 +// RS485_Flag=1;//鎺ユ敹鏍囧織涓虹疆1 } void DebugTest(int argc, char *argv[]) { - // 如果参数个数小于2,则返回 + // 濡傛灉鍙傛暟涓暟灏忎簬2锛屽垯杩斿洖 if(argc < 2) return; - // 如果参数为“?”,则打印帮助信息 + // 濡傛灉鍙傛暟涓衡?鈥濓紝鍒欐墦鍗板府鍔╀俊鎭 if(strcmp(argv[1], "?") == 0) { DBG_LOG("Debug Cmd:\r\n\ disp task on/off -->Open the task display.\r\n"); return; } - // 如果参数为“on”,则打印“Test ON” + // 濡傛灉鍙傛暟涓衡渙n鈥濓紝鍒欐墦鍗扳淭est ON鈥 if(strcmp(argv[1], "on") == 0) { // TestOn(); DBG_LOG("Test ON\r\n"); } - // 如果参数为“off”,则打印“Test OFF” + // 濡傛灉鍙傛暟涓衡渙ff鈥濓紝鍒欐墦鍗扳淭est OFF鈥 else if(strcmp(argv[1], "off") == 0) { // TestOFF(); @@ -221,51 +221,51 @@ void DebugCmdHelp(int argc, char *argv[]) } #if 0 -//// 定义一个无参函数DebugReadData,用于读取数据 +//// 瀹氫箟涓涓棤鍙傚嚱鏁癉ebugReadData锛岀敤浜庤鍙栨暟鎹 //void DebugReadData(int argc, char *argv[]) //{ -// // 定义一个无符号32位整数ADReadStart,初始值为0 +// // 瀹氫箟涓涓棤绗﹀彿32浣嶆暣鏁癆DReadStart锛屽垵濮嬪间负0 // uint32_t ADReadStart = 0; -// // 定义一个ADData_t类型的数组ADBuff,大小为640 +// // 瀹氫箟涓涓狝DData_t绫诲瀷鐨勬暟缁凙DBuff锛屽ぇ灏忎负640 // ADData_t ADBuff[640]; // -// // 当ADReadStart小于SDCARD_BLOCK_MAX时,循环执行 +// // 褰揂DReadStart灏忎簬SDCARD_BLOCK_MAX鏃讹紝寰幆鎵ц // while(ADReadStart < SDCARD_BLOCK_MAX) { -// // 使用SDCardReadBlocks函数读取数据,从ADReadStart开始,读取10个块,数据存储在ADBuff中 +// // 浣跨敤SDCardReadBlocks鍑芥暟璇诲彇鏁版嵁锛屼粠ADReadStart寮濮嬶紝璇诲彇10涓潡锛屾暟鎹瓨鍌ㄥ湪ADBuff涓 // SDCardReadBlocks(ADReadStart, 10, (uint8_t *)ADBuff); -// // 遍历ADBuff数组,将每个元素打印出来 +// // 閬嶅巻ADBuff鏁扮粍锛屽皢姣忎釜鍏冪礌鎵撳嵃鍑烘潵 // for(int i = 0; i < 640; i++) { // DBG_LOG("%d\t%d\t%d\t%d\r\n", ADBuff[i].AD0, ADBuff[i].AD1, ADBuff[i].AD2, ADBuff[i].AD3); // } -// // ADReadStart加10 +// // ADReadStart鍔10 // ADReadStart += 10; // } //} -//// 定义一个函数SetTime,参数为int argc和char *argv[] +//// 瀹氫箟涓涓嚱鏁癝etTime锛屽弬鏁颁负int argc鍜宑har *argv[] //void SetTime(int argc, char *argv[]) //{ -// // 定义一个字符数组test,并初始化为0 +// // 瀹氫箟涓涓瓧绗︽暟缁則est锛屽苟鍒濆鍖栦负0 // char test[10] = 0; -// // 定义一个整数num,并初始化为0 +// // 瀹氫箟涓涓暣鏁皀um锛屽苟鍒濆鍖栦负0 // int num = 0; -// // 如果argc小于2,则返回 +// // 濡傛灉argc灏忎簬2锛屽垯杩斿洖 // if(argc < 2) // return; -// // 如果argv[1]等于"?",则打印提示信息 +// // 濡傛灉argv[1]绛変簬"?"锛屽垯鎵撳嵃鎻愮ず淇℃伅 // if(strcmp(argv[1], "?") == 0) // { // DBG_LOG("SetTime Cmd:\r\n\ // disp task on/off -->Open the task display.\r\n"); // return; // } -// // 将argv[1]的值复制到test +// // 灏哸rgv[1]鐨勫煎鍒跺埌test // memcpy(test, (char *)argv[1], 10); -// // 将test转换为整数 +// // 灏唗est杞崲涓烘暣鏁 // num = atoi(test); -// // 调用TimeSync函数,并将num作为参数传入 +// // 璋冪敤TimeSync鍑芥暟锛屽苟灏唍um浣滀负鍙傛暟浼犲叆 // TimeSync(num); //} #endif @@ -274,24 +274,24 @@ extern uint8_t KeyBSta; extern uint8_t RunSta; void MotorSwitch(int argc, char *argv[]) { - // 如果参数个数小于2,则返回 + // 濡傛灉鍙傛暟涓暟灏忎簬2锛屽垯杩斿洖 if(argc < 2) return; - // 如果第一个参数为?,则打印帮助信息 + // 濡傛灉绗竴涓弬鏁颁负锛燂紝鍒欐墦鍗板府鍔╀俊鎭 if(strcmp(argv[1], "?") == 0) { DBG_LOG("DCMotor Cmd:\r\n\ motor F/R/S -->Turn the motor on or off.\r\n"); return; } - // 如果第一个参数为on,则开启SonarWork + // 濡傛灉绗竴涓弬鏁颁负on锛屽垯寮鍚疭onarWork if(strcmp(argv[1], "R") == 0) { KeyASta = true; Motor_Control(MOTOR_CMD_REVERSE); DBG_LOG("Motor FORWARD\r\n"); } - // 如果第一个参数为off,则关闭SonarWork + // 濡傛灉绗竴涓弬鏁颁负off锛屽垯鍏抽棴SonarWork else if(strcmp(argv[1], "F") == 0) { KeyBSta = true; @@ -309,56 +309,56 @@ void MotorSwitch(int argc, char *argv[]) extern void GradeControl(ControlLevel_m level); void LevelSwitch(int argc, char *argv[]) { - // 如果参数个数小于2,则返回 + // 濡傛灉鍙傛暟涓暟灏忎簬2锛屽垯杩斿洖 if(argc < 2) return; - // 如果参数为“?”,则打印帮助信息 + // 濡傛灉鍙傛暟涓衡?鈥濓紝鍒欐墦鍗板府鍔╀俊鎭 if(strcmp(argv[1], "?") == 0) { DBG_LOG("level Cmd:\r\n\ level 1/2/3/4/5 -->Select control level.\r\n"); return; } - // 如果参数为“1”,则打印“Set control level: 1” + // 濡傛灉鍙傛暟涓衡1鈥濓紝鍒欐墦鍗扳淪et control level: 1鈥 if(strcmp(argv[1], "1") == 0) { - App.Para.Layout.ControlLevel = LEVEL_1;//等级1 + App.Para.Layout.ControlLevel = LEVEL_1;//绛夌骇1 SAVE_APP_PARA((uint32_t *)&App.Para); DBG_LOG("Set control level: 1\r\n"); DBG_LOG("SystemReset...\r\n"); NVIC_SystemReset(); } - // 如果参数为“2”,则打印“Set control level: 2” + // 濡傛灉鍙傛暟涓衡2鈥濓紝鍒欐墦鍗扳淪et control level: 2鈥 else if(strcmp(argv[1], "2") == 0) { - App.Para.Layout.ControlLevel = LEVEL_2;//等级2 + App.Para.Layout.ControlLevel = LEVEL_2;//绛夌骇2 SAVE_APP_PARA((uint32_t *)&App.Para); DBG_LOG("Set control level: 2\r\n"); DBG_LOG("SystemReset...\r\n"); NVIC_SystemReset(); } - // 如果参数为“3”,则打印“Set control level: 1” + // 濡傛灉鍙傛暟涓衡3鈥濓紝鍒欐墦鍗扳淪et control level: 1鈥 else if(strcmp(argv[1], "3") == 0) { - App.Para.Layout.ControlLevel = LEVEL_3;//等级3 + App.Para.Layout.ControlLevel = LEVEL_3;//绛夌骇3 SAVE_APP_PARA((uint32_t *)&App.Para); DBG_LOG("Set control level: 3\r\n"); DBG_LOG("SystemReset...\r\n"); NVIC_SystemReset(); } - // 如果参数为“4”,则打印“Set control level: 4” + // 濡傛灉鍙傛暟涓衡4鈥濓紝鍒欐墦鍗扳淪et control level: 4鈥 else if(strcmp(argv[1], "4") == 0) { - App.Para.Layout.ControlLevel = LEVEL_4;//等级4 + App.Para.Layout.ControlLevel = LEVEL_4;//绛夌骇4 SAVE_APP_PARA((uint32_t *)&App.Para); DBG_LOG("Set control level: 4\r\n"); DBG_LOG("SystemReset...\r\n"); NVIC_SystemReset(); } - // 如果参数为“5”,则打印“Set control level: 5” + // 濡傛灉鍙傛暟涓衡5鈥濓紝鍒欐墦鍗扳淪et control level: 5鈥 else if(strcmp(argv[1], "5") == 0) { - App.Para.Layout.ControlLevel = LEVEL_5;//等级5 + App.Para.Layout.ControlLevel = LEVEL_5;//绛夌骇5 SAVE_APP_PARA((uint32_t *)&App.Para); DBG_LOG("Set control level: 5\r\n"); DBG_LOG("SystemReset...\r\n"); @@ -368,24 +368,24 @@ void LevelSwitch(int argc, char *argv[]) void DBGWave_on_off(int argc, char *argv[]) { - // 如果参数个数小于2,则返回 + // 濡傛灉鍙傛暟涓暟灏忎簬2锛屽垯杩斿洖 if(argc < 2) return; - // 如果参数为“?”,则打印帮助信息 + // 濡傛灉鍙傛暟涓衡?鈥濓紝鍒欐墦鍗板府鍔╀俊鎭 if(strcmp(argv[1], "?") == 0) { DBG_LOG("wave Cmd:\r\n\ wave on/off -->Turn on or off waveform output.\r\n"); return; } - // 如果参数为“on”,则打印“Test ON” + // 濡傛灉鍙傛暟涓衡渙n鈥濓紝鍒欐墦鍗扳淭est ON鈥 if(strcmp(argv[1], "on") == 0) { App.Para.Layout.DBGWaveOut = true; SAVE_APP_PARA((uint32_t *)&App.Para); DBG_LOG("Waveform output on.\r\n"); } - // 如果参数为“off”,则打印“Test OFF” + // 濡傛灉鍙傛暟涓衡渙ff鈥濓紝鍒欐墦鍗扳淭est OFF鈥 else if(strcmp(argv[1], "off") == 0) { App.Para.Layout.DBGWaveOut = false; diff --git a/Project/HC32F460/source/User/Src/Encryption.c b/Project/HC32F460/source/User/Src/Encryption.c index 842f41a..9155e98 100644 --- a/Project/HC32F460/source/User/Src/Encryption.c +++ b/Project/HC32F460/source/User/Src/Encryption.c @@ -1,6 +1,6 @@ #include "Encryption.h" -//从机加密表 +//浠庢満鍔犲瘑琛 const unsigned char EPT_Table[32][6] = { {1, 6, 4, 2, 3, 5}, {2, 4, 6, 3, 5, 1}, {3, 5, 6, 2, 1, 4}, {5, 3, 2, 1, 4, 6}, {4, 2, 3, 1, 5, 6}, {6, 3, 5, 1, 4, 2}, {3, 5, 2, 6, 4, 1}, {2, 5, 4, 3, 1, 6}, @@ -12,7 +12,7 @@ const unsigned char EPT_Table[32][6] = { {3, 6, 5, 4, 2, 1}, {1, 2, 6, 3, 5, 4}, {4, 6, 5, 3, 2, 1}, {5, 3, 4, 2, 6, 1} }; -//从机解密表: +//浠庢満瑙e瘑琛細 const unsigned char DPT_Table[32][5] ={ {1, 4, 2, 3, 5}, {2, 4, 3, 5, 1}, {3, 5, 2, 1, 4}, {5, 3, 2, 1, 4}, {4, 2, 3, 1, 5}, {3, 5, 1, 4, 2}, {3, 5, 2, 4, 1}, {2, 5, 4, 3, 1}, @@ -24,7 +24,7 @@ const unsigned char DPT_Table[32][5] ={ {3, 5, 4, 2, 1}, {1, 2, 3, 5, 4}, {4, 5, 3, 2, 1}, {5, 3, 4, 2, 1} }; -//数据位加密表: +//鏁版嵁浣嶅姞瀵嗚〃锛 const unsigned char EPT_D[32] = { 0x23, 0x4c, 0x92, 0x38, 0x52, 0xa4, 0x9a, 0x61, 0x86, 0xc8, 0x70, 0x16, 0x32, 0x58, 0x62, 0x83, @@ -33,11 +33,11 @@ const unsigned char EPT_D[32] = { }; /****************************************************************/ -/* 加密函数 */ +/* 鍔犲瘑鍑芥暟 */ /* */ -/*函数入口: *data,未加密的普通协议数据 */ +/*鍑芥暟鍏ュ彛: *data,鏈姞瀵嗙殑鏅氬崗璁暟鎹 */ /* */ -/*函数出口: *EPT_data,生成的加密协议 */ +/*鍑芥暟鍑哄彛: *EPT_data锛岀敓鎴愮殑鍔犲瘑鍗忚 */ /****************************************************************/ void Encrypt_Code(unsigned char *data, unsigned char *EPT_data) { unsigned char Edata[6]; @@ -60,11 +60,11 @@ void Encrypt_Code(unsigned char *data, unsigned char *EPT_data) { } /****************************************************************/ -/* 解密函数 */ +/* 瑙e瘑鍑芥暟 */ /* */ -/*函数入口: *EPT_data,需要解密的加密协议 */ +/*鍑芥暟鍏ュ彛锛 *EPT_data锛岄渶瑕佽В瀵嗙殑鍔犲瘑鍗忚 */ /* */ -/*函数出口: *DPT_data,生成的普通协议 */ +/*鍑芥暟鍑哄彛锛 *DPT_data锛岀敓鎴愮殑鏅氬崗璁 */ /****************************************************************/ void Decrypt_Code(unsigned char *EPT_data,unsigned char *DPT_data) { unsigned char data[5]; diff --git a/Project/HC32F460/source/User/Src/bsp.c b/Project/HC32F460/source/User/Src/bsp.c index 7b22717..688adc7 100644 --- a/Project/HC32F460/source/User/Src/bsp.c +++ b/Project/HC32F460/source/User/Src/bsp.c @@ -133,10 +133,10 @@ void FeedDog(void) } /***************************************************************************************** -* 函数名称: Xtal32_ClockConfig -* 功能描述: 外部低速时钟配置 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: Xtal32_ClockConfig +* 鍔熻兘鎻忚堪: 澶栭儴浣庨熸椂閽熼厤缃 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void Xtal32_ClockConfig(void) { @@ -166,10 +166,10 @@ void delay_5ns(uint32_t ns) } #if(USE_RS485 == 1) /***************************************************************************************** -* 函数名称: RS485Uart_Config -* 功能描述: RS485串口初始化 -* 参 数: BaudRate 波特率 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: RS485Uart_Config +* 鍔熻兘鎻忚堪: RS485涓插彛鍒濆鍖 +* 鍙 鏁: BaudRate 娉㈢壒鐜 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void RS485Uart_Config(uint32_t BaudRate) { @@ -507,11 +507,11 @@ static void GPIO_Config(void) MEM_ZERO_STRUCT(stcPortInit); - /********************************** GPIO输出 ****************************************/ + /********************************** GPIO杈撳嚭 ****************************************/ stcPortInit.enPinMode = Pin_Mode_Out; stcPortInit.enPinOType = Pin_OType_Cmos; stcPortInit.enPinDrv = Pin_Drv_H; - stcPortInit.enPullUp = Disable;//无上拉 + stcPortInit.enPullUp = Disable;//鏃犱笂鎷 PORT_Init(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx, &stcPortInit); PORT_Init(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx, &stcPortInit); @@ -523,20 +523,20 @@ static void GPIO_Config(void) LED_GREEN_OFF(); LED_RED_OFF(); - stcPortInit.enPullUp = Enable;//上拉 + stcPortInit.enPullUp = Enable;//涓婃媺 } void Bit0AndBit1_OUT(void) { stc_port_init_t stcPortInit; MEM_ZERO_STRUCT(stcPortInit); - /********************************** GPIO输出 ****************************************/ + /********************************** GPIO杈撳嚭 ****************************************/ stcPortInit.enPinMode = Pin_Mode_Out; stcPortInit.enPinOType = Pin_OType_Cmos; stcPortInit.enPinDrv = Pin_Drv_H; - stcPortInit.enPullUp = Disable;//无上拉 + stcPortInit.enPullUp = Disable;//鏃犱笂鎷 - stcPortInit.enPullUp = Enable;//上拉 + stcPortInit.enPullUp = Enable;//涓婃媺 PORT_Init(TWIN_BIT0_PORTx, TWIN_BIT0_PINx, &stcPortInit); PORT_Init(TWIN_BIT1_PORTx, TWIN_BIT1_PINx, &stcPortInit); SET_TWIN_BIT0(); @@ -547,14 +547,14 @@ void Bit0AndBit1_IN(void) stc_port_init_t stcPortInit; MEM_ZERO_STRUCT(stcPortInit); - /********************************** GPIO输入 ****************************************/ + /********************************** GPIO杈撳叆 ****************************************/ stcPortInit.enPinMode = Pin_Mode_In; - stcPortInit.enPullUp = Disable;//无上拉 + stcPortInit.enPullUp = Disable;//鏃犱笂鎷 PORT_Init(TWIN_BIT0_PORTx, TWIN_BIT0_PINx, &stcPortInit); PORT_Init(TWIN_BIT1_PORTx, TWIN_BIT1_PINx, &stcPortInit); } -/*********************************左上传感器 +/*********************************宸︿笂浼犳劅鍣 ******************************************************************************* ** \brief ExtInt00 callback function ** @@ -626,7 +626,7 @@ void ExtInt10IntDisable(void) /* Disable NVIC */ NVIC_DisableIRQ(LEFTUP_CS1237_IRQn); } -/*******************************左下传感器 +/*******************************宸︿笅浼犳劅鍣 ******************************************************************************* ** \brief ExtInt01 callback function ** @@ -698,7 +698,7 @@ void ExtInt01IntDisable(void) /* Disable NVIC */ NVIC_DisableIRQ(LEFTLOW_CS1237_IRQn); } -/*******************************右上传感器 +/*******************************鍙充笂浼犳劅鍣 ******************************************************************************* ** \brief ExtInt04 callback function ** @@ -770,7 +770,7 @@ void ExtInt04IntDisable(void) /* Disable NVIC */ NVIC_DisableIRQ(RIGHTUP_CS1237_IRQn); } -/*******************************右下传感器 +/*******************************鍙充笅浼犳劅鍣 ******************************************************************************* ** \brief ExtInt04 callback function ** @@ -1039,12 +1039,12 @@ uint16_t Spi3SendReceive(uint8_t sData) /** ****************************************************************************** - ** \brief SPI 读/写一字节函数 + ** \brief SPI 璇/鍐欎竴瀛楄妭鍑芥暟 ** - ** \param [in] SPIx 通道选择 - ** \param [in] u8Data 发送一字节数据 + ** \param [in] SPIx 閫氶亾閫夋嫨 + ** \param [in] u8Data 鍙戦佷竴瀛楄妭鏁版嵁 ** - ** \retval 接收一字节数据 + ** \retval 鎺ユ敹涓瀛楄妭鏁版嵁 ** ******************************************************************************/ uint8_t Spi3_RWByte(M4_SPI_TypeDef *SPIx, uint8_t u8Data) @@ -1070,10 +1070,10 @@ uint8_t Spi3_RWByte(M4_SPI_TypeDef *SPIx, uint8_t u8Data) #if(USE_RTC == 1) /***************************************************************************************** -* 函数名称: Rtc_Config -* 功能描述: RTC配置 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: Rtc_Config +* 鍔熻兘鎻忚堪: RTC閰嶇疆 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void Rtc_Config(void) { @@ -1116,10 +1116,10 @@ static void Rtc_Config(void) } /***************************************************************************************** -* 函数名称: TimeGet -* 功能描述: 获取系统时间 -* 参 数: tm 读取时间入口 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: TimeGet +* 鍔熻兘鎻忚堪: 鑾峰彇绯荤粺鏃堕棿 +* 鍙 鏁: tm 璇诲彇鏃堕棿鍏ュ彛 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void TimeGet(struct tm *cTime) { @@ -1136,10 +1136,10 @@ void TimeGet(struct tm *cTime) } /***************************************************************************************** -* 函数名称: TimeTs -* 功能描述: 系统时间转换时间戳 -* 参 数: 无 -* 返 回 值: 返回时间戳 +* 鍑芥暟鍚嶇О: TimeTs +* 鍔熻兘鎻忚堪: 绯荤粺鏃堕棿杞崲鏃堕棿鎴 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 杩斿洖鏃堕棿鎴 *****************************************************************************************/ int TimeTs(void) { @@ -1152,10 +1152,10 @@ int TimeTs(void) } /***************************************************************************************** -* 函数名称: TimeShow -* 功能描述: 将时间输出到DBG串口 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: TimeShow +* 鍔熻兘鎻忚堪: 灏嗘椂闂磋緭鍑哄埌DBG涓插彛 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void TimeShow(uint32_t dwStamp) { @@ -1170,10 +1170,10 @@ void TimeShow(uint32_t dwStamp) } /***************************************************************************************** -* 函数名称: TimeSync -* 功能描述: 通过时间戳同步 -* 参 数: ts 时间入口 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: TimeSync +* 鍔熻兘鎻忚堪: 閫氳繃鏃堕棿鎴冲悓姝 +* 鍙 鏁: ts 鏃堕棿鍏ュ彛 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void TimeSync(time_t ts) { @@ -1200,10 +1200,10 @@ void TimeSync(time_t ts) #endif #if(USE_AD == 1) /***************************************************************************************** -* 函数名称: AdcInitConfig -* 功能描述: ADC初始化配置 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: AdcInitConfig +* 鍔熻兘鎻忚堪: ADC鍒濆鍖栭厤缃 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void AdcInitConfig(void) { @@ -1223,10 +1223,10 @@ static void AdcInitConfig(void) } /***************************************************************************************** -* 函数名称: AdcSetChannelPinMode -* 功能描述: ADC通道引脚配置 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: AdcSetChannelPinMode +* 鍔熻兘鎻忚堪: ADC閫氶亾寮曡剼閰嶇疆 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void AdcSetChannelPinMode(uint32_t u32Channel) { @@ -1262,10 +1262,10 @@ static void AdcSetChannelPinMode(uint32_t u32Channel) } /***************************************************************************************** -* 函数名称: AdcChannelConfig -* 功能描述: ADC通道配置 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: AdcChannelConfig +* 鍔熻兘鎻忚堪: ADC閫氶亾閰嶇疆 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void AdcChannelConfig(void) { @@ -1286,17 +1286,17 @@ static void AdcChannelConfig(void) ADC_AddAdcChannel(M4_ADC1, &stcChCfg); /* 3. Configure the average channel if you need. */ - ADC_ConfigAvg(M4_ADC1, AdcAvcnt_2); //平均通道配置,多次采样后输出平均值 + ADC_ConfigAvg(M4_ADC1, AdcAvcnt_2); //骞冲潎閫氶亾閰嶇疆锛屽娆¢噰鏍峰悗杈撳嚭骞冲潎鍊 /* 4. Add average channel if you need. */ ADC_AddAvgChannel(M4_ADC1, stcChCfg.u32Channel); } /***************************************************************************************** -* 函数名称: Adc1_Config -* 功能描述: ADC1配置 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: Adc1_Config +* 鍔熻兘鎻忚堪: ADC1閰嶇疆 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void Adc1_Config(void) { @@ -1306,10 +1306,10 @@ static void Adc1_Config(void) } /***************************************************************************************** -* 函数名称: AdcDmaConfig -* 功能描述: ADC DMA配置 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: AdcDmaConfig +* 鍔熻兘鎻忚堪: ADC DMA閰嶇疆 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void AdcDmaConfig(void) { @@ -1353,11 +1353,11 @@ static void AdcDmaConfig(void) #endif #if(USE_DMA == 1) /***************************************************************************************** -* 函数名称: DmaIrqRegister -* 功能描述: DMA中断寄存器配置 -* 参 数: pstcCfg, 中断参数 - u32Priority, 中断优先级 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: DmaIrqRegister +* 鍔熻兘鎻忚堪: DMA涓柇瀵勫瓨鍣ㄩ厤缃 +* 鍙 鏁: pstcCfg锛 涓柇鍙傛暟 + u32Priority锛 涓柇浼樺厛绾 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void DmaIrqRegister(stc_irq_regi_conf_t *pstcCfg, uint32_t u32Priority) { @@ -1379,10 +1379,10 @@ static void DmaIrqRegister(stc_irq_regi_conf_t *pstcCfg, uint32_t u32Priority) } /***************************************************************************************** -* 函数名称: DmaIrqRegister -* 功能描述: DMA中断配置 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: DmaIrqRegister +* 鍔熻兘鎻忚堪: DMA涓柇閰嶇疆 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void DmaIrqConfig(void) { @@ -1396,10 +1396,10 @@ static void DmaIrqConfig(void) } /***************************************************************************************** -* 函数名称: DmaIrqRegister -* 功能描述: DMA配置 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: DmaIrqRegister +* 鍔熻兘鎻忚堪: DMA閰嶇疆 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ static void Dma_Config(void) { @@ -1408,10 +1408,10 @@ static void Dma_Config(void) } #endif /***************************************************************************************** -* 函数名称: ReadAdcValue -* 功能描述: 读取AD值 -* 参 数: 无 -* 返 回 值: AD值 +* 鍑芥暟鍚嶇О: ReadAdcValue +* 鍔熻兘鎻忚堪: 璇诲彇AD鍊 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: AD鍊 *****************************************************************************************/ uint16_t *GetADCBuffPoint(void) { @@ -1419,10 +1419,10 @@ uint16_t *GetADCBuffPoint(void) } /***************************************************************************************** -* 函数名称: ADC_Start -* 功能描述: 启动ADC转换 -* 参 数: 无 -* 返 回 值: AD值 +* 鍑芥暟鍚嶇О: ADC_Start +* 鍔熻兘鎻忚堪: 鍚姩ADC杞崲 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: AD鍊 *****************************************************************************************/ void ADC_Start(void) { @@ -1434,10 +1434,10 @@ void ADC_Stop(void) ADC_StopConvert(M4_ADC1); } /***************************************************************************************** -* 函数名称: ReadAdcValue -* 功能描述: 读取AD值 -* 参 数: 无 -* 返 回 值: AD值 +* 鍑芥暟鍚嶇О: ReadAdcValue +* 鍔熻兘鎻忚堪: 璇诲彇AD鍊 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: AD鍊 *****************************************************************************************/ void ReadAdcValue(uint16_t *ADValue) { @@ -1483,10 +1483,10 @@ void BSP_Init(void) } /***************************************************************************************** -* 函数名称: EnterStop -* 功能描述: 进入低功耗状态 -* 参 数: SleepStatus 设备低功耗状态 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: EnterStop +* 鍔熻兘鎻忚堪: 杩涘叆浣庡姛鑰楃姸鎬 +* 鍙 鏁: SleepStatus 璁惧浣庡姛鑰楃姸鎬 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void EnterStop(void) { @@ -1526,10 +1526,10 @@ void EnterStop(void) extern uint8_t BDRxData[256]; /***************************************************************************************** -* 函数名称: Wakeup -* 功能描述: 设备唤醒 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: Wakeup +* 鍔熻兘鎻忚堪: 璁惧鍞ら啋 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void Wakeup(void) { @@ -1629,10 +1629,10 @@ __WEAK void Usart3_RxPinIntCallBack(void) } #endif /***************************************************************************************** -* 函数名称: RtcPeriod_IrqCallback -* 功能描述: RTC中断回调 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: RtcPeriod_IrqCallback +* 鍔熻兘鎻忚堪: RTC涓柇鍥炶皟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ __WEAK void RtcPeriod_IrqCallback(void) { @@ -1640,10 +1640,10 @@ __WEAK void RtcPeriod_IrqCallback(void) } /***************************************************************************************** -* 函数名称: Dma1Btc0_IrqHandler -* 功能描述: DMA中断外部重定向回调函数 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: Dma1Btc0_IrqHandler +* 鍔熻兘鎻忚堪: DMA涓柇澶栭儴閲嶅畾鍚戝洖璋冨嚱鏁 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ extern void ADC_DMA_CallBack(void); //int test = 0; diff --git a/Project/HC32F460/source/User/Src/main.c b/Project/HC32F460/source/User/Src/main.c index f017eef..d0f710d 100644 --- a/Project/HC32F460/source/User/Src/main.c +++ b/Project/HC32F460/source/User/Src/main.c @@ -15,8 +15,8 @@ #define MAIN_DBG_LOG(...) DBG_LOG(__VA_ARGS__) #define MAIN_DBG_ARRAY(ARRAY, SIZE) DBG_ARRAY(ARRAY,SIZE) -#define SOFTWARE_VERSION 11 //软件版本 -#define HARDWARE_VERSION 20 //硬件版本 +#define SOFTWARE_VERSION 11 //杞欢鐗堟湰 +#define HARDWARE_VERSION 20 //纭欢鐗堟湰 AppDetect_t App; @@ -290,25 +290,25 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ App.LeftRunFalg = false; App.RightRunFalg = false; App.CentreRunFalg = false; - if(((lu_ad[0] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT)//判断中间操作 + if(((lu_ad[0] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT)//鍒ゆ柇涓棿鎿嶄綔 && (ru_ad[0] < App.ADTrack.RightUp_Org_AdZero-CENTRE_VPT) && (lu_ad[1] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT) && (ru_ad[1] < App.ADTrack.RightUp_Org_AdZero-CENTRE_VPT) && (lu_ad[2] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT) && (ru_ad[2] < App.ADTrack.RightUp_Org_AdZero-CENTRE_VPT) - && (ll_ad[0] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT)//判断中间操作 + && (ll_ad[0] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT)//鍒ゆ柇涓棿鎿嶄綔 && (rl_ad[0] > App.ADTrack.RightLow_Org_AdZero+CENTRE_VPT) && (ll_ad[1] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT) && (rl_ad[1] > App.ADTrack.RightLow_Org_AdZero+CENTRE_VPT) && (ll_ad[2] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT) && (rl_ad[2] > App.ADTrack.RightLow_Org_AdZero+CENTRE_VPT)) - || ((lu_ad[0] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT)//判断中间操作 + || ((lu_ad[0] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT)//鍒ゆ柇涓棿鎿嶄綔 && (ru_ad[0] > App.ADTrack.RightUp_Org_AdZero+CENTRE_VPT) && (lu_ad[1] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT) && (ru_ad[1] > App.ADTrack.RightUp_Org_AdZero+CENTRE_VPT) && (lu_ad[2] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT) && (ru_ad[2] > App.ADTrack.RightUp_Org_AdZero+CENTRE_VPT) - && (ll_ad[0] < App.ADTrack.LeftLow_Org_AdZero-CENTRE_VPT)//判断中间操作 + && (ll_ad[0] < App.ADTrack.LeftLow_Org_AdZero-CENTRE_VPT)//鍒ゆ柇涓棿鎿嶄綔 && (rl_ad[0] < App.ADTrack.RightLow_Org_AdZero-CENTRE_VPT) && (ll_ad[1] < App.ADTrack.LeftLow_Org_AdZero-CENTRE_VPT) && (rl_ad[1] < App.ADTrack.RightLow_Org_AdZero-CENTRE_VPT) @@ -318,10 +318,10 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ { App.CentreRunFalg = true; App.CentCollDelay1mSCnt = CENT_TIME_MS; - if(LeftDiff > RightDiff)//判断偏左 + if(LeftDiff > RightDiff)//鍒ゆ柇鍋忓乏 { App.LeftRunFalg = true; - if(((Olu_diff1+Oru_diff1) > (App.ADTrack.Stop_VPT))//判断上拉 + if(((Olu_diff1+Oru_diff1) > (App.ADTrack.Stop_VPT))//鍒ゆ柇涓婃媺 && ((Olu_diff2+Oru_diff2) > (App.ADTrack.Stop_VPT)) && ((Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT)) && ((Oll_diff1+Orl_diff1) < -(App.ADTrack.Stop_VPT)) @@ -329,7 +329,7 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ && ((Oll_diff3+Orl_diff3) < -(App.ADTrack.Stop_VPT)) ) { -// if(App.CaliZeroFlag == true)//判断是否校零 +// if(App.CaliZeroFlag == true)//鍒ゆ柇鏄惁鏍¢浂 { if(App.MotorPara.Current_height < 1195) { @@ -343,7 +343,7 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ } } } - else if(((Olu_diff1+Oru_diff1) < -(App.ADTrack.Stop_VPT))//判断下拉 + else if(((Olu_diff1+Oru_diff1) < -(App.ADTrack.Stop_VPT))//鍒ゆ柇涓嬫媺 && ((Olu_diff2+Oru_diff2) < -(App.ADTrack.Stop_VPT)) && ((Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT)) && ((Oll_diff1+Orl_diff1) > (App.ADTrack.Stop_VPT)) @@ -351,7 +351,7 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ && ((Oll_diff3+Orl_diff3) > (App.ADTrack.Stop_VPT)) ) { -// if(App.CaliZeroFlag == true)//判断是否校零 +// if(App.CaliZeroFlag == true)//鍒ゆ柇鏄惁鏍¢浂 { if(App.MotorPara.Current_height > 725) { @@ -366,10 +366,10 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ } } } - else if(RightDiff > LeftDiff)//判断偏右 + else if(RightDiff > LeftDiff)//鍒ゆ柇鍋忓彸 { App.RightRunFalg = true; - if(((Olu_diff1+Oru_diff1) > (App.ADTrack.Stop_VPT))//判断上拉 + if(((Olu_diff1+Oru_diff1) > (App.ADTrack.Stop_VPT))//鍒ゆ柇涓婃媺 && ((Olu_diff2+Oru_diff2) > (App.ADTrack.Stop_VPT)) && ((Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT)) && ((Oll_diff1+Orl_diff1) < -(App.ADTrack.Stop_VPT)) @@ -377,7 +377,7 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ && ((Oll_diff3+Orl_diff3) < -(App.ADTrack.Stop_VPT)) ) { -// if(App.CaliZeroFlag == true)//判断是否校零 +// if(App.CaliZeroFlag == true)//鍒ゆ柇鏄惁鏍¢浂 { if(App.MotorPara.Current_height < 1195) { @@ -391,7 +391,7 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ } } } - else if(((Olu_diff1+Oru_diff1) < -(App.ADTrack.Stop_VPT))//判断下拉 + else if(((Olu_diff1+Oru_diff1) < -(App.ADTrack.Stop_VPT))//鍒ゆ柇涓嬫媺 && ((Olu_diff2+Oru_diff2) < -(App.ADTrack.Stop_VPT)) && ((Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT)) && ((Oll_diff1+Orl_diff1) > (App.ADTrack.Stop_VPT)) @@ -399,7 +399,7 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ && ((Oll_diff3+Orl_diff3) > (App.ADTrack.Stop_VPT)) ) { -// if(App.CaliZeroFlag == true)//判断是否校零 +// if(App.CaliZeroFlag == true)//鍒ゆ柇鏄惁鏍¢浂 { if(App.MotorPara.Current_height > 725) { @@ -415,17 +415,17 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ } } } - else if((LeftSlopeSum > RightSlopeSum && LeftDiffSum > RightDiffSum && App.CentCollDelay1mSCnt <= 0))//判断左边操作 + else if((LeftSlopeSum > RightSlopeSum && LeftDiffSum > RightDiffSum && App.CentCollDelay1mSCnt <= 0))//鍒ゆ柇宸﹁竟鎿嶄綔 { App.LeftRunFalg = true; - if((Olu_diff1 >= (App.ADTrack.LeftUpVPT*5/6)) //通过差值判断上下拉方向 + if((Olu_diff1 >= (App.ADTrack.LeftUpVPT*5/6)) //閫氳繃宸煎垽鏂笂涓嬫媺鏂瑰悜 && (Olu_diff2 >= (App.ADTrack.LeftUpVPT*5/6)) && (Olu_diff3 >= (App.ADTrack.LeftUpVPT*5/6)) && (Oll_diff1 <= -(App.ADTrack.LeftLowVPT*5/6)) && (Oll_diff2 <= -(App.ADTrack.LeftLowVPT*5/6)) && (Oll_diff3 <= -(App.ADTrack.LeftLowVPT*5/6))) { - if(((App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT)//判断是否不是正面压 + if(((App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT)//鍒ゆ柇鏄惁涓嶆槸姝i潰鍘 && (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT) && (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT) && (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT) @@ -433,9 +433,9 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ && (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT)) ) { -// if(App.CaliZeroFlag == true)//判断是否校零 +// if(App.CaliZeroFlag == true)//鍒ゆ柇鏄惁鏍¢浂 { - if((abs(Olu_diff1) > abs(Oru_diff1) * SHIELD_VPT)//判断是否不是侧面推拉 + if((abs(Olu_diff1) > abs(Oru_diff1) * SHIELD_VPT)//鍒ゆ柇鏄惁涓嶆槸渚ч潰鎺ㄦ媺 && (abs(Olu_diff2) > abs(Oru_diff2) * SHIELD_VPT) && (abs(Olu_diff3) > abs(Oru_diff3) * SHIELD_VPT) && (abs(Oll_diff1) > abs(Orl_diff1) * SHIELD_VPT) @@ -457,7 +457,7 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ } } } - else if(((Olu_diff1 <= -(App.ADTrack.LeftUpVPT*5/6))//通过差值判断上下拉方向 + else if(((Olu_diff1 <= -(App.ADTrack.LeftUpVPT*5/6))//閫氳繃宸煎垽鏂笂涓嬫媺鏂瑰悜 && (Olu_diff2 <= -(App.ADTrack.LeftUpVPT*5/6)) && (Olu_diff3 <= -(App.ADTrack.LeftUpVPT*5/6)) && (Oll_diff1 >= (App.ADTrack.LeftLowVPT*5/6)) @@ -465,7 +465,7 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ && (Oll_diff3 >= (App.ADTrack.LeftLowVPT*5/6))) ) { - if(((App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压 + if(((App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //鍒ゆ柇鏄惁涓嶆槸姝i潰鍘 && (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT) && (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT) && (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT) @@ -473,9 +473,9 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ && (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT)) ) { -// if(App.CaliZeroFlag == true)//判断是否校零 +// if(App.CaliZeroFlag == true)//鍒ゆ柇鏄惁鏍¢浂 { - if((abs(Olu_diff1) > abs(Oru_diff1) * SHIELD_VPT)//判断是否不是侧面推拉 + if((abs(Olu_diff1) > abs(Oru_diff1) * SHIELD_VPT)//鍒ゆ柇鏄惁涓嶆槸渚ч潰鎺ㄦ媺 && (abs(Olu_diff2) > abs(Oru_diff2) * SHIELD_VPT) && (abs(Olu_diff3) > abs(Oru_diff3) * SHIELD_VPT) && (abs(Oll_diff1) > abs(Orl_diff1) * SHIELD_VPT) @@ -498,17 +498,17 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ } } } - else if(LeftSlopeSum < RightSlopeSum && LeftDiffSum < RightDiffSum && App.CentCollDelay1mSCnt <= 0)//判断右边操作 + else if(LeftSlopeSum < RightSlopeSum && LeftDiffSum < RightDiffSum && App.CentCollDelay1mSCnt <= 0)//鍒ゆ柇鍙宠竟鎿嶄綔 { App.RightRunFalg = true; - if((Oru_diff1 >= (App.ADTrack.RightUpVPT*5/6)) //通过差值判断上下拉方向 + if((Oru_diff1 >= (App.ADTrack.RightUpVPT*5/6)) //閫氳繃宸煎垽鏂笂涓嬫媺鏂瑰悜 && (Oru_diff2 >= (App.ADTrack.RightUpVPT*5/6)) && (Oru_diff3 >= (App.ADTrack.RightUpVPT*5/6)) && (Orl_diff1 <= -(App.ADTrack.RightLowVPT*5/6)) && (Orl_diff2 <= -(App.ADTrack.RightLowVPT*5/6)) && (Orl_diff3 <= -(App.ADTrack.RightLowVPT*5/6))) { - if(((App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压 + if(((App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //鍒ゆ柇鏄惁涓嶆槸姝i潰鍘 && (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT) && (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT) && (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT) @@ -516,9 +516,9 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ && (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT)) ) { -// if(App.CaliZeroFlag == true)//判断是否校零 +// if(App.CaliZeroFlag == true)//鍒ゆ柇鏄惁鏍¢浂 { - if((abs(Oru_diff1) > abs(Olu_diff1) * SHIELD_VPT)//判断是否不是侧面推拉 + if((abs(Oru_diff1) > abs(Olu_diff1) * SHIELD_VPT)//鍒ゆ柇鏄惁涓嶆槸渚ч潰鎺ㄦ媺 && (abs(Oru_diff2) > abs(Olu_diff2) * SHIELD_VPT) && (abs(Oru_diff3) > abs(Olu_diff3) * SHIELD_VPT) && (abs(Orl_diff1) > abs(Oll_diff1) * SHIELD_VPT) @@ -540,14 +540,14 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ } } } - else if((Oru_diff1 <= -(App.ADTrack.RightUpVPT*5/6)) //通过差值判断上下拉方向 + else if((Oru_diff1 <= -(App.ADTrack.RightUpVPT*5/6)) //閫氳繃宸煎垽鏂笂涓嬫媺鏂瑰悜 && (Oru_diff2 <= -(App.ADTrack.RightUpVPT*5/6)) && (Oru_diff3 <= -(App.ADTrack.RightUpVPT*5/6)) && (Orl_diff1 >= (App.ADTrack.RightLowVPT*5/6)) && (Orl_diff2 >= (App.ADTrack.RightLowVPT*5/6)) && (Orl_diff3 >= (App.ADTrack.RightLowVPT*5/6))) { - if(((App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压 + if(((App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //鍒ゆ柇鏄惁涓嶆槸姝i潰鍘 && (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT) && (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT) && (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT) @@ -555,9 +555,9 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_ && (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT)) ) { -// if(App.CaliZeroFlag == true)//判断是否校零 +// if(App.CaliZeroFlag == true)//鍒ゆ柇鏄惁鏍¢浂 { - if((abs(Oru_diff1) > abs(Olu_diff1) * SHIELD_VPT)//判断是否不是侧面推拉 + if((abs(Oru_diff1) > abs(Olu_diff1) * SHIELD_VPT)//鍒ゆ柇鏄惁涓嶆槸渚ч潰鎺ㄦ媺 && (abs(Oru_diff2) > abs(Olu_diff2) * SHIELD_VPT) && (abs(Oru_diff3) > abs(Olu_diff3) * SHIELD_VPT) && (abs(Orl_diff1) > abs(Oll_diff1) * SHIELD_VPT) @@ -821,13 +821,13 @@ static void AppInit(void) READ_APP_PARA((uint32_t *)&App.Para); if(App.Para.FactoryFlag != 0x00){ App.Para.FactoryFlag = 0x00; - /*参数初始化*/ - App.Para.Layout.ControlLevel = LEVEL_3;//出厂默认等级3 + /*鍙傛暟鍒濆鍖*/ + App.Para.Layout.ControlLevel = LEVEL_3;//鍑哄巶榛樿绛夌骇3 App.Para.Layout.DBGWaveOut = false; SAVE_APP_PARA((uint32_t *)&App.Para); } if(App.Para.Layout.ControlLevel > 5 || App.Para.Layout.ControlLevel < 1){ - App.Para.Layout.ControlLevel = LEVEL_3;//出厂默认等级3 + App.Para.Layout.ControlLevel = LEVEL_3;//鍑哄巶榛樿绛夌骇3 SAVE_APP_PARA((uint32_t *)&App.Para); } DBG_LOG("\r\n\r\n"); @@ -852,7 +852,7 @@ static void AppInit(void) App.Status = APP_STATUS_START_BEEP; App.MotorPara.InitialFlag = false; App.RStatus = READ_STATUS_START; - GradeControl(App.Para.Layout.ControlLevel);//等级控制 + GradeControl(App.Para.Layout.ControlLevel);//绛夌骇鎺у埗 App.WaitFlag = false; } @@ -1226,10 +1226,10 @@ int main(void) } } /***************************************************************************************** -* 函数名称: SysTick_IrqHandler -* 功能描述: 系统滴答中断 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: SysTick_IrqHandler +* 鍔熻兘鎻忚堪: 绯荤粺婊寸瓟涓柇 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void SysTick_IrqHandler(void) { @@ -1246,10 +1246,10 @@ void SysTick_IrqHandler(void) } /***************************************************************************************** -* 函数名称: DBG_RxPinIntCallBack -* 功能描述: DBG接收中断回调函数 -* 参 数: 无 -* 返 回 值: 无 +* 鍑芥暟鍚嶇О: DBG_RxPinIntCallBack +* 鍔熻兘鎻忚堪: DBG鎺ユ敹涓柇鍥炶皟鍑芥暟 +* 鍙 鏁: 鏃 +* 杩 鍥 鍊: 鏃 *****************************************************************************************/ void DBG_RxPinIntCallBack(void) { @@ -1259,17 +1259,17 @@ void DBG_RxPinIntCallBack(void) #if(USE_USART3 == 1) -// 定义函数Usart3RxIrqCallback,用于处理串口接收中断 +// 瀹氫箟鍑芥暟Usart3RxIrqCallback锛岀敤浜庡鐞嗕覆鍙f帴鏀朵腑鏂 void Usart3RxIrqCallback(void) { - // 如果1分钟超时计数器为0,则清空RxLen + // 濡傛灉1鍒嗛挓瓒呮椂璁℃暟鍣ㄤ负0锛屽垯娓呯┖RxLen if(App.Uart3RxTimeOut1mSCnt == 0) { App.RxUart3Data.HeaderFrame = false; App.RxUart3Data.RxLen = 0; } App.Uart3RxTimeOut1mSCnt = 5; - // 读取串口接收到的数据 + // 璇诲彇涓插彛鎺ユ敹鍒扮殑鏁版嵁 uint8_t Data = Uart3Rec(); if(App.RxUart3Data.HeaderFrame == false) { @@ -1293,7 +1293,7 @@ void Usart3RxIrqCallback(void) // App.RxUart3Data.HeaderFrame = false; // return; // } - // 如果RxLen小于128,则将数据添加到RxBuff中 + // 濡傛灉RxLen灏忎簬128锛屽垯灏嗘暟鎹坊鍔犲埌RxBuff涓 if(App.RxUart3Data.RxLen < 128) { App.RxUart3Data.RxBuff[App.RxUart3Data.RxLen++] = Data; } @@ -1312,7 +1312,7 @@ void Usart3RxIrqCallback(void) App.MotorPara.Current_height = h; } if(App.MotorPara.InitialFlag == true && h >=720 && h <= 1200) - {//缓存每个高度点对于零点应力的差值,对不同高度点的应力进行补偿 + {//缂撳瓨姣忎釜楂樺害鐐瑰浜庨浂鐐瑰簲鍔涚殑宸硷紝瀵逛笉鍚岄珮搴︾偣鐨勫簲鍔涜繘琛岃ˉ鍋 if(App.MotorPara.LU_HeightStress[(App.MotorPara.Current_height)-720] == 0 || App.MotorPara.LL_HeightStress[(App.MotorPara.Current_height)-720] == 0 || App.MotorPara.RU_HeightStress[(App.MotorPara.Current_height)-720] == 0 diff --git a/driver/inc/hc32f460_dcu.h b/driver/inc/hc32f460_dcu.h index 21bce80..9ed3942 100644 --- a/driver/inc/hc32f460_dcu.h +++ b/driver/inc/hc32f460_dcu.h @@ -117,7 +117,7 @@ typedef enum en_dcu_int_win_mode { DcuIntInvalid = 0u, ///< DCU don't occur interrupt DcuWinIntInvalid = 1u, ///< DCU window interrupt is invalid. - DcuInsideWinCmpInt = 2u, ///< DCU occur interrupt when DATA2 ≤ DATA0 ≤ DATA2 + DcuInsideWinCmpInt = 2u, ///< DCU occur interrupt when DATA2 鈮 DATA0 鈮 DATA2 DcuOutsideWinCmpInt = 3u, ///< DCU occur interrupt when DATA0 > DATA1 or DATA0 < DATA2 } en_dcu_int_win_mode_t; diff --git a/driver/inc/hc32f460_icg.h b/driver/inc/hc32f460_icg.h index 0dbae24..9ccaf52 100644 --- a/driver/inc/hc32f460_icg.h +++ b/driver/inc/hc32f460_icg.h @@ -267,7 +267,7 @@ extern "C" /*!< SWDT register config */ #define ICG0_SWDT_AUTS (SWDT_AUTO_START_AFTER_RESET) #define ICG0_SWDT_ITS (SWDT_RESET_REQUEST) -#define ICG0_SWDT_PERI (SWDT_COUNT_UNDERFLOW_CYCLE_256) //复位时间0.8秒 +#define ICG0_SWDT_PERI (SWDT_COUNT_UNDERFLOW_CYCLE_256) //澶嶄綅鏃堕棿0.8绉 #define ICG0_SWDT_CKS (SWDT_COUNT_SWDTCLK_DIV32) #define ICG0_SWDT_WDPT (SWDT_0To100PCT) #define ICG0_SWDT_SLTPOFF (SWDT_SPECIAL_MODE_COUNT_CONTINUE)