4 Commits

25 changed files with 1471 additions and 1370 deletions
+30 -53
View File
@@ -145,7 +145,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>CMSIS_AGDI</Key> <Key>CMSIS_AGDI</Key>
<Name>-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)</Name> <Name>-X"Any" -UAny -O206 -S9 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO31 -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)</Name>
</SetRegEntry> </SetRegEntry>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@@ -153,24 +153,7 @@
<Name>UL2CM3(-S0 -C0 -P0 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K -FS00 -FL080000 -FF1HC32F460_otp -FS13000C00 -FL13FC -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM))</Name> <Name>UL2CM3(-S0 -C0 -P0 -FD1FFF8000 -FC1000 -FN2 -FF0HC32F460_512K -FS00 -FL080000 -FF1HC32F460_otp -FS13000C00 -FL13FC -FP0($$Device:HC32F460JETA$FlashARM\HC32F460_512K.FLM) -FP1($$Device:HC32F460JETA$FlashARM\HC32F460_otp.FLM))</Name>
</SetRegEntry> </SetRegEntry>
</TargetDriverDllRegistry> </TargetDriverDllRegistry>
<Breakpoint> <Breakpoint/>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>504</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>32426</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>..\source\User\Src\main.c</Filename>
<ExecCommand></ExecCommand>
<Expression>\\BombSensor\../source/User/Src/main.c\504</Expression>
</Bp>
</Breakpoint>
<WatchWindow1> <WatchWindow1>
<Ww> <Ww>
<count>0</count> <count>0</count>
@@ -280,50 +263,30 @@
<Ww> <Ww>
<count>21</count> <count>21</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>App.aaa,0x0A</ItemText> <ItemText>App.ADTrack.LeftUpVPT,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>22</count> <count>22</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>App.bbb,0x0A</ItemText> <ItemText>App.ADTrack.LeftLowVPT,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>23</count> <count>23</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>App.ccc,0x0A</ItemText> <ItemText>App.ADTrack.RightUpVPT,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>24</count> <count>24</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>App.ddd,0x0A</ItemText> <ItemText>App.ADTrack.RightLowVPT,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>25</count> <count>25</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>App.ADTrack.LeftUpVPT,0x0A</ItemText>
</Ww>
<Ww>
<count>26</count>
<WinNumber>1</WinNumber>
<ItemText>App.ADTrack.LeftLowVPT,0x0A</ItemText>
</Ww>
<Ww>
<count>27</count>
<WinNumber>1</WinNumber>
<ItemText>App.ADTrack.RightUpVPT,0x0A</ItemText>
</Ww>
<Ww>
<count>28</count>
<WinNumber>1</WinNumber>
<ItemText>App.ADTrack.RightLowVPT,0x0A</ItemText>
</Ww>
<Ww>
<count>29</count>
<WinNumber>1</WinNumber>
<ItemText>App.ADTrack.Stop_VPT,0x0A</ItemText> <ItemText>App.ADTrack.Stop_VPT,0x0A</ItemText>
</Ww> </Ww>
<Ww> <Ww>
<count>30</count> <count>26</count>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<ItemText>App.MotorPara.Current_height,0x0A</ItemText> <ItemText>App.MotorPara.Current_height,0x0A</ItemText>
</Ww> </Ww>
@@ -406,7 +369,7 @@
<DebugFlag> <DebugFlag>
<trace>0</trace> <trace>0</trace>
<periodic>1</periodic> <periodic>1</periodic>
<aLwin>0</aLwin> <aLwin>1</aLwin>
<aCover>0</aCover> <aCover>0</aCover>
<aSer1>0</aSer1> <aSer1>0</aSer1>
<aSer2>0</aSer2> <aSer2>0</aSer2>
@@ -447,7 +410,7 @@
<EnableFlashSeq>1</EnableFlashSeq> <EnableFlashSeq>1</EnableFlashSeq>
<EnableLog>0</EnableLog> <EnableLog>0</EnableLog>
<Protocol>2</Protocol> <Protocol>2</Protocol>
<DbgClock>1000000</DbgClock> <DbgClock>5000000</DbgClock>
</DebugDescription> </DebugDescription>
</TargetOption> </TargetOption>
</Target> </Target>
@@ -461,8 +424,8 @@
<OPTTT> <OPTTT>
<gFlags>0</gFlags> <gFlags>0</gFlags>
<BeepAtEnd>1</BeepAtEnd> <BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim> <RunSim>0</RunSim>
<RunTarget>0</RunTarget> <RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc> <RunAbUc>0</RunAbUc>
</OPTTT> </OPTTT>
<OPTHX> <OPTHX>
@@ -510,8 +473,8 @@
</OPTFL> </OPTFL>
<CpuCode>255</CpuCode> <CpuCode>255</CpuCode>
<DebugOpt> <DebugOpt>
<uSim>1</uSim> <uSim>0</uSim>
<uTrg>0</uTrg> <uTrg>1</uTrg>
<sLdApp>1</sLdApp> <sLdApp>1</sLdApp>
<sGomain>1</sGomain> <sGomain>1</sGomain>
<sRbreak>1</sRbreak> <sRbreak>1</sRbreak>
@@ -520,7 +483,7 @@
<sRfunc>1</sRfunc> <sRfunc>1</sRfunc>
<sRbox>1</sRbox> <sRbox>1</sRbox>
<tLdApp>1</tLdApp> <tLdApp>1</tLdApp>
<tGomain>0</tGomain> <tGomain>1</tGomain>
<tRbreak>1</tRbreak> <tRbreak>1</tRbreak>
<tRwatch>1</tRwatch> <tRwatch>1</tRwatch>
<tRmem>1</tRmem> <tRmem>1</tRmem>
@@ -534,7 +497,7 @@
<bEvRecOn>1</bEvRecOn> <bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf> <bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf> <bTchkAxf>0</bTchkAxf>
<nTsel>-1</nTsel> <nTsel>0</nTsel>
<sDll></sDll> <sDll></sDll>
<sDllPa></sDllPa> <sDllPa></sDllPa>
<sDlgDll></sDlgDll> <sDlgDll></sDlgDll>
@@ -545,8 +508,15 @@
<tDlgDll></tDlgDll> <tDlgDll></tDlgDll>
<tDlgPa></tDlgPa> <tDlgPa></tDlgPa>
<tIfile></tIfile> <tIfile></tIfile>
<pMon></pMon> <pMon>BIN\UL2CM3.DLL</pMon>
</DebugOpt> </DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>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))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/> <Breakpoint/>
<Tracepoint> <Tracepoint>
<THDelay>0</THDelay> <THDelay>0</THDelay>
@@ -590,6 +560,13 @@
<pszMrulep></pszMrulep> <pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp> <pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp> <pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>1</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>1000000</DbgClock>
</DebugDescription>
</TargetOption> </TargetOption>
</Target> </Target>
+2 -2
View File
@@ -338,7 +338,7 @@
<v6WtE>0</v6WtE> <v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti> <v6Rtti>0</v6Rtti>
<VariousControls> <VariousControls>
<MiscControls></MiscControls> <MiscControls>--multibyte_chars</MiscControls>
<Define>__DEBUG,HC32F460,USE_DEVICE_DRIVER_LIB,JEUA</Define> <Define>__DEBUG,HC32F460,USE_DEVICE_DRIVER_LIB,JEUA</Define>
<Undefine></Undefine> <Undefine></Undefine>
<IncludePath>..\..\..\mcu\common;..\source\User\Inc;..\source\User\Src;..\..\..\driver\src;..\..\..\driver\inc;..\source\Module\CS1237;..\source\Module\dc_motor;..\source\Module\BeepAndLed</IncludePath> <IncludePath>..\..\..\mcu\common;..\source\User\Inc;..\source\User\Src;..\..\..\driver\src;..\..\..\driver\inc;..\source\Module\CS1237;..\source\Module\dc_motor;..\source\Module\BeepAndLed</IncludePath>
@@ -1026,7 +1026,7 @@
<v6WtE>0</v6WtE> <v6WtE>0</v6WtE>
<v6Rtti>0</v6Rtti> <v6Rtti>0</v6Rtti>
<VariousControls> <VariousControls>
<MiscControls>--diag_suppress=186,66</MiscControls> <MiscControls>--diag_suppress=186,66 --multibyte_chars</MiscControls>
<Define>HC32F460,USE_DEVICE_DRIVER_LIB</Define> <Define>HC32F460,USE_DEVICE_DRIVER_LIB</Define>
<Undefine></Undefine> <Undefine></Undefine>
<IncludePath>..\..\..\..\..\mcu\common;..\source;..\..\..\..\..\driver\inc;..\..\..\..\..\bsp\ev_hc32f460_lqfp100_v2</IncludePath> <IncludePath>..\..\..\..\..\mcu\common;..\source;..\..\..\..\..\driver\inc;..\..\..\..\..\bsp\ev_hc32f460_lqfp100_v2</IncludePath>
@@ -3,7 +3,7 @@
* Auto generated Run-Time-Environment Configuration File * Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! *** * *** Do not modify ! ***
* *
* Project: 'BombSensor' * Project: 'HC32F460'
* Target: 'Release' * Target: 'Release'
*/ */
@@ -1,8 +1,8 @@
#include "BeepAndLed.h" #include "BeepAndLed.h"
#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 = { static BeeperCtrl_t g_beeper = {
.state = BEEPER_STATE_IDLE, .state = BEEPER_STATE_IDLE,
.is_active = 0, .is_active = 0,
@@ -12,28 +12,28 @@ static BeeperCtrl_t g_beeper = {
.off_ms = 0 .off_ms = 0
}; };
// 延时计数器(供滴答定时器使用) // 延时计数器(供滴答定时器使用)
uint32_t BeepAndLedCollDelay1mSCnt = 0; uint32_t BeepAndLedCollDelay1mSCnt = 0;
// ========== 硬件控制函数(根据您的实际宏定义修改)========== // ========== 硬件控制函数(根据您的实际宏定义修改)==========
static void Beeper_HW_On(void) static void Beeper_HW_On(void)
{ {
BUZZER_ON(); // 请替换为您的实际宏 BUZZER_ON(); // 请替换为您的实际宏
LED_GREEN_OFF(); // 请替换为您的实际宏 LED_GREEN_OFF(); // 请替换为您的实际宏
LED_RED_ON(); // 请替换为您的实际宏 LED_RED_ON(); // 请替换为您的实际宏
} }
static void Beeper_HW_Off(void) static void Beeper_HW_Off(void)
{ {
BUZZER_OFF(); // 请替换为您的实际宏 BUZZER_OFF(); // 请替换为您的实际宏
LED_GREEN_ON(); // 请替换为您的实际宏 LED_GREEN_ON(); // 请替换为您的实际宏
LED_RED_OFF(); // 请替换为您的实际宏 LED_RED_OFF(); // 请替换为您的实际宏
} }
// ========== 实现函数 ========== // ========== 实现函数 ==========
/** /**
* @brief 蜂鸣器初始化 * @brief 蜂鸣器初始化
*/ */
void Beeper_Init(void) void Beeper_Init(void)
{ {
@@ -41,47 +41,47 @@ void Beeper_Init(void)
} }
/** /**
* @brief 开始鸣响(非阻塞) * @brief 开始鸣响(非阻塞)
* @param on_ms 鸣响时间(ms) * @param on_ms 鸣响时间(ms)
* @param off_ms 间隔时间(ms) * @param off_ms 间隔时间(ms)
* @param repeat 重复次数(0表示无效) * @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) void Beeper_Start(uint16_t on_ms, uint16_t off_ms, uint8_t repeat)
{ {
if (repeat == 0) return; if (repeat == 0) return;
// 如果已经在鸣响,可以选择停止并重新开始 // 如果已经在鸣响,可以选择停止并重新开始
if (g_beeper.is_active) { if (g_beeper.is_active) {
Beeper_Stop(); // 停止当前,重新开始新的 Beeper_Stop(); // 停止当前,重新开始新的
// return; // 或者选择忽略新请求 // return; // 或者选择忽略新请求
} }
// 保存参数 // 保存参数
g_beeper.on_ms = on_ms; g_beeper.on_ms = on_ms;
g_beeper.off_ms = off_ms; g_beeper.off_ms = off_ms;
g_beeper.repeat = repeat; g_beeper.repeat = repeat;
g_beeper.repeat_done = 0; g_beeper.repeat_done = 0;
g_beeper.is_active = 1; g_beeper.is_active = 1;
// 开启蜂鸣器 // 开启蜂鸣器
Beeper_HW_On(); Beeper_HW_On();
// 设置延时计数器(开启状态延时) // 设置延时计数器(开启状态延时)
BeepAndLedCollDelay1mSCnt = on_ms; BeepAndLedCollDelay1mSCnt = on_ms;
g_beeper.state = BEEPER_STATE_ON; g_beeper.state = BEEPER_STATE_ON;
} }
/** /**
* @brief 停止鸣响 * @brief 停止鸣响
*/ */
void Beeper_Stop(void) void Beeper_Stop(void)
{ {
// 关闭硬件 // 关闭硬件
Beeper_HW_Off(); Beeper_HW_Off();
// 重置状态机 // 重置状态机
g_beeper.state = BEEPER_STATE_IDLE; g_beeper.state = BEEPER_STATE_IDLE;
g_beeper.is_active = 0; g_beeper.is_active = 0;
g_beeper.repeat = 0; g_beeper.repeat = 0;
@@ -90,8 +90,8 @@ void Beeper_Stop(void)
} }
/** /**
* @brief 蜂鸣器状态机更新(放在main.c的while(1)中循环调用) * @brief 蜂鸣器状态机更新(放在main.c的while(1)中循环调用)
* @note 必须在滴答定时器更新BeepAndLedCollDelay1mSCnt后才能正确工作 * @note 必须在滴答定时器更新BeepAndLedCollDelay1mSCnt后才能正确工作
*/ */
void BeeperLoopHandler(void) void BeeperLoopHandler(void)
{ {
@@ -101,20 +101,20 @@ void BeeperLoopHandler(void)
switch (g_beeper.state) { switch (g_beeper.state) {
case BEEPER_STATE_ON: case BEEPER_STATE_ON:
// 蜂鸣器开启状态,等待计数器归零 // 蜂鸣器开启状态,等待计数器归零
if (BeepAndLedCollDelay1mSCnt == 0) { if (BeepAndLedCollDelay1mSCnt == 0) {
// 延时结束,关闭蜂鸣器 // 延时结束,关闭蜂鸣器
Beeper_HW_Off(); Beeper_HW_Off();
g_beeper.repeat_done++; g_beeper.repeat_done++;
// 检查是否完成所有重复 // 检查是否完成所有重复
if (g_beeper.repeat_done >= g_beeper.repeat) { if (g_beeper.repeat_done >= g_beeper.repeat) {
// 全部完成,结束 // 全部完成,结束
g_beeper.is_active = 0; g_beeper.is_active = 0;
g_beeper.state = BEEPER_STATE_IDLE; g_beeper.state = BEEPER_STATE_IDLE;
} else { } else {
// 还有下次,进入等待状态 // 还有下次,进入等待状态
BeepAndLedCollDelay1mSCnt = g_beeper.off_ms; BeepAndLedCollDelay1mSCnt = g_beeper.off_ms;
g_beeper.state = BEEPER_STATE_OFF; g_beeper.state = BEEPER_STATE_OFF;
} }
@@ -122,9 +122,9 @@ void BeeperLoopHandler(void)
break; break;
case BEEPER_STATE_OFF: case BEEPER_STATE_OFF:
// 蜂鸣器关闭等待状态(间隔时间) // 蜂鸣器关闭等待状态(间隔时间)
if (BeepAndLedCollDelay1mSCnt == 0) { if (BeepAndLedCollDelay1mSCnt == 0) {
// 间隔结束,开启下一次鸣响 // 间隔结束,开启下一次鸣响
Beeper_HW_On(); Beeper_HW_On();
BeepAndLedCollDelay1mSCnt = g_beeper.on_ms; BeepAndLedCollDelay1mSCnt = g_beeper.on_ms;
@@ -140,8 +140,8 @@ void BeeperLoopHandler(void)
} }
/** /**
* @brief 查询是否正在鸣响 * @brief 查询是否正在鸣响
* @return true:正在鸣响, false:空闲 * @return true:正在鸣响, false:空闲
*/ */
bool Beeper_IsPlaying(void) bool Beeper_IsPlaying(void)
{ {
@@ -149,7 +149,7 @@ bool Beeper_IsPlaying(void)
} }
/** /**
* @brief 手动开启蜂鸣器(不计入状态机) * @brief 手动开启蜂鸣器(不计入状态机)
*/ */
void Beeper_On(void) void Beeper_On(void)
{ {
@@ -157,7 +157,7 @@ void Beeper_On(void)
} }
/** /**
* @brief 手动关闭蜂鸣器(不计入状态机) * @brief 手动关闭蜂鸣器(不计入状态机)
*/ */
void Beeper_Off(void) void Beeper_Off(void)
{ {
@@ -165,8 +165,8 @@ void Beeper_Off(void)
} }
/** /**
* @brief 清除延时计数器(由滴答定时器调用) * @brief 清除延时计数器(由滴答定时器调用)
* @note 这个函数放在滴答定时器的1ms中断中调用 * @note 这个函数放在滴答定时器的1ms中断中调用
*/ */
void Beeper_ClearDelay(void) void Beeper_ClearDelay(void)
{ {
@@ -5,35 +5,35 @@
#include <stdbool.h> #include <stdbool.h>
#include "bsp.h" #include "bsp.h"
// ========== 蜂鸣器状态机状态定义 ========== // ========== 蜂鸣器状态机状态定义 ==========
typedef enum { typedef enum {
BEEPER_STATE_IDLE = 0, // 空闲 BEEPER_STATE_IDLE = 0, // 空闲
BEEPER_STATE_ON, // 蜂鸣器开启延时中 BEEPER_STATE_ON, // 蜂鸣器开启延时中
BEEPER_STATE_OFF, // 蜂鸣器关闭延时中 BEEPER_STATE_OFF, // 蜂鸣器关闭延时中
BEEPER_STATE_WAIT // 等待下一次鸣响 BEEPER_STATE_WAIT // 等待下一次鸣响
} BeeperState_t; } BeeperState_t;
// ========== 蜂鸣器控制结构体 ========== // ========== 蜂鸣器控制结构体 ==========
typedef struct { typedef struct {
BeeperState_t state; // 当前状态 BeeperState_t state; // 当前状态
uint16_t on_ms; // 鸣响时间(ms) uint16_t on_ms; // 鸣响时间(ms)
uint16_t off_ms; // 间隔时间(ms) uint16_t off_ms; // 间隔时间(ms)
uint8_t repeat; // 重复次数 uint8_t repeat; // 重复次数
uint8_t repeat_done; // 已完成次数 uint8_t repeat_done; // 已完成次数
uint8_t is_active; // 是否激活 uint8_t is_active; // 是否激活
} BeeperCtrl_t; } BeeperCtrl_t;
// ========== 外部可访问变量 ========== // ========== 外部可访问变量 ==========
extern uint32_t BeepAndLedCollDelay1mSCnt; // 延时计数器(在beepAndLed.c中定义) extern uint32_t BeepAndLedCollDelay1mSCnt; // 延时计数器(在beepAndLed.c中定义)
// ========== API函数 ========== // ========== API函数 ==========
void Beeper_Init(void); // 初始化 void Beeper_Init(void); // 初始化
void Beeper_Start(uint16_t on_ms, uint16_t off_ms, uint8_t repeat); // 开始鸣响(非阻塞) void Beeper_Start(uint16_t on_ms, uint16_t off_ms, uint8_t repeat); // 开始鸣响(非阻塞)
void Beeper_Stop(void); // 停止鸣响 void Beeper_Stop(void); // 停止鸣响
void BeeperLoopHandler(void); // 状态机更新(放在while(1)中) void BeeperLoopHandler(void); // 状态机更新(放在while(1)中)
bool Beeper_IsPlaying(void); // 查询是否正在鸣响 bool Beeper_IsPlaying(void); // 查询是否正在鸣响
void Beeper_On(void); // 手动开启蜂鸣器 void Beeper_On(void); // 手动开启蜂鸣器
void Beeper_Off(void); // 手动关闭蜂鸣器 void Beeper_Off(void); // 手动关闭蜂鸣器
void Beeper_ClearDelay(void); // 清除延时计数器(供滴答定时器使用) void Beeper_ClearDelay(void); // 清除延时计数器(供滴答定时器使用)
#endif /* _BEEP_AND_LED_H_ */ #endif /* _BEEP_AND_LED_H_ */
@@ -28,22 +28,22 @@
/*Definition of conversion time corresponding to repeatability setting*/ /*Definition of conversion time corresponding to repeatability setting*/
/* /*
10Hz //建立时间300ms 10Hz //建立时间300ms
40Hz //建立时间75ms 40Hz //建立时间75ms
640Hz //建立时间6.25ms 640Hz //建立时间6.25ms
1280Hz //建立时间3.125ms 1280Hz //建立时间3.125ms
*/ */
#define tCon_10Hz 300 /* ms. */ #define tCon_10Hz 300 /* ms. */
#define tCon_40Hz 75 /* ms. */ #define tCon_40Hz 75 /* ms. */
#define tCon_640Hz 7 /* ms. */ #define tCon_640Hz 7 /* ms. */
#define tCon_1280Hz 4 /* ms. */ #define tCon_1280Hz 4 /* ms. */
#define PORT_A 1 //采集通道A #define PORT_A 1 //采集通道A
//#define PORT_B 1 //采集通道B //#define PORT_B 1 //采集通道B
#define PORT_TEMP 0 //采集温度 #define PORT_TEMP 0 //采集温度
#define PORT_JUMP 0 //内短采集 #define PORT_JUMP 0 //内短采集
#define PACK_NUM 1 //一次采集的数据包数量 #define PACK_NUM 1 //一次采集的数据包数量
#define FILTER_NUM 0 //滤波数 #define FILTER_NUM 0 //滤波数
typedef enum{ typedef enum{
LLCS1237_STATUS_IDLE, LLCS1237_STATUS_IDLE,
@@ -59,10 +59,10 @@ typedef struct{
LeftLowCS1237Status_m Status; LeftLowCS1237Status_m Status;
uint32_t CS1237Delay1mSCnt; uint32_t CS1237Delay1mSCnt;
int32_t AinA_AD;//AINAad数据 int32_t AinA_AD;//AINAad数据
//int32_t AinB_AD;//AINBad数据 //int32_t AinB_AD;//AINBad数据
int32_t Temp_AD;//温度ad数据 int32_t Temp_AD;//温度ad数据
int32_t Jump_AD;//内短ad数据 int32_t Jump_AD;//内短ad数据
} }
LEFTLOW_CS1237Var_t; LEFTLOW_CS1237Var_t;
@@ -30,22 +30,22 @@
/*Definition of conversion time corresponding to repeatability setting*/ /*Definition of conversion time corresponding to repeatability setting*/
/* /*
10Hz //建立时间300ms 10Hz //建立时间300ms
40Hz //建立时间75ms 40Hz //建立时间75ms
640Hz //建立时间6.25ms 640Hz //建立时间6.25ms
1280Hz //建立时间3.125ms 1280Hz //建立时间3.125ms
*/ */
#define tCon_10Hz 300 /* ms. */ #define tCon_10Hz 300 /* ms. */
#define tCon_40Hz 75 /* ms. */ #define tCon_40Hz 75 /* ms. */
#define tCon_640Hz 7 /* ms. */ #define tCon_640Hz 7 /* ms. */
#define tCon_1280Hz 4 /* ms. */ #define tCon_1280Hz 4 /* ms. */
#define PORT_A 1 //采集通道A #define PORT_A 1 //采集通道A
//#define PORT_B 1 //采集通道B //#define PORT_B 1 //采集通道B
#define PORT_TEMP 0 //采集温度 #define PORT_TEMP 0 //采集温度
#define PORT_JUMP 0 //内短采集 #define PORT_JUMP 0 //内短采集
#define PACK_NUM 1 //一次采集的数据包数量 #define PACK_NUM 1 //一次采集的数据包数量
#define FILTER_NUM 0 //滤波数 #define FILTER_NUM 0 //滤波数
typedef enum{ typedef enum{
LUCS1237_STATUS_IDLE, LUCS1237_STATUS_IDLE,
@@ -61,10 +61,10 @@ typedef struct{
LeftUpCS1237Status_m Status; LeftUpCS1237Status_m Status;
uint32_t CS1237Delay1mSCnt; uint32_t CS1237Delay1mSCnt;
int32_t AinA_AD;//AINAad数据 int32_t AinA_AD;//AINAad数据
//int32_t AinB_AD;//AINBad数据 //int32_t AinB_AD;//AINBad数据
int32_t Temp_AD;//温度ad数据 int32_t Temp_AD;//温度ad数据
int32_t Jump_AD;//内短ad数据 int32_t Jump_AD;//内短ad数据
} }
LEFTUP_CS1237Var_t; LEFTUP_CS1237Var_t;
@@ -28,22 +28,22 @@
/*Definition of conversion time corresponding to repeatability setting*/ /*Definition of conversion time corresponding to repeatability setting*/
/* /*
10Hz //建立时间300ms 10Hz //建立时间300ms
40Hz //建立时间75ms 40Hz //建立时间75ms
640Hz //建立时间6.25ms 640Hz //建立时间6.25ms
1280Hz //建立时间3.125ms 1280Hz //建立时间3.125ms
*/ */
#define tCon_10Hz 300 /* ms. */ #define tCon_10Hz 300 /* ms. */
#define tCon_40Hz 75 /* ms. */ #define tCon_40Hz 75 /* ms. */
#define tCon_640Hz 7 /* ms. */ #define tCon_640Hz 7 /* ms. */
#define tCon_1280Hz 4 /* ms. */ #define tCon_1280Hz 4 /* ms. */
#define PORT_A 1 //采集通道A #define PORT_A 1 //采集通道A
//#define PORT_B 1 //采集通道B //#define PORT_B 1 //采集通道B
#define PORT_TEMP 0 //采集温度 #define PORT_TEMP 0 //采集温度
#define PORT_JUMP 0 //内短采集 #define PORT_JUMP 0 //内短采集
#define PACK_NUM 1 //一次采集的数据包数量 #define PACK_NUM 1 //一次采集的数据包数量
#define FILTER_NUM 0 //滤波数 #define FILTER_NUM 0 //滤波数
typedef enum{ typedef enum{
RLCS1237_STATUS_IDLE, RLCS1237_STATUS_IDLE,
@@ -59,10 +59,10 @@ typedef struct{
RightLowCS1237Status_m Status; RightLowCS1237Status_m Status;
uint32_t CS1237Delay1mSCnt; uint32_t CS1237Delay1mSCnt;
int32_t AinA_AD;//AINAad数据 int32_t AinA_AD;//AINAad数据
//int32_t AinB_AD;//AINBad数据 //int32_t AinB_AD;//AINBad数据
int32_t Temp_AD;//温度ad数据 int32_t Temp_AD;//温度ad数据
int32_t Jump_AD;//内短ad数据 int32_t Jump_AD;//内短ad数据
} }
RIGHTLOW_CS1237Var_t; RIGHTLOW_CS1237Var_t;
@@ -30,22 +30,22 @@
/*Definition of conversion time corresponding to repeatability setting*/ /*Definition of conversion time corresponding to repeatability setting*/
/* /*
10Hz //建立时间300ms 10Hz //建立时间300ms
40Hz //建立时间75ms 40Hz //建立时间75ms
640Hz //建立时间6.25ms 640Hz //建立时间6.25ms
1280Hz //建立时间3.125ms 1280Hz //建立时间3.125ms
*/ */
#define tCon_10Hz 300 /* ms. */ #define tCon_10Hz 300 /* ms. */
#define tCon_40Hz 75 /* ms. */ #define tCon_40Hz 75 /* ms. */
#define tCon_640Hz 7 /* ms. */ #define tCon_640Hz 7 /* ms. */
#define tCon_1280Hz 4 /* ms. */ #define tCon_1280Hz 4 /* ms. */
#define PORT_A 1 //采集通道A #define PORT_A 1 //采集通道A
//#define PORT_B 1 //采集通道B //#define PORT_B 1 //采集通道B
#define PORT_TEMP 0 //采集温度 #define PORT_TEMP 0 //采集温度
#define PORT_JUMP 0 //内短采集 #define PORT_JUMP 0 //内短采集
#define PACK_NUM 1 //一次采集的数据包数量 #define PACK_NUM 1 //一次采集的数据包数量
#define FILTER_NUM 0 //滤波数 #define FILTER_NUM 0 //滤波数
typedef enum{ typedef enum{
RUCS1237_STATUS_IDLE, RUCS1237_STATUS_IDLE,
@@ -61,10 +61,10 @@ typedef struct{
RightUpCS1237Status_m Status; RightUpCS1237Status_m Status;
uint32_t CS1237Delay1mSCnt; uint32_t CS1237Delay1mSCnt;
int32_t AinA_AD;//AINAad数据 int32_t AinA_AD;//AINAad数据
//int32_t AinB_AD;//AINBad数据 //int32_t AinB_AD;//AINBad数据
int32_t Temp_AD;//温度ad数据 int32_t Temp_AD;//温度ad数据
int32_t Jump_AD;//内短ad数据 int32_t Jump_AD;//内短ad数据
} }
RIGHTUP_CS1237Var_t; RIGHTUP_CS1237Var_t;
@@ -303,11 +303,11 @@ void Sx1276LoRaInit(void (*RxCallBack)(uint8_t *rBuff, uint8_t rlen))
//SpreadingFactor //SpreadingFactor
if( LoRaPara.SpreadFactor == SX1276_SF_64){ if( LoRaPara.SpreadFactor == SX1276_SF_64){
SX1276LoRaSetNbTrigPeaks(5); SX1276LoRaSetNbTrigPeaks(5);
SX1276LoRaSetLowDatarateOptimize(true); //低数据速率设置 SX1276LoRaSetLowDatarateOptimize(true); //低数据速率设置
} }
else{ else{
SX1276LoRaSetNbTrigPeaks(3); SX1276LoRaSetNbTrigPeaks(3);
SX1276LoRaSetLowDatarateOptimize(false); //低数据速率设置 SX1276LoRaSetLowDatarateOptimize(false); //低数据速率设置
} }
LoRaPara.RegBuff.RegModemConfig2 = (LoRaPara.RegBuff.RegModemConfig2 & RFLR_MODEMCONFIG2_SF_MASK ) | LoRaPara.SpreadFactor; LoRaPara.RegBuff.RegModemConfig2 = (LoRaPara.RegBuff.RegModemConfig2 & RFLR_MODEMCONFIG2_SF_MASK ) | LoRaPara.SpreadFactor;
//PacketCrcOn //PacketCrcOn
@@ -449,8 +449,8 @@ void Sx1276LoRaWakeup(void)
} }
//////////////////////////////////////// ////////////////////////////////////////
//配置本层参数的函数 //配置本层参数的函数
//频道表 //频道表
const uint32_t gdwSx1276ChannelTbl[SX1276_CHANNEL_MAX]={ 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*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, FREQ_CENT-FREQ_DEV*4, FREQ_CENT-FREQ_DEV*3, FREQ_CENT-FREQ_DEV*2, FREQ_CENT-FREQ_DEV*1,
@@ -636,7 +636,7 @@ typedef enum{
SX1276_IH_ON= (1) SX1276_IH_ON= (1)
}Sx1276ImplicitHeaderOnType; }Sx1276ImplicitHeaderOnType;
//可变速率 //可变速率
typedef struct _AutoSfType{ typedef struct _AutoSfType{
Sx1276SpreadFactorType Sf; Sx1276SpreadFactorType Sf;
uint8_t ucRssiMin, ucRssiMax; uint8_t ucRssiMin, ucRssiMax;
@@ -743,13 +743,13 @@ typedef struct {
//Down Link: //Down Link:
//CH0-47:500.3-509.7MHz //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) #if (USE_915MHZ == 1)
//中心频率,不定义则默认为449000000Hz //中心频率,不定义则默认为449000000Hz
#define FREQ_CENT 915000000ul #define FREQ_CENT 915000000ul
//860MHz-1GHz使用PA功放,不定义则默认不使用 //860MHz-1GHz使用PA功放,不定义则默认不使用
//SX127x不定义,HOPERF模块需要定义 //SX127x不定义,HOPERF模块需要定义
#define USE_LORA_860_PA #define USE_LORA_860_PA
#endif #endif
+191 -191
View File
@@ -5,10 +5,10 @@
// 全局变量 // 全局变量
volatile MotorState g_motorState = MOTOR_STOPPED; volatile MotorState g_motorState = MOTOR_STOPPED;
volatile MotorCommand g_motorCmd = MOTOR_CMD_STOP; 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_motorSpeed = 0;
volatile uint16_t g_accelTimer = 0; volatile uint16_t g_accelTimer = 0;
@@ -32,7 +32,7 @@ void DCMOTORDBGOnOff(uint8_t OnOff)
} }
#if(MCU == HC32F460JETA) #if(MCU == HC32F460JETA)
#if(0) //旧版本PCB #if(0) //旧版本PCB
/* Timer4 CNT */ /* Timer4 CNT */
#define TIMER4_UNIT (M4_TMR41) #define TIMER4_UNIT (M4_TMR41)
#define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */ #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) #define TIMER4_PWM_L_PIN (Pin13)
#endif #endif
#if(1) //V2.1版本PCB #if(1) //V2.1版本PCB
/* Timer4 CNT */ /* Timer4 CNT */
#define TIMER4_UNIT (M4_TMR41) #define TIMER4_UNIT (M4_TMR41)
#define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */ #define TIMER4_CNT_CYCLE_VAL (500u) /* Timer4 counter cycle value */
@@ -76,22 +76,22 @@ uint16_t init_adc_val;
uint16_t AdcInitCnt = 0; 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]; uint16_t g_adc_val[ADC_CH_NUM];
extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL]; extern uint16_t m_au16Adc1SaValue[ADC_CH_NUM * ADC_COLL];
/************************************* 第二部分 电压电流温度采集 **********************************************/ /************************************* 第二部分 电压电流温度采集 **********************************************/
/* /*
Rt = Rp *exp(B*(1/T1-1/T2)) Rt = Rp *exp(B*(1/T1-1/T2))
Rt 是热敏电阻在T1温度下的阻值; Rt 是热敏电阻在T1温度下的阻值;
Rp是热敏电阻在T2常温下的标称阻值; Rp是热敏电阻在T2常温下的标称阻值;
exp是e的n次方,e是自然常数,就是自然对数的底数,近似等于 2.7182818; exp是e的n次方,e是自然常数,就是自然对数的底数,近似等于 2.7182818;
B值是热敏电阻的重要参数,教程中用到的热敏电阻B值为3380; B值是热敏电阻的重要参数,教程中用到的热敏电阻B值为3380;
这里T1和T2指的是开尔文温度,T2是常温25℃,即(273.15+25)K 这里T1和T2指的是开尔文温度,T2是常温25℃,即(273.15+25)K
T1就是所求的温度 T1就是所求的温度
*/ */
const float Rp = 10000.0f; /* 10K */ const float Rp = 10000.0f; /* 10K */
@@ -100,12 +100,12 @@ const float Bx = 3380.0f; /* B */
const float Ka = 273.15f; const float Ka = 273.15f;
/** /**
* @brief 计算温度值 * @brief 计算温度值
* @param para: 温度采集对应ADC通道的值(已滤波) * @param para: 温度采集对应ADC通道的值(已滤波)
* @note 计算温度分为两步: * @note 计算温度分为两步:
1.根据ADC采集到的值计算当前对应的Rt 1.根据ADC采集到的值计算当前对应的Rt
2.根据Rt计算对应的温度值 2.根据Rt计算对应的温度值
* @retval 温度值 * @retval 温度值
*/ */
float get_temp(uint16_t para) float get_temp(uint16_t para)
{ {
@@ -113,97 +113,97 @@ float get_temp(uint16_t para)
float temp; float temp;
/* /*
第一步: 第一步:
Rt = 3.3 * 4700 / VTEMP - 4700 ,其中VTEMP就是温度检测通道采集回来的电压值,VTEMP = ADC值* 3.3/4096 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的值: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 = 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 = 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 /= Bx; /* 解出1/T1-1/T2 ,即temp = 1/T1-1/T2 */
temp += (1.0f / T2); /* 解出1/T1 ,即temp = 1/T1 */ temp += (1.0f / T2); /* 解出1/T1 ,即temp = 1/T1 */
temp = 1.0f / (temp); /* 解出T1 ,即temp = T1 */ temp = 1.0f / (temp); /* 解出T1 ,即temp = T1 */
temp -= Ka; /* 计算T1对应的摄氏度 */ temp -= Ka; /* 计算T1对应的摄氏度 */
return temp; /* 返回温度值 */ return temp; /* 返回温度值 */
} }
/** /**
* @brief 计算ADC的平均值(滤波) * @brief 计算ADC的平均值(滤波)
* @param * p :存放ADC值的指针地址 * @param * p :存放ADC值的指针地址
* @note 此函数对电压、温度、电流对应的ADC值进行滤波, * @note 此函数对电压、温度、电流对应的ADC值进行滤波,
* p[0]-p[2]对应的分别是电压、温度和电流 * p[0]-p[2]对应的分别是电压、温度和电流
* @retval 无 * @retval 无
*/ */
void calc_adc_val(uint16_t * p) void calc_adc_val(uint16_t * p)
{ {
uint32_t temp[3] = {0,0,0}; uint32_t temp[3] = {0,0,0};
int i; int i;
for(i=0;i<ADC_COLL;i++) /* 循环ADC_COLL次取值,累加 */ for(i=0;i<ADC_COLL;i++) /* 循环ADC_COLL次取值,累加 */
{ {
temp[0] += m_au16Adc1SaValue[0+i*ADC_CH_NUM]; temp[0] += m_au16Adc1SaValue[0+i*ADC_CH_NUM];
temp[1] += m_au16Adc1SaValue[1+i*ADC_CH_NUM]; temp[1] += m_au16Adc1SaValue[1+i*ADC_CH_NUM];
temp[2] += m_au16Adc1SaValue[2+i*ADC_CH_NUM]; temp[2] += m_au16Adc1SaValue[2+i*ADC_CH_NUM];
} }
temp[0] /= ADC_COLL; /* 取平均值 */ temp[0] /= ADC_COLL; /* 取平均值 */
temp[1] /= ADC_COLL; temp[1] /= ADC_COLL;
temp[2] /= ADC_COLL; temp[2] /= ADC_COLL;
p[0] = temp[0]; /* 存入电压ADC通道平均值 */ p[0] = temp[0]; /* 存入电压ADC通道平均值 */
p[1] = temp[1]; /* 存入温度ADC通道平均值 */ p[1] = temp[1]; /* 存入温度ADC通道平均值 */
p[2] = temp[2]; /* 存入电流ADC通道平均值 */ p[2] = temp[2]; /* 存入电流ADC通道平均值 */
} }
/************************************* 第三部分 编码器测速 ****************************************************/ /************************************* 第三部分 编码器测速 ****************************************************/
Motor_TypeDef g_motor_data; /*电机参数变量*/ Motor_TypeDef g_motor_data; /*电机参数变量*/
ENCODE_TypeDef g_encode; /*编码器参数变量*/ ENCODE_TypeDef g_encode; /*编码器参数变量*/
/** /**
* @brief 电机速度计算 * @brief 电机速度计算
* @param encode_now:当前编码器总的计数值 * @param encode_now:当前编码器总的计数值
* ms:计算速度的间隔,中断1ms进入一次,例如ms = 5即5ms计算一次速度 * ms:计算速度的间隔,中断1ms进入一次,例如ms = 5即5ms计算一次速度
* @retval 无 * @retval 无
*/ */
void speed_computer(int32_t encode_now, uint8_t ms) void speed_computer(int32_t encode_now, uint8_t ms)
{ {
uint8_t i = 0, j = 0; uint8_t i = 0, j = 0;
float temp = 0.0; float temp = 0.0;
static uint8_t sp_count = 0, k = 0; static uint8_t sp_count = 0, k = 0;
static float speed_arr[10] = {0.0}; /* 存储速度进行滤波运算 */ static float speed_arr[10] = {0.0}; /* 存储速度进行滤波运算 */
if (sp_count == ms) /* 计算一次速度 */ if (sp_count == ms) /* 计算一次速度 */
{ {
/* 计算电机转速 /* 计算电机转速
第一步 :计算ms毫秒内计数变化量 第一步 :计算ms毫秒内计数变化量
第二步 ;计算1min内计数变化量:g_encode.speed * ((1000 / ms) * 60 第二步 ;计算1min内计数变化量:g_encode.speed * ((1000 / ms) * 60
第三步 :除以编码器旋转一圈的计数次数(倍频倍数 * 编码器分辨率) 第三步 :除以编码器旋转一圈的计数次数(倍频倍数 * 编码器分辨率)
第四步 :除以减速比即可得出电机转速 第四步 :除以减速比即可得出电机转速
*/ */
g_encode.encode_now = encode_now; /* 取出编码器当前计数值 */ g_encode.encode_now = encode_now; /* 取出编码器当前计数值 */
g_encode.speed = (g_encode.encode_now - g_encode.encode_old); /* 计算编码器计数值的变化量 */ g_encode.speed = (g_encode.encode_now - g_encode.encode_old); /* 计算编码器计数值的变化量 */
speed_arr[k++] = (float)(g_encode.speed * ((1000 / ms) * 60.0) / REDUCTION_RATIO / ROTO_RATIO ); /* 保存电机转速 */ speed_arr[k++] = (float)(g_encode.speed * ((1000 / ms) * 60.0) / REDUCTION_RATIO / ROTO_RATIO ); /* 保存电机转速 */
g_encode.encode_old = g_encode.encode_now; /* 保存当前编码器的值 */ g_encode.encode_old = g_encode.encode_now; /* 保存当前编码器的值 */
/* 累计10次速度值,后续进行滤波*/ /* 累计10次速度值,后续进行滤波*/
if (k == 10) if (k == 10)
{ {
for (i = 10; i >= 1; i--) /* 冒泡排序*/ for (i = 10; i >= 1; i--) /* 冒泡排序*/
{ {
for (j = 0; j < (i - 1); j++) 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] = speed_arr[j + 1];
speed_arr[j + 1] = temp; speed_arr[j + 1] = temp;
} }
@@ -212,17 +212,17 @@ void speed_computer(int32_t encode_now, uint8_t ms)
temp = 0.0; 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) * 公式为:Y(n)= qX(n) + (1-q)Y(n-1)
* 其中X(n)为本次采样值;Y(n-1)为上次滤波输出值;Y(n)为本次滤波输出值,q为滤波系数 * 其中X(n)为本次采样值;Y(n-1)为上次滤波输出值;Y(n)为本次滤波输出值,q为滤波系数
* q值越小则上一次输出对本次输出影响越大,整体曲线越平稳,但是对于速度变化的响应也会越慢 * q值越小则上一次输出对本次输出影响越大,整体曲线越平稳,但是对于速度变化的响应也会越慢
*/ */
g_motor_data.speed = (float)( ((float)0.48 * temp) + (g_motor_data.speed * (float)0.52) ); g_motor_data.speed = (float)( ((float)0.48 * temp) + (g_motor_data.speed * (float)0.52) );
k = 0; k = 0;
@@ -233,70 +233,70 @@ void speed_computer(int32_t encode_now, uint8_t ms)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: get_current * 函数名称: get_current
* 功能描述: 获取工作电流函数 * 功能描述: 获取工作电流函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 电流值 * 返 回 值: 电流值
*****************************************************************************************/ *****************************************************************************************/
float get_current(void) float get_current(void)
{ {
return g_motor_data.current; /* 返回工作电流值 */ return g_motor_data.current; /* 返回工作电流值 */
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: get_volatage * 函数名称: get_volatage
* 功能描述: 获取工作电压函数 * 功能描述: 获取工作电压函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 电压值 * 返 回 值: 电压值
*****************************************************************************************/ *****************************************************************************************/
float get_volatage(void) float get_volatage(void)
{ {
return g_motor_data.volatage; /* 返回工作电压值 */ return g_motor_data.volatage; /* 返回工作电压值 */
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: get_Temperature * 函数名称: get_Temperature
* 功能描述: 获取工作温度函数 * 功能描述: 获取工作温度函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 温度值 * 返 回 值: 温度值
*****************************************************************************************/ *****************************************************************************************/
float get_Temperature(void) float get_Temperature(void)
{ {
return g_motor_data.current; /* 返回工作温度值 */ return g_motor_data.current; /* 返回工作温度值 */
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: get_speed * 函数名称: get_speed
* 功能描述: 获取电机实际转速值函数 * 功能描述: 获取电机实际转速值函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 电压值 * 返 回 值: 电压值
*****************************************************************************************/ *****************************************************************************************/
float get_speed(void) float get_speed(void)
{ {
return g_motor_data.speed; /* 返回电机实际转速值 */ return g_motor_data.speed; /* 返回电机实际转速值 */
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: get_location * 函数名称: get_location
* 功能描述: 获取电机实际位置函数 * 功能描述: 获取电机实际位置函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 电压值 * 返 回 值: 电压值
*****************************************************************************************/ *****************************************************************************************/
float get_location(void) float get_location(void)
{ {
return g_motor_data.speed; /* 返回电机实际位置 */ return g_motor_data.speed; /* 返回电机实际位置 */
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: Adc1mSRoutine * 函数名称: Adc1mSRoutine
* 功能描述: Adc 1毫秒服务函数 * 功能描述: Adc 1毫秒服务函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
bool AdcInitStatus = false; //ADC初始化状态标志位 bool AdcInitStatus = false; //ADC初始化状态标志位
volatile bool AdcInitSta = false; //ADC电流电压采集初始化标志位 volatile bool AdcInitSta = false; //ADC电流电压采集初始化标志位
uint16_t AdcDly = 0; //ADC采样定时计数 uint16_t AdcDly = 0; //ADC采样定时计数
void Adc1mSRoutine(void) void Adc1mSRoutine(void)
{ {
if(AdcInitStatus == false) if(AdcInitStatus == false)
@@ -311,17 +311,17 @@ void Adc1mSRoutine(void)
/***************************************************************************************** /*****************************************************************************************
* 函数名称: AdcLoopHander * 函数名称: AdcLoopHander
* 功能描述: Adc主循环函数 * 功能描述: Adc主循环函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void AdcLoopHander(void) void AdcLoopHander(void)
{ {
uint32_t temp = 0; uint32_t temp = 0;
int i; int i;
float temp_c = 0.0; float temp_c = 0.0;
//开机等待电流数据稳定1秒,采集稳定电流值为初始值 //开机等待电流数据稳定1秒,采集稳定电流值为初始值
if((AdcInitStatus == true) && (AdcInitSta == false)) if((AdcInitStatus == true) && (AdcInitSta == false))
{ {
ADC_Start(); ADC_Start();
@@ -335,19 +335,19 @@ void AdcLoopHander(void)
else else
{ {
while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete); while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete);
for(i=0;i<ADC_COLL;i++) /* 循环ADC_COLL次取值,累加 */ for(i=0;i<ADC_COLL;i++) /* 循环ADC_COLL次取值,累加 */
{ {
init_adc_val += m_au16Adc1SaValue[2+i*ADC_CH_NUM]; init_adc_val += m_au16Adc1SaValue[2+i*ADC_CH_NUM];
if(i > 0) if(i > 0)
{ {
init_adc_val /= 2; /* 取平均值 */ init_adc_val /= 2; /* 取平均值 */
} }
} }
DCMOTOR_DBG_LOG("init_adc_val %d.\n", init_adc_val); DCMOTOR_DBG_LOG("init_adc_val %d.\n", init_adc_val);
AdcInitSta = true; AdcInitSta = true;
} }
} }
//计算ADC采样值并滤波 //计算ADC采样值并滤波
if(AdcDly == 0) if(AdcDly == 0)
{ {
float BatVoltage = 0; float BatVoltage = 0;
@@ -356,7 +356,7 @@ void AdcLoopHander(void)
{ {
while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete); while(DMA_GetChFlag(M4_DMA1, DmaCh0Sta) != DmaTransferComplete);
DMA_Cmd(M4_DMA1, Disable); 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("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); // 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 = temp_c;
g_motor_data.current = (float)((g_motor_data.current * (float)0.60) + ((float)0.40 * 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) /* 过滤掉微弱浮动电流 */ if (abs(g_motor_data.current) <= 20) /* 过滤掉微弱浮动电流 */
{ {
g_motor_data.current = 0.0; g_motor_data.current = 0.0;
} }
@@ -429,7 +429,7 @@ void Timer41_Init(uint8_t dir)
/* Timer4 OCO : Initialize OCO configuration structure */ /* Timer4 OCO : Initialize OCO configuration structure */
stcOcoInit.enOccrBufMode = OccrBufTrsfByCntZero; stcOcoInit.enOccrBufMode = OccrBufTrsfByCntZero;
stcOcoInit.enOcmrBufMode = OcmrBufTrsfByCntZero; stcOcoInit.enOcmrBufMode = OcmrBufTrsfByCntZero;
stcOcoInit.enPortLevel = E_OC_Port; /*输出低电平到OC端口*/ stcOcoInit.enPortLevel = E_OC_Port; /*输出低电平到OC端口*/
stcOcoInit.enOcoIntCmd = Disable; stcOcoInit.enOcoIntCmd = Disable;
TIMER4_OCO_Init(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, &stcOcoInit); /* Initialize OCO high channel */ 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 */ 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); PORT_SetFunc(TIMER4_PWM_L_PORT, TIMER4_PWM_L_PIN, Func_Tim4, Disable);
/* Timer4 PWM: Initialize PWM configuration structure */ /* Timer4 PWM: Initialize PWM configuration structure */
//重载定时器中断 //重载定时器中断
stcPwmInit.enRtIntMaskCmd = Enable; stcPwmInit.enRtIntMaskCmd = Enable;
//计数时钟分频 //计数时钟分频
stcPwmInit.enClkDiv = PwmPlckDiv1; /*滤波计数器和死区计数器的计数时钟分频*/ stcPwmInit.enClkDiv = PwmPlckDiv1; /*滤波计数器和死区计数器的计数时钟分频*/
//PWM输出极性控制 //PWM输出极性控制
stcPwmInit.enOutputState = E_PWM_OS; /*输出PWMH信号不改变电平,输出PWML信号反转*/ stcPwmInit.enOutputState = E_PWM_OS; /*输出PWMH信号不改变电平,输出PWML信号反转*/
//PWM输出模式 //PWM输出模式
stcPwmInit.enMode = PwmThroughMode; /*直通模式*/ stcPwmInit.enMode = PwmThroughMode; /*直通模式*/
TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */ TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */
/* Clear && Start CNT */ /* Clear && Start CNT */
@@ -549,8 +549,8 @@ void Timer41_Init(void)
stcCntInit.enClk = Timer4CntPclk; stcCntInit.enClk = Timer4CntPclk;
stcCntInit.enClkDiv = Timer4CntPclkDiv4; /* CNT clock divide */ stcCntInit.enClkDiv = Timer4CntPclkDiv4; /* CNT clock divide */
stcCntInit.u16Cycle = TIMER4_CNT_CYCLE_VAL; stcCntInit.u16Cycle = TIMER4_CNT_CYCLE_VAL;
// stcCntInit.enCntMode = Timer4CntSawtoothWave; //锯齿波模式 // stcCntInit.enCntMode = Timer4CntSawtoothWave; //锯齿波模式
stcCntInit.enCntMode = Timer4CntTriangularWave; //三角波模式Timer4CntTriangularWave stcCntInit.enCntMode = Timer4CntTriangularWave; //三角波模式Timer4CntTriangularWave
stcCntInit.enZeroIntCmd = Disable; stcCntInit.enZeroIntCmd = Disable;
stcCntInit.enPeakIntCmd = Disable; stcCntInit.enPeakIntCmd = Disable;
stcCntInit.enZeroIntMsk = Timer4CntIntMask0; stcCntInit.enZeroIntMsk = Timer4CntIntMask0;
@@ -560,7 +560,7 @@ void Timer41_Init(void)
/* Timer4 OCO : Initialize OCO configuration structure */ /* Timer4 OCO : Initialize OCO configuration structure */
stcOcoInit.enOccrBufMode = OccrBufDisable; stcOcoInit.enOccrBufMode = OccrBufDisable;
stcOcoInit.enOcmrBufMode = OcmrBufDisable; stcOcoInit.enOcmrBufMode = OcmrBufDisable;
stcOcoInit.enPortLevel = OcPortLevelHigh; /*输出高电平到OC端口*/ stcOcoInit.enPortLevel = OcPortLevelHigh; /*输出高电平到OC端口*/
stcOcoInit.enOcoIntCmd = Disable; stcOcoInit.enOcoIntCmd = Disable;
TIMER4_OCO_Init(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, &stcOcoInit); /* Initialize OCO high channel */ 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 */ 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); PORT_SetFunc(TIMER4_PWM_L_PORT, TIMER4_PWM_L_PIN, Func_Tim4, Disable);
/* Timer4 PWM: Initialize PWM configuration structure */ /* Timer4 PWM: Initialize PWM configuration structure */
//重载定时器中断 //重载定时器中断
stcPwmInit.enRtIntMaskCmd = Enable; stcPwmInit.enRtIntMaskCmd = Enable;
//计数时钟分频 //计数时钟分频
stcPwmInit.enClkDiv = PwmPlckDiv1; /*滤波计数器和死区计数器的计数时钟分频*/ stcPwmInit.enClkDiv = PwmPlckDiv1; /*滤波计数器和死区计数器的计数时钟分频*/
//PWM输出极性控制 //PWM输出极性控制
stcPwmInit.enOutputState = PwmHPwmLReverse; /*输出PWMH信号不改变电平,输出PWML信号反转*/ stcPwmInit.enOutputState = PwmHPwmLReverse; /*输出PWMH信号不改变电平,输出PWML信号反转*/
//PWM输出模式 //PWM输出模式
stcPwmInit.enMode = PwmThroughMode; /*直通模式*/ stcPwmInit.enMode = PwmThroughMode; /*直通模式*/
TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */ TIMER4_PWM_Init(TIMER4_UNIT, TIMER4_PWM_CH, &stcPwmInit); /* Initialize timer4 pwm */
/* Clear && Start CNT */ /* Clear && Start CNT */
@@ -795,9 +795,9 @@ void Timer61B_Init(void)
/** /**
* @brief 电机初始化 * @brief 电机初始化
* @param 无 * @param 无
* @retval 无 * @retval 无
*/ */
void dcmotor_init(void) void dcmotor_init(void)
{ {
@@ -814,30 +814,30 @@ void dcmotor_init(void)
// PORT_Init(PortA, Pin03, &stcPortInit); // PORT_Init(PortA, Pin03, &stcPortInit);
// PORT_SetBits(PortA, Pin03); // PORT_SetBits(PortA, Pin03);
// /* SD拉低,关闭输出 */ // /* SD拉低,关闭输出 */
// //
Timer41_Init(); Timer41_Init();
dcmotor_stop(); /* 停止电机 */ dcmotor_stop(); /* 停止电机 */
dcmotor_dir(0); /* 设置正转 */ dcmotor_dir(0); /* 设置正转 */
dcmotor_speed(0); /* 速度设置为0 */ dcmotor_speed(0); /* 速度设置为0 */
dcmotor_start(); /* 开启电机 */ dcmotor_start(); /* 开启电机 */
} }
/** /**
* @brief 电机开启 * @brief 电机开启
* @param 无 * @param 无
* @retval 无 * @retval 无
*/ */
void dcmotor_start(void) void dcmotor_start(void)
{ {
ENABLE_MOTOR; /* 拉高SD引脚,开启电机 */ ENABLE_MOTOR; /* 拉高SD引脚,开启电机 */
} }
/** /**
* @brief 电机停止 * @brief 电机停止
* @param 无 * @param 无
* @retval 无 * @retval 无
*/ */
void dcmotor_stop(void) void dcmotor_stop(void)
{ {
@@ -854,10 +854,10 @@ void dcmotor_stop(void)
} }
/** /**
* @brief 电机旋转方向设置 * @brief 电机旋转方向设置
* @param para:方向 0正转,1反转 * @param para:方向 0正转,1反转
* @note 以电机正面,顺时针方向旋转为正转 * @note 以电机正面,顺时针方向旋转为正转
* @retval 无 * @retval 无
*/ */
void dcmotor_dir(uint8_t para) void dcmotor_dir(uint8_t para)
{ {
@@ -865,14 +865,14 @@ void dcmotor_dir(uint8_t para)
Timer6_StopCount(M4_TMR61); Timer6_StopCount(M4_TMR61);
Timer6_DeInit(M4_TMR61); Timer6_DeInit(M4_TMR61);
if (para == 0) /* 正转 */ if (para == 0) /* 正转 */
{ {
Timer61A_Init(); Timer61A_Init();
} }
else if (para == 1) /* 反转 */ else if (para == 1) /* 反转 */
{ {
Timer61B_Init(); Timer61B_Init();
} }
@@ -883,12 +883,12 @@ void dcmotor_dir(uint8_t para)
#if(TIMER == TIMER4) #if(TIMER == TIMER4)
TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, 0); TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, 0);
TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, 0u); TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, 0u);
if (para == 0) /* 正转 */ if (para == 0) /* 正转 */
{ {
TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, 0); TIMER4_OCO_WriteOccr(TIMER4_UNIT, TIMER4_OCO_HIGH_CH, 0);
TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, 0u); 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, TIMER4_OCO_HIGH_CH, 0);
TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, 0u); TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, 0u);
@@ -898,9 +898,9 @@ void dcmotor_dir(uint8_t para)
} }
/** /**
* @brief 电机速度设置 * @brief 电机速度设置
* @param para:比较寄存器值 * @param para:比较寄存器值
* @retval 无 * @retval 无
*/ */
void dcmotor_speed(uint16_t para) void dcmotor_speed(uint16_t para)
{ {
@@ -914,14 +914,14 @@ void dcmotor_speed(uint16_t para)
#endif #endif
#if(TIMER == TIMER4) #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); //正转
TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, g_motorSpeed); //反转 TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, g_motorSpeed); //反转
#endif #endif
dcmotor_stop(); dcmotor_stop();
return; return;
} }
if(Motor_GetDirection() == DIR_REVERSE) //反转 if(Motor_GetDirection() == DIR_REVERSE) //反转
{ {
#if(TIMER == TIMER6) #if(TIMER == TIMER6)
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed); //Set General Compare RegisterA Value Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, g_motorSpeed); //Set General Compare RegisterA Value
@@ -929,12 +929,12 @@ void dcmotor_speed(uint16_t para)
#endif #endif
#if(TIMER == TIMER4) #if(TIMER == TIMER4)
TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, g_motorSpeed); //反转 TIMER4_OCO_WriteOccr(TIMER4_UNIT, enOcoLowCh, g_motorSpeed); //反转
#endif #endif
DCMOTOR_DBG_LOG("REVERSE\tnewSpeed = %d\r\n", g_motorSpeed); DCMOTOR_DBG_LOG("REVERSE\tnewSpeed = %d\r\n", g_motorSpeed);
} }
else if(Motor_GetDirection() == DIR_FORWARD) //正转 else if(Motor_GetDirection() == DIR_FORWARD) //正转
{ {
#if(TIMER == TIMER6) #if(TIMER == TIMER6)
Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, 10000-g_motorSpeed); //Set General Compare RegisterA Value Timer6_SetGeneralCmpValue(M4_TMR61, Timer6GenCompareA, 10000-g_motorSpeed); //Set General Compare RegisterA Value
@@ -942,7 +942,7 @@ void dcmotor_speed(uint16_t para)
#endif #endif
#if(TIMER == TIMER4) #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); //正转
#endif #endif
DCMOTOR_DBG_LOG("FORWARD\tnewSpeed = %d\r\n", g_motorSpeed); DCMOTOR_DBG_LOG("FORWARD\tnewSpeed = %d\r\n", g_motorSpeed);
} }
@@ -951,10 +951,10 @@ void dcmotor_speed(uint16_t para)
#endif #endif
/** /**
* @brief 电机控制 * @brief 电机控制
* @param para: pwm比较值 ,正数电机为正转,负数为反转 * @param para: pwm比较值 ,正数电机为正转,负数为反转
* @note 根据传入的参数控制电机的转向和速度 * @note 根据传入的参数控制电机的转向和速度
* @retval 无 * @retval 无
*/ */
void motor_pwm_set(float para) void motor_pwm_set(float para)
{ {
@@ -969,7 +969,7 @@ void motor_pwm_set(float para)
if (val > 0) if (val > 0)
{ {
g_motorDirection = DIR_FORWARD; g_motorDirection = DIR_FORWARD;
dcmotor_dir(0); /* 正转 */ dcmotor_dir(0); /* 正转 */
#if(TIMER == TIMER6) #if(TIMER == TIMER6)
dcmotor_speed(10000-val); dcmotor_speed(10000-val);
#endif #endif
@@ -981,7 +981,7 @@ void motor_pwm_set(float para)
else else
{ {
g_motorDirection = DIR_REVERSE; g_motorDirection = DIR_REVERSE;
dcmotor_dir(1); /* 反转 */ dcmotor_dir(1); /* 反转 */
#if(TIMER == TIMER6) #if(TIMER == TIMER6)
dcmotor_speed(-val); dcmotor_speed(-val);
#endif #endif
@@ -996,9 +996,9 @@ void motor_pwm_set(float para)
// 设置电机方向 // 设置电机方向
void Motor_SetDirection(uint8_t dir) { void Motor_SetDirection(uint8_t dir) {
// 更新方向标志位 // 更新方向标志位
if (dir == 0) { if (dir == 0) {
g_motorDirection = DIR_FORWARD; g_motorDirection = DIR_FORWARD;
// Up(); // Up();
@@ -1012,32 +1012,32 @@ void Motor_SetDirection(uint8_t dir) {
} }
// 电机控制接口 // 电机控制接口
void Motor_Control(MotorCommand cmd) { void Motor_Control(MotorCommand cmd) {
g_motorCmd = cmd; g_motorCmd = cmd;
} }
// 获取电机当前方向 // 获取电机当前方向
MotorDirection Motor_GetDirection(void) { MotorDirection Motor_GetDirection(void) {
return g_motorDirection; return g_motorDirection;
} }
// 设置电机速度 // 设置电机速度
void Motor_SetSpeed(uint16_t speed) { void Motor_SetSpeed(uint16_t speed) {
g_motorSpeed = (speed > MAX_SPEED) ? MAX_SPEED : speed; g_motorSpeed = (speed > MAX_SPEED) ? MAX_SPEED : speed;
// 当速度为零时,更新方向状态为停止 // 当速度为零时,更新方向状态为停止
if (g_motorSpeed == 0) { if (g_motorSpeed == 0) {
g_motorDirection = DIR_STOPPED; g_motorDirection = DIR_STOPPED;
} }
if(Motor_GetDirection() == DIR_REVERSE) //反转 if(Motor_GetDirection() == DIR_REVERSE) //反转
{ {
// Adt_SetCompareValue(M0P_ADTIM4, AdtCompareC, PWM_PERIOD - g_motorSpeed); // Adt_SetCompareValue(M0P_ADTIM4, AdtCompareC, PWM_PERIOD - g_motorSpeed);
// DBG_LOG("REVERSE\tnewSpeed = %d\r\n", g_motorSpeed); // DBG_LOG("REVERSE\tnewSpeed = %d\r\n", g_motorSpeed);
} }
else if(Motor_GetDirection() == DIR_FORWARD) //正转 else if(Motor_GetDirection() == DIR_FORWARD) //正转
{ {
// Adt_SetCompareValue(M0P_ADTIM5, AdtCompareC, g_motorSpeed); // Adt_SetCompareValue(M0P_ADTIM5, AdtCompareC, g_motorSpeed);
// DBG_LOG("FORWARD\tnewSpeed = %d\r\n", g_motorSpeed); // DBG_LOG("FORWARD\tnewSpeed = %d\r\n", g_motorSpeed);
@@ -1145,27 +1145,27 @@ void DcmotorLoopHandler(void)
{ {
Dcmotor1msStatus = false; Dcmotor1msStatus = false;
// 电机状态机处理 // 电机状态机处理
switch (g_motorState) { switch (g_motorState) {
case MOTOR_STOPPED: case MOTOR_STOPPED:
// Motor_SetSpeed(0); // Motor_SetSpeed(0);
// motor_pwm_set(0); // motor_pwm_set(0);
dcmotor_speed(0); dcmotor_speed(0);
// 检测新命令 // 检测新命令
if (g_motorCmd == MOTOR_CMD_FORWARD) { if (g_motorCmd == MOTOR_CMD_FORWARD) {
Motor_SetDirection(0); // 设置正转方向 Motor_SetDirection(0); // 设置正转方向
g_motorState = MOTOR_ACCELERATING; g_motorState = MOTOR_ACCELERATING;
accelCounter = 0; accelCounter = 0;
// Motor_SetSpeed(ACCEL_STEP); // 初始速度 // Motor_SetSpeed(ACCEL_STEP); // 初始速度
// motor_pwm_set(ACCEL_STEP); // motor_pwm_set(ACCEL_STEP);
dcmotor_speed(ACCEL_STEP); dcmotor_speed(ACCEL_STEP);
} }
else if (g_motorCmd == MOTOR_CMD_REVERSE) { else if (g_motorCmd == MOTOR_CMD_REVERSE) {
Motor_SetDirection(1); // 设置反转方向 Motor_SetDirection(1); // 设置反转方向
g_motorState = MOTOR_ACCELERATING; g_motorState = MOTOR_ACCELERATING;
accelCounter = 0; accelCounter = 0;
// Motor_SetSpeed(ACCEL_STEP); // 初始速度 // Motor_SetSpeed(ACCEL_STEP); // 初始速度
// motor_pwm_set(ACCEL_STEP); // motor_pwm_set(ACCEL_STEP);
dcmotor_speed(ACCEL_STEP); dcmotor_speed(ACCEL_STEP);
TIMER4_CNT_ClearCountVal(TIMER4_UNIT); TIMER4_CNT_ClearCountVal(TIMER4_UNIT);
@@ -1174,40 +1174,40 @@ void DcmotorLoopHandler(void)
break; break;
case MOTOR_ACCELERATING: case MOTOR_ACCELERATING:
// 加速过程 // 加速过程
if (++accelCounter >= ACCEL_INTERVAL) { if (++accelCounter >= ACCEL_INTERVAL) {
accelCounter = 0; accelCounter = 0;
uint16_t newSpeed = g_motorSpeed + ACCEL_STEP; uint16_t newSpeed = g_motorSpeed + ACCEL_STEP;
if (newSpeed >= MAX_SPEED) { if (newSpeed >= MAX_SPEED) {
newSpeed = MAX_SPEED; newSpeed = MAX_SPEED;
g_motorState = MOTOR_RUNNING; // 达到最大速度,进入匀速 g_motorState = MOTOR_RUNNING; // 达到最大速度,进入匀速
} }
// Motor_SetSpeed(newSpeed); // Motor_SetSpeed(newSpeed);
// motor_pwm_set(newSpeed); // motor_pwm_set(newSpeed);
dcmotor_speed(newSpeed); dcmotor_speed(newSpeed);
} }
// 检查停止命令 // 检查停止命令
if (g_motorCmd == MOTOR_CMD_STOP) { if (g_motorCmd == MOTOR_CMD_STOP) {
g_motorState = MOTOR_DECELERATING; g_motorState = MOTOR_DECELERATING;
} }
break; break;
case MOTOR_RUNNING: case MOTOR_RUNNING:
// 检查停止命令 // 检查停止命令
if (g_motorCmd == MOTOR_CMD_STOP) { if (g_motorCmd == MOTOR_CMD_STOP) {
g_motorState = MOTOR_DECELERATING; g_motorState = MOTOR_DECELERATING;
} }
// 检查方向改变命令 // 检查方向改变命令
else if ((g_motorCmd == MOTOR_CMD_FORWARD && g_motorDirection != DIR_FORWARD) || else if ((g_motorCmd == MOTOR_CMD_FORWARD && g_motorDirection != DIR_FORWARD) ||
(g_motorCmd == MOTOR_CMD_REVERSE && g_motorDirection != DIR_REVERSE)) { (g_motorCmd == MOTOR_CMD_REVERSE && g_motorDirection != DIR_REVERSE)) {
g_motorState = MOTOR_DECELERATING; // 需要先减速停止 g_motorState = MOTOR_DECELERATING; // 需要先减速停止
} }
break; break;
case MOTOR_DECELERATING: case MOTOR_DECELERATING:
// 减速过程 // 减速过程
if (++accelCounter >= ACCEL_INTERVAL) { if (++accelCounter >= ACCEL_INTERVAL) {
accelCounter = 0; accelCounter = 0;
// if (g_motorSpeed > DECEL_STEP) { // if (g_motorSpeed > DECEL_STEP) {
@@ -1219,7 +1219,7 @@ void DcmotorLoopHandler(void)
// Motor_SetSpeed(0); // Motor_SetSpeed(0);
// motor_pwm_set(0); // motor_pwm_set(0);
dcmotor_speed(0); dcmotor_speed(0);
g_motorState = MOTOR_STOPPED; // 减速完成,进入停止状态 g_motorState = MOTOR_STOPPED; // 减速完成,进入停止状态
} }
} }
break; break;
@@ -2,9 +2,9 @@
#ifndef __DCMOTOR_H #ifndef __DCMOTOR_H
#define __DCMOTOR_H #define __DCMOTOR_H
#define ADC_CH_NUM 3 /* 需要转换的通道数目 */ #define ADC_CH_NUM 3 /* 需要转换的通道数目 */
#define ADC_COLL 100 /* 单采集次数 */ #define ADC_COLL 100 /* 单采集次数 */
#define ADC_SUM ADC_CH_NUM * ADC_COLL /* 总采集次数 */ #define ADC_SUM ADC_CH_NUM * ADC_COLL /* 总采集次数 */
@@ -20,26 +20,26 @@
#define TIMER4 0 #define TIMER4 0
#define TIMER6 1 #define TIMER6 1
#define TIMER TIMER4 //HC32F460单片机PWM输出控制定时器选择 #define TIMER TIMER4 //HC32F460单片机PWM输出控制定时器选择
#endif #endif
// 电机控制参数 // 电机控制参数
#define PWM_PERIOD TIM_PERIOD // PWM周期值 (ARR) #define PWM_PERIOD TIM_PERIOD // PWM周期值 (ARR)
#define MAX_SPEED 480 // 最大速度(PWM占空比) #define MAX_SPEED 480 // 最大速度(PWM占空比)
#define ACCEL_STEP 10 // 加速步进值 #define ACCEL_STEP 10 // 加速步进值
#define DECEL_STEP 10 // 减速步进值 #define DECEL_STEP 10 // 减速步进值
#define ACCEL_INTERVAL 10 // 加减速间隔(ms) #define ACCEL_INTERVAL 10 // 加减速间隔(ms)
// 电机控制命令 // 电机控制命令
typedef enum { typedef enum {
MOTOR_CMD_STOP, MOTOR_CMD_STOP,
MOTOR_CMD_FORWARD, MOTOR_CMD_FORWARD,
MOTOR_CMD_REVERSE MOTOR_CMD_REVERSE
} MotorCommand; } MotorCommand;
// 电机运行状态机 // 电机运行状态机
typedef enum { typedef enum {
MOTOR_STOPPED, MOTOR_STOPPED,
MOTOR_ACCELERATING, MOTOR_ACCELERATING,
@@ -48,7 +48,7 @@ typedef enum {
} MotorState; } MotorState;
// 电机转动方向 // 电机转动方向
typedef enum { typedef enum {
DIR_STOPPED, DIR_STOPPED,
DIR_FORWARD, DIR_FORWARD,
@@ -57,19 +57,19 @@ typedef enum {
/************************************* 第一部分 电压电流温度采集 ******************************/ /************************************* 第一部分 电压电流温度采集 ******************************/
/* 电流计算公式: /* 电流计算公式:
* I=(最终输出电压-初始参考电压)/(6*0.02)A * I=(最终输出电压-初始参考电压)/(6*0.02)A
* ADC值转换为电压值:电压=ADC值*3.3/4096,这里电压单位为V,我们换算成mV,4096/1000=4.096,后面就直接算出为mA * ADC值转换为电压值:电压=ADC值*3.3/4096,这里电压单位为V,我们换算成mV,4096/1000=4.096,后面就直接算出为mA
* 整合公式可以得出电流 I= (当前ADC值-初始参考ADC值)* 3.3 / 4.096 / 0.12 * 整合公式可以得出电流 I= (当前ADC值-初始参考ADC值)* 3.3 / 4.096 / 0.12
*/ */
#define ADC2CURT (float)(3.3f / 4.096f / 0.12f) #define ADC2CURT (float)(3.3f / 4.096f / 0.12f)
/* 电压计算公式: /* 电压计算公式:
* V_POWER = V_BUS * 25 * V_POWER = V_BUS * 25
* ADC值转换为电压值:电压=ADC值*3.3/4096 * ADC值转换为电压值:电压=ADC值*3.3/4096
* 整合公式可以得出电压V_POWER= ADC值 *3.3f * 25 / 4096 * 整合公式可以得出电压V_POWER= ADC值 *3.3f * 25 / 4096
*/ */
#define ADC2VBUS (float)(3.3f * 25 / 4096) #define ADC2VBUS (float)(3.3f * 25 / 4096)
@@ -80,63 +80,63 @@ typedef enum {
/* 停止引脚操作宏定义 /* 停止引脚操作宏定义
* 此引脚控制H桥是否生效以达到开启和关闭电机的效果 * 此引脚控制H桥是否生效以达到开启和关闭电机的效果
*/ */
#define SHUTDOWN1_Pin Pin07 #define SHUTDOWN1_Pin Pin07
#define SHUTDOWN1_GPIO_Port PortB #define SHUTDOWN1_GPIO_Port PortB
//#define SHUTDOWN2_Pin GPIO_PIN_2 //#define SHUTDOWN2_Pin GPIO_PIN_2
//#define SHUTDOWN2_GPIO_Port GPIOF //#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口时钟使能 */
#if(MCU == HC32F460JETA) #if(MCU == HC32F460JETA)
/* 电机停止引脚定义 这里默认是接口1 */ /* 电机停止引脚定义 这里默认是接口1 */
#define ENABLE_MOTOR PORT_SetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin) #define ENABLE_MOTOR PORT_SetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin)
#define DISABLE_MOTOR PORT_ResetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin) #define DISABLE_MOTOR PORT_ResetBits(SHUTDOWN1_GPIO_Port,SHUTDOWN1_Pin)
#endif #endif
/******************************************************************************************/ /******************************************************************************************/
/* 编码器参数结构体 */ /* 编码器参数结构体 */
typedef struct typedef struct
{ {
int encode_old; /* 上一次计数值 */ int encode_old; /* 上一次计数值 */
int encode_now; /* 当前计数值 */ int encode_now; /* 当前计数值 */
float speed; /* 编码器速度 */ float speed; /* 编码器速度 */
} ENCODE_TypeDef; } ENCODE_TypeDef;
extern ENCODE_TypeDef g_encode; /* 编码器参数变量 */ extern ENCODE_TypeDef g_encode; /* 编码器参数变量 */
/************************************* 第三部分 编码器测速 ****************************************************/ /************************************* 第三部分 编码器测速 ****************************************************/
#define ROTO_RATIO 44 /* 线数*倍频系数,即11*4=44 */ #define ROTO_RATIO 44 /* 线数*倍频系数,即11*4=44 */
#define REDUCTION_RATIO 30 /* 减速比30:1 */ #define REDUCTION_RATIO 30 /* 减速比30:1 */
/* 电机参数结构体 */ /* 电机参数结构体 */
typedef struct typedef struct
{ {
uint8_t state; /*电机状态*/ uint8_t state; /*电机状态*/
float current; /*电机电流*/ float current; /*电机电流*/
float volatage; /*电机电压*/ float volatage; /*电机电压*/
float power; /*电机功率*/ float power; /*电机功率*/
float speed; /*电机实际速度*/ float speed; /*电机实际速度*/
float location; /*电机位置*/ float location; /*电机位置*/
int32_t motor_pwm; /*设置比较值大小 */ int32_t motor_pwm; /*设置比较值大小 */
} Motor_TypeDef; } Motor_TypeDef;
extern Motor_TypeDef g_motor_data; /*电机参数变量*/ extern Motor_TypeDef g_motor_data; /*电机参数变量*/
/*********************************************************************************************************************/ /*********************************************************************************************************************/
void dcmotor_init(void); /* 直流有刷电机初始化 */ void dcmotor_init(void); /* 直流有刷电机初始化 */
void dcmotor_start(void); /* 开启电机 */ void dcmotor_start(void); /* 开启电机 */
void dcmotor_stop(void); /* 关闭电机 */ void dcmotor_stop(void); /* 关闭电机 */
void dcmotor_dir(uint8_t para); /* 设置电机方向 */ void dcmotor_dir(uint8_t para); /* 设置电机方向 */
void dcmotor_speed(uint16_t para); /* 设置电机速度 */ void dcmotor_speed(uint16_t para); /* 设置电机速度 */
void motor_pwm_set(float para); /* 电机控制 */ void motor_pwm_set(float para); /* 电机控制 */
float get_temp(uint16_t para); float get_temp(uint16_t para);
@@ -147,17 +147,17 @@ void calc_adc_val(uint16_t * p);
void Encoder (void); void Encoder (void);
//外部调用接口函数 //外部调用接口函数
MotorDirection Motor_GetDirection(void);/* 获取电机转动方向 */ MotorDirection Motor_GetDirection(void);/* 获取电机转动方向 */
void Motor_Control(MotorCommand cmd); /* 电机控制 */ void Motor_Control(MotorCommand cmd); /* 电机控制 */
void Dcmotor1msRoutine(void); void Dcmotor1msRoutine(void);
void DcmotorLoopHandler(void); void DcmotorLoopHandler(void);
float get_current(void); /* 获取工作电流 */ float get_current(void); /* 获取工作电流 */
float get_volatage(void); /* 获取工作电压 */ float get_volatage(void); /* 获取工作电压 */
float get_Temperature(void); /* 获取工作温度 */ float get_Temperature(void); /* 获取工作温度 */
float get_speed(void); /* 获取电机转速 */ float get_speed(void); /* 获取电机转速 */
float get_location(void); /* 获取电机位置 */ float get_location(void); /* 获取电机位置 */
#endif #endif
@@ -11,11 +11,11 @@ static bool MMC5983IntFlag;
static MMC5983Var_t MMC5983Var; static MMC5983Var_t MMC5983Var;
/***************************************************************************************** /*****************************************************************************************
* 函数名称: MMC5983_Write_Reg * 函数名称: MMC5983_Write_Reg
* 功能描述: MMC5983写寄存器 * 功能描述: MMC5983写寄存器
* 参 数: reg 寄存器地址 * 参 数: reg 寄存器地址
val 寄存器数据 val 寄存器数据
* 返 回 值: 成功返回true,失败返回false * 返 回 值: 成功返回true,失败返回false
*****************************************************************************************/ *****************************************************************************************/
static bool MMC5983_Write_Reg(uint8_t reg, uint8_t val) 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_Read_Reg
* 功能描述: MMC5983读寄存器 * 功能描述: MMC5983读寄存器
* 参 数: reg 寄存器地址 * 参 数: reg 寄存器地址
* 返 回 值: 返回寄存器值 * 返 回 值: 返回寄存器值
*****************************************************************************************/ *****************************************************************************************/
static uint8_t MMC5983_Read_Reg(uint8_t 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_Read_Buffer
* 功能描述: MMC5983读数据 * 功能描述: MMC5983读数据
* 参 数: reg 寄存器地址 * 参 数: reg 寄存器地址
buffer 读取数据输出缓存入口 buffer 读取数据输出缓存入口
len 读取长度 len 读取长度
* 返 回 值: 成功返回true,失败返回false * 返 回 值: 成功返回true,失败返回false
*****************************************************************************************/ *****************************************************************************************/
static bool MMC5983_Read_Buffer(uint8_t reg, void *buffer, uint8_t len) 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 * 函数名称: MMC5983StartCov
* 功能描述: MMC5983开启连续转换 * 功能描述: MMC5983开启连续转换
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void MMC5983StartCov(void) static void MMC5983StartCov(void)
{ {
MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换 MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换
Ctrl2Reg.Byte = 0x00; Ctrl2Reg.Byte = 0x00;
Ctrl2Reg.Bit.Cm_freq = 0x04; 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.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_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte);
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: MMC5983_Init * 函数名称: MMC5983_Init
* 功能描述: MMC5983初始化 * 功能描述: MMC5983初始化
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void MMC5983_Init(void) static void MMC5983_Init(void)
{ {
@@ -93,12 +93,12 @@ static void MMC5983_Init(void)
MMC5983_Write_Reg(MMC5983_CTRL_1, Ctrl1Reg.Byte); MMC5983_Write_Reg(MMC5983_CTRL_1, Ctrl1Reg.Byte);
MMC5983Delay(15); MMC5983Delay(15);
MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换 MMC5983RegCtrl2 Ctrl2Reg; //开启/关闭连续转换
Ctrl2Reg.Byte = 0x00; Ctrl2Reg.Byte = 0x00;
Ctrl2Reg.Bit.Cm_freq = 0x04; 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.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); MMC5983_Write_Reg(MMC5983_CTRL_2, Ctrl2Reg.Byte);
MMC5983RegCtrl3 Ctrl3Reg; MMC5983RegCtrl3 Ctrl3Reg;
@@ -121,12 +121,12 @@ static void MMC5983_Init(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: MMC5983_Read * 函数名称: MMC5983_Read
* 功能描述: MMC5983读取原始数据 * 功能描述: MMC5983读取原始数据
* 参 数: MagAdcX X轴数据 * 参 数: MagAdcX X轴数据
MagAdcY Y轴数据 MagAdcY Y轴数据
MagAdcZ Z轴数据 MagAdcZ Z轴数据
* 返 回 值: 成功返回true,失败返回false * 返 回 值: 成功返回true,失败返回false
*****************************************************************************************/ *****************************************************************************************/
static bool MMC5983_Read(int32_t *MagAdcX, int32_t *MagAdcY, int32_t *MagAdcZ) 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_Get_Mag
* 功能描述: 外部获取MMC5983磁场强度数据 * 功能描述: 外部获取MMC5983磁场强度数据
* 参 数: mag 读取数据输出缓存入口 * 参 数: mag 读取数据输出缓存入口
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void MMC5983_Get_Mag(float *mag) void MMC5983_Get_Mag(float *mag)
{ {
@@ -164,10 +164,10 @@ void MMC5983_Get_Mag(float *mag)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: MMC5983LoopHandler * 函数名称: MMC5983LoopHandler
* 功能描述: MMC5983循环处理函数 * 功能描述: MMC5983循环处理函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
extern void MmcDataProcessCallBack(float *Mag); extern void MmcDataProcessCallBack(float *Mag);
@@ -251,16 +251,16 @@ void MMC5983LoopHandler(void)
case MMC5983_STATUS_STOP:{ case MMC5983_STATUS_STOP:{
MMC5983Stop(); MMC5983Stop();
MMC5983Var.Status = MMC5983_STATUS_IDLE; MMC5983Var.Status = MMC5983_STATUS_IDLE;
//MMC5983Var.Status = MMC5983_STATUS_START;//持续工作 //MMC5983Var.Status = MMC5983_STATUS_START;//持续工作
break;} break;}
} }
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: LeftMMC59831mSRoutine * 函数名称: LeftMMC59831mSRoutine
* 功能描述: MMC59831ms时基循环处理函数 * 功能描述: MMC59831ms时基循环处理函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void MMC59831mSRoutine(void) void MMC59831mSRoutine(void)
{ {
@@ -269,10 +269,10 @@ void MMC59831mSRoutine(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: LeftMMC5983Init * 函数名称: LeftMMC5983Init
* 功能描述: MMC5983初始化 * 功能描述: MMC5983初始化
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void MMC5983Init(void) void MMC5983Init(void)
{ {
@@ -285,10 +285,10 @@ void MMC5983Init(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: LeftMMC5983Start * 函数名称: LeftMMC5983Start
* 功能描述: MMC5983启动 * 功能描述: MMC5983启动
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void MMC5983Start(void) void MMC5983Start(void)
{ {
@@ -301,21 +301,21 @@ void MMC5983Start(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: LeftMMC5983StartRead * 函数名称: LeftMMC5983StartRead
* 功能描述: MMC5983启动读取 * 功能描述: MMC5983启动读取
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void MMC5983StartRead(void) void MMC5983StartRead(void)
{ {
MMC5983_Init();//读取时重新初始化 MMC5983_Init();//读取时重新初始化
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: MMC5983Stop * 函数名称: MMC5983Stop
* 功能描述: MMC5983停止 * 功能描述: MMC5983停止
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void MMC5983Stop(void) void MMC5983Stop(void)
{ {
@@ -331,10 +331,10 @@ void MMC5983Stop(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: LeftMMC5983IntCallBack * 函数名称: LeftMMC5983IntCallBack
* 功能描述: MMC5983中断回调 * 功能描述: MMC5983中断回调
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void MMC5983IntCallBack(void) void MMC5983IntCallBack(void)
{ {
+10 -10
View File
@@ -11,20 +11,20 @@
#define CRC16_BASE 0xA001 #define CRC16_BASE 0xA001
// 峰值谷值检查结果结构体 // 峰值谷值检查结果结构体
typedef struct { typedef struct {
bool peaks_positive; // 所有峰值是否大于0 bool peaks_positive; // 所有峰值是否大于0
bool valleys_negative; // 所有谷值是否小于0 bool valleys_negative; // 所有谷值是否小于0
int peak_count; // 检测到的峰值数量 int peak_count; // 检测到的峰值数量
int valley_count; // 检测到的谷值数量 int valley_count; // 检测到的谷值数量
} PeakValleyCheck; } PeakValleyCheck;
// 趋势分析结果结构体 // 趋势分析结果结构体
typedef struct { typedef struct {
double slope; // 线性斜率 double slope; // 线性斜率
int sign_changes; // 符号变化次数 int sign_changes; // 符号变化次数
char trend_type; // 趋势类型 char trend_type; // 趋势类型
char steepness; // 陡峭度 char steepness; // 陡峭度
} TrendResult; } TrendResult;
PeakValleyCheck check_peaks_valleys(int data[], int length); PeakValleyCheck check_peaks_valleys(int data[], int length);
+8 -1
View File
@@ -11,7 +11,7 @@
void vcom_Send( char *format, ... ); void vcom_Send( char *format, ... );
void vcom_Send2(uint8_t *sData, uint16_t len); 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(...) vcom_Send(__VA_ARGS__)
#define DBG_LOG_F(fmt,arg...) LOG("[%s] "fmt,__FUNCTION__,##arg) #define DBG_LOG_F(fmt,arg...) LOG("[%s] "fmt,__FUNCTION__,##arg)
@@ -31,6 +31,10 @@ typedef struct{
DebugExec DBGExec; DebugExec DBGExec;
}DBGFunType; }DBGFunType;
/* 控制盒信息帧→复位→恢复 观测打印: ISR推事件, 主循环打印完整时间线(未知帧全记录用于捕捉过热报错) */
void Uart3ErrLog_Push(uint8_t type, const uint8_t *pFrame, uint16_t height); /* type:0首次信息帧 1复位中回应 2复位完成 3未知帧 */
void Uart3ErrLogLoopHandler(void); /* 主循环调用: 打印报错/复位事件 */
void DebugUartIRQ(char Data); void DebugUartIRQ(char Data);
void DebugLoopHandler(void); void DebugLoopHandler(void);
void Dbg1msRoutine(void); void Dbg1msRoutine(void);
@@ -41,5 +45,8 @@ void Dbg1msRoutine(void);
#define DBG_LOG_F(fmt,arg...) #define DBG_LOG_F(fmt,arg...)
#define DBG_ARRAY(ARRAY,SIZE) #define DBG_ARRAY(ARRAY,SIZE)
#define Uart3ErrLog_Push(type, pFrame, height) (0)
#define Uart3ErrLogLoopHandler() (0)
#endif #endif
#endif #endif
+52 -52
View File
@@ -9,28 +9,28 @@
#include "hc32_ddl.h" #include "hc32_ddl.h"
/*模块启用与关闭*/ /*模块启用与关闭*/
#define USE_DEBUG 1 //DEBUG开关,0、关闭,1、启用 #define USE_DEBUG 1 //DEBUG开关,0、关闭,1、启用
#define USE_AD 1 //AD获取选择,0、关闭,1、启用 #define USE_AD 1 //AD获取选择,0、关闭,1、启用
#define USE_WDT 0 //看门狗选择,0、关闭,1启用 #define USE_WDT 0 //看门狗选择,0、关闭,1启用
#define USE_EXFALSE 0 //外部FALSE存储选择,0、关闭,1、启用 #define USE_EXFALSE 0 //外部FALSE存储选择,0、关闭,1、启用
#define USE_RTC 0 //RTC时钟开关,0、关闭,1、开启 #define USE_RTC 0 //RTC时钟开关,0、关闭,1、开启
#define USE_LPTIM0 0 //LPTIM0开关,0、关闭,1、开启 #define USE_LPTIM0 0 //LPTIM0开关,0、关闭,1、开启
#define USE_DMA 1 //DMA开关,0、关闭,1、开启 #define USE_DMA 1 //DMA开关,0、关闭,1、开启
#define USE_RS485 0 //RS485开关,0、关闭,1、启用 #define USE_RS485 0 //RS485开关,0、关闭,1、启用
#define USE_I2C1 0 //I2C1开关,0、关闭,1、启用 #define USE_I2C1 0 //I2C1开关,0、关闭,1、启用
#define USE_SPI1 0 //SPI1开关,0、关闭,1、启用 #define USE_SPI1 0 //SPI1开关,0、关闭,1、启用
#define USE_SPI3 0 //SPI3开关,0、关闭,1、启用 #define USE_SPI3 0 //SPI3开关,0、关闭,1、启用
#define USE_USART3 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_LEFTUP 1 //左上CS1237开关,0、关闭,1、启用
#define USE_CS1237_LEFTLOW 1 //左下CS1237开关,0、关闭,1、启用 #define USE_CS1237_LEFTLOW 1 //左下CS1237开关,0、关闭,1、启用
#define USE_CS1237_RIGHTUP 1 //右上CS1237开关,0、关闭,1、启用 #define USE_CS1237_RIGHTUP 1 //右上CS1237开关,0、关闭,1、启用
#define USE_CS1237_RIGHTLOW 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 -------------------------------->> //<<---------------------------- MCU -------------------------------->>
//< DEBUG //< DEBUG
#if(USE_DEBUG == 1) #if(USE_DEBUG == 1)
@@ -142,103 +142,103 @@
#define RTC_IRQn Int001_IRQn #define RTC_IRQn Int001_IRQn
#endif #endif
//<<----------------------------- CS1237 ------------------------------->> //<<----------------------------- CS1237 ------------------------------->>
//< 左上 CS1237 //< 左上 CS1237
#if(USE_CS1237_LEFTUP == 1) #if(USE_CS1237_LEFTUP == 1)
#define LEFTUP_CS1237_IRQn (Int001_IRQn) #define LEFTUP_CS1237_IRQn (Int001_IRQn)
#define LEFTUP_CS1237_DOUT_PORTx (PortB) #define LEFTUP_CS1237_DOUT_PORTx (PortB)
#define LEFTUP_CS1237_DOUT_PINx (Pin10) #define LEFTUP_CS1237_DOUT_PINx (Pin10)
#define SET_LEFTUP_CS1237_DOUT() PORT_SetBits(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 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 GET_LEFTUP_CS1237_DOUT() PORT_GetBit(LEFTUP_CS1237_DOUT_PORTx, LEFTUP_CS1237_DOUT_PINx)
#define LEFTUP_CS1237_SCLK_PORTx (PortB) #define LEFTUP_CS1237_SCLK_PORTx (PortB)
#define LEFTUP_CS1237_SCLK_PINx (Pin02) #define LEFTUP_CS1237_SCLK_PINx (Pin02)
#define SET_LEFTUP_CS1237_SCLK() PORT_SetBits(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)//拉低 #define CLR_LEFTUP_CS1237_SCLK() PORT_ResetBits(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx)//拉低
#endif #endif
//< 左下 CS1237 //< 左下 CS1237
#if(USE_CS1237_LEFTLOW == 1) #if(USE_CS1237_LEFTLOW == 1)
#define LEFTLOW_CS1237_IRQn (Int002_IRQn) #define LEFTLOW_CS1237_IRQn (Int002_IRQn)
#define LEFTLOW_CS1237_DOUT_PORTx (PortB) #define LEFTLOW_CS1237_DOUT_PORTx (PortB)
#define LEFTLOW_CS1237_DOUT_PINx (Pin01) #define LEFTLOW_CS1237_DOUT_PINx (Pin01)
#define SET_LEFTLOW_CS1237_DOUT() PORT_SetBits(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 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 GET_LEFTLOW_CS1237_DOUT() PORT_GetBit(LEFTLOW_CS1237_DOUT_PORTx, LEFTLOW_CS1237_DOUT_PINx)
#define LEFTLOW_CS1237_SCLK_PORTx (PortB) #define LEFTLOW_CS1237_SCLK_PORTx (PortB)
#define LEFTLOW_CS1237_SCLK_PINx (Pin00) #define LEFTLOW_CS1237_SCLK_PINx (Pin00)
#define SET_LEFTLOW_CS1237_SCLK() PORT_SetBits(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)//拉低 #define CLR_LEFTLOW_CS1237_SCLK() PORT_ResetBits(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_CS1237_SCLK_PINx)//拉低
#endif #endif
//< 右上 CS1237 //< 右上 CS1237
#if(USE_CS1237_RIGHTUP == 1) #if(USE_CS1237_RIGHTUP == 1)
#define RIGHTUP_CS1237_IRQn (Int003_IRQn) #define RIGHTUP_CS1237_IRQn (Int003_IRQn)
#define RIGHTUP_CS1237_DOUT_PORTx (PortA) #define RIGHTUP_CS1237_DOUT_PORTx (PortA)
#define RIGHTUP_CS1237_DOUT_PINx (Pin04) #define RIGHTUP_CS1237_DOUT_PINx (Pin04)
#define SET_RIGHTUP_CS1237_DOUT() PORT_SetBits(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 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 GET_RIGHTUP_CS1237_DOUT() PORT_GetBit(RIGHTUP_CS1237_DOUT_PORTx, RIGHTUP_CS1237_DOUT_PINx)
#define RIGHTUP_CS1237_SCLK_PORTx (PortA) #define RIGHTUP_CS1237_SCLK_PORTx (PortA)
#define RIGHTUP_CS1237_SCLK_PINx (Pin05) #define RIGHTUP_CS1237_SCLK_PINx (Pin05)
#define SET_RIGHTUP_CS1237_SCLK() PORT_SetBits(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)//拉低 #define CLR_RIGHTUP_CS1237_SCLK() PORT_ResetBits(RIGHTUP_CS1237_SCLK_PORTx, RIGHTUP_CS1237_SCLK_PINx)//拉低
#endif #endif
//< 右下 CS1237 //< 右下 CS1237
#if(USE_CS1237_RIGHTLOW == 1) #if(USE_CS1237_RIGHTLOW == 1)
#define RIGHTLOW_CS1237_IRQn (Int004_IRQn) #define RIGHTLOW_CS1237_IRQn (Int004_IRQn)
#define RIGHTLOW_CS1237_DOUT_PORTx (PortA) #define RIGHTLOW_CS1237_DOUT_PORTx (PortA)
#define RIGHTLOW_CS1237_DOUT_PINx (Pin06) #define RIGHTLOW_CS1237_DOUT_PINx (Pin06)
#define SET_RIGHTLOW_CS1237_DOUT() PORT_SetBits(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 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 GET_RIGHTLOW_CS1237_DOUT() PORT_GetBit(RIGHTLOW_CS1237_DOUT_PORTx, RIGHTLOW_CS1237_DOUT_PINx)
#define RIGHTLOW_CS1237_SCLK_PORTx (PortA) #define RIGHTLOW_CS1237_SCLK_PORTx (PortA)
#define RIGHTLOW_CS1237_SCLK_PINx (Pin07) #define RIGHTLOW_CS1237_SCLK_PINx (Pin07)
#define SET_RIGHTLOW_CS1237_SCLK() PORT_SetBits(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)//拉低 #define CLR_RIGHTLOW_CS1237_SCLK() PORT_ResetBits(RIGHTLOW_CS1237_SCLK_PORTx, RIGHTLOW_CS1237_SCLK_PINx)//拉低
#endif #endif
//< BIT0 //< BIT0
#define TWIN_BIT0_PORTx (PortB) #define TWIN_BIT0_PORTx (PortB)
#define TWIN_BIT0_PINx (Pin12) #define TWIN_BIT0_PINx (Pin12)
#define SET_TWIN_BIT0() PORT_SetBits(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 CLR_TWIN_BIT0() PORT_ResetBits(TWIN_BIT0_PORTx, TWIN_BIT0_PINx)//拉低
#define GET_BIT0_DOUT() PORT_GetBit(TWIN_BIT0_PORTx, TWIN_BIT0_PINx) #define GET_BIT0_DOUT() PORT_GetBit(TWIN_BIT0_PORTx, TWIN_BIT0_PINx)
//< BIT1 //< BIT1
#define TWIN_BIT1_PORTx (PortB) #define TWIN_BIT1_PORTx (PortB)
#define TWIN_BIT1_PINx (Pin13) #define TWIN_BIT1_PINx (Pin13)
#define SET_TWIN_BIT1() PORT_SetBits(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 CLR_TWIN_BIT1() PORT_ResetBits(TWIN_BIT1_PORTx, TWIN_BIT1_PINx)//拉低
#define GET_BIT1_DOUT() PORT_GetBit(TWIN_BIT1_PORTx, TWIN_BIT1_PINx) #define GET_BIT1_DOUT() PORT_GetBit(TWIN_BIT1_PORTx, TWIN_BIT1_PINx)
//< BUZZER //< BUZZER
#define BUZZER_PORTx (PortB) #define BUZZER_PORTx (PortB)
#define BUZZER_PINx (Pin15) #define BUZZER_PINx (Pin15)
#define BUZZER_ON() PORT_SetBits(BUZZER_PORTx, BUZZER_PINx)//拉高 #define BUZZER_ON() PORT_SetBits(BUZZER_PORTx, BUZZER_PINx)//拉高
#define BUZZER_OFF() PORT_ResetBits(BUZZER_PORTx, BUZZER_PINx)//拉低 #define BUZZER_OFF() PORT_ResetBits(BUZZER_PORTx, BUZZER_PINx)//拉低
//< LED //< LED
#define LED_GREEN_PORTx (PortA) #define LED_GREEN_PORTx (PortA)
#define LED_GREEN_PINx (Pin08) #define LED_GREEN_PINx (Pin08)
#define LED_GREEN_ON() PORT_SetBits(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_GREEN_OFF() PORT_ResetBits(LED_GREEN_PORTx, LED_GREEN_PINx)//拉低
#define LED_RED_PORTx (PortA) #define LED_RED_PORTx (PortA)
#define LED_RED_PINx (Pin09) #define LED_RED_PINx (Pin09)
#define LED_RED_ON() PORT_SetBits(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)//拉低 #define LED_RED_OFF() PORT_ResetBits(LED_RED_PORTx, LED_RED_PINx)//拉低
typedef struct { typedef struct {
int32_t ControlLevel;//控制等级 int32_t ControlLevel;//控制等级
int32_t DBGWaveOut;//调试波形输出 int32_t DBGWaveOut;//调试波形输出
}__attribute__ ((packed))LayoutPara_t, *LayoutPara;//上位机下发的配置参数 }__attribute__ ((packed))LayoutPara_t, *LayoutPara;//上位机下发的配置参数
typedef struct { typedef struct {
LayoutPara_t Layout; LayoutPara_t Layout;
uint32_t FactoryFlag;//出厂标志位 uint32_t FactoryFlag;//出厂标志位
}AppPara_T, *pAppPara; }AppPara_T, *pAppPara;
#define SAVE_APP_PARA(addr) FlashWrite(addr, sizeof(App.Para) / 4) #define SAVE_APP_PARA(addr) FlashWrite(addr, sizeof(App.Para) / 4)
+50 -43
View File
@@ -13,13 +13,13 @@
#define SLOPE_VPT 1000 #define SLOPE_VPT 1000
#define PRESS_VPT 3 #define PRESS_VPT 3
#define FOLLOW_VPT 10 #define FOLLOW_VPT 10
#define SHIELD_VPT 2 #define SHIELD_VPT 1.5
#define EME_STOP_VPT 4000 #define EME_STOP_VPT 4000
#define CENTRE_FRONT_CNT 0 #define CENTRE_FRONT_CNT 0
#define CENTRE_FRONT_SUM 0 #define CENTRE_FRONT_SUM 0
#define CENTRE_FRONT_VPT 0 #define CENTRE_FRONT_VPT 0
#define CENTRE_VPT 0 #define CENTRE_VPT 2000
#define STOP_TIME_MS 500 #define STOP_TIME_MS 500
#define CENT_TIME_MS 200 #define CENT_TIME_MS 200
@@ -30,8 +30,11 @@
#define TRAVEL_TIME_MS 50000 #define TRAVEL_TIME_MS 50000
#define PEAK 1200 //1200mm #define PEAK 1430 //最高高度mm
#define VALLEY 720 //720mm #define VALLEY 1000 //最低高度mm
/*高度转应力表索引: 补偿表431点覆盖1000~1430mm(430个步进), h<1000时钳位到0防止越界*/
#define HEIGHT_TO_IDX(h) ((h) < 1000 ? 0 : ((h) - 1000))
#define BDC_STOP() (SET_TWIN_BIT0(),SET_TWIN_BIT1()) #define BDC_STOP() (SET_TWIN_BIT0(),SET_TWIN_BIT1())
#define BDC_DOWN() (SET_TWIN_BIT0(),CLR_TWIN_BIT1()) #define BDC_DOWN() (SET_TWIN_BIT0(),CLR_TWIN_BIT1())
@@ -41,43 +44,49 @@
//#define BDC_UP() Motor_Control(MOTOR_CMD_FORWARD) //#define BDC_UP() Motor_Control(MOTOR_CMD_FORWARD)
//#define BDC_DOWN() Motor_Control(MOTOR_CMD_REVERSE) //#define BDC_DOWN() Motor_Control(MOTOR_CMD_REVERSE)
/*控制等级*/ /*控制等级*/
typedef enum { typedef enum {
LEVEL_1 = 1, // 一级 LEVEL_1 = 1, // 一级
LEVEL_2 = 2, // 二级 LEVEL_2 = 2, // 二级
LEVEL_3 = 3, // 三级 LEVEL_3 = 3, // 三级
LEVEL_4 = 4, // 四级 LEVEL_4 = 4, // 四级
LEVEL_5 = 5 // 五级 LEVEL_5 = 5 // 五级
}ControlLevel_m; }ControlLevel_m;
/*设备阈值*/ /*设备阈值*/
typedef struct{ typedef struct{
int32_t Slope_VPT; int32_t Slope_VPT;
int32_t Stop_VPT; int32_t Stop_VPT;
int32_t LeftUpVPT;//左上设备阈值 int32_t LeftUpVPT;//左上设备阈值
int32_t LeftLowVPT;//左下设备阈值 int32_t LeftLowVPT;//左下设备阈值
int32_t RightUpVPT;//右上设备阈值 int32_t RightUpVPT;//右上设备阈值
int32_t RightLowVPT;//右下设备阈值 int32_t RightLowVPT;//右下设备阈值
int32_t LeftUp_Org_AdZero;//左上设备原始AD零点 int32_t LeftUpShieldVPT; //左上屏蔽阈值
int32_t LeftLow_Org_AdZero;//左下设备原始AD零点 int32_t LeftLowShieldVPT; //左下屏蔽阈值
int32_t RightUp_Org_AdZero;//右上设备原始AD零点 int32_t RightUpShieldVPT; //右上屏蔽阈值
int32_t RightLow_Org_AdZero;//右下设备原始AD零点 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零点
}ADTrack_t; }ADTrack_t;
typedef struct{//电机参数 typedef struct{//电机参数
bool InitialFlag;//初始标志位 bool InitialFlag;//初始标志位
bool RestFlag; bool RestFlag;
bool OverheatFlag;//过热标志: 收到过热帧后置true, 持续下降触发控制盒复位
bool CaliFlag; bool CaliFlag;
bool LoopOne;//循环一次标志位 bool LoopOne;//循环一次标志位
int16_t Current_height;//当前高度mm int16_t Current_height;//当前高度mm(控制盒上报1000~1430)
int16_t CaliNum;//标校数量 int16_t CaliNum;//标校数量
int32_t LU_HeightStress[488];//左上传感器对应高度应力 int32_t LU_HeightStress[431];//左上传感器对应高度应力
int32_t LL_HeightStress[488];//左下传感器对应高度应力 int32_t LL_HeightStress[431];//左下传感器对应高度应力
int32_t RU_HeightStress[488];//右上传感器对应高度应力 int32_t RU_HeightStress[431];//右上传感器对应高度应力
int32_t RL_HeightStress[488];//右传感器对应高度应力 int32_t RL_HeightStress[431];//右传感器对应高度应力
}MotorPara_t; }MotorPara_t;
/*数据读取状态机*/ /*数据读取状态机*/
typedef enum { typedef enum {
READ_STATUS_IDLE, READ_STATUS_IDLE,
READ_STATUS_START, READ_STATUS_START,
@@ -92,17 +101,19 @@ typedef enum {
READ_STATUS_SUPPORT_CONT READ_STATUS_SUPPORT_CONT
}ReadStatus_m; }ReadStatus_m;
/*主程序状态机*/ /*主程序状态机*/
typedef enum { typedef enum {
APP_STATUS_IDLE, APP_STATUS_IDLE,
APP_STATUS_ON, APP_STATUS_ON,
APP_STATUS_OFF, APP_STATUS_OFF,
APP_STATUS_START_BEEP,
APP_STATUS_MOTOR_INIT, APP_STATUS_MOTOR_INIT,
APP_STATUS_ZERO_MARKING,
APP_STATUS_WAIT_MOTOR_INIT, APP_STATUS_WAIT_MOTOR_INIT,
APP_STATUS_WAIT_MOTOR_CALI_UP, APP_STATUS_WAIT_MOTOR_CALI_UP,
APP_STATUS_WAIT_MOTOR_CALI_DOWN, APP_STATUS_WAIT_MOTOR_CALI_DOWN,
APP_STATUS_WAIT_STEADY, APP_STATUS_WAIT_STEADY,
APP_STATUS_ZERO_MARKING, APP_STATUS_END_BEEP,
APP_STATUS_HEIGHT_CONTROL, APP_STATUS_HEIGHT_CONTROL,
}AppStatus_m; }AppStatus_m;
@@ -121,7 +132,7 @@ typedef struct{
}Uart3Rx_t; }Uart3Rx_t;
typedef struct { typedef struct {
AppStatus_m Status;//状态 AppStatus_m Status;//状态
ReadStatus_m RStatus; ReadStatus_m RStatus;
AppPara_T Para; AppPara_T Para;
Uart1Rx_t RxUart1Data; Uart1Rx_t RxUart1Data;
@@ -140,14 +151,15 @@ typedef struct {
uint32_t SlopeCollDelay1mSCnt; uint32_t SlopeCollDelay1mSCnt;
uint32_t CailUp1mSCnt; uint32_t CailUp1mSCnt;
uint32_t HeightContRolCnt; uint32_t HeightContRolCnt;
uint32_t RestStop1mSCnt;//复位停顿计时: 收到复位帧后先停止电机, 计时结束再下降触发复位
uint8_t FeedDogDlyCnt; uint8_t FeedDogDlyCnt;
bool CaliZeroFlag;//校零标志位 bool CaliZeroFlag;//校零标志位
bool SideFlag;//侧压标志位 bool SideFlag;//侧压标志位
bool UpFlag;//上升标志位 bool UpFlag;//上升标志位
bool DownFlag;//下降标志位 bool DownFlag;//下降标志位
bool StopFlag;//停止标志位 bool StopFlag;//停止标志位
bool EmeFlag;//应急标志位 bool EmeFlag;//应急标志位
bool LeftRunFalg; bool LeftRunFalg;
bool RightRunFalg; bool RightRunFalg;
bool CentreRunFalg; bool CentreRunFalg;
@@ -167,11 +179,6 @@ typedef struct {
int32_t RightUpCS1237_SlopeArray[SLOPE_CNT]; int32_t RightUpCS1237_SlopeArray[SLOPE_CNT];
int32_t RightLowCS1237_SlopeArray[SLOPE_CNT]; int32_t RightLowCS1237_SlopeArray[SLOPE_CNT];
int32_t aaa;
int32_t bbb;
int32_t ccc;
int32_t ddd;
bool WaitFlag; bool WaitFlag;
}AppDetect_t; }AppDetect_t;
extern AppDetect_t App; extern AppDetect_t App;
File diff suppressed because it is too large Load Diff
+264 -62
View File
@@ -55,27 +55,27 @@ void vcom_Send( char *format, ... )
va_end(args); va_end(args);
} }
// 定义一个函数vcom_Print,用于打印字符串 // 定义一个函数vcom_Print,用于打印字符串
void vcom_Print(uint8_t sLen) void vcom_Print(uint8_t sLen)
{ {
// 定义一个字符指针CurChar // 定义一个字符指针CurChar
char* CurChar; char* CurChar;
// 初始化ir // 初始化ir
ir = 0; ir = 0;
// 当ir小于sLen时,循环执行 // 当ir小于sLen时,循环执行
while(ir < sLen) while(ir < sLen)
{ {
// 获取字符指针CurChar // 获取字符指针CurChar
CurChar = &buff[ir++]; CurChar = &buff[ir++];
// 调用DebugUartSend函数,发送CurChar指向的字符,次数为1 // 调用DebugUartSend函数,发送CurChar指向的字符,次数为1
DebugUartSend((uint8_t*)CurChar, 1); DebugUartSend((uint8_t*)CurChar, 1);
} }
} }
// 定义一个函数vcom_Send2,用于发送字符串 // 定义一个函数vcom_Send2,用于发送字符串
void vcom_Send2(uint8_t *sData, uint16_t len) void vcom_Send2(uint8_t *sData, uint16_t len)
{ {
// 遍历sData,将每个元素发送到DebugUartSend // 遍历sData,将每个元素发送到DebugUartSend
for(int i = 0; i < len; i++) { for(int i = 0; i < len; i++) {
DebugUartSend(&sData[i], 1); DebugUartSend(&sData[i], 1);
} }
@@ -90,7 +90,7 @@ void DebugLoopHandler(void)
return; return;
//for(argv[argc] = strtok(RxBuff, " "); argv[argc] != NULL; argv[++argc] = strtok(NULL, " ")); //for(argv[argc] = strtok(RxBuff, " "); argv[argc] != NULL; argv[++argc] = strtok(NULL, " "));
// 解析字符串,将参数放入argv数组中 // 解析字符串,将参数放入argv数组中
argp = strtok(RxBuff, " "); argp = strtok(RxBuff, " ");
for(int i = 0; i < 10; i++) { for(int i = 0; i < 10; i++) {
if(argp != NULL) { if(argp != NULL) {
@@ -103,19 +103,19 @@ void DebugLoopHandler(void)
} }
} }
// 获取第一个参数,并将其赋值给argp // 获取第一个参数,并将其赋值给argp
argp = strtok(argv[argc], "'\r'"); argp = strtok(argv[argc], "'\r'");
// 如果argp不为空,则将argp的值赋值给argv[argc],并将argc加1 // 如果argp不为空,则将argp的值赋值给argv[argc],并将argc加1
if(argp != NULL) { if(argp != NULL) {
argv[argc++] = argp; argv[argc++] = argp;
} }
// 否则,将RxLen设置为0,并返回 // 否则,将RxLen设置为0,并返回
else { else {
RxLen = 0; RxLen = 0;
return; return;
} }
// 遍历DebugFun数组,查找argv[0]是否与DBGCmd匹配,若匹配则调用DBGExec函数 // 遍历DebugFun数组,查找argv[0]是否与DBGCmd匹配,若匹配则调用DBGExec函数
for(int i = 0; i < DEBUG_CMD_CNT; i++) { for(int i = 0; i < DEBUG_CMD_CNT; i++) {
if(strcmp(argv[0], DebugFun[i].DBGCmd) == 0) if(strcmp(argv[0], DebugFun[i].DBGCmd) == 0)
DebugFun[i].DBGExec(argc, argv); DebugFun[i].DBGExec(argc, argv);
@@ -130,54 +130,54 @@ void DebugLoopHandler(void)
uint32_t RxTimeCurrent; uint32_t RxTimeCurrent;
uint32_t RxTimeLast = 0; uint32_t RxTimeLast = 0;
// 函数:Dbg1msRoutine // 函数:Dbg1msRoutine
// 功能:1ms调试时钟routine // 功能:1ms调试时钟routine
void Dbg1msRoutine(void) void Dbg1msRoutine(void)
{ {
// 如果1ms调试时钟计数器大于0 // 如果1ms调试时钟计数器大于0
if(DebugRxTimeOut1mSCnt > 0) if(DebugRxTimeOut1mSCnt > 0)
// 1ms调试时钟计数器减1 // 1ms调试时钟计数器减1
DebugRxTimeOut1mSCnt--; DebugRxTimeOut1mSCnt--;
} }
// 定义函数DbgUsartRxIrqCallback,用于处理串口接收中断 // 定义函数DbgUsartRxIrqCallback,用于处理串口接收中断
void DbgUsartRxIrqCallback(void) void DbgUsartRxIrqCallback(void)
{ {
// 如果1分钟超时计数器为0,则清空RxLen // 如果1分钟超时计数器为0,则清空RxLen
if(DebugRxTimeOut1mSCnt == 0) if(DebugRxTimeOut1mSCnt == 0)
RxLen = 0; RxLen = 0;
// 重置1分钟超时计数器 // 重置1分钟超时计数器
DebugRxTimeOut1mSCnt = 3; DebugRxTimeOut1mSCnt = 3;
// 读取串口接收到的数据 // 读取串口接收到的数据
uint8_t Data = DbgUartRec(); uint8_t Data = DbgUartRec();
// 如果RxLen小于128,则将数据添加到RxBuff中 // 如果RxLen小于128,则将数据添加到RxBuff中
if(RxLen < 128) { if(RxLen < 128) {
RxBuff[RxLen++] = Data; RxBuff[RxLen++] = Data;
} }
// DBG_LOG("RxBuff = %s\n", RxBuff); // DBG_LOG("RxBuff = %s\n", RxBuff);
// RS485_Flag=1;//接收标志为置1 // RS485_Flag=1;//接收标志为置1
} }
void DebugTest(int argc, char *argv[]) void DebugTest(int argc, char *argv[])
{ {
// 如果参数个数小于2,则返回 // 如果参数个数小于2,则返回
if(argc < 2) if(argc < 2)
return; return;
// 如果参数为“?”,则打印帮助信息 // 如果参数为“?”,则打印帮助信息
if(strcmp(argv[1], "?") == 0) if(strcmp(argv[1], "?") == 0)
{ {
DBG_LOG("Debug Cmd:\r\n\ DBG_LOG("Debug Cmd:\r\n\
disp task on/off -->Open the task display.\r\n"); disp task on/off -->Open the task display.\r\n");
return; return;
} }
// 如果参数为“on”,则打印“Test ON” // 如果参数为“on”,则打印“Test ON”
if(strcmp(argv[1], "on") == 0) if(strcmp(argv[1], "on") == 0)
{ {
// TestOn(); // TestOn();
DBG_LOG("Test ON\r\n"); DBG_LOG("Test ON\r\n");
} }
// 如果参数为“off”,则打印“Test OFF” // 如果参数为“off”,则打印“Test OFF”
else if(strcmp(argv[1], "off") == 0) else if(strcmp(argv[1], "off") == 0)
{ {
// TestOFF(); // TestOFF();
@@ -221,51 +221,51 @@ void DebugCmdHelp(int argc, char *argv[])
} }
#if 0 #if 0
//// 定义一个无参函数DebugReadData,用于读取数据 //// 定义一个无参函数DebugReadData,用于读取数据
//void DebugReadData(int argc, char *argv[]) //void DebugReadData(int argc, char *argv[])
//{ //{
// // 定义一个无符号32位整数ADReadStart,初始值为0 // // 定义一个无符号32位整数ADReadStart,初始值为0
// uint32_t ADReadStart = 0; // uint32_t ADReadStart = 0;
// // 定义一个ADData_t类型的数组ADBuff,大小为640 // // 定义一个ADData_t类型的数组ADBuff,大小为640
// ADData_t ADBuff[640]; // ADData_t ADBuff[640];
// //
// // 当ADReadStart小于SDCARD_BLOCK_MAX时,循环执行 // // 当ADReadStart小于SDCARD_BLOCK_MAX时,循环执行
// while(ADReadStart < SDCARD_BLOCK_MAX) { // while(ADReadStart < SDCARD_BLOCK_MAX) {
// // 使用SDCardReadBlocks函数读取数据,从ADReadStart开始,读取10个块,数据存储在ADBuff中 // // 使用SDCardReadBlocks函数读取数据,从ADReadStart开始,读取10个块,数据存储在ADBuff中
// SDCardReadBlocks(ADReadStart, 10, (uint8_t *)ADBuff); // SDCardReadBlocks(ADReadStart, 10, (uint8_t *)ADBuff);
// // 遍历ADBuff数组,将每个元素打印出来 // // 遍历ADBuff数组,将每个元素打印出来
// for(int i = 0; i < 640; i++) { // 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); // 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; // ADReadStart += 10;
// } // }
//} //}
//// 定义一个函数SetTime,参数为int argc和char *argv[] //// 定义一个函数SetTime,参数为int argc和char *argv[]
//void SetTime(int argc, char *argv[]) //void SetTime(int argc, char *argv[])
//{ //{
// // 定义一个字符数组test,并初始化为0 // // 定义一个字符数组test,并初始化为0
// char test[10] = 0; // char test[10] = 0;
// // 定义一个整数num,并初始化为0 // // 定义一个整数num,并初始化为0
// int num = 0; // int num = 0;
// // 如果argc小于2,则返回 // // 如果argc小于2,则返回
// if(argc < 2) // if(argc < 2)
// return; // return;
// // 如果argv[1]等于"?",则打印提示信息 // // 如果argv[1]等于"?",则打印提示信息
// if(strcmp(argv[1], "?") == 0) // if(strcmp(argv[1], "?") == 0)
// { // {
// DBG_LOG("SetTime Cmd:\r\n\ // DBG_LOG("SetTime Cmd:\r\n\
// disp task on/off -->Open the task display.\r\n"); // disp task on/off -->Open the task display.\r\n");
// return; // return;
// } // }
// // 将argv[1]的值复制到test // // 将argv[1]的值复制到test
// memcpy(test, (char *)argv[1], 10); // memcpy(test, (char *)argv[1], 10);
// // 将test转换为整数 // // 将test转换为整数
// num = atoi(test); // num = atoi(test);
// // 调用TimeSync函数,并将num作为参数传入 // // 调用TimeSync函数,并将num作为参数传入
// TimeSync(num); // TimeSync(num);
//} //}
#endif #endif
@@ -274,24 +274,24 @@ extern uint8_t KeyBSta;
extern uint8_t RunSta; extern uint8_t RunSta;
void MotorSwitch(int argc, char *argv[]) void MotorSwitch(int argc, char *argv[])
{ {
// 如果参数个数小于2,则返回 // 如果参数个数小于2,则返回
if(argc < 2) if(argc < 2)
return; return;
// 如果第一个参数为?,则打印帮助信息 // 如果第一个参数为?,则打印帮助信息
if(strcmp(argv[1], "?") == 0) if(strcmp(argv[1], "?") == 0)
{ {
DBG_LOG("DCMotor Cmd:\r\n\ DBG_LOG("DCMotor Cmd:\r\n\
motor F/R/S -->Turn the motor on or off.\r\n"); motor F/R/S -->Turn the motor on or off.\r\n");
return; return;
} }
// 如果第一个参数为on,则开启SonarWork // 如果第一个参数为on,则开启SonarWork
if(strcmp(argv[1], "R") == 0) if(strcmp(argv[1], "R") == 0)
{ {
KeyASta = true; KeyASta = true;
Motor_Control(MOTOR_CMD_REVERSE); Motor_Control(MOTOR_CMD_REVERSE);
DBG_LOG("Motor FORWARD\r\n"); DBG_LOG("Motor FORWARD\r\n");
} }
// 如果第一个参数为off,则关闭SonarWork // 如果第一个参数为off,则关闭SonarWork
else if(strcmp(argv[1], "F") == 0) else if(strcmp(argv[1], "F") == 0)
{ {
KeyBSta = true; KeyBSta = true;
@@ -309,56 +309,56 @@ void MotorSwitch(int argc, char *argv[])
extern void GradeControl(ControlLevel_m level); extern void GradeControl(ControlLevel_m level);
void LevelSwitch(int argc, char *argv[]) void LevelSwitch(int argc, char *argv[])
{ {
// 如果参数个数小于2,则返回 // 如果参数个数小于2,则返回
if(argc < 2) if(argc < 2)
return; return;
// 如果参数为“?”,则打印帮助信息 // 如果参数为“?”,则打印帮助信息
if(strcmp(argv[1], "?") == 0) if(strcmp(argv[1], "?") == 0)
{ {
DBG_LOG("level Cmd:\r\n\ DBG_LOG("level Cmd:\r\n\
level 1/2/3/4/5 -->Select control level.\r\n"); level 1/2/3/4/5 -->Select control level.\r\n");
return; return;
} }
// 如果参数为“1”,则打印“Set control level: 1” // 如果参数为“1”,则打印“Set control level: 1”
if(strcmp(argv[1], "1") == 0) 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); SAVE_APP_PARA((uint32_t *)&App.Para);
DBG_LOG("Set control level: 1\r\n"); DBG_LOG("Set control level: 1\r\n");
DBG_LOG("SystemReset...\r\n"); DBG_LOG("SystemReset...\r\n");
NVIC_SystemReset(); NVIC_SystemReset();
} }
// 如果参数为“2”,则打印“Set control level: 2” // 如果参数为“2”,则打印“Set control level: 2”
else if(strcmp(argv[1], "2") == 0) 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); SAVE_APP_PARA((uint32_t *)&App.Para);
DBG_LOG("Set control level: 2\r\n"); DBG_LOG("Set control level: 2\r\n");
DBG_LOG("SystemReset...\r\n"); DBG_LOG("SystemReset...\r\n");
NVIC_SystemReset(); NVIC_SystemReset();
} }
// 如果参数为“3”,则打印“Set control level: 1” // 如果参数为“3”,则打印“Set control level: 1”
else if(strcmp(argv[1], "3") == 0) 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); SAVE_APP_PARA((uint32_t *)&App.Para);
DBG_LOG("Set control level: 3\r\n"); DBG_LOG("Set control level: 3\r\n");
DBG_LOG("SystemReset...\r\n"); DBG_LOG("SystemReset...\r\n");
NVIC_SystemReset(); NVIC_SystemReset();
} }
// 如果参数为“4”,则打印“Set control level: 4” // 如果参数为“4”,则打印“Set control level: 4”
else if(strcmp(argv[1], "4") == 0) 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); SAVE_APP_PARA((uint32_t *)&App.Para);
DBG_LOG("Set control level: 4\r\n"); DBG_LOG("Set control level: 4\r\n");
DBG_LOG("SystemReset...\r\n"); DBG_LOG("SystemReset...\r\n");
NVIC_SystemReset(); NVIC_SystemReset();
} }
// 如果参数为“5”,则打印“Set control level: 5” // 如果参数为“5”,则打印“Set control level: 5”
else if(strcmp(argv[1], "5") == 0) 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); SAVE_APP_PARA((uint32_t *)&App.Para);
DBG_LOG("Set control level: 5\r\n"); DBG_LOG("Set control level: 5\r\n");
DBG_LOG("SystemReset...\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[]) void DBGWave_on_off(int argc, char *argv[])
{ {
// 如果参数个数小于2,则返回 // 如果参数个数小于2,则返回
if(argc < 2) if(argc < 2)
return; return;
// 如果参数为“?”,则打印帮助信息 // 如果参数为“?”,则打印帮助信息
if(strcmp(argv[1], "?") == 0) if(strcmp(argv[1], "?") == 0)
{ {
DBG_LOG("wave Cmd:\r\n\ DBG_LOG("wave Cmd:\r\n\
wave on/off -->Turn on or off waveform output.\r\n"); wave on/off -->Turn on or off waveform output.\r\n");
return; return;
} }
// 如果参数为“on”,则打印“Test ON” // 如果参数为“on”,则打印“Test ON”
if(strcmp(argv[1], "on") == 0) if(strcmp(argv[1], "on") == 0)
{ {
App.Para.Layout.DBGWaveOut = true; App.Para.Layout.DBGWaveOut = true;
SAVE_APP_PARA((uint32_t *)&App.Para); SAVE_APP_PARA((uint32_t *)&App.Para);
DBG_LOG("Waveform output on.\r\n"); DBG_LOG("Waveform output on.\r\n");
} }
// 如果参数为“off”,则打印“Test OFF” // 如果参数为“off”,则打印“Test OFF”
else if(strcmp(argv[1], "off") == 0) else if(strcmp(argv[1], "off") == 0)
{ {
App.Para.Layout.DBGWaveOut = false; App.Para.Layout.DBGWaveOut = false;
@@ -400,6 +400,208 @@ const DBGFunType DebugFun[DEBUG_CMD_CNT] = {
"wave", DBGWave_on_off, "wave", DBGWave_on_off,
}; };
/*=========================================================================================
* 函数名称: Uart3ErrLog_xxx
* 功能描述: 控制盒报错(01 04)→复位→恢复 观测打印。接收中断中仅推事件入环形缓冲(不打印),
* 由主循环Uart3ErrLogLoopHandler()统一打印, 完整呈现"触发报错→置复位标志→
* 复位过程多包回应→复位完成恢复正常"的时间线。
* 协议: 01 04 d2 d3 = 报错帧(d2/d3为错误码, 如过热); 01 01 h_hi h_lo = 高度帧(清除复位标志)
*=========================================================================================*/
#define U3ERR_EVT_MAX 16 /* 事件缓冲条数 */
#define U3ERR_STATUS_NUM 12 /* 主状态机状态个数 */
/* 事件类型 */
#define U3ERR_T_FIRST 0 /* 首次信息帧(复位标志 0→1) */
#define U3ERR_T_REPLY 1 /* 复位中回应信息帧(复位标志已置位) */
#define U3ERR_T_DONE 2 /* 复位完成(收到高度帧, 复位标志 1→0) */
#define U3ERR_T_UNKNOWN 3 /* 未知帧(非高度/信息帧, 用于捕捉过热等其它报错) */
typedef struct{
uint8_t Type; /* 事件类型 */
uint8_t Bits; /* BIT0/BIT1 输出电平(bit0/bit1) */
uint8_t Status; /* 事件时刻主状态机状态 */
uint8_t Frame[4]; /* 原始4字节帧 */
uint16_t Height; /* type2: 高度帧数值(mm) */
uint16_t Repeat; /* 连发合并的重复包数(不含首包) */
uint32_t Tick; /* 事件时刻(ms, 上电起) */
}U3ErrEvt_t;
/* 连发合并状态: 相同帧500ms内只计数不重复入队, 防止过热帧持续广播刷爆缓冲 */
static uint8_t m_U3ErrLastType = 0xFF; /* 上一帧类型(0xFF=无) */
static uint8_t m_U3ErrLastFrame[4]; /* 上一帧内容 */
static uint16_t m_U3ErrLastHeight = 0; /* 上一帧高度(type2) */
static uint32_t m_U3ErrLastTick = 0; /* 上一帧时刻 */
static uint16_t m_U3ErrRepeat = 0; /* 上一帧已合并的重复包数 */
static const char *m_U3ErrStatusName[U3ERR_STATUS_NUM] = {
"IDLE", "ON", "OFF", "START_BEEP", "MOTOR_INIT", "ZERO_MARKING",
"WAIT_MOTOR_INIT", "WAIT_MOTOR_CALI_UP", "WAIT_MOTOR_CALI_DOWN",
"WAIT_STEADY", "END_BEEP", "HEIGHT_CONTROL"
};
static U3ErrEvt_t m_U3ErrEvt[U3ERR_EVT_MAX]; /* 事件环形缓冲 */
static volatile uint16_t m_U3ErrWr = 0; /* 写指针(中断) */
static volatile uint16_t m_U3ErrRd = 0; /* 读指针(主循环) */
static volatile uint32_t m_U3ErrLostCnt = 0; /* 缓冲满时丢弃条数 */
/* 函数名称: Uart3ErrLog_Enqueue
* 功能描述: 将事件落入队列(内部使用, 关中断保护) */
static void Uart3ErrLog_Enqueue(uint8_t type, const uint8_t *pFrame, uint16_t height, uint32_t tick, uint16_t repeat)
{
U3ErrEvt_t evt;
evt.Type = type;
evt.Bits = (uint8_t)((GET_BIT0_DOUT() ? 0x01u : 0u) | (GET_BIT1_DOUT() ? 0x02u : 0u));
evt.Status = (uint8_t)App.Status;
evt.Frame[0] = pFrame[0];
evt.Frame[1] = pFrame[1];
evt.Frame[2] = pFrame[2];
evt.Frame[3] = pFrame[3];
evt.Height = height;
evt.Repeat = repeat;
evt.Tick = tick;
uint32_t primask = __get_PRIMASK();
__disable_irq();
uint16_t next = (uint16_t)((m_U3ErrWr + 1U) % U3ERR_EVT_MAX);
if(next != m_U3ErrRd){ /* 未满则入队 */
m_U3ErrEvt[m_U3ErrWr] = evt;
m_U3ErrWr = next;
}
else{ /* 满则丢弃当前条并计数 */
m_U3ErrLostCnt++;
}
if(primask == 0U){
__enable_irq();
}
}
/* 函数名称: Uart3ErrLog_Push
* 功能描述: 记录一条报错/复位事件(在USART3接收中断中调用)。相同帧500ms内连发只合并计数,
* 由主循环在连发结束(超时)或出现新帧时落一条带"连发N包"的事件, 避免缓冲溢出 */
void Uart3ErrLog_Push(uint8_t type, const uint8_t *pFrame, uint16_t height)
{
uint32_t tick = SysTick_GetTick();
/* 连发合并: 与上一帧类型/内容相同且间隔<500ms(type2复位完成除外), 只计数 */
if((m_U3ErrLastType != 0xFF) && (type == m_U3ErrLastType) && (type != U3ERR_T_DONE) &&
(pFrame[0] == m_U3ErrLastFrame[0]) && (pFrame[1] == m_U3ErrLastFrame[1]) &&
(pFrame[2] == m_U3ErrLastFrame[2]) && (pFrame[3] == m_U3ErrLastFrame[3]) &&
((tick - m_U3ErrLastTick) < 500U))
{
m_U3ErrRepeat++;
m_U3ErrLastTick = tick;
return;
}
/* 与上一帧不同: 先把滞留的上一帧连同连发计数落队 */
if(m_U3ErrLastType != 0xFF){
Uart3ErrLog_Enqueue(m_U3ErrLastType, m_U3ErrLastFrame, m_U3ErrLastHeight, m_U3ErrLastTick, m_U3ErrRepeat);
m_U3ErrRepeat = 0;
}
/* 本帧记为新的滞留帧, 待其连发结束或下一帧到来时落队 */
m_U3ErrLastType = type;
m_U3ErrLastFrame[0] = pFrame[0];
m_U3ErrLastFrame[1] = pFrame[1];
m_U3ErrLastFrame[2] = pFrame[2];
m_U3ErrLastFrame[3] = pFrame[3];
m_U3ErrLastHeight = height;
m_U3ErrLastTick = tick;
}
/* 函数名称: Uart3ErrLog_BitsName
* 功能描述: BIT0/BIT1输出电平转"升/降/停"描述(ASCII, 避免AC5源码集问题) */
static const char *Uart3ErrLog_BitsName(uint8_t bits)
{
if((bits & 0x01u) && (bits & 0x02u)) return "STOP";
if(bits & 0x02u) return "UP";
if(bits & 0x01u) return "DOWN";
return "?";
}
/* 函数名称: Uart3ErrLog_CodeName
* 功能描述: 已知帧内容转义(发现新帧格式后在此扩充) */
static const char *Uart3ErrLog_CodeName(const uint8_t *pFrame)
{
if(pFrame[0] == 0x01 && pFrame[1] == 0x02 && pFrame[2] == 0x00 && pFrame[3] == 0x10) return "(OVERHEAT)";
if(pFrame[2] == 0x01 && pFrame[3] == 0xAA) return "(RESET)";
return "";
}
/* 函数名称: Uart3ErrLog_StatusName
* 功能描述: 主状态机状态值转可读名 */
static const char *Uart3ErrLog_StatusName(uint8_t status)
{
if(status < U3ERR_STATUS_NUM){
return m_U3ErrStatusName[status];
}
return "?";
}
/* 函数名称: Uart3ErrLogLoopHandler
* 功能描述: 主循环中调用, 打印报错→复位→恢复的完整事件时间线(连发帧合并为一条并显示包数) */
void Uart3ErrLogLoopHandler(void)
{
uint8_t cnt;
/* 连发已结束(超时500ms无同帧)且有滞留帧 → 先落队一条 */
if((m_U3ErrLastType != 0xFF) && (m_U3ErrRepeat > 0U) &&
((SysTick_GetTick() - m_U3ErrLastTick) >= 500U))
{
Uart3ErrLog_Enqueue(m_U3ErrLastType, m_U3ErrLastFrame, m_U3ErrLastHeight, m_U3ErrLastTick, m_U3ErrRepeat);
m_U3ErrLastType = 0xFF;
m_U3ErrRepeat = 0;
}
for(cnt = 0; cnt < 8U; cnt++){
char rep[20];
if(m_U3ErrRd == m_U3ErrWr){
break;
}
U3ErrEvt_t evt = m_U3ErrEvt[m_U3ErrRd];
m_U3ErrRd = (uint16_t)((m_U3ErrRd + 1U) % U3ERR_EVT_MAX);
uint32_t s = evt.Tick / 1000U;
uint32_t ms = evt.Tick % 1000U;
if(evt.Repeat > 0U){
sprintf(rep, ",burst %u", evt.Repeat + 1U);
}
else{
rep[0] = '\0';
}
switch(evt.Type){
case U3ERR_T_FIRST: /* 首次信息帧: 置复位标志 */
DBG_LOG("[T+%3u.%03us][%s|OUT:%s] INFO: code=0x%02X%02X%s -> SetRestFlag%s\r\n",
s, ms, Uart3ErrLog_StatusName(evt.Status),
Uart3ErrLog_BitsName(evt.Bits),
evt.Frame[2], evt.Frame[3],
Uart3ErrLog_CodeName(evt.Frame), rep);
break;
case U3ERR_T_REPLY: /* 复位中回应信息帧 */
DBG_LOG("[T+%3u.%03us][%s|OUT:%s] INFO-REPLY: code=0x%02X%02X%s (RestFlag set%s)\r\n",
s, ms, Uart3ErrLog_StatusName(evt.Status),
Uart3ErrLog_BitsName(evt.Bits),
evt.Frame[2], evt.Frame[3],
Uart3ErrLog_CodeName(evt.Frame), rep);
break;
case U3ERR_T_DONE: /* 复位完成: 收到高度帧 */
DBG_LOG("[T+%3u.%03us][%s|OUT:%s] Height=%dmm -> RestFlag cleared, normal\r\n",
s, ms, Uart3ErrLog_StatusName(evt.Status),
Uart3ErrLog_BitsName(evt.Bits), evt.Height);
break;
case U3ERR_T_UNKNOWN: /* 未知帧: 过热等其它报错可能在此 */
DBG_LOG("[T+%3u.%03us][%s|OUT:%s] UNKNOWN: %02X %02X %02X %02X %s(ATTENTION)%s\r\n",
s, ms, Uart3ErrLog_StatusName(evt.Status),
Uart3ErrLog_BitsName(evt.Bits),
evt.Frame[0], evt.Frame[1], evt.Frame[2], evt.Frame[3],
Uart3ErrLog_CodeName(evt.Frame), rep);
break;
default:
break;
}
}
if((m_U3ErrRd == m_U3ErrWr) && (m_U3ErrLostCnt > 0U)){ /* 缓冲曾溢出 */
uint32_t tick = SysTick_GetTick();
DBG_LOG("[T+%3u.%03us] NOTE: ErrLog buf overflow, lost %u events\r\n",
tick / 1000U, tick % 1000U, m_U3ErrLostCnt);
m_U3ErrLostCnt = 0;
}
}
#endif #endif
@@ -1,6 +1,6 @@
#include "Encryption.h" #include "Encryption.h"
//从机加密表 //从机加密表
const unsigned char EPT_Table[32][6] = { 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}, {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}, {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} {3, 6, 5, 4, 2, 1}, {1, 2, 6, 3, 5, 4}, {4, 6, 5, 3, 2, 1}, {5, 3, 4, 2, 6, 1}
}; };
//从机解密表: //从机解密表:
const unsigned char DPT_Table[32][5] ={ 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}, {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}, {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} {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] = { const unsigned char EPT_D[32] = {
0x23, 0x4c, 0x92, 0x38, 0x52, 0xa4, 0x9a, 0x61, 0x23, 0x4c, 0x92, 0x38, 0x52, 0xa4, 0x9a, 0x61,
0x86, 0xc8, 0x70, 0x16, 0x32, 0x58, 0x62, 0x83, 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) { void Encrypt_Code(unsigned char *data, unsigned char *EPT_data) {
unsigned char Edata[6]; unsigned char Edata[6];
@@ -60,11 +60,11 @@ void Encrypt_Code(unsigned char *data, unsigned char *EPT_data) {
} }
/****************************************************************/ /****************************************************************/
/* 解密函数 */ /* 解密函数 */
/* */ /* */
/*函数入口: *EPT_data,需要解密的加密协议 */ /*函数入口: *EPT_data,需要解密的加密协议 */
/* */ /* */
/*函数出口: *DPT_data,生成的普通协议 */ /*函数出口: *DPT_data,生成的普通协议 */
/****************************************************************/ /****************************************************************/
void Decrypt_Code(unsigned char *EPT_data,unsigned char *DPT_data) { void Decrypt_Code(unsigned char *EPT_data,unsigned char *DPT_data) {
unsigned char data[5]; unsigned char data[5];
+106 -106
View File
@@ -133,10 +133,10 @@ void FeedDog(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: Xtal32_ClockConfig * 函数名称: Xtal32_ClockConfig
* 功能描述: 外部低速时钟配置 * 功能描述: 外部低速时钟配置
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void Xtal32_ClockConfig(void) static void Xtal32_ClockConfig(void)
{ {
@@ -166,10 +166,10 @@ void delay_5ns(uint32_t ns)
} }
#if(USE_RS485 == 1) #if(USE_RS485 == 1)
/***************************************************************************************** /*****************************************************************************************
* 函数名称: RS485Uart_Config * 函数名称: RS485Uart_Config
* 功能描述: RS485串口初始化 * 功能描述: RS485串口初始化
* 参 数: BaudRate 波特率 * 参 数: BaudRate 波特率
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void RS485Uart_Config(uint32_t BaudRate) static void RS485Uart_Config(uint32_t BaudRate)
{ {
@@ -507,11 +507,11 @@ static void GPIO_Config(void)
MEM_ZERO_STRUCT(stcPortInit); MEM_ZERO_STRUCT(stcPortInit);
/********************************** GPIO输出 ****************************************/ /********************************** GPIO输出 ****************************************/
stcPortInit.enPinMode = Pin_Mode_Out; stcPortInit.enPinMode = Pin_Mode_Out;
stcPortInit.enPinOType = Pin_OType_Cmos; stcPortInit.enPinOType = Pin_OType_Cmos;
stcPortInit.enPinDrv = Pin_Drv_H; stcPortInit.enPinDrv = Pin_Drv_H;
stcPortInit.enPullUp = Disable;//无上拉 stcPortInit.enPullUp = Disable;//无上拉
PORT_Init(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx, &stcPortInit); PORT_Init(LEFTUP_CS1237_SCLK_PORTx, LEFTUP_CS1237_SCLK_PINx, &stcPortInit);
PORT_Init(LEFTLOW_CS1237_SCLK_PORTx, LEFTLOW_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_GREEN_OFF();
LED_RED_OFF(); LED_RED_OFF();
stcPortInit.enPullUp = Enable;//上拉 stcPortInit.enPullUp = Enable;//上拉
} }
void Bit0AndBit1_OUT(void) void Bit0AndBit1_OUT(void)
{ {
stc_port_init_t stcPortInit; stc_port_init_t stcPortInit;
MEM_ZERO_STRUCT(stcPortInit); MEM_ZERO_STRUCT(stcPortInit);
/********************************** GPIO输出 ****************************************/ /********************************** GPIO输出 ****************************************/
stcPortInit.enPinMode = Pin_Mode_Out; stcPortInit.enPinMode = Pin_Mode_Out;
stcPortInit.enPinOType = Pin_OType_Cmos; stcPortInit.enPinOType = Pin_OType_Cmos;
stcPortInit.enPinDrv = Pin_Drv_H; 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_BIT0_PORTx, TWIN_BIT0_PINx, &stcPortInit);
PORT_Init(TWIN_BIT1_PORTx, TWIN_BIT1_PINx, &stcPortInit); PORT_Init(TWIN_BIT1_PORTx, TWIN_BIT1_PINx, &stcPortInit);
SET_TWIN_BIT0(); SET_TWIN_BIT0();
@@ -547,14 +547,14 @@ void Bit0AndBit1_IN(void)
stc_port_init_t stcPortInit; stc_port_init_t stcPortInit;
MEM_ZERO_STRUCT(stcPortInit); MEM_ZERO_STRUCT(stcPortInit);
/********************************** GPIO输入 ****************************************/ /********************************** GPIO输入 ****************************************/
stcPortInit.enPinMode = Pin_Mode_In; stcPortInit.enPinMode = Pin_Mode_In;
stcPortInit.enPullUp = Disable;//无上拉 stcPortInit.enPullUp = Disable;//无上拉
PORT_Init(TWIN_BIT0_PORTx, TWIN_BIT0_PINx, &stcPortInit); PORT_Init(TWIN_BIT0_PORTx, TWIN_BIT0_PINx, &stcPortInit);
PORT_Init(TWIN_BIT1_PORTx, TWIN_BIT1_PINx, &stcPortInit); PORT_Init(TWIN_BIT1_PORTx, TWIN_BIT1_PINx, &stcPortInit);
} }
/*********************************左上传感器 /*********************************左上传感器
******************************************************************************* *******************************************************************************
** \brief ExtInt00 callback function ** \brief ExtInt00 callback function
** **
@@ -626,7 +626,7 @@ void ExtInt10IntDisable(void)
/* Disable NVIC */ /* Disable NVIC */
NVIC_DisableIRQ(LEFTUP_CS1237_IRQn); NVIC_DisableIRQ(LEFTUP_CS1237_IRQn);
} }
/*******************************左下传感器 /*******************************左下传感器
******************************************************************************* *******************************************************************************
** \brief ExtInt01 callback function ** \brief ExtInt01 callback function
** **
@@ -698,7 +698,7 @@ void ExtInt01IntDisable(void)
/* Disable NVIC */ /* Disable NVIC */
NVIC_DisableIRQ(LEFTLOW_CS1237_IRQn); NVIC_DisableIRQ(LEFTLOW_CS1237_IRQn);
} }
/*******************************右上传感器 /*******************************右上传感器
******************************************************************************* *******************************************************************************
** \brief ExtInt04 callback function ** \brief ExtInt04 callback function
** **
@@ -770,7 +770,7 @@ void ExtInt04IntDisable(void)
/* Disable NVIC */ /* Disable NVIC */
NVIC_DisableIRQ(RIGHTUP_CS1237_IRQn); NVIC_DisableIRQ(RIGHTUP_CS1237_IRQn);
} }
/*******************************右下传感器 /*******************************右下传感器
******************************************************************************* *******************************************************************************
** \brief ExtInt04 callback function ** \brief ExtInt04 callback function
** **
@@ -1039,12 +1039,12 @@ uint16_t Spi3SendReceive(uint8_t sData)
/** /**
****************************************************************************** ******************************************************************************
** \brief SPI 读/写一字节函数 ** \brief SPI 读/写一字节函数
** **
** \param [in] SPIx 通道选择 ** \param [in] SPIx 通道选择
** \param [in] u8Data 发送一字节数据 ** \param [in] u8Data 发送一字节数据
** **
** \retval 接收一字节数据 ** \retval 接收一字节数据
** **
******************************************************************************/ ******************************************************************************/
uint8_t Spi3_RWByte(M4_SPI_TypeDef *SPIx, uint8_t u8Data) 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) #if(USE_RTC == 1)
/***************************************************************************************** /*****************************************************************************************
* 函数名称: Rtc_Config * 函数名称: Rtc_Config
* 功能描述: RTC配置 * 功能描述: RTC配置
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void Rtc_Config(void) static void Rtc_Config(void)
{ {
@@ -1116,10 +1116,10 @@ static void Rtc_Config(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: TimeGet * 函数名称: TimeGet
* 功能描述: 获取系统时间 * 功能描述: 获取系统时间
* 参 数: tm 读取时间入口 * 参 数: tm 读取时间入口
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void TimeGet(struct tm *cTime) void TimeGet(struct tm *cTime)
{ {
@@ -1136,10 +1136,10 @@ void TimeGet(struct tm *cTime)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: TimeTs * 函数名称: TimeTs
* 功能描述: 系统时间转换时间戳 * 功能描述: 系统时间转换时间戳
* 参 数: 无 * 参 数: 无
* 返 回 值: 返回时间戳 * 返 回 值: 返回时间戳
*****************************************************************************************/ *****************************************************************************************/
int TimeTs(void) int TimeTs(void)
{ {
@@ -1152,10 +1152,10 @@ int TimeTs(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: TimeShow * 函数名称: TimeShow
* 功能描述: 将时间输出到DBG串口 * 功能描述: 将时间输出到DBG串口
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void TimeShow(uint32_t dwStamp) void TimeShow(uint32_t dwStamp)
{ {
@@ -1170,10 +1170,10 @@ void TimeShow(uint32_t dwStamp)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: TimeSync * 函数名称: TimeSync
* 功能描述: 通过时间戳同步 * 功能描述: 通过时间戳同步
* 参 数: ts 时间入口 * 参 数: ts 时间入口
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void TimeSync(time_t ts) void TimeSync(time_t ts)
{ {
@@ -1200,10 +1200,10 @@ void TimeSync(time_t ts)
#endif #endif
#if(USE_AD == 1) #if(USE_AD == 1)
/***************************************************************************************** /*****************************************************************************************
* 函数名称: AdcInitConfig * 函数名称: AdcInitConfig
* 功能描述: ADC初始化配置 * 功能描述: ADC初始化配置
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void AdcInitConfig(void) static void AdcInitConfig(void)
{ {
@@ -1223,10 +1223,10 @@ static void AdcInitConfig(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: AdcSetChannelPinMode * 函数名称: AdcSetChannelPinMode
* 功能描述: ADC通道引脚配置 * 功能描述: ADC通道引脚配置
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void AdcSetChannelPinMode(uint32_t u32Channel) static void AdcSetChannelPinMode(uint32_t u32Channel)
{ {
@@ -1262,10 +1262,10 @@ static void AdcSetChannelPinMode(uint32_t u32Channel)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: AdcChannelConfig * 函数名称: AdcChannelConfig
* 功能描述: ADC通道配置 * 功能描述: ADC通道配置
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void AdcChannelConfig(void) static void AdcChannelConfig(void)
{ {
@@ -1286,17 +1286,17 @@ static void AdcChannelConfig(void)
ADC_AddAdcChannel(M4_ADC1, &stcChCfg); ADC_AddAdcChannel(M4_ADC1, &stcChCfg);
/* 3. Configure the average channel if you need. */ /* 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. */ /* 4. Add average channel if you need. */
ADC_AddAvgChannel(M4_ADC1, stcChCfg.u32Channel); ADC_AddAvgChannel(M4_ADC1, stcChCfg.u32Channel);
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: Adc1_Config * 函数名称: Adc1_Config
* 功能描述: ADC1配置 * 功能描述: ADC1配置
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void Adc1_Config(void) static void Adc1_Config(void)
{ {
@@ -1306,10 +1306,10 @@ static void Adc1_Config(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: AdcDmaConfig * 函数名称: AdcDmaConfig
* 功能描述: ADC DMA配置 * 功能描述: ADC DMA配置
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void AdcDmaConfig(void) static void AdcDmaConfig(void)
{ {
@@ -1353,11 +1353,11 @@ static void AdcDmaConfig(void)
#endif #endif
#if(USE_DMA == 1) #if(USE_DMA == 1)
/***************************************************************************************** /*****************************************************************************************
* 函数名称: DmaIrqRegister * 函数名称: DmaIrqRegister
* 功能描述: DMA中断寄存器配置 * 功能描述: DMA中断寄存器配置
* 参 数: pstcCfg 中断参数 * 参 数: pstcCfg 中断参数
u32Priority 中断优先级 u32Priority 中断优先级
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void DmaIrqRegister(stc_irq_regi_conf_t *pstcCfg, uint32_t 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 * 函数名称: DmaIrqRegister
* 功能描述: DMA中断配置 * 功能描述: DMA中断配置
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void DmaIrqConfig(void) static void DmaIrqConfig(void)
{ {
@@ -1396,10 +1396,10 @@ static void DmaIrqConfig(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: DmaIrqRegister * 函数名称: DmaIrqRegister
* 功能描述: DMA配置 * 功能描述: DMA配置
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
static void Dma_Config(void) static void Dma_Config(void)
{ {
@@ -1408,10 +1408,10 @@ static void Dma_Config(void)
} }
#endif #endif
/***************************************************************************************** /*****************************************************************************************
* 函数名称: ReadAdcValue * 函数名称: ReadAdcValue
* 功能描述: 读取AD值 * 功能描述: 读取AD值
* 参 数: 无 * 参 数: 无
* 返 回 值: AD值 * 返 回 值: AD值
*****************************************************************************************/ *****************************************************************************************/
uint16_t *GetADCBuffPoint(void) uint16_t *GetADCBuffPoint(void)
{ {
@@ -1419,10 +1419,10 @@ uint16_t *GetADCBuffPoint(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: ADC_Start * 函数名称: ADC_Start
* 功能描述: 启动ADC转换 * 功能描述: 启动ADC转换
* 参 数: 无 * 参 数: 无
* 返 回 值: AD值 * 返 回 值: AD值
*****************************************************************************************/ *****************************************************************************************/
void ADC_Start(void) void ADC_Start(void)
{ {
@@ -1434,10 +1434,10 @@ void ADC_Stop(void)
ADC_StopConvert(M4_ADC1); ADC_StopConvert(M4_ADC1);
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: ReadAdcValue * 函数名称: ReadAdcValue
* 功能描述: 读取AD值 * 功能描述: 读取AD值
* 参 数: 无 * 参 数: 无
* 返 回 值: AD值 * 返 回 值: AD值
*****************************************************************************************/ *****************************************************************************************/
void ReadAdcValue(uint16_t *ADValue) void ReadAdcValue(uint16_t *ADValue)
{ {
@@ -1483,10 +1483,10 @@ void BSP_Init(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: EnterStop * 函数名称: EnterStop
* 功能描述: 进入低功耗状态 * 功能描述: 进入低功耗状态
* 参 数: SleepStatus 设备低功耗状态 * 参 数: SleepStatus 设备低功耗状态
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void EnterStop(void) void EnterStop(void)
{ {
@@ -1526,10 +1526,10 @@ void EnterStop(void)
extern uint8_t BDRxData[256]; extern uint8_t BDRxData[256];
/***************************************************************************************** /*****************************************************************************************
* 函数名称: Wakeup * 函数名称: Wakeup
* 功能描述: 设备唤醒 * 功能描述: 设备唤醒
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void Wakeup(void) void Wakeup(void)
{ {
@@ -1629,10 +1629,10 @@ __WEAK void Usart3_RxPinIntCallBack(void)
} }
#endif #endif
/***************************************************************************************** /*****************************************************************************************
* 函数名称: RtcPeriod_IrqCallback * 函数名称: RtcPeriod_IrqCallback
* 功能描述: RTC中断回调 * 功能描述: RTC中断回调
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
__WEAK void RtcPeriod_IrqCallback(void) __WEAK void RtcPeriod_IrqCallback(void)
{ {
@@ -1640,10 +1640,10 @@ __WEAK void RtcPeriod_IrqCallback(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: Dma1Btc0_IrqHandler * 函数名称: Dma1Btc0_IrqHandler
* 功能描述: DMA中断外部重定向回调函数 * 功能描述: DMA中断外部重定向回调函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
extern void ADC_DMA_CallBack(void); extern void ADC_DMA_CallBack(void);
//int test = 0; //int test = 0;
+216 -308
View File
@@ -15,8 +15,8 @@
#define MAIN_DBG_LOG(...) DBG_LOG(__VA_ARGS__) #define MAIN_DBG_LOG(...) DBG_LOG(__VA_ARGS__)
#define MAIN_DBG_ARRAY(ARRAY, SIZE) DBG_ARRAY(ARRAY,SIZE) #define MAIN_DBG_ARRAY(ARRAY, SIZE) DBG_ARRAY(ARRAY,SIZE)
#define SOFTWARE_VERSION 11 //软件版本 #define SOFTWARE_VERSION 11 //软件版本
#define HARDWARE_VERSION 20 //硬件版本 #define HARDWARE_VERSION 20 //硬件版本
AppDetect_t App; AppDetect_t App;
@@ -43,7 +43,7 @@ void LEFTUP_CS1237AinADataProcessCallBack(int32_t AD)
// } // }
if(App.MotorPara.CaliFlag == true) if(App.MotorPara.CaliFlag == true)
{ {
AD = AD + App.MotorPara.LU_HeightStress[(App.MotorPara.Current_height)-725]; AD = AD + App.MotorPara.LU_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)];
for(int i = OSC_CNT-1; i > 0; i--) for(int i = OSC_CNT-1; i > 0; i--)
{ {
App.LeftUpCS1237_TrendArray[i] = App.LeftUpCS1237_TrendArray[i - 1]; App.LeftUpCS1237_TrendArray[i] = App.LeftUpCS1237_TrendArray[i - 1];
@@ -68,7 +68,7 @@ void LEFTLOW_CS1237AinADataProcessCallBack(int32_t AD)
// } // }
if(App.MotorPara.CaliFlag == true) if(App.MotorPara.CaliFlag == true)
{ {
AD = AD + App.MotorPara.LL_HeightStress[(App.MotorPara.Current_height)-725]; AD = AD + App.MotorPara.LL_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)];
for(int i = OSC_CNT-1; i > 0; i--) for(int i = OSC_CNT-1; i > 0; i--)
{ {
App.LeftLowCS1237_TrendArray[i] = App.LeftLowCS1237_TrendArray[i - 1]; App.LeftLowCS1237_TrendArray[i] = App.LeftLowCS1237_TrendArray[i - 1];
@@ -94,7 +94,7 @@ void RIGHTUP_CS1237AinADataProcessCallBack(int32_t AD)
// } // }
if(App.MotorPara.CaliFlag == true) if(App.MotorPara.CaliFlag == true)
{ {
AD = AD + App.MotorPara.RU_HeightStress[(App.MotorPara.Current_height)-725]; AD = AD + App.MotorPara.RU_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)];
for(int i = OSC_CNT-1; i > 0; i--) for(int i = OSC_CNT-1; i > 0; i--)
{ {
App.RightUpCS1237_TrendArray[i] = App.RightUpCS1237_TrendArray[i - 1]; App.RightUpCS1237_TrendArray[i] = App.RightUpCS1237_TrendArray[i - 1];
@@ -120,7 +120,7 @@ void RIGHTLOW_CS1237AinADataProcessCallBack(int32_t AD)
// } // }
if(App.MotorPara.CaliFlag == true) if(App.MotorPara.CaliFlag == true)
{ {
AD = AD + App.MotorPara.RL_HeightStress[(App.MotorPara.Current_height)-725]; AD = AD + App.MotorPara.RL_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)];
for(int i = OSC_CNT-1; i > 0; i--) for(int i = OSC_CNT-1; i > 0; i--)
{ {
App.RightLowCS1237_TrendArray[i] = App.RightLowCS1237_TrendArray[i - 1]; App.RightLowCS1237_TrendArray[i] = App.RightLowCS1237_TrendArray[i - 1];
@@ -257,19 +257,12 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
App.RightUpCS1237_SlopeArray[0] = ru_slope; App.RightUpCS1237_SlopeArray[0] = ru_slope;
App.RightLowCS1237_SlopeArray[0] = rl_slope; App.RightLowCS1237_SlopeArray[0] = rl_slope;
// PeakValleyCheck lu_K = check_peaks_valleys(App.LeftUpCS1237_SlopeArray, SLOPE_CNT);
// PeakValleyCheck ll_K = check_peaks_valleys(App.LeftLowCS1237_SlopeArray, SLOPE_CNT);
// PeakValleyCheck ru_K = check_peaks_valleys(App.RightUpCS1237_SlopeArray, SLOPE_CNT);
// PeakValleyCheck rl_K = check_peaks_valleys(App.RightLowCS1237_SlopeArray, SLOPE_CNT);
int32_t LeftSlopeSum = abs(App.LeftUpCS1237_SlopeArray[0]) + abs(App.LeftLowCS1237_SlopeArray[0]) + abs(App.LeftUpCS1237_SlopeArray[1]) + abs(App.LeftLowCS1237_SlopeArray[1]) + abs(App.LeftUpCS1237_SlopeArray[2]) + abs(App.LeftLowCS1237_SlopeArray[2]); int32_t LeftSlopeSum = abs(App.LeftUpCS1237_SlopeArray[0]) + abs(App.LeftLowCS1237_SlopeArray[0]) + abs(App.LeftUpCS1237_SlopeArray[1]) + abs(App.LeftLowCS1237_SlopeArray[1]) + abs(App.LeftUpCS1237_SlopeArray[2]) + abs(App.LeftLowCS1237_SlopeArray[2]);
int32_t RightSlopeSum = abs(App.RightUpCS1237_SlopeArray[0]) + abs(App.RightLowCS1237_SlopeArray[0]) + abs(App.RightUpCS1237_SlopeArray[1]) + abs(App.RightLowCS1237_SlopeArray[1]) + abs(App.RightUpCS1237_SlopeArray[2]) + abs(App.RightLowCS1237_SlopeArray[2]); int32_t RightSlopeSum = abs(App.RightUpCS1237_SlopeArray[0]) + abs(App.RightLowCS1237_SlopeArray[0]) + abs(App.RightUpCS1237_SlopeArray[1]) + abs(App.RightLowCS1237_SlopeArray[1]) + abs(App.RightUpCS1237_SlopeArray[2]) + abs(App.RightLowCS1237_SlopeArray[2]);
int32_t LeftDiffSum = abs(lu_diff[0]) + abs(lu_diff[1]) + abs(lu_diff[2]) + abs(ll_diff[0]) + abs(ll_diff[1]) + abs(ll_diff[2]); int32_t LeftDiffSum = abs(lu_diff[0]) + abs(lu_diff[1]) + abs(lu_diff[2]) + abs(ll_diff[0]) + abs(ll_diff[1]) + abs(ll_diff[2]);
int32_t RightDiffSum = abs(ru_diff[0]) + abs(ru_diff[1]) + abs(ru_diff[2]) + abs(rl_diff[0]) + abs(rl_diff[1]) + abs(rl_diff[2]); int32_t RightDiffSum = abs(ru_diff[0]) + abs(ru_diff[1]) + abs(ru_diff[2]) + abs(rl_diff[0]) + abs(rl_diff[1]) + abs(rl_diff[2]);
int32_t LuSideDiff = lu_ad[0] - lu_ad[5]; int32_t LeftDiff = abs(Oll_diff1) + abs(Olu_diff1) + abs(Oll_diff2) + abs(Olu_diff2) + abs(Oll_diff3) + abs(Olu_diff3);
int32_t LlSideDiff = ll_ad[0] - ll_ad[5]; int32_t RightDiff = abs(Orl_diff1) + abs(Oru_diff1) + abs(Orl_diff2) + abs(Oru_diff2) + abs(Orl_diff3) + abs(Oru_diff3);
int32_t RuSideDiff = ru_ad[0] - ru_ad[5];
int32_t RlSideDiff = rl_ad[0] - rl_ad[5];
if(App.EmeFlag == true) if(App.EmeFlag == true)
{ {
@@ -297,44 +290,38 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
App.LeftRunFalg = false; App.LeftRunFalg = false;
App.RightRunFalg = false; App.RightRunFalg = false;
App.CentreRunFalg = false; App.CentreRunFalg = false;
if(((lu_ad[0] < App.ADTrack.LeftUp_Org_AdZero-App.ddd)//判断中间操作 if(((lu_ad[0] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT)//判断中间操作
&& (ru_ad[0] < App.ADTrack.RightUp_Org_AdZero-App.ddd) && (ru_ad[0] < App.ADTrack.RightUp_Org_AdZero-CENTRE_VPT)
&& (lu_ad[1] < App.ADTrack.LeftUp_Org_AdZero-App.ddd) && (lu_ad[1] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT)
&& (ru_ad[1] < App.ADTrack.RightUp_Org_AdZero-App.ddd) && (ru_ad[1] < App.ADTrack.RightUp_Org_AdZero-CENTRE_VPT)
&& (lu_ad[2] < App.ADTrack.LeftUp_Org_AdZero-App.ddd) && (lu_ad[2] < App.ADTrack.LeftUp_Org_AdZero-CENTRE_VPT)
&& (ru_ad[2] < App.ADTrack.RightUp_Org_AdZero-App.ddd) && (ru_ad[2] < App.ADTrack.RightUp_Org_AdZero-CENTRE_VPT)
&& (ll_ad[0] > App.ADTrack.LeftLow_Org_AdZero+App.ddd)//判断中间操作 && (ll_ad[0] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT)//判断中间操作
&& (rl_ad[0] > App.ADTrack.RightLow_Org_AdZero+App.ddd) && (rl_ad[0] > App.ADTrack.RightLow_Org_AdZero+CENTRE_VPT)
&& (ll_ad[1] > App.ADTrack.LeftLow_Org_AdZero+App.ddd) && (ll_ad[1] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT)
&& (rl_ad[1] > App.ADTrack.RightLow_Org_AdZero+App.ddd) && (rl_ad[1] > App.ADTrack.RightLow_Org_AdZero+CENTRE_VPT)
&& (ll_ad[2] > App.ADTrack.LeftLow_Org_AdZero+App.ddd) && (ll_ad[2] > App.ADTrack.LeftLow_Org_AdZero+CENTRE_VPT)
&& (rl_ad[2] > App.ADTrack.RightLow_Org_AdZero+App.ddd)) && (rl_ad[2] > App.ADTrack.RightLow_Org_AdZero+CENTRE_VPT))
|| ((lu_ad[0] > App.ADTrack.LeftUp_Org_AdZero+App.ddd)//判断中间操作 || ((lu_ad[0] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT)//判断中间操作
&& (ru_ad[0] > App.ADTrack.RightUp_Org_AdZero+App.ddd) && (ru_ad[0] > App.ADTrack.RightUp_Org_AdZero+CENTRE_VPT)
&& (lu_ad[1] > App.ADTrack.LeftUp_Org_AdZero+App.ddd) && (lu_ad[1] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT)
&& (ru_ad[1] > App.ADTrack.RightUp_Org_AdZero+App.ddd) && (ru_ad[1] > App.ADTrack.RightUp_Org_AdZero+CENTRE_VPT)
&& (lu_ad[2] > App.ADTrack.LeftUp_Org_AdZero+App.ddd) && (lu_ad[2] > App.ADTrack.LeftUp_Org_AdZero+CENTRE_VPT)
&& (ru_ad[2] > App.ADTrack.RightUp_Org_AdZero+App.ddd) && (ru_ad[2] > App.ADTrack.RightUp_Org_AdZero+CENTRE_VPT)
&& (ll_ad[0] < App.ADTrack.LeftLow_Org_AdZero-App.ddd)//判断中间操作 && (ll_ad[0] < App.ADTrack.LeftLow_Org_AdZero-CENTRE_VPT)//判断中间操作
&& (rl_ad[0] < App.ADTrack.RightLow_Org_AdZero-App.ddd) && (rl_ad[0] < App.ADTrack.RightLow_Org_AdZero-CENTRE_VPT)
&& (ll_ad[1] < App.ADTrack.LeftLow_Org_AdZero-App.ddd) && (ll_ad[1] < App.ADTrack.LeftLow_Org_AdZero-CENTRE_VPT)
&& (rl_ad[1] < App.ADTrack.RightLow_Org_AdZero-App.ddd) && (rl_ad[1] < App.ADTrack.RightLow_Org_AdZero-CENTRE_VPT)
&& (ll_ad[2] < App.ADTrack.LeftLow_Org_AdZero-App.ddd) && (ll_ad[2] < App.ADTrack.LeftLow_Org_AdZero-CENTRE_VPT)
&& (rl_ad[2] < App.ADTrack.RightLow_Org_AdZero-App.ddd)) && (rl_ad[2] < App.ADTrack.RightLow_Org_AdZero-CENTRE_VPT))
) )
{ {
App.CentreRunFalg = true; App.CentreRunFalg = true;
App.CentCollDelay1mSCnt = CENT_TIME_MS; App.CentCollDelay1mSCnt = CENT_TIME_MS;
if(abs(Oll_diff1) + 100 > abs(Orl_diff1) if(LeftDiff > RightDiff)//判断偏左
&& abs(Oll_diff2) + 100 > abs(Orl_diff2)
&& abs(Oll_diff3) + 100 > abs(Orl_diff3)
&& abs(Olu_diff1) + 100 > abs(Oru_diff1)
&& abs(Olu_diff2) + 100 > abs(Oru_diff2)
&& abs(Olu_diff3) + 100 > abs(Oru_diff3)
)//判断偏左还是偏右
{ {
App.LeftRunFalg = true; 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_diff2+Oru_diff2) > (App.ADTrack.Stop_VPT))
&& ((Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT)) && ((Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT))
&& ((Oll_diff1+Orl_diff1) < -(App.ADTrack.Stop_VPT)) && ((Oll_diff1+Orl_diff1) < -(App.ADTrack.Stop_VPT))
@@ -342,20 +329,9 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& ((Oll_diff3+Orl_diff3) < -(App.ADTrack.Stop_VPT)) && ((Oll_diff3+Orl_diff3) < -(App.ADTrack.Stop_VPT))
) )
{ {
if((App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压 // if(App.CaliZeroFlag == true)//判断是否校零
&& (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT))
{ {
if(App.MotorPara.Current_height < 1195) if(App.MotorPara.Current_height < 1425)
{ {
BDC_UP(); BDC_UP();
App.CaliZeroFlag = false; App.CaliZeroFlag = false;
@@ -367,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_diff2+Oru_diff2) < -(App.ADTrack.Stop_VPT))
&& ((Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT)) && ((Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT))
&& ((Oll_diff1+Orl_diff1) > (App.ADTrack.Stop_VPT)) && ((Oll_diff1+Orl_diff1) > (App.ADTrack.Stop_VPT))
@@ -375,20 +351,9 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& ((Oll_diff3+Orl_diff3) > (App.ADTrack.Stop_VPT)) && ((Oll_diff3+Orl_diff3) > (App.ADTrack.Stop_VPT))
) )
{ {
if((App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压 // if(App.CaliZeroFlag == true)//判断是否校零
&& (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT))
{ {
if(App.MotorPara.Current_height > 725) if(App.MotorPara.Current_height > 1005)
{ {
BDC_DOWN(); BDC_DOWN();
App.CaliZeroFlag = false; App.CaliZeroFlag = false;
@@ -401,15 +366,10 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
} }
} }
} }
else if(abs(Oll_diff1) + 100 < abs(Orl_diff1)//判断偏 else if(RightDiff > LeftDiff)//判断偏
&& abs(Oll_diff2) < abs(Orl_diff2) + 100
&& abs(Oll_diff3) < abs(Orl_diff3) + 100
&& abs(Olu_diff1) < abs(Oru_diff1) + 100
&& abs(Olu_diff2) < abs(Oru_diff2) + 100
&& abs(Olu_diff3) < abs(Oru_diff3) + 100)
{ {
App.RightRunFalg = true; 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_diff2+Oru_diff2) > (App.ADTrack.Stop_VPT))
&& ((Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT)) && ((Olu_diff3+Oru_diff3) > (App.ADTrack.Stop_VPT))
&& ((Oll_diff1+Orl_diff1) < -(App.ADTrack.Stop_VPT)) && ((Oll_diff1+Orl_diff1) < -(App.ADTrack.Stop_VPT))
@@ -417,20 +377,9 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& ((Oll_diff3+Orl_diff3) < -(App.ADTrack.Stop_VPT)) && ((Oll_diff3+Orl_diff3) < -(App.ADTrack.Stop_VPT))
) )
{ {
if((App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压 // if(App.CaliZeroFlag == true)//判断是否校零
&& (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT))
{ {
if(App.MotorPara.Current_height < 1195) if(App.MotorPara.Current_height < 1425)
{ {
BDC_UP(); BDC_UP();
App.CaliZeroFlag = false; App.CaliZeroFlag = false;
@@ -442,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_diff2+Oru_diff2) < -(App.ADTrack.Stop_VPT))
&& ((Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT)) && ((Olu_diff3+Oru_diff3) < -(App.ADTrack.Stop_VPT))
&& ((Oll_diff1+Orl_diff1) > (App.ADTrack.Stop_VPT)) && ((Oll_diff1+Orl_diff1) > (App.ADTrack.Stop_VPT))
@@ -450,20 +399,9 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& ((Oll_diff3+Orl_diff3) > (App.ADTrack.Stop_VPT)) && ((Oll_diff3+Orl_diff3) > (App.ADTrack.Stop_VPT))
) )
{ {
if((App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压 // if(App.CaliZeroFlag == true)//判断是否校零
&& (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT))
{ {
if(App.MotorPara.Current_height > 725) if(App.MotorPara.Current_height > 1005)
{ {
BDC_DOWN(); BDC_DOWN();
App.CaliZeroFlag = false; App.CaliZeroFlag = false;
@@ -477,53 +415,35 @@ 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; 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_diff2 >= (App.ADTrack.LeftUpVPT*5/6))
&& (Olu_diff3 >= (App.ADTrack.LeftUpVPT*5/6)) && (Olu_diff3 >= (App.ADTrack.LeftUpVPT*5/6))
&& (Oll_diff1 <= -(App.ADTrack.LeftLowVPT*5/6)) && (Oll_diff1 <= -(App.ADTrack.LeftLowVPT*5/6))
&& (Oll_diff2 <= -(App.ADTrack.LeftLowVPT*5/6)) && (Oll_diff2 <= -(App.ADTrack.LeftLowVPT*5/6))
&& (Oll_diff3 <= -(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)//判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT) && (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT) && (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT) && (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT) && (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT) && (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT))
&& (App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
&& (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT))
|| ((App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
&& (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightLowCS1237_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_diff2) > abs(Oru_diff2) * SHIELD_VPT)
// && (abs(Olu_diff3) > abs(Oru_diff3) * SHIELD_VPT) && (abs(Olu_diff3) > abs(Oru_diff3) * SHIELD_VPT)
// && (abs(Oll_diff1) > abs(Orl_diff1) * SHIELD_VPT) && (abs(Oll_diff1) > abs(Orl_diff1) * SHIELD_VPT)
// && (abs(Oll_diff3) > abs(Orl_diff2) * SHIELD_VPT) && (abs(Oll_diff3) > abs(Orl_diff2) * SHIELD_VPT)
// && (abs(Oll_diff3) > abs(Orl_diff3) * SHIELD_VPT) && (abs(Oll_diff3) > abs(Orl_diff3) * SHIELD_VPT)
// ) )
{ {
if(App.MotorPara.Current_height < 1195) if(App.MotorPara.Current_height < 1425)
{ {
BDC_UP(); BDC_UP();
App.CaliZeroFlag = false; App.CaliZeroFlag = false;
@@ -537,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_diff2 <= -(App.ADTrack.LeftUpVPT*5/6))
&& (Olu_diff3 <= -(App.ADTrack.LeftUpVPT*5/6)) && (Olu_diff3 <= -(App.ADTrack.LeftUpVPT*5/6))
&& (Oll_diff1 >= (App.ADTrack.LeftLowVPT*5/6)) && (Oll_diff1 >= (App.ADTrack.LeftLowVPT*5/6))
@@ -545,43 +465,25 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& (Oll_diff3 >= (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) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT) && (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT) && (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT) && (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT) && (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT) && (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT))
&& (App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
&& (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT))
|| ((App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
&& (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightLowCS1237_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_diff2) > abs(Oru_diff2) * SHIELD_VPT)
// && (abs(Olu_diff3) > abs(Oru_diff3) * SHIELD_VPT) && (abs(Olu_diff3) > abs(Oru_diff3) * SHIELD_VPT)
// && (abs(Oll_diff1) > abs(Orl_diff1) * SHIELD_VPT) && (abs(Oll_diff1) > abs(Orl_diff1) * SHIELD_VPT)
// && (abs(Oll_diff3) > abs(Orl_diff2) * SHIELD_VPT) && (abs(Oll_diff3) > abs(Orl_diff2) * SHIELD_VPT)
// && (abs(Oll_diff3) > abs(Orl_diff3) * SHIELD_VPT) && (abs(Oll_diff3) > abs(Orl_diff3) * SHIELD_VPT)
// ) )
{ {
if(App.MotorPara.Current_height > 725) if(App.MotorPara.Current_height > 1005)
{ {
BDC_DOWN(); BDC_DOWN();
App.CaliZeroFlag = false; App.CaliZeroFlag = false;
@@ -596,53 +498,35 @@ 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; 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_diff2 >= (App.ADTrack.RightUpVPT*5/6))
&& (Oru_diff3 >= (App.ADTrack.RightUpVPT*5/6)) && (Oru_diff3 >= (App.ADTrack.RightUpVPT*5/6))
&& (Orl_diff1 <= -(App.ADTrack.RightLowVPT*5/6)) && (Orl_diff1 <= -(App.ADTrack.RightLowVPT*5/6))
&& (Orl_diff2 <= -(App.ADTrack.RightLowVPT*5/6)) && (Orl_diff2 <= -(App.ADTrack.RightLowVPT*5/6))
&& (Orl_diff3 <= -(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) //判断是否不是正面压
&& (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT) && (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT) && (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT) && (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT) && (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT) && (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT))
&& (App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] <= -PRESS_VPT))
|| ((App.RightUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
&& (App.RightUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftLowCS1237_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_diff2) > abs(Olu_diff2) * SHIELD_VPT)
// && (abs(Oru_diff3) > abs(Olu_diff3) * SHIELD_VPT) && (abs(Oru_diff3) > abs(Olu_diff3) * SHIELD_VPT)
// && (abs(Orl_diff1) > abs(Oll_diff1) * SHIELD_VPT) && (abs(Orl_diff1) > abs(Oll_diff1) * SHIELD_VPT)
// && (abs(Orl_diff3) > abs(Oll_diff2) * SHIELD_VPT) && (abs(Orl_diff3) > abs(Oll_diff2) * SHIELD_VPT)
// && (abs(Orl_diff3) > abs(Oll_diff3) * SHIELD_VPT) && (abs(Orl_diff3) > abs(Oll_diff3) * SHIELD_VPT)
// ) )
{ {
if(App.MotorPara.Current_height < 1195) if(App.MotorPara.Current_height < 1425)
{ {
BDC_UP(); BDC_UP();
App.CaliZeroFlag = false; App.CaliZeroFlag = false;
@@ -656,50 +540,32 @@ 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_diff2 <= -(App.ADTrack.RightUpVPT*5/6))
&& (Oru_diff3 <= -(App.ADTrack.RightUpVPT*5/6)) && (Oru_diff3 <= -(App.ADTrack.RightUpVPT*5/6))
&& (Orl_diff1 >= (App.ADTrack.RightLowVPT*5/6)) && (Orl_diff1 >= (App.ADTrack.RightLowVPT*5/6))
&& (Orl_diff2 >= (App.ADTrack.RightLowVPT*5/6)) && (Orl_diff2 >= (App.ADTrack.RightLowVPT*5/6))
&& (Orl_diff3 >= (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) //判断是否不是正面压
&& (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT) && (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT) && (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT) && (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT) && (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT) && (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT))
&& (App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[2] >= PRESS_VPT))
|| ((App.RightUpCS1237_SlopeArray[0] >= PRESS_VPT) //判断是否不是正面压
&& (App.RightUpCS1237_SlopeArray[1] >= PRESS_VPT)
&& (App.RightUpCS1237_SlopeArray[2] >= PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.RightLowCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[0] <= -PRESS_VPT) //判断是否不是正面压
&& (App.LeftUpCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftUpCS1237_SlopeArray[2] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[0] <= -PRESS_VPT)
&& (App.LeftLowCS1237_SlopeArray[1] <= -PRESS_VPT)
&& (App.LeftLowCS1237_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_diff2) > abs(Olu_diff2) * SHIELD_VPT)
// && (abs(Oru_diff3) > abs(Olu_diff3) * SHIELD_VPT) && (abs(Oru_diff3) > abs(Olu_diff3) * SHIELD_VPT)
// && (abs(Orl_diff1) > abs(Oll_diff1) * SHIELD_VPT) && (abs(Orl_diff1) > abs(Oll_diff1) * SHIELD_VPT)
// && (abs(Orl_diff3) > abs(Oll_diff2) * SHIELD_VPT) && (abs(Orl_diff3) > abs(Oll_diff2) * SHIELD_VPT)
// && (abs(Orl_diff3) > abs(Oll_diff3) * SHIELD_VPT) && (abs(Orl_diff3) > abs(Oll_diff3) * SHIELD_VPT)
// ) )
{ {
if(App.MotorPara.Current_height > 725) if(App.MotorPara.Current_height > 1005)
{ {
BDC_DOWN(); BDC_DOWN();
App.CaliZeroFlag = false; App.CaliZeroFlag = false;
@@ -736,8 +602,8 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& ((Olu_diff1 + Oru_diff1) > -(App.ADTrack.Stop_VPT*2/3)) && ((Olu_diff1 + Oru_diff1) > -(App.ADTrack.Stop_VPT*2/3))
&& ((Olu_diff2 + Oru_diff2) > -(App.ADTrack.Stop_VPT*2/3)) && ((Olu_diff2 + Oru_diff2) > -(App.ADTrack.Stop_VPT*2/3))
&& ((Olu_diff3 + Oru_diff3) > -(App.ADTrack.Stop_VPT*2/3))) && ((Olu_diff3 + Oru_diff3) > -(App.ADTrack.Stop_VPT*2/3)))
|| App.MotorPara.Current_height >= 1195 || App.MotorPara.Current_height >= 1425
|| App.MotorPara.Current_height <= 725 || App.MotorPara.Current_height <= 1005
) )
{ {
BDC_STOP(); BDC_STOP();
@@ -781,8 +647,8 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& ((Olu_diff1 + Oru_diff1) > -(App.ADTrack.Stop_VPT*2/3)) && ((Olu_diff1 + Oru_diff1) > -(App.ADTrack.Stop_VPT*2/3))
&& ((Olu_diff2 + Oru_diff2) > -(App.ADTrack.Stop_VPT*2/3)) && ((Olu_diff2 + Oru_diff2) > -(App.ADTrack.Stop_VPT*2/3))
&& ((Olu_diff3 + Oru_diff3) > -(App.ADTrack.Stop_VPT*2/3))) && ((Olu_diff3 + Oru_diff3) > -(App.ADTrack.Stop_VPT*2/3)))
|| App.MotorPara.Current_height >= 1195 || App.MotorPara.Current_height >= 1425
|| App.MotorPara.Current_height <= 725 || App.MotorPara.Current_height <= 1005
) )
{ {
BDC_STOP(); BDC_STOP();
@@ -829,8 +695,8 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& ((Olu_diff1 + Oru_diff1) < (App.ADTrack.Stop_VPT*2/3)) && ((Olu_diff1 + Oru_diff1) < (App.ADTrack.Stop_VPT*2/3))
&& ((Olu_diff2 + Oru_diff2) < (App.ADTrack.Stop_VPT*2/3)) && ((Olu_diff2 + Oru_diff2) < (App.ADTrack.Stop_VPT*2/3))
&& ((Olu_diff3 + Oru_diff3) < (App.ADTrack.Stop_VPT*2/3))) && ((Olu_diff3 + Oru_diff3) < (App.ADTrack.Stop_VPT*2/3)))
|| App.MotorPara.Current_height >= 1195 || App.MotorPara.Current_height >= 1425
|| App.MotorPara.Current_height <= 725 || App.MotorPara.Current_height <= 1005
) )
{ {
BDC_STOP(); BDC_STOP();
@@ -874,8 +740,8 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
&& ((Olu_diff1 + Oru_diff1) < (App.ADTrack.Stop_VPT*2/3)) && ((Olu_diff1 + Oru_diff1) < (App.ADTrack.Stop_VPT*2/3))
&& ((Olu_diff2 + Oru_diff2) < (App.ADTrack.Stop_VPT*2/3)) && ((Olu_diff2 + Oru_diff2) < (App.ADTrack.Stop_VPT*2/3))
&& ((Olu_diff3 + Oru_diff3) < (App.ADTrack.Stop_VPT*2/3))) && ((Olu_diff3 + Oru_diff3) < (App.ADTrack.Stop_VPT*2/3)))
|| App.MotorPara.Current_height >= 1195 || App.MotorPara.Current_height >= 1425
|| App.MotorPara.Current_height <= 725 || App.MotorPara.Current_height <= 1005
) )
{ {
BDC_STOP(); BDC_STOP();
@@ -938,8 +804,8 @@ void SupportControlHandle(int32_t *lu_ad, int32_t *ll_ad, int32_t *ru_ad, int32_
{ {
if(App.StopFlag == true if(App.StopFlag == true
&& App.StopCollDelay1mSCnt <= 0 && App.StopCollDelay1mSCnt <= 0
&& App.MotorPara.Current_height <= 1195 && App.MotorPara.Current_height <= 1425
&& App.MotorPara.Current_height >= 725){ && App.MotorPara.Current_height >= 1005){
App.ADTrack.LeftUp_Org_AdZero = lu_ad[0]; App.ADTrack.LeftUp_Org_AdZero = lu_ad[0];
App.ADTrack.LeftLow_Org_AdZero = ll_ad[0]; App.ADTrack.LeftLow_Org_AdZero = ll_ad[0];
App.ADTrack.RightUp_Org_AdZero = ru_ad[0]; App.ADTrack.RightUp_Org_AdZero = ru_ad[0];
@@ -955,13 +821,13 @@ static void AppInit(void)
READ_APP_PARA((uint32_t *)&App.Para); READ_APP_PARA((uint32_t *)&App.Para);
if(App.Para.FactoryFlag != 0x00){ if(App.Para.FactoryFlag != 0x00){
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; App.Para.Layout.DBGWaveOut = false;
SAVE_APP_PARA((uint32_t *)&App.Para); SAVE_APP_PARA((uint32_t *)&App.Para);
} }
if(App.Para.Layout.ControlLevel > 5 || App.Para.Layout.ControlLevel < 1){ 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); SAVE_APP_PARA((uint32_t *)&App.Para);
} }
DBG_LOG("\r\n\r\n"); DBG_LOG("\r\n\r\n");
@@ -983,10 +849,10 @@ static void AppInit(void)
BDC_STOP(); BDC_STOP();
LED_RED_OFF(); LED_RED_OFF();
LED_GREEN_ON(); LED_GREEN_ON();
App.Status = APP_STATUS_MOTOR_INIT; App.Status = APP_STATUS_START_BEEP;
App.MotorPara.InitialFlag = false; App.MotorPara.InitialFlag = false;
App.RStatus = READ_STATUS_START; App.RStatus = READ_STATUS_START;
GradeControl(App.Para.Layout.ControlLevel);//等级控制 GradeControl(App.Para.Layout.ControlLevel);//等级控制
App.WaitFlag = false; App.WaitFlag = false;
} }
@@ -1103,10 +969,17 @@ static void AppLoopHandler(void)
App.Status = APP_STATUS_IDLE; App.Status = APP_STATUS_IDLE;
break;} break;}
case APP_STATUS_MOTOR_INIT:{ case APP_STATUS_START_BEEP:{
Beeper_Start(200,200,2);
LED_RED_ON(); LED_RED_ON();
LED_GREEN_OFF(); LED_GREEN_OFF();
Beeper_Start(200,200,2);
App.TD1mSDelayCnt = 1000;
App.Status = APP_STATUS_MOTOR_INIT;
break;}
case APP_STATUS_MOTOR_INIT:{
if(App.TD1mSDelayCnt <= 0)
{
BDC_UP(); BDC_UP();
Ddl_Delay1ms(1000); Ddl_Delay1ms(1000);
BDC_DOWN(); BDC_DOWN();
@@ -1114,29 +987,26 @@ static void AppLoopHandler(void)
App.StopFlag = false; App.StopFlag = false;
App.Status = APP_STATUS_WAIT_MOTOR_INIT; App.Status = APP_STATUS_WAIT_MOTOR_INIT;
App.TD1mSDelayCnt = TRAVEL_TIME_MS; App.TD1mSDelayCnt = TRAVEL_TIME_MS;
}
break;} break;}
case APP_STATUS_WAIT_MOTOR_INIT:{ case APP_STATUS_WAIT_MOTOR_INIT:{
if(App.TD1mSDelayCnt <= 0) if(App.TD1mSDelayCnt <= 0)
{ {
BDC_STOP(); BDC_STOP();
LED_RED_OFF();
LED_GREEN_ON();
App.StopFlag = true; App.StopFlag = true;
App.DownFlag = false; App.DownFlag = false;
App.UpFlag = false; App.UpFlag = false;
App.Status = APP_STATUS_IDLE; App.Status = APP_STATUS_IDLE;
} }
if(App.MotorPara.Current_height <= 722 && App.MotorPara.Current_height >= 720) if(App.MotorPara.Current_height <= 1002 && App.MotorPara.Current_height >= 1000)
{ {
BDC_STOP(); BDC_STOP();
LED_RED_OFF();
LED_GREEN_ON();
App.StopFlag = true; App.StopFlag = true;
App.DownFlag = false; App.DownFlag = false;
App.UpFlag = false; App.UpFlag = false;
App.MotorPara.CaliFlag = false; App.MotorPara.CaliFlag = false;
App.TD1mSDelayCnt = 1000; App.TD1mSDelayCnt = 1500;
App.Status = APP_STATUS_ZERO_MARKING; App.Status = APP_STATUS_ZERO_MARKING;
} }
break;} break;}
@@ -1153,7 +1023,6 @@ static void AppLoopHandler(void)
App.ADTrack.LeftLow_Org_AdZero, App.ADTrack.LeftLow_Org_AdZero,
App.ADTrack.RightUp_Org_AdZero, App.ADTrack.RightUp_Org_AdZero,
App.ADTrack.RightLow_Org_AdZero); App.ADTrack.RightLow_Org_AdZero);
App.Status = APP_STATUS_WAIT_MOTOR_CALI_UP; App.Status = APP_STATUS_WAIT_MOTOR_CALI_UP;
App.MotorPara.InitialFlag = true; App.MotorPara.InitialFlag = true;
App.MotorPara.CaliNum = 0; App.MotorPara.CaliNum = 0;
@@ -1161,32 +1030,28 @@ static void AppLoopHandler(void)
App.StopFlag = false; App.StopFlag = false;
App.UpFlag = true; App.UpFlag = true;
BDC_UP(); BDC_UP();
LED_RED_ON();
LED_GREEN_OFF();
App.CailUp1mSCnt = 0; App.CailUp1mSCnt = 0;
App.MotorPara.LoopOne = false; App.MotorPara.LoopOne = false;
} }
break;} break;}
case APP_STATUS_WAIT_MOTOR_CALI_UP:{ case APP_STATUS_WAIT_MOTOR_CALI_UP:{
if(App.MotorPara.Current_height >= 1200 && App.CailUp1mSCnt >= 17000) if(App.MotorPara.Current_height >= 1430 && App.CailUp1mSCnt >= 17000)
{ {
App.CailUp1mSCnt = 0; App.CailUp1mSCnt = 0;
BDC_STOP(); BDC_STOP();
App.StopFlag = true; App.StopFlag = true;
App.DownFlag = false; App.DownFlag = false;
App.UpFlag = false; App.UpFlag = false;
Ddl_Delay1ms(1000); Ddl_Delay1ms(1500);
App.DownFlag = true; App.DownFlag = true;
App.StopFlag = false; App.StopFlag = false;
App.Status = APP_STATUS_WAIT_MOTOR_CALI_DOWN; App.Status = APP_STATUS_WAIT_MOTOR_CALI_DOWN;
BDC_DOWN(); BDC_DOWN();
} }
else if(App.MotorPara.CaliNum >= 480 && App.MotorPara.LoopOne == true) else if(App.MotorPara.CaliNum >= 410 && App.MotorPara.LoopOne == true)
{ {
BDC_STOP(); BDC_STOP();
LED_RED_OFF();
LED_GREEN_ON();
App.StopFlag = true; App.StopFlag = true;
App.DownFlag = false; App.DownFlag = false;
App.UpFlag = false; App.UpFlag = false;
@@ -1194,13 +1059,13 @@ static void AppLoopHandler(void)
App.MotorPara.InitialFlag = false; App.MotorPara.InitialFlag = false;
App.MotorPara.CaliFlag = true; App.MotorPara.CaliFlag = true;
DBG_LOG("===================LU Data monitoring====================\r\n"); DBG_LOG("===================LU Data monitoring====================\r\n");
weightedMovingAverageWithEnhance(App.MotorPara.LU_HeightStress,480,7,380,480,4,0); weightedMovingAverageWithEnhance(App.MotorPara.LU_HeightStress,431,7,341,430,4,0);
DBG_LOG("===================LL Data monitoring====================\r\n"); DBG_LOG("===================LL Data monitoring====================\r\n");
weightedMovingAverageWithEnhance(App.MotorPara.LL_HeightStress,480,7,380,480,4,0); weightedMovingAverageWithEnhance(App.MotorPara.LL_HeightStress,431,7,341,430,4,0);
DBG_LOG("===================RU Data monitoring====================\r\n"); DBG_LOG("===================RU Data monitoring====================\r\n");
weightedMovingAverageWithEnhance(App.MotorPara.RU_HeightStress,480,7,380,480,4,0); weightedMovingAverageWithEnhance(App.MotorPara.RU_HeightStress,431,7,341,430,4,0);
DBG_LOG("===================RL Data monitoring====================\r\n"); DBG_LOG("===================RL Data monitoring====================\r\n");
weightedMovingAverageWithEnhance(App.MotorPara.RL_HeightStress,480,7,380,480,4,0); weightedMovingAverageWithEnhance(App.MotorPara.RL_HeightStress,431,7,341,430,4,0);
DBG_LOG("Motor Cali Ok\r\n"); DBG_LOG("Motor Cali Ok\r\n");
App.TD1mSDelayCnt = 1000; App.TD1mSDelayCnt = 1000;
App.Status = APP_STATUS_WAIT_STEADY; App.Status = APP_STATUS_WAIT_STEADY;
@@ -1208,25 +1073,23 @@ static void AppLoopHandler(void)
break;} break;}
case APP_STATUS_WAIT_MOTOR_CALI_DOWN:{ case APP_STATUS_WAIT_MOTOR_CALI_DOWN:{
if(App.MotorPara.Current_height <= 725) if(App.MotorPara.Current_height <= 1005)
{ {
BDC_STOP(); BDC_STOP();
App.StopFlag = true; App.StopFlag = true;
App.DownFlag = false; App.DownFlag = false;
App.UpFlag = false; App.UpFlag = false;
App.MotorPara.LoopOne = true; App.MotorPara.LoopOne = true;
Ddl_Delay1ms(1000); Ddl_Delay1ms(1500);
App.UpFlag = true; App.UpFlag = true;
App.StopFlag = false; App.StopFlag = false;
App.Status = APP_STATUS_WAIT_MOTOR_CALI_UP; App.Status = APP_STATUS_WAIT_MOTOR_CALI_UP;
BDC_UP(); BDC_UP();
App.CailUp1mSCnt = 0; App.CailUp1mSCnt = 0;
} }
else if(App.MotorPara.CaliNum >= 480 && App.MotorPara.LoopOne == true) else if(App.MotorPara.CaliNum >= 410 && App.MotorPara.LoopOne == true)
{ {
BDC_STOP(); BDC_STOP();
LED_RED_OFF();
LED_GREEN_ON();
App.StopFlag = true; App.StopFlag = true;
App.DownFlag = false; App.DownFlag = false;
App.UpFlag = false; App.UpFlag = false;
@@ -1234,13 +1097,13 @@ static void AppLoopHandler(void)
App.MotorPara.InitialFlag = false; App.MotorPara.InitialFlag = false;
App.MotorPara.CaliFlag = true; App.MotorPara.CaliFlag = true;
DBG_LOG("===================LU Data monitoring====================\r\n"); DBG_LOG("===================LU Data monitoring====================\r\n");
weightedMovingAverageWithEnhance(App.MotorPara.LU_HeightStress,480,7,380,480,4,0); weightedMovingAverageWithEnhance(App.MotorPara.LU_HeightStress,431,7,341,430,4,0);
DBG_LOG("===================LL Data monitoring====================\r\n"); DBG_LOG("===================LL Data monitoring====================\r\n");
weightedMovingAverageWithEnhance(App.MotorPara.LL_HeightStress,480,7,380,480,4,0); weightedMovingAverageWithEnhance(App.MotorPara.LL_HeightStress,431,7,341,430,4,0);
DBG_LOG("===================RU Data monitoring====================\r\n"); DBG_LOG("===================RU Data monitoring====================\r\n");
weightedMovingAverageWithEnhance(App.MotorPara.RU_HeightStress,480,7,380,480,4,0); weightedMovingAverageWithEnhance(App.MotorPara.RU_HeightStress,431,7,341,430,4,0);
DBG_LOG("===================RL Data monitoring====================\r\n"); DBG_LOG("===================RL Data monitoring====================\r\n");
weightedMovingAverageWithEnhance(App.MotorPara.RL_HeightStress,480,7,380,480,4,0); weightedMovingAverageWithEnhance(App.MotorPara.RL_HeightStress,431,7,341,430,4,0);
DBG_LOG("Motor Cali Ok\r\n"); DBG_LOG("Motor Cali Ok\r\n");
App.TD1mSDelayCnt = 1000; App.TD1mSDelayCnt = 1000;
App.Status = APP_STATUS_WAIT_STEADY; App.Status = APP_STATUS_WAIT_STEADY;
@@ -1250,7 +1113,6 @@ static void AppLoopHandler(void)
case APP_STATUS_WAIT_STEADY:{ case APP_STATUS_WAIT_STEADY:{
if(App.TD1mSDelayCnt <= 0) if(App.TD1mSDelayCnt <= 0)
{ {
Beeper_Start(300,0,1);
App.SideFlag = false; App.SideFlag = false;
App.CaliZeroFlag = false; App.CaliZeroFlag = false;
App.UpFlag = false; App.UpFlag = false;
@@ -1258,12 +1120,38 @@ static void AppLoopHandler(void)
App.EmeFlag = false; App.EmeFlag = false;
App.StopFlag = true; App.StopFlag = true;
App.WaitFlag = true; App.WaitFlag = true;
App.Status = APP_STATUS_HEIGHT_CONTROL; App.Status = APP_STATUS_END_BEEP;
} }
break;} break;}
case APP_STATUS_END_BEEP:{
Beeper_Start(300,0,1);
LED_RED_OFF();
LED_GREEN_ON();
App.Status = APP_STATUS_HEIGHT_CONTROL;
break;}
case APP_STATUS_HEIGHT_CONTROL:{ case APP_STATUS_HEIGHT_CONTROL:{
if(App.MotorPara.Current_height <= 725 if(App.MotorPara.OverheatFlag == true)
{
if(App.MotorPara.Current_height <= 1005)
{
BDC_DOWN();//过热+低位: 继续下降触发控制盒复位(SupportControlHandle在<=1005时不执行BDC_DOWN)
}
//过热+高位(>1005): 由SupportControlHandle根据传感器正常判断下降
}
else if(App.MotorPara.RestFlag == true)
{
if(App.RestStop1mSCnt > 0)
{
BDC_STOP();//复位停顿: 先停止电机, 让控制盒进入复位流程
}
else
{
BDC_DOWN();//停顿结束: 再次下降, 触发控制盒完成复位(收到高度帧后RestFlag清除)
}
}
else if(App.MotorPara.Current_height <= 1005
&& App.MotorPara.RestFlag == false && App.MotorPara.RestFlag == false
&& App.HeightContRolCnt >= 500 && App.HeightContRolCnt >= 500
&& GET_BIT0_DOUT() == 1 && GET_BIT0_DOUT() == 1
@@ -1274,7 +1162,7 @@ static void AppLoopHandler(void)
Ddl_Delay1ms(500); Ddl_Delay1ms(500);
BDC_STOP(); BDC_STOP();
} }
else if(App.MotorPara.Current_height >= 1195 else if(App.MotorPara.Current_height >= 1425
&& App.MotorPara.RestFlag == false && App.MotorPara.RestFlag == false
&& App.HeightContRolCnt >= 500 && App.HeightContRolCnt >= 500
&& GET_BIT0_DOUT() == 1 && GET_BIT0_DOUT() == 1
@@ -1298,6 +1186,8 @@ static void App1mSRoutine(void)
App.Uart1Delay1mSCnt--; App.Uart1Delay1mSCnt--;
if(App.Uart3RxTimeOut1mSCnt > 0) if(App.Uart3RxTimeOut1mSCnt > 0)
App.Uart3RxTimeOut1mSCnt--; App.Uart3RxTimeOut1mSCnt--;
if(App.RestStop1mSCnt > 0)
App.RestStop1mSCnt--;
if(App.StopCollDelay1mSCnt > 0) if(App.StopCollDelay1mSCnt > 0)
App.StopCollDelay1mSCnt--; App.StopCollDelay1mSCnt--;
if(App.RunCollDelay1mSCnt > 0) if(App.RunCollDelay1mSCnt > 0)
@@ -1310,7 +1200,7 @@ static void App1mSRoutine(void)
App.CentCollDelay1mSCnt--; App.CentCollDelay1mSCnt--;
if(App.MotorPara.InitialFlag == true) if(App.MotorPara.InitialFlag == true)
App.CailUp1mSCnt++; App.CailUp1mSCnt++;
if((App.MotorPara.Current_height < 725 || App.MotorPara.Current_height > 1195)) if((App.MotorPara.Current_height < 1005 || App.MotorPara.Current_height > 1425))
{ {
App.HeightContRolCnt++; App.HeightContRolCnt++;
} }
@@ -1332,16 +1222,12 @@ int main(void)
BSP_Init(); BSP_Init();
AppInit(); AppInit();
App.aaa = CENTRE_FRONT_CNT;
App.bbb = CENTRE_FRONT_SUM;
App.ccc = CENTRE_FRONT_VPT;
App.ddd = CENTRE_VPT;
while(1) { while(1) {
#if(USE_WDT == 1) #if(USE_WDT == 1)
FeedDogHandler(); FeedDogHandler();
#endif #endif
DebugLoopHandler(); DebugLoopHandler();
//Uart3ErrLogLoopHandler(); //调试观测日志(复位流程已验证, 关闭打印, 需要时取消注释)
#if(USE_CS1237_LEFTUP == 1) #if(USE_CS1237_LEFTUP == 1)
LEFTUP_CS1237DataLoopCollect(); LEFTUP_CS1237DataLoopCollect();
#endif #endif
@@ -1362,10 +1248,10 @@ int main(void)
} }
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: SysTick_IrqHandler * 函数名称: SysTick_IrqHandler
* 功能描述: 系统滴答中断 * 功能描述: 系统滴答中断
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void SysTick_IrqHandler(void) void SysTick_IrqHandler(void)
{ {
@@ -1382,10 +1268,10 @@ void SysTick_IrqHandler(void)
} }
/***************************************************************************************** /*****************************************************************************************
* 函数名称: DBG_RxPinIntCallBack * 函数名称: DBG_RxPinIntCallBack
* 功能描述: DBG接收中断回调函数 * 功能描述: DBG接收中断回调函数
* 参 数: 无 * 参 数: 无
* 返 回 值: 无 * 返 回 值: 无
*****************************************************************************************/ *****************************************************************************************/
void DBG_RxPinIntCallBack(void) void DBG_RxPinIntCallBack(void)
{ {
@@ -1395,17 +1281,17 @@ void DBG_RxPinIntCallBack(void)
#if(USE_USART3 == 1) #if(USE_USART3 == 1)
// 定义函数Usart3RxIrqCallback,用于处理串口接收中断 // 定义函数Usart3RxIrqCallback,用于处理串口接收中断
void Usart3RxIrqCallback(void) void Usart3RxIrqCallback(void)
{ {
// 如果1分钟超时计数器为0,则清空RxLen // 如果1分钟超时计数器为0,则清空RxLen
if(App.Uart3RxTimeOut1mSCnt == 0) if(App.Uart3RxTimeOut1mSCnt == 0)
{ {
App.RxUart3Data.HeaderFrame = false; App.RxUart3Data.HeaderFrame = false;
App.RxUart3Data.RxLen = 0; App.RxUart3Data.RxLen = 0;
} }
App.Uart3RxTimeOut1mSCnt = 5; App.Uart3RxTimeOut1mSCnt = 5;
// 读取串口接收到的数据 // 读取串口接收到的数据
uint8_t Data = Uart3Rec(); uint8_t Data = Uart3Rec();
if(App.RxUart3Data.HeaderFrame == false) if(App.RxUart3Data.HeaderFrame == false)
{ {
@@ -1429,7 +1315,7 @@ void Usart3RxIrqCallback(void)
// App.RxUart3Data.HeaderFrame = false; // App.RxUart3Data.HeaderFrame = false;
// return; // return;
// } // }
// 如果RxLen小于128,则将数据添加到RxBuff中 // 如果RxLen小于128,则将数据添加到RxBuff中
if(App.RxUart3Data.RxLen < 128) { if(App.RxUart3Data.RxLen < 128) {
App.RxUart3Data.RxBuff[App.RxUart3Data.RxLen++] = Data; App.RxUart3Data.RxBuff[App.RxUart3Data.RxLen++] = Data;
} }
@@ -1437,31 +1323,53 @@ void Usart3RxIrqCallback(void)
{ {
if(App.RxUart3Data.RxBuff[0] == 0x01 && App.RxUart3Data.RxBuff[1] == 0x04) if(App.RxUart3Data.RxBuff[0] == 0x01 && App.RxUart3Data.RxBuff[1] == 0x04)
{ {
uint8_t firstErr = (App.MotorPara.RestFlag == false) ? 0 : 1; //0:首次信息帧 1:复位中回应
App.MotorPara.RestFlag = true; App.MotorPara.RestFlag = true;
App.MotorPara.OverheatFlag = false;//收到复位帧, 过热状态解除
if(firstErr == 0)
{
App.RestStop1mSCnt = 2000;//首次收到复位帧: 启动停顿计时, 先停止电机让控制盒进入复位流程, 计时结束再下降触发复位
}
//Uart3ErrLog_Push(firstErr, App.RxUart3Data.RxBuff, 0);//调试观测日志(关闭打印, 需要时取消注释)
} }
else if(App.RxUart3Data.RxBuff[0] == 0x01 && App.RxUart3Data.RxBuff[1] == 0x01) else if(App.RxUart3Data.RxBuff[0] == 0x01 && App.RxUart3Data.RxBuff[1] == 0x01)
{ {
App.MotorPara.RestFlag = false;
int16_t h = ((App.RxUart3Data.RxBuff[2]<<8) & 0xff00) + (App.RxUart3Data.RxBuff[3] & 0x00ff); int16_t h = ((App.RxUart3Data.RxBuff[2]<<8) & 0xff00) + (App.RxUart3Data.RxBuff[3] & 0x00ff);
if(h >=720 && h <= 1208) if(App.MotorPara.RestFlag == true)
{
//Uart3ErrLog_Push(2, App.RxUart3Data.RxBuff, (uint16_t)h);//调试观测日志(关闭打印, 需要时取消注释)
}
App.MotorPara.RestFlag = false;
App.MotorPara.OverheatFlag = false;//收到高度帧, 确认复位完成
if(h >= 990 && h <= 1430)
{ {
App.MotorPara.Current_height = h; App.MotorPara.Current_height = h;
} }
if(App.MotorPara.InitialFlag == true && h >=720 && h <= 1200) if(App.MotorPara.InitialFlag == true && h >= 1000 && h <= 1430)
{//缓存每个高度点对于零点应力的差值,对不同高度点的应力进行补偿 {//缓存每个高度点对于零点应力的差值,对不同高度点的应力进行补偿
if(App.MotorPara.LU_HeightStress[(App.MotorPara.Current_height)-720] == 0 if(App.MotorPara.LU_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)] == 0
|| App.MotorPara.LL_HeightStress[(App.MotorPara.Current_height)-720] == 0 || App.MotorPara.LL_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)] == 0
|| App.MotorPara.RU_HeightStress[(App.MotorPara.Current_height)-720] == 0 || App.MotorPara.RU_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)] == 0
|| App.MotorPara.RL_HeightStress[(App.MotorPara.Current_height)-720] == 0) || App.MotorPara.RL_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)] == 0)
{ {
App.MotorPara.CaliNum++; App.MotorPara.CaliNum++;
} }
App.MotorPara.LU_HeightStress[(App.MotorPara.Current_height)-720] = App.ADTrack.LeftUp_Org_AdZero - App.LeftUpCS1237_TrendArray[0]; App.MotorPara.LU_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)] = App.ADTrack.LeftUp_Org_AdZero - App.LeftUpCS1237_TrendArray[0];
App.MotorPara.LL_HeightStress[(App.MotorPara.Current_height)-720] = App.ADTrack.LeftLow_Org_AdZero - App.LeftLowCS1237_TrendArray[0]; App.MotorPara.LL_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)] = App.ADTrack.LeftLow_Org_AdZero - App.LeftLowCS1237_TrendArray[0];
App.MotorPara.RU_HeightStress[(App.MotorPara.Current_height)-720] = App.ADTrack.RightUp_Org_AdZero - App.RightUpCS1237_TrendArray[0]; App.MotorPara.RU_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)] = App.ADTrack.RightUp_Org_AdZero - App.RightUpCS1237_TrendArray[0];
App.MotorPara.RL_HeightStress[(App.MotorPara.Current_height)-720] = App.ADTrack.RightLow_Org_AdZero - App.RightLowCS1237_TrendArray[0]; App.MotorPara.RL_HeightStress[HEIGHT_TO_IDX(App.MotorPara.Current_height)] = App.ADTrack.RightLow_Org_AdZero - App.RightLowCS1237_TrendArray[0];
} }
} }
else
{ //未知帧(帧头非01 04/01 01): 过热等其它报错可能是任意组合, 全部记录供分析
/* 过热帧(01 02 00 10): 置OverheatFlag, HEIGHT_CONTROL跳过限位纠偏, 由SupportControlHandle判断下降触发控制盒复位 */
if(App.RxUart3Data.RxBuff[0] == 0x01 && App.RxUart3Data.RxBuff[1] == 0x02
&& App.RxUart3Data.RxBuff[2] == 0x00 && App.RxUart3Data.RxBuff[3] == 0x10)
{
App.MotorPara.OverheatFlag = true;
}
//Uart3ErrLog_Push(3, App.RxUart3Data.RxBuff, 0);//调试观测日志(关闭打印, 需要时取消注释)
}
memset(App.RxUart3Data.RxBuff, 0, sizeof(App.RxUart3Data.RxBuff)); memset(App.RxUart3Data.RxBuff, 0, sizeof(App.RxUart3Data.RxBuff));
App.RxUart3Data.RxLen = 0; App.RxUart3Data.RxLen = 0;
App.Uart3RxTimeOut1mSCnt = 0; App.Uart3RxTimeOut1mSCnt = 0;
+1 -1
View File
@@ -117,7 +117,7 @@ typedef enum en_dcu_int_win_mode
{ {
DcuIntInvalid = 0u, ///< DCU don't occur interrupt DcuIntInvalid = 0u, ///< DCU don't occur interrupt
DcuWinIntInvalid = 1u, ///< DCU window interrupt is invalid. 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 DcuOutsideWinCmpInt = 3u, ///< DCU occur interrupt when DATA0 > DATA1 or DATA0 < DATA2
} en_dcu_int_win_mode_t; } en_dcu_int_win_mode_t;
+1 -1
View File
@@ -267,7 +267,7 @@ extern "C"
/*!< SWDT register config */ /*!< SWDT register config */
#define ICG0_SWDT_AUTS (SWDT_AUTO_START_AFTER_RESET) #define ICG0_SWDT_AUTS (SWDT_AUTO_START_AFTER_RESET)
#define ICG0_SWDT_ITS (SWDT_RESET_REQUEST) #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_CKS (SWDT_COUNT_SWDTCLK_DIV32)
#define ICG0_SWDT_WDPT (SWDT_0To100PCT) #define ICG0_SWDT_WDPT (SWDT_0To100PCT)
#define ICG0_SWDT_SLTPOFF (SWDT_SPECIAL_MODE_COUNT_CONTINUE) #define ICG0_SWDT_SLTPOFF (SWDT_SPECIAL_MODE_COUNT_CONTINUE)