合并代码

This commit is contained in:
许晟昊 2024-11-26 15:13:30 +08:00
parent 066fdc65f1
commit cbacb87051
8 changed files with 22793 additions and 21088 deletions

View File

@ -28,7 +28,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include <stdio.h>
#include "bsp.h"
#include "delay.h"
#include "board.h"
@ -68,16 +68,30 @@ void PeriphCommonClock_Config(void);
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/**
* @brief Write a character to a file stream, used for FLASHDB printf
*
* Writes the specified character to the given file stream and returns the written character.
*
* @param ch The character to be written
* @param stream Pointer to the file stream
*
* @return The written character
*/
int fputc(int ch, FILE *stream)
{
return ch;
}
/* USER CODE END 0 */
/**
* @brief The application entry point.
* @retval int
*/
* @brief The application entry point.
* @retval int
*/
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
@ -90,21 +104,21 @@ int main(void)
NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
/* SysTick_IRQn interrupt configuration */
NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),15, 0));
NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(), 15, 0));
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* Configure the peripherals common clocks */
/* Configure the peripherals common clocks */
PeriphCommonClock_Config();
/* USER CODE BEGIN SysInit */
delay_init((SystemCoreClock / 1000000));
delay_ms(500); // wait for power stable
// delay_ms(500); // wait for power stable
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
@ -124,13 +138,17 @@ int main(void)
MX_TIM16_Init();
/* USER CODE BEGIN 2 */
leds_dinit(); // LED Deinitialization
lcd_dinit(); // LCD screen Deinitialization
hart_uart_dinit(); // HART serial port Deinitialization
hart_ble_dinit(); // Bluetooth Deinitialization
leds_dinit(); // LED Deinitialization
lcd_dinit(); // LCD screen Deinitialization
DISABLE_TIM(PDCTRL_PWM_TIM);
my_mem_init(SRAMIN); // Initialize internal memory pool 1
my_mem_init(SRAMEX); // Initialize external memory pool 2
board_init(); // Initialize board
app_init(); // Initialize application
app_init(); // Initialize application
/* USER CODE END 2 */
/* Infinite loop */
@ -146,13 +164,13 @@ int main(void)
}
/**
* @brief System Clock Configuration
* @retval None
*/
* @brief System Clock Configuration
* @retval None
*/
void SystemClock_Config(void)
{
LL_FLASH_SetLatency(LL_FLASH_LATENCY_0);
while(LL_FLASH_GetLatency()!= LL_FLASH_LATENCY_0)
while (LL_FLASH_GetLatency() != LL_FLASH_LATENCY_0)
{
}
LL_PWR_SetRegulVoltageScaling(LL_PWR_REGU_VOLTAGE_SCALE1);
@ -161,50 +179,46 @@ void SystemClock_Config(void)
}
LL_RCC_HSE_Enable();
/* Wait till HSE is ready */
while(LL_RCC_HSE_IsReady() != 1)
/* Wait till HSE is ready */
while (LL_RCC_HSE_IsReady() != 1)
{
}
LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_1, 8, LL_RCC_PLLR_DIV_2);
LL_RCC_PLL_ConfigDomain_SYS(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 12, LL_RCC_PLLR_DIV_6);
LL_RCC_PLL_EnableDomain_SYS();
LL_RCC_PLL_Enable();
/* Wait till PLL is ready */
while(LL_RCC_PLL_IsReady() != 1)
/* Wait till PLL is ready */
while (LL_RCC_PLL_IsReady() != 1)
{
}
LL_RCC_SetSysClkSource(LL_RCC_SYS_CLKSOURCE_PLL);
/* Wait till System clock is ready */
while(LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
/* Wait till System clock is ready */
while (LL_RCC_GetSysClkSource() != LL_RCC_SYS_CLKSOURCE_STATUS_PLL)
{
}
LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_8);
LL_RCC_SetAHBPrescaler(LL_RCC_SYSCLK_DIV_2);
LL_RCC_SetAPB1Prescaler(LL_RCC_APB1_DIV_1);
LL_RCC_SetAPB2Prescaler(LL_RCC_APB2_DIV_1);
LL_Init1msTick(4000000);
LL_Init1msTick(5529600);
LL_SetSystemCoreClock(4000000);
LL_SetSystemCoreClock(5529600);
}
/**
* @brief Peripherals Common Clock Configuration
* @retval None
*/
* @brief Peripherals Common Clock Configuration
* @retval None
*/
void PeriphCommonClock_Config(void)
{
LL_RCC_PLLSAI1_ConfigDomain_ADC(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_1, 8, LL_RCC_PLLSAI1R_DIV_2);
LL_RCC_PLLSAI1_ConfigDomain_ADC(LL_RCC_PLLSOURCE_HSE, LL_RCC_PLLM_DIV_2, 12, LL_RCC_PLLSAI1R_DIV_8);
LL_RCC_PLLSAI1_EnableDomain_ADC();
LL_RCC_PLLSAI1_Enable();
/* Wait till PLLSAI1 is ready */
while(LL_RCC_PLLSAI1_IsReady() != 1)
/* Wait till PLLSAI1 is ready */
while (LL_RCC_PLLSAI1_IsReady() != 1)
{
}
}
@ -213,9 +227,9 @@ void PeriphCommonClock_Config(void)
/* USER CODE END 4 */
/**
* @brief This function is executed in case of error occurrence.
* @retval None
*/
* @brief This function is executed in case of error occurrence.
* @retval None
*/
void Error_Handler(void)
{
/* USER CODE BEGIN Error_Handler_Debug */
@ -227,14 +241,14 @@ void Error_Handler(void)
/* USER CODE END Error_Handler_Debug */
}
#ifdef USE_FULL_ASSERT
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t *file, uint32_t line)
{
/* USER CODE BEGIN 6 */

View File

@ -0,0 +1,21 @@
/*
* Auto generated Run-Time-Environment Configuration File
* *** Do not modify ! ***
*
* Project: 'controller'
* Target: 'controller-jlink'
*/
#ifndef RTE_COMPONENTS_H
#define RTE_COMPONENTS_H
/*
* Define the Device Header File:
*/
#define CMSIS_device_header "stm32l4xx.h"
#endif /* RTE_COMPONENTS_H */

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
@ -28,7 +28,7 @@
<TargetOption>
<CLKADS>8000000</CLKADS>
<OPTTT>
<gFlags>0</gFlags>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
@ -45,7 +45,7 @@
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath />
<ListingPath></ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
@ -103,18 +103,18 @@
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>0</nTsel>
<sDll />
<sDllPa />
<sDlgDll />
<sDlgPa />
<sIfile />
<tDll />
<tDllPa />
<tDlgDll />
<tDlgPa />
<tIfile />
<pMon>BIN\UL2CM3.DLL</pMon>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
@ -123,7 +123,7 @@
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32L476VGTx$CMSIS\Flash\STM32L4xx_1024.FLM))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint />
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
@ -153,19 +153,19 @@
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable />
<LintConfigFile />
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName />
<pszMrule />
<pSingCmds />
<pMultCmds />
<pMisraNamep />
<pszMrulep />
<pSingCmdsp />
<pMultCmdsp />
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>1</EnableFlashSeq>
@ -183,10 +183,10 @@
<TargetOption>
<CLKADS>12000000</CLKADS>
<OPTTT>
<gFlags>0</gFlags>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>1</RunSim>
<RunTarget>0</RunTarget>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
@ -200,7 +200,7 @@
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath />
<ListingPath></ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
@ -234,8 +234,8 @@
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>1</uSim>
<uTrg>0</uTrg>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
@ -244,7 +244,7 @@
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>0</tGomain>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
@ -258,20 +258,27 @@
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>-1</nTsel>
<sDll />
<sDllPa />
<sDlgDll />
<sDlgPa />
<sIfile />
<tDll />
<tDllPa />
<tDlgDll />
<tDlgPa />
<tIfile />
<pMon />
<nTsel>4</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>Segger\JL2CM3.dll</pMon>
</DebugOpt>
<Breakpoint />
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32L476VGTx$CMSIS\Flash\STM32L4xx_1024.FLM))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
@ -301,19 +308,26 @@
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable />
<LintConfigFile />
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName />
<pszMrule />
<pSingCmds />
<pMultCmds />
<pMisraNamep />
<pszMrulep />
<pSingCmdsp />
<pMultCmdsp />
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>1</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
@ -324,7 +338,7 @@
<TargetOption>
<CLKADS>12000000</CLKADS>
<OPTTT>
<gFlags>0</gFlags>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
@ -341,7 +355,7 @@
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath />
<ListingPath></ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
@ -399,39 +413,76 @@
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>0</nTsel>
<sDll />
<sDllPa />
<sDlgDll />
<sDlgPa />
<sIfile />
<tDll />
<tDllPa />
<tDlgDll />
<tDlgPa />
<tIfile />
<pMon>BIN\UL2CM3.DLL</pMon>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name></Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-U-O206 -O206 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P1 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024.FLM -FS08000000 -FL0100000 -FP0($$Device:STM32L476VGTx$CMSIS\Flash\STM32L4xx_1024.FLM)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32L476VGTx$CMSIS\Flash\STM32L4xx_1024.FLM))</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint />
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>params_reset</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>udevice.wireless_enable</ItemText>
</Ww>
</WatchWindow1>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>0</periodic>
<aLwin>0</aLwin>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>0</viewmode>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
@ -449,22 +500,22 @@
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable />
<LintConfigFile />
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName />
<pszMrule />
<pSingCmds />
<pMultCmds />
<pMisraNamep />
<pszMrulep />
<pSingCmdsp />
<pMultCmdsp />
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>1</EnableFlashSeq>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
@ -941,8 +992,8 @@
</Group>
<Group>
<GroupName>User/hart</GroupName>
<tvExp>0</tvExp>
<GroupName>User/application/mode</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
@ -953,8 +1004,8 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\hart\hart.c</PathWithFileName>
<FilenameWithoutPath>hart.c</FilenameWithoutPath>
<PathWithFileName>..\User\application\mode\mode.c</PathWithFileName>
<FilenameWithoutPath>mode.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
@ -965,14 +1016,46 @@
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\application\mode\mode_pwmp_hd.c</PathWithFileName>
<FilenameWithoutPath>mode_pwmp_hd.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>User/hart</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>38</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\hart\hart.c</PathWithFileName>
<FilenameWithoutPath>hart.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>39</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\hart\hart_frame.c</PathWithFileName>
<FilenameWithoutPath>hart_frame.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>38</FileNumber>
<GroupNumber>8</GroupNumber>
<FileNumber>40</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -983,8 +1066,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>39</FileNumber>
<GroupNumber>8</GroupNumber>
<FileNumber>41</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -995,8 +1078,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>40</FileNumber>
<GroupNumber>8</GroupNumber>
<FileNumber>42</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1007,8 +1090,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>41</FileNumber>
<GroupNumber>8</GroupNumber>
<FileNumber>43</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1019,8 +1102,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>7</GroupNumber>
<FileNumber>42</FileNumber>
<GroupNumber>8</GroupNumber>
<FileNumber>44</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1039,8 +1122,8 @@
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>43</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>45</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1051,8 +1134,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>44</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>46</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1063,8 +1146,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>45</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>47</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1075,8 +1158,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>46</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>48</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1087,8 +1170,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>47</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>49</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1099,8 +1182,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>48</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>50</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1111,8 +1194,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>8</GroupNumber>
<FileNumber>49</FileNumber>
<GroupNumber>9</GroupNumber>
<FileNumber>51</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1131,8 +1214,8 @@
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>50</FileNumber>
<GroupNumber>10</GroupNumber>
<FileNumber>52</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1143,8 +1226,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>51</FileNumber>
<GroupNumber>10</GroupNumber>
<FileNumber>53</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1155,8 +1238,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>9</GroupNumber>
<FileNumber>52</FileNumber>
<GroupNumber>10</GroupNumber>
<FileNumber>54</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1175,8 +1258,8 @@
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>53</FileNumber>
<GroupNumber>11</GroupNumber>
<FileNumber>55</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1187,8 +1270,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>54</FileNumber>
<GroupNumber>11</GroupNumber>
<FileNumber>56</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1199,8 +1282,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>55</FileNumber>
<GroupNumber>11</GroupNumber>
<FileNumber>57</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1211,8 +1294,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>56</FileNumber>
<GroupNumber>11</GroupNumber>
<FileNumber>58</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1223,8 +1306,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>57</FileNumber>
<GroupNumber>11</GroupNumber>
<FileNumber>59</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1235,8 +1318,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>10</GroupNumber>
<FileNumber>58</FileNumber>
<GroupNumber>11</GroupNumber>
<FileNumber>60</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1255,8 +1338,8 @@
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>59</FileNumber>
<GroupNumber>12</GroupNumber>
<FileNumber>61</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1267,8 +1350,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>11</GroupNumber>
<FileNumber>60</FileNumber>
<GroupNumber>12</GroupNumber>
<FileNumber>62</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1287,8 +1370,8 @@
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>61</FileNumber>
<GroupNumber>13</GroupNumber>
<FileNumber>63</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1299,8 +1382,8 @@
<bShared>0</bShared>
</File>
<File>
<GroupNumber>12</GroupNumber>
<FileNumber>62</FileNumber>
<GroupNumber>13</GroupNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1319,8 +1402,8 @@
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>13</GroupNumber>
<FileNumber>63</FileNumber>
<GroupNumber>14</GroupNumber>
<FileNumber>65</FileNumber>
<FileType>4</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
@ -1332,38 +1415,6 @@
</File>
</Group>
<Group>
<GroupName>User/application/mode</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>64</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\application\mode\mode.c</PathWithFileName>
<FilenameWithoutPath>mode.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
<File>
<GroupNumber>14</GroupNumber>
<FileNumber>65</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\User\application\mode\mode_pwmp_hd.c</PathWithFileName>
<FilenameWithoutPath>mode_pwmp_hd.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
<tvExp>0</tvExp>

View File

@ -1,7 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" noNamespaceSchemaLocation="project_projx.xsd">
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_projx.xsd">
<SchemaVersion>2.1</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Targets>
<Target>
<TargetName>controller</TargetName>
@ -16,28 +19,28 @@
<PackID>Keil.STM32L4xx_DFP.2.6.2</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00018000) IRAM2(0x10000000,0x00008000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 DSP CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec />
<StartupFile />
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32L476RGTx$CMSIS\Flash\STM32L4xx_1024.FLM))</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:STM32L476RGTx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h</RegisterFile>
<MemoryEnv />
<Cmp />
<Asm />
<Linker />
<OHString />
<InfinionOptionDll />
<SLE66CMisc />
<SLE66AMisc />
<SLE66LinkerMisc />
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:STM32L476RGTx$CMSIS\SVD\STM32L4x6.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath />
<BinPath></BinPath>
<IncludePath>../Core/Inc;../Drivers/STM32L0xx_HAL_Driver/Inc;../Drivers/CMSIS/Device/ST/STM32L0xx/Include;../Drivers/CMSIS/Include;../User;../User/system/bsp;../User/board/inc;../User/lib/inc;../User/system/inc;../User/lib/font;../User/application/inc;../User/application/menus;../User/hart/inc;../User/lib/flow;../User/lib/control/inc;../User/lib/control/custom;../User/lib/lcd;../User/lib/menu;../User/lib/unity;../Tests</IncludePath>
<LibPath />
<RegisterFilePath />
<DBRegisterFilePath />
<LibPath></LibPath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath></DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
@ -52,15 +55,15 @@
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath />
<ListingPath></ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name />
<UserProg2Name />
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
@ -69,8 +72,8 @@
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name />
<UserProg2Name />
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
@ -87,7 +90,7 @@
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>1</SelectedForBatchBuild>
<SVCSIdString />
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@ -101,8 +104,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument />
<IncludeLibraryModules />
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>0</ComprImg>
</CommonProperty>
<DllOption>
@ -136,10 +139,10 @@
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3>"" ()</Flash3>
<Flash4 />
<pFcarmOut />
<pFcarmGrp />
<pFcArmRoot />
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
@ -172,7 +175,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M4"</AdsCpuType>
<RvctDeviceName />
<RvctDeviceName></RvctDeviceName>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@ -306,7 +309,7 @@
<Size>0x8000</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector />
<RvctStartVector></RvctStartVector>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@ -335,7 +338,7 @@
<VariousControls>
<MiscControls>--locale=english --diag_suppress=9</MiscControls>
<Define>STM32,SLAVE,USE_FULL_LL_DRIVER,STM32L476xx,__FPU_PRESENT=1U,__FPU_USED=0U,__CC_ARM,ARM_MATH_CM4,HSE_VALUE=8000000,HSE_STARTUP_TIMEOUT=100,LSE_STARTUP_TIMEOUT=5000,LSE_VALUE=32768,EXTERNALSAI1_CLOCK_VALUE=2097000,EXTERNALSAI2_CLOCK_VALUE=2097000,HSI_VALUE=16000000,LSI_VALUE=32000,VDD_VALUE=3300,PREFETCH_ENABLE=1,INSTRUCTION_CACHE_ENABLE=1,DATA_CACHE_ENABLE=1,MSI_VALUE=16000000,PREFETCH_ENABLE=0</Define>
<Undefine />
<Undefine></Undefine>
<IncludePath>../Core/Inc;../Drivers/STM32L4xx_HAL_Driver/Inc;../Drivers/CMSIS/Device/ST/STM32L4xx/Include;../Drivers/CMSIS/Include;../User;../User/system/bsp;../User/board/inc;../User/lib/inc;../User/system/inc;../User/lib/font;../User/application/inc;../User/application/menus;../User/application/mode;../User/hart/inc;../User/lib/flow;../User/lib/control/inc;../User/lib/control/custom;../User/lib/lcd;../User/lib/lcd/gui/Config;../User/lib/lcd/gui/Core;../User/lib/menu;../User/lib/unity;../User/lib/flashdb;../User/lib/flashdb/fal;../User/lib/bootload;../Tests;../Middlewares/ST/ARM/DSP/Inc</IncludePath>
</VariousControls>
</Cads>
@ -351,10 +354,10 @@
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<VariousControls>
<MiscControls />
<Define />
<Undefine />
<IncludePath />
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
<LDads>
@ -364,15 +367,15 @@
<noStLib>0</noStLib>
<RepFail>1</RepFail>
<useFile>0</useFile>
<TextAddressRange />
<DataAddressRange />
<pXoBase />
<TextAddressRange></TextAddressRange>
<DataAddressRange></DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile>.\stm32l476xx.sct</ScatterFile>
<IncludeLibs />
<IncludeLibsPath />
<Misc />
<LinkerInputFile />
<DisabledWarnings />
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc></Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
</TargetArmAds>
</TargetOption>
@ -492,6 +495,8 @@
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<FileArmAds>
@ -519,6 +524,12 @@
<v6Lto>2</v6Lto>
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Cads>
</FileArmAds>
</FileOption>
@ -625,6 +636,21 @@
</File>
</Files>
</Group>
<Group>
<GroupName>User/application/mode</GroupName>
<Files>
<File>
<FileName>mode.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode.c</FilePath>
</File>
<File>
<FileName>mode_pwmp_hd.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode_pwmp_hd.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>User/hart</GroupName>
<Files>
@ -790,24 +816,6 @@
</File>
</Files>
</Group>
<Group>
<GroupName>User/application/mode</GroupName>
<Files>
<File>
<FileName>mode.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode.c</FilePath>
</File>
<File>
<FileName>mode_pwmp_hd.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode_pwmp_hd.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
</Group>
<Group>
<GroupName>Middlewares/Library/DSP Library/DSP Library</GroupName>
<GroupOption>
@ -823,6 +831,8 @@
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<GroupArmAds>
@ -850,6 +860,12 @@
<v6Lto>2</v6Lto>
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Cads>
<Aads>
<interw>2</interw>
@ -862,67 +878,16 @@
<uSurpInc>2</uSurpInc>
<useXO>2</useXO>
<ClangAsOpt>1</ClangAsOpt>
<VariousControls>
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
</GroupArmAds>
</GroupOption>
<Files>
<File>
<FileOption>
<CommonProperty>
<UseCPPCompiler>2</UseCPPCompiler>
<RVCTCodeConst>0</RVCTCodeConst>
<RVCTZI>0</RVCTZI>
<RVCTOtherData>0</RVCTOtherData>
<ModuleSelection>0</ModuleSelection>
<IncludeInBuild>1</IncludeInBuild>
<AlwaysBuild>2</AlwaysBuild>
<GenerateAssemblyFile>2</GenerateAssemblyFile>
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<ComprImg>1</ComprImg>
</CommonProperty>
<FileArmAds>
<Cads>
<interw>2</interw>
<Optim>0</Optim>
<oTime>2</oTime>
<SplitLS>2</SplitLS>
<OneElfS>2</OneElfS>
<Strict>2</Strict>
<EnumInt>2</EnumInt>
<PlainCh>2</PlainCh>
<Ropi>2</Ropi>
<Rwpi>2</Rwpi>
<wLevel>0</wLevel>
<uThumb>2</uThumb>
<uSurpInc>2</uSurpInc>
<uC99>2</uC99>
<uGnu>2</uGnu>
<useXO>2</useXO>
<v6Lang>0</v6Lang>
<v6LangP>0</v6LangP>
<vShortEn>2</vShortEn>
<vShortWch>2</vShortWch>
<v6Lto>2</v6Lto>
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
</Cads>
<Aads>
<interw>2</interw>
<Ropi>2</Ropi>
<Rwpi>2</Rwpi>
<thumb>2</thumb>
<SplitLS>2</SplitLS>
<SwStkChk>2</SwStkChk>
<NoWarn>2</NoWarn>
<uSurpInc>2</uSurpInc>
<useXO>2</useXO>
<ClangAsOpt>1</ClangAsOpt>
</Aads>
</FileArmAds>
</FileOption>
</File>
<File>
<FileName>arm_cortexM4l_math.lib</FileName>
<FileType>4</FileType>
@ -940,51 +905,18 @@
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<FileArmAds>
<Cads>
<interw>2</interw>
<Optim>0</Optim>
<oTime>2</oTime>
<SplitLS>2</SplitLS>
<OneElfS>2</OneElfS>
<Strict>2</Strict>
<EnumInt>2</EnumInt>
<PlainCh>2</PlainCh>
<Ropi>2</Ropi>
<Rwpi>2</Rwpi>
<wLevel>0</wLevel>
<uThumb>2</uThumb>
<uSurpInc>2</uSurpInc>
<uC99>2</uC99>
<uGnu>2</uGnu>
<useXO>2</useXO>
<v6Lang>0</v6Lang>
<v6LangP>0</v6LangP>
<vShortEn>2</vShortEn>
<vShortWch>2</vShortWch>
<v6Lto>2</v6Lto>
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
</Cads>
<Aads>
<interw>2</interw>
<Ropi>2</Ropi>
<Rwpi>2</Rwpi>
<thumb>2</thumb>
<SplitLS>2</SplitLS>
<SwStkChk>2</SwStkChk>
<NoWarn>2</NoWarn>
<uSurpInc>2</uSurpInc>
<useXO>2</useXO>
<ClangAsOpt>1</ClangAsOpt>
</Aads>
</FileArmAds>
<FileArmAds/>
</FileOption>
</File>
</Files>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
</Group>
</Groups>
</Target>
<Target>
@ -1000,28 +932,28 @@
<PackID>Keil.STM32L4xx_DFP.2.6.2</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00018000) IRAM2(0x10000000,0x00008000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 DSP CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec />
<StartupFile />
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32L476RGTx$CMSIS\Flash\STM32L4xx_1024.FLM))</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:STM32L476RGTx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h</RegisterFile>
<MemoryEnv />
<Cmp />
<Asm />
<Linker />
<OHString />
<InfinionOptionDll />
<SLE66CMisc />
<SLE66AMisc />
<SLE66LinkerMisc />
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:STM32L476RGTx$CMSIS\SVD\STM32L4x6.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath />
<BinPath></BinPath>
<IncludePath>../Core/Inc;../Drivers/STM32L0xx_HAL_Driver/Inc;../Drivers/CMSIS/Device/ST/STM32L0xx/Include;../Drivers/CMSIS/Include;../User;../User/system/bsp;../User/board/inc;../User/lib/inc;../User/system/inc;../User/lib/font;../User/application/inc;../User/application/menus;../User/hart/inc;../User/lib/flow;../User/lib/control/inc;../User/lib/control/custom;../User/lib/lcd;../User/lib/menu;../User/lib/unity;../Tests</IncludePath>
<LibPath />
<RegisterFilePath />
<DBRegisterFilePath />
<LibPath></LibPath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath></DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
@ -1036,15 +968,15 @@
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>0</BrowseInformation>
<ListingPath />
<ListingPath></ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name />
<UserProg2Name />
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
@ -1053,8 +985,8 @@
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name />
<UserProg2Name />
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
@ -1071,7 +1003,7 @@
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>1</SelectedForBatchBuild>
<SVCSIdString />
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@ -1085,8 +1017,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument />
<IncludeLibraryModules />
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>0</ComprImg>
</CommonProperty>
<DllOption>
@ -1120,10 +1052,10 @@
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3>"" ()</Flash3>
<Flash4 />
<pFcarmOut />
<pFcarmGrp />
<pFcArmRoot />
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
@ -1156,7 +1088,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M4"</AdsCpuType>
<RvctDeviceName />
<RvctDeviceName></RvctDeviceName>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@ -1290,7 +1222,7 @@
<Size>0x8000</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector />
<RvctStartVector></RvctStartVector>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@ -1319,7 +1251,7 @@
<VariousControls>
<MiscControls>--locale=english --diag_suppress=9</MiscControls>
<Define>STM32,SLAVE,USE_FULL_LL_DRIVER,STM32L476xx,__FPU_PRESENT=1U,__FPU_USED=0U,__CC_ARM,ARM_MATH_CM4,HSE_VALUE=8000000,HSE_STARTUP_TIMEOUT=100,LSE_STARTUP_TIMEOUT=5000,LSE_VALUE=32768,EXTERNALSAI1_CLOCK_VALUE=2097000,EXTERNALSAI2_CLOCK_VALUE=2097000,HSI_VALUE=16000000,LSI_VALUE=32000,VDD_VALUE=3300,PREFETCH_ENABLE=1,INSTRUCTION_CACHE_ENABLE=1,DATA_CACHE_ENABLE=1,MSI_VALUE=16000000</Define>
<Undefine />
<Undefine></Undefine>
<IncludePath>../Core/Inc;../Drivers/STM32L4xx_HAL_Driver/Inc;../Drivers/CMSIS/Device/ST/STM32L4xx/Include;../Drivers/CMSIS/Include;../User;../User/system/bsp;../User/board/inc;../User/lib/inc;../User/system/inc;../User/lib/font;../User/application/inc;../User/application/menus;../User/application/mode;../User/hart/inc;../User/lib/flow;../User/lib/control/inc;../User/lib/control/custom;../User/lib/lcd;../User/lib/lcd/gui/Config;../User/lib/lcd/gui/Core;../User/lib/menu;../User/lib/unity;../User/lib/flashdb;../User/lib/flashdb/fal;../User/lib/bootload;../Tests;../Middlewares/ST/ARM/DSP/Inc</IncludePath>
</VariousControls>
</Cads>
@ -1335,10 +1267,10 @@
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<VariousControls>
<MiscControls />
<Define />
<Undefine />
<IncludePath />
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
<LDads>
@ -1348,15 +1280,15 @@
<noStLib>0</noStLib>
<RepFail>1</RepFail>
<useFile>0</useFile>
<TextAddressRange />
<DataAddressRange />
<pXoBase />
<TextAddressRange></TextAddressRange>
<DataAddressRange></DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile>.\stm32l476xx.sct</ScatterFile>
<IncludeLibs />
<IncludeLibsPath />
<Misc />
<LinkerInputFile />
<DisabledWarnings />
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc></Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
</TargetArmAds>
</TargetOption>
@ -1476,8 +1408,8 @@
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<CustomArgument />
<IncludeLibraryModules />
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<FileArmAds>
@ -1506,10 +1438,10 @@
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
<VariousControls>
<MiscControls />
<Define />
<Undefine />
<IncludePath />
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Cads>
</FileArmAds>
@ -1617,6 +1549,21 @@
</File>
</Files>
</Group>
<Group>
<GroupName>User/application/mode</GroupName>
<Files>
<File>
<FileName>mode.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode.c</FilePath>
</File>
<File>
<FileName>mode_pwmp_hd.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode_pwmp_hd.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>User/hart</GroupName>
<Files>
@ -1783,17 +1730,12 @@
</Files>
</Group>
<Group>
<GroupName>User/application/mode</GroupName>
<GroupName>Middlewares/Library/DSP Library/DSP Library</GroupName>
<Files>
<File>
<FileName>mode.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode.c</FilePath>
</File>
<File>
<FileName>mode_pwmp_hd.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode_pwmp_hd.c</FilePath>
<FileName>arm_cortexM4l_math.lib</FileName>
<FileType>4</FileType>
<FilePath>../Middlewares/ST/ARM/DSP/Lib/arm_cortexM4l_math.lib</FilePath>
</File>
</Files>
</Group>
@ -1812,8 +1754,8 @@
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<CustomArgument />
<IncludeLibraryModules />
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<GroupArmAds>
@ -1842,10 +1784,10 @@
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
<VariousControls>
<MiscControls />
<Define />
<Undefine />
<IncludePath />
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -1860,10 +1802,10 @@
<useXO>2</useXO>
<ClangAsOpt>0</ClangAsOpt>
<VariousControls>
<MiscControls />
<Define />
<Undefine />
<IncludePath />
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
</GroupArmAds>
@ -1884,28 +1826,28 @@
<PackID>Keil.STM32L4xx_DFP.2.6.2</PackID>
<PackURL>https://www.keil.com/pack/</PackURL>
<Cpu>IRAM(0x20000000,0x00018000) IRAM2(0x10000000,0x00008000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 DSP CLOCK(12000000) ELITTLE</Cpu>
<FlashUtilSpec />
<StartupFile />
<FlashUtilSpec></FlashUtilSpec>
<StartupFile></StartupFile>
<FlashDriverDll>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC8000 -FN1 -FF0STM32L4xx_1024 -FS08000000 -FL0100000 -FP0($$Device:STM32L476RGTx$CMSIS\Flash\STM32L4xx_1024.FLM))</FlashDriverDll>
<DeviceId>0</DeviceId>
<RegisterFile>$$Device:STM32L476RGTx$Drivers\CMSIS\Device\ST\STM32L4xx\Include\stm32l4xx.h</RegisterFile>
<MemoryEnv />
<Cmp />
<Asm />
<Linker />
<OHString />
<InfinionOptionDll />
<SLE66CMisc />
<SLE66AMisc />
<SLE66LinkerMisc />
<MemoryEnv></MemoryEnv>
<Cmp></Cmp>
<Asm></Asm>
<Linker></Linker>
<OHString></OHString>
<InfinionOptionDll></InfinionOptionDll>
<SLE66CMisc></SLE66CMisc>
<SLE66AMisc></SLE66AMisc>
<SLE66LinkerMisc></SLE66LinkerMisc>
<SFDFile>$$Device:STM32L476RGTx$CMSIS\SVD\STM32L4x6.svd</SFDFile>
<bCustSvd>0</bCustSvd>
<UseEnv>0</UseEnv>
<BinPath />
<BinPath></BinPath>
<IncludePath>../Core/Inc;../Drivers/STM32L0xx_HAL_Driver/Inc;../Drivers/CMSIS/Device/ST/STM32L0xx/Include;../Drivers/CMSIS/Include;../User;../User/system/bsp;../User/board/inc;../User/lib/inc;../User/system/inc;../User/lib/font;../User/application/inc;../User/application/menus;../User/hart/inc;../User/lib/flow;../User/lib/control/inc;../User/lib/control/custom;../User/lib/lcd;../User/lib/menu;../User/lib/unity;../Tests</IncludePath>
<LibPath />
<RegisterFilePath />
<DBRegisterFilePath />
<LibPath></LibPath>
<RegisterFilePath></RegisterFilePath>
<DBRegisterFilePath></DBRegisterFilePath>
<TargetStatus>
<Error>0</Error>
<ExitCodeStop>0</ExitCodeStop>
@ -1920,15 +1862,15 @@
<CreateHexFile>1</CreateHexFile>
<DebugInformation>1</DebugInformation>
<BrowseInformation>1</BrowseInformation>
<ListingPath />
<ListingPath></ListingPath>
<HexFormatSelection>1</HexFormatSelection>
<Merge32K>0</Merge32K>
<CreateBatchFile>0</CreateBatchFile>
<BeforeCompile>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name />
<UserProg2Name />
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopU1X>0</nStopU1X>
@ -1937,8 +1879,8 @@
<BeforeMake>
<RunUserProg1>0</RunUserProg1>
<RunUserProg2>0</RunUserProg2>
<UserProg1Name />
<UserProg2Name />
<UserProg1Name></UserProg1Name>
<UserProg2Name></UserProg2Name>
<UserProg1Dos16Mode>0</UserProg1Dos16Mode>
<UserProg2Dos16Mode>0</UserProg2Dos16Mode>
<nStopB1X>0</nStopB1X>
@ -1955,7 +1897,7 @@
<nStopA2X>0</nStopA2X>
</AfterMake>
<SelectedForBatchBuild>1</SelectedForBatchBuild>
<SVCSIdString />
<SVCSIdString></SVCSIdString>
</TargetCommonOption>
<CommonProperty>
<UseCPPCompiler>0</UseCPPCompiler>
@ -1969,8 +1911,8 @@
<AssembleAssemblyFile>0</AssembleAssemblyFile>
<PublicsOnly>0</PublicsOnly>
<StopOnExitCode>3</StopOnExitCode>
<CustomArgument />
<IncludeLibraryModules />
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>0</ComprImg>
</CommonProperty>
<DllOption>
@ -2004,10 +1946,10 @@
<bUseTDR>1</bUseTDR>
<Flash2>BIN\UL2CM3.DLL</Flash2>
<Flash3>"" ()</Flash3>
<Flash4 />
<pFcarmOut />
<pFcarmGrp />
<pFcArmRoot />
<Flash4></Flash4>
<pFcarmOut></pFcarmOut>
<pFcarmGrp></pFcarmGrp>
<pFcArmRoot></pFcArmRoot>
<FcArmLst>0</FcArmLst>
</Utilities>
<TargetArmAds>
@ -2040,7 +1982,7 @@
<RvctClst>0</RvctClst>
<GenPPlst>0</GenPPlst>
<AdsCpuType>"Cortex-M4"</AdsCpuType>
<RvctDeviceName />
<RvctDeviceName></RvctDeviceName>
<mOS>0</mOS>
<uocRom>0</uocRom>
<uocRam>0</uocRam>
@ -2174,7 +2116,7 @@
<Size>0x8000</Size>
</OCR_RVCT10>
</OnChipMemories>
<RvctStartVector />
<RvctStartVector></RvctStartVector>
</ArmAdsMisc>
<Cads>
<interw>1</interw>
@ -2203,7 +2145,7 @@
<VariousControls>
<MiscControls>--locale=english --diag_suppress=9</MiscControls>
<Define>STM32,SLAVE,USE_FULL_LL_DRIVER,STM32L476xx,__FPU_PRESENT=1U,__FPU_USED=0U,__CC_ARM,ARM_MATH_CM4,HSE_VALUE=8000000,HSE_STARTUP_TIMEOUT=100,LSE_STARTUP_TIMEOUT=5000,LSE_VALUE=32768,EXTERNALSAI1_CLOCK_VALUE=2097000,EXTERNALSAI2_CLOCK_VALUE=2097000,HSI_VALUE=16000000,LSI_VALUE=32000,VDD_VALUE=3300,PREFETCH_ENABLE=1,INSTRUCTION_CACHE_ENABLE=1,DATA_CACHE_ENABLE=1,MSI_VALUE=16000000</Define>
<Undefine />
<Undefine></Undefine>
<IncludePath>../Core/Inc;../Drivers/STM32L4xx_HAL_Driver/Inc;../Drivers/CMSIS/Device/ST/STM32L4xx/Include;../Drivers/CMSIS/Include;../User;../User/system/bsp;../User/board/inc;../User/lib/inc;../User/system/inc;../User/lib/font;../User/application/inc;../User/application/menus;../User/application/mode;../User/hart/inc;../User/lib/flow;../User/lib/control/inc;../User/lib/control/custom;../User/lib/lcd;../User/lib/lcd/gui/Config;../User/lib/lcd/gui/Core;../User/lib/menu;../User/lib/unity;../User/lib/flashdb;../User/lib/flashdb/fal;../User/lib/bootload;../Tests;../Middlewares/ST/ARM/DSP/Inc</IncludePath>
</VariousControls>
</Cads>
@ -2219,10 +2161,10 @@
<useXO>0</useXO>
<ClangAsOpt>4</ClangAsOpt>
<VariousControls>
<MiscControls />
<Define />
<Undefine />
<IncludePath />
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
<LDads>
@ -2232,15 +2174,15 @@
<noStLib>0</noStLib>
<RepFail>1</RepFail>
<useFile>0</useFile>
<TextAddressRange />
<DataAddressRange />
<pXoBase />
<TextAddressRange></TextAddressRange>
<DataAddressRange></DataAddressRange>
<pXoBase></pXoBase>
<ScatterFile>.\stm32l476xx.sct</ScatterFile>
<IncludeLibs />
<IncludeLibsPath />
<Misc />
<LinkerInputFile />
<DisabledWarnings />
<IncludeLibs></IncludeLibs>
<IncludeLibsPath></IncludeLibsPath>
<Misc></Misc>
<LinkerInputFile></LinkerInputFile>
<DisabledWarnings></DisabledWarnings>
</LDads>
</TargetArmAds>
</TargetOption>
@ -2360,8 +2302,8 @@
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<CustomArgument />
<IncludeLibraryModules />
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<FileArmAds>
@ -2390,10 +2332,10 @@
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
<VariousControls>
<MiscControls />
<Define />
<Undefine />
<IncludePath />
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Cads>
</FileArmAds>
@ -2501,6 +2443,21 @@
</File>
</Files>
</Group>
<Group>
<GroupName>User/application/mode</GroupName>
<Files>
<File>
<FileName>mode.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode.c</FilePath>
</File>
<File>
<FileName>mode_pwmp_hd.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode_pwmp_hd.c</FilePath>
</File>
</Files>
</Group>
<Group>
<GroupName>User/hart</GroupName>
<Files>
@ -2667,17 +2624,12 @@
</Files>
</Group>
<Group>
<GroupName>User/application/mode</GroupName>
<GroupName>Middlewares/Library/DSP Library/DSP Library</GroupName>
<Files>
<File>
<FileName>mode.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode.c</FilePath>
</File>
<File>
<FileName>mode_pwmp_hd.c</FileName>
<FileType>1</FileType>
<FilePath>..\User\application\mode\mode_pwmp_hd.c</FilePath>
<FileName>arm_cortexM4l_math.lib</FileName>
<FileType>4</FileType>
<FilePath>../Middlewares/ST/ARM/DSP/Lib/arm_cortexM4l_math.lib</FilePath>
</File>
</Files>
</Group>
@ -2696,8 +2648,8 @@
<AssembleAssemblyFile>2</AssembleAssemblyFile>
<PublicsOnly>2</PublicsOnly>
<StopOnExitCode>11</StopOnExitCode>
<CustomArgument />
<IncludeLibraryModules />
<CustomArgument></CustomArgument>
<IncludeLibraryModules></IncludeLibraryModules>
<ComprImg>1</ComprImg>
</CommonProperty>
<GroupArmAds>
@ -2726,10 +2678,10 @@
<v6WtE>2</v6WtE>
<v6Rtti>2</v6Rtti>
<VariousControls>
<MiscControls />
<Define />
<Undefine />
<IncludePath />
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Cads>
<Aads>
@ -2744,10 +2696,10 @@
<useXO>2</useXO>
<ClangAsOpt>0</ClangAsOpt>
<VariousControls>
<MiscControls />
<Define />
<Undefine />
<IncludePath />
<MiscControls></MiscControls>
<Define></Define>
<Undefine></Undefine>
<IncludePath></IncludePath>
</VariousControls>
</Aads>
</GroupArmAds>
@ -2756,19 +2708,21 @@
</Groups>
</Target>
</Targets>
<RTE>
<apis />
<apis/>
<components>
<component Cclass="CMSIS" Cgroup="CORE" Cvendor="ARM" Cversion="5.1.1" condition="ARMv6_7_8-M Device">
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.3.0" />
<package name="CMSIS" schemaVersion="1.3" url="http://www.keil.com/pack/" vendor="ARM" version="5.3.0"/>
<targetInfos>
<targetInfo name="controller" />
<targetInfo name="controller-stlink" />
<targetInfo name="controller"/>
<targetInfo name="controller-stlink"/>
</targetInfos>
</component>
</components>
<files />
<files/>
</RTE>
<LayerInfo>
<Layers>
<Layer>
@ -2777,5 +2731,5 @@
</Layer>
</Layers>
</LayerInfo>
</Project>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -428,7 +428,6 @@ void app_init(void)
}
app_preload_logo(TRUE);
system_clock_config_high(); // 切换高频
// fal初始化
{
size = 0;
@ -454,7 +453,6 @@ void app_init(void)
fal_execution_status_set(FAL_EXECUTION_EEPROM_M95_2, TRUE);
fal_execution_status_set(FAL_EXECUTION_EEPROM_FM24, TRUE);
}
system_clock_config_low();
leds_on(LEDS_GREEN);
// 断电重启:优先启动控制模块 <=2000ms
if (noinit_data.rest_flag == 0)

View File

@ -5,7 +5,7 @@
#include "board.h"
#include "./mode_pwmp_hd.h"
#include "delay.h"
#include "at_hc24.h"
#include "at_bluetooth.h"
#include "entity.h"
#include "eeprom_m95.h"
#include "pid.h"
@ -129,8 +129,8 @@ static void pwmp_control_update(filter_e type)
{
mode_pwmp_hd_control_t *p = &mode_pwmp_hd->control;
rt_data.actual_travel = get_actual_travel(type);
rt_data.actual_travel = actual_travel_deal(rt_data.actual_travel);
pid_actual = get_pid_travel(rt_data.actual_travel);
rt_data.pid_actual = get_pid_travel(rt_data.actual_travel);
if (mode_pwmp_hd->process_state == PWMP_HD_PROCESS_ADJUST)
{
@ -142,22 +142,36 @@ static void pwmp_control_update(filter_e type)
}
else
{
p->ctrl_target = lpf_window_update(mode_pwmp_hd->filter.handle, pid_target);
if (udevice.zero_power_condition == VALVE_OPEN)
{
p->ctrl_target = lpf_window_update(&mode_pwmp_hd->filter.handle, rt_data.pid_target);
}
else
{
p->ctrl_target = 100.0f - lpf_window_update(&mode_pwmp_hd->filter.handle, rt_data.pid_target);
}
}
#if ACTUAL_FILTER == 1
if (fabs(p->real_error) < 0.5)
{
p->ctrl_feedback = lpf_window_update(mode_pwmp_hd->filter.handle, pid_actual);
p->ctrl_feedback = lpf_window_update(mode_pwmp_hd->filter.handle, rt_data.pid_actual);
}
else
{
p->ctrl_feedback = pid_actual;
p->ctrl_feedback = rt_data.pid_actual;
lpf_window_reset(mode_pwmp_hd->filter.handle);
}
#else
p->ctrl_feedback = pid_actual;
p->ctrl_feedback = rt_data.pid_actual;
#endif
p->real_error = p->ctrl_target - p->ctrl_feedback;
if (udevice.zero_power_condition == VALVE_OPEN)
{
p->real_error = p->ctrl_target - p->ctrl_feedback;
}
else
{
p->real_error = -(p->ctrl_target - p->ctrl_feedback);
}
p->current_adc = adc_raw[ADC_PSB_CHANNEL];
p->small_trip_current_adc = adc_result_average(ADCS_1, ADC_IPSB_CHANNEL);
/*测试模式赋值*/
@ -175,8 +189,8 @@ static float32 get_pwmp_hd_control_kp(void)
{
if (mode_pwmp_hd->pwmp_save->storage.kp < 2)
{
return mode_pwmp_hd->pwmp_save->storage.kp * 8;
// return mode_pwmp_hd->pwmp_save->storage.kp * 15;
// return mode_pwmp_hd->pwmp_save->storage.kp * 6;
return mode_pwmp_hd->pwmp_save->storage.kp * 15;
}
else
{
@ -192,7 +206,7 @@ static float32 get_pwmp_hd_control_ki(void)
static float32 get_pwmp_hd_control_kd(void)
{
// return mode_pwmp_hd->pwmp_save->storage.kd < 0.01 ? mode_pwmp_hd->pwmp_save->storage.kd : 0.001;
if (udevice.value_travel_type == TRAVEL_TYPE_STRAIGHT)
if (udevice.act_style.bits.value_travel_type == TRAVEL_TYPE_STRAIGHT)
{
return mode_pwmp_hd->pwmp_save->storage.kd = 0;
}
@ -217,9 +231,9 @@ static void pwmp_public_params_update()
udevice.pos100_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_100;
udevice.output_min = mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
udevice.output_max = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin;
udevice.apid_kp = mode_pwmp_hd->pwmp_save->storage.kp;
udevice.apid_ki = mode_pwmp_hd->pwmp_save->storage.ki;
udevice.apid_kd = mode_pwmp_hd->pwmp_save->storage.kd;
udevice.spid_kp = mode_pwmp_hd->pwmp_save->storage.kp;
udevice.spid_ki = mode_pwmp_hd->pwmp_save->storage.ki;
udevice.spid_kd = mode_pwmp_hd->pwmp_save->storage.kd;
udevice.tuned_flag = mode_pwmp_hd->pwmp_save->storage.prov_flag;
}
@ -233,9 +247,9 @@ void mode_pwmp_hd_stop(mode_pwmp_hd_t *handle)
// TODO:需要对进气和排气过程进行判定
/*将10-20、20-30、30-40...等区间进行局部线性化,并将输入的目标变量进行映射处理*/
static float32_t convert_target_to_controlvalue()
{ // FIXME:将函数补足
{
uint16_t i = 0;
float32 tmp = 0;
float32 tmp = 0.0;
static float32 control_value = 0; // 此变量要传回故定义为static类型。
i = (uint16_t)(fabs(mode_pwmp_hd->control.ctrl_target) / 10);
@ -257,12 +271,12 @@ static float32_t convert_target_to_controlvalue()
if (mode_pwmp_hd->action == INFLATE)
{
tmp = ((mode_pwmp_hd->control.ctrl_target - (i * 10)) / (10));
control_value = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[i - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[i - 1];
control_value = (tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[i - 1]) + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[i - 1];
}
else if (mode_pwmp_hd->action == DEFLATE)
{
tmp = ((mode_pwmp_hd->control.ctrl_target - (i * 10)) / (10));
control_value = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[i - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[i - 1];
control_value = (tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[i - 1]) + mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[i - 1];
}
}
@ -272,7 +286,7 @@ static float32_t convert_target_to_controlvalue()
/*判断运动状态(充气/排气)*/
static void inflate_or_deflate()
{
if (udevice.value_action_type == ATO)
if (udevice.zero_power_condition == VALVE_OPEN)
{
if (mode_pwmp_hd->control.real_error < 0)
{
@ -283,7 +297,7 @@ static void inflate_or_deflate()
mode_pwmp_hd->action = INFLATE;
}
}
else if (udevice.value_action_type == ATC)
else if (udevice.zero_power_condition == VALVE_CLOSE)
{
if (mode_pwmp_hd->control.real_error < 0)
{
@ -296,6 +310,55 @@ static void inflate_or_deflate()
}
}
/*计算稳定区间控制值*/
static void calculate_pwmp_stable_range(float32 *target, float32 *err)
{
// TODO:完善稳定区间控制值代码编写
float32 up_value = 0.0;
float32 down_value = 0.0;
uint8_t up = 0;
uint8_t down = 0;
uint8_t i = 0;
float32 tmp = 0.0;
up_value = (fabs(*target) + 5.0);
down_value = (fabs(*target) - 5.0);
up = (uint8_t)((fabs(*target) + 5.0) / 10);
down = (uint8_t)((fabs(*target) - 5.0) / 10);
i = (uint8_t)((fabs(*target) / 10));
if (mode_pwmp_hd->action == INFLATE)
{
tmp = ((up_value - (up * 10.0)) / (10.0));
mode_pwmp_hd->control.pwmp_max_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[up - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[up - 1];
tmp = ((down_value - (down * 10.0)) / (10.0));
mode_pwmp_hd->control.pwmp_min_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[down - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[down - 1];
tmp = ((*target - (i * 10.0)) / (10.0));
mode_pwmp_hd->valvepos_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[i - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[i - 1];
}
else if (mode_pwmp_hd->action == DEFLATE)
{
// tmp = ((up_value - (up * 10.0)) / (10.0));
// mode_pwmp_hd->control.pwmp_max_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[up - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[up - 1];
// tmp = ((down_value - (down * 10.0)) / (10.0));
// mode_pwmp_hd->control.pwmp_min_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[down - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[down - 1];
// tmp = ((*target - (i * 10.0)) / (10.0));
// mode_pwmp_hd->valvepos_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[i - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[i - 1];
tmp = ((up_value - (up * 10.0)) / (10.0));
mode_pwmp_hd->control.pwmp_max_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[up - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[up - 1];
tmp = ((down_value - (down * 10.0)) / (10.0));
mode_pwmp_hd->control.pwmp_min_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[down - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[down - 1];
tmp = ((*target - (i * 10.0)) / (10.0));
mode_pwmp_hd->valvepos_stable = tmp * mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[i - 1] + mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[i - 1];
}
if (fabs(*err) <= 0.5)
{
// 此处做平滑处理(平滑移动到稳定控制点)
mode_pwmp_hd->control.pwmp_max_stable -= fabs(*err) * fabs(mode_pwmp_hd->control.pwmp_max_stable - mode_pwmp_hd->valvepos_stable);
mode_pwmp_hd->control.pwmp_min_stable += fabs(*err) * fabs(mode_pwmp_hd->control.pwmp_min_stable - mode_pwmp_hd->valvepos_stable);
}
}
/**
* @brief
* @param {execute_plan_hd_e} plan
@ -313,7 +376,9 @@ void execute_pid_init(execute_plan_hd_e plan)
_pid.pid_u.hd.set_ctrl_prm_position(&_pid.pid_u.hd, get_pwmp_hd_control_kp(), get_pwmp_hd_control_ki(), get_pwmp_hd_control_kd());
break;
case EXECUTE_PLAN_2:
_pid.type = PID_TYPE_CUSTOM_HANGDIAN;
pid_constructor(&_pid);
_pid.pid_u.hd.set_ctrl_prm_position(&_pid.pid_u.hd, get_pwmp_hd_control_kp(), get_pwmp_hd_control_ki(), get_pwmp_hd_control_kd());
break;
case EXECUTE_PLAN_3:
@ -351,7 +416,6 @@ execute_rsp_hd_t *execute_dac(execute_plan_hd_e plan)
static execute_rsp_hd_t *execute_dac_plan1()
{
static float32 Control_diff;
// uint8_t flag_stable = 0;
Control_diff = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin - mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
float32 out = 0.0;
@ -364,15 +428,15 @@ static execute_rsp_hd_t *execute_dac_plan1()
_pid.pid_u.hd.set_out_prm_position(&_pid.pid_u.hd, 100, 0);
out = _pid.pid_u.hd.pid_position(&_pid.pid_u.hd, mode_pwmp_hd->control.real_error);
out = out / 100;
if (udevice.value_travel_type == TRAVEL_TYPE_STRAIGHT)
if (udevice.act_style.bits.value_travel_type == TRAVEL_TYPE_STRAIGHT)
{
#if 1
/* 一阶段加权系数*/
static float32 index_min_first = 0.2;
static float32 index_max_first = 0.2;
static float32 index_min_first = 0.5;
static float32 index_max_first = 0.5;
/*二阶段加权系数*/
static float32 index_min_second = 0.1;
static float32 index_max_second = 0.1;
static float32 index_min_second = 0.2;
static float32 index_max_second = 0.2;
if (mode_pwmp_hd->process_state == PWMP_HD_PROCESS_ADJUST)
{
if (fabs(mode_pwmp_hd->control.real_error) >= 5.7)
@ -435,7 +499,7 @@ static execute_rsp_hd_t *execute_dac_plan1()
}
#endif
}
else if (udevice.value_travel_type == TRAVEL_TYPE_ANGULAR)
else if (udevice.act_style.bits.value_travel_type == TRAVEL_TYPE_ANGULAR)
{
#if 0
/* 一阶段加权系数*/
@ -499,10 +563,128 @@ static execute_rsp_hd_t *execute_dac_plan1()
/// </summary>
/// <param name=""></param>
/// <returns></returns>
/// TODO:完善新策略控制程序
static execute_rsp_hd_t *execute_dac_plan2()
{
return 0;
float32 out = 0.0;
static float32 Control_diff;
Control_diff = mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin - mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
/*判断此时的充排气状态*/
inflate_or_deflate();
/*获取目标值对应的控制值大小*/
// mode_pwmp_hd->valvepos_stable = convert_target_to_controlvalue();
/*获取控制稳定值上下限区间*/
calculate_pwmp_stable_range(&mode_pwmp_hd->control.ctrl_target, &mode_pwmp_hd->control.real_error);
// 杭电:输出限幅的参数设置
_pid.pid_u.hd.set_out_prm_position(&_pid.pid_u.hd, 100, 0);
out = _pid.pid_u.hd.pid_position(&_pid.pid_u.hd, mode_pwmp_hd->control.real_error);
out = out / 100;
if (udevice.act_style.bits.value_travel_type == TRAVEL_TYPE_STRAIGHT)
{
if (mode_pwmp_hd->process_state == PWMP_HD_PROCESS_ADJUST)
{
// 在整定过程中时,执行本控制程序实现稳定点的求取
/* 一阶段加权系数*/
static float32 index_min_first = 0;
static float32 index_max_first = 0;
/*二阶段加权系数*/
static float32 index_min_second = 0;
static float32 index_max_second = 0;
if (fabs(mode_pwmp_hd->control.real_error) >= 5.7)
{ // 对PID输出结果进行归一化处理
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_first) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_first;
}
else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) >= 1)
{ // 对PID输出结果进行归一化处理
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin + Control_diff * index_max_second) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin - Control_diff * index_min_second;
}
else
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
}
}
else
{
// 控制模式中执行下列程序
if ((mode_pwmp_hd->control.ctrl_target > 10.0f || mode_pwmp_hd->control.ctrl_target < 90.0f))
{
if (mode_pwmp_hd->action == INFLATE)
{
if (fabs(mode_pwmp_hd->control.real_error) >= mode_pwmp_hd->pwmp_save->storage.overimpulse_in)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.3) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
}
else if (fabs(mode_pwmp_hd->control.real_error) >= 5.7 && fabs(mode_pwmp_hd->control.real_error) < mode_pwmp_hd->pwmp_save->storage.overimpulse_in)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.1) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
}
else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) > 0.5)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
}
else if (fabs(mode_pwmp_hd->control.real_error) <= 0.5)
{
out *= (mode_pwmp_hd->control.pwmp_max_stable) - (mode_pwmp_hd->control.pwmp_min_stable); // 映射实际控制器的范围
out += mode_pwmp_hd->control.pwmp_min_stable;
}
}
else if (mode_pwmp_hd->action == DEFLATE)
{
if (fabs(mode_pwmp_hd->control.real_error) >= mode_pwmp_hd->pwmp_save->storage.overimpulse_ex)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8;
}
else if (fabs(mode_pwmp_hd->control.real_error) >= 5.7 && fabs(mode_pwmp_hd->control.real_error) < mode_pwmp_hd->pwmp_save->storage.overimpulse_ex)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.95); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.95;
}
else if (fabs(mode_pwmp_hd->control.real_error) < 5.7 && fabs(mode_pwmp_hd->control.real_error) > 0.5)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
}
else if (fabs(mode_pwmp_hd->control.real_error) <= 0.5)
{
out *= (mode_pwmp_hd->control.pwmp_max_stable) - (mode_pwmp_hd->control.pwmp_min_stable); // 映射实际控制器的范围
out += mode_pwmp_hd->control.pwmp_min_stable;
}
}
}
else
{
if (fabs(mode_pwmp_hd->control.real_error) >= mode_pwmp_hd->pwmp_save->storage.overimpulse_in)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.3) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
}
else if (fabs(mode_pwmp_hd->control.real_error) >= 5.7 && fabs(mode_pwmp_hd->control.real_error) < mode_pwmp_hd->pwmp_save->storage.overimpulse_in)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.1) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
}
else if (fabs(mode_pwmp_hd->control.real_error) < 5.7)
{
out *= (mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin) - (mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin); // 映射实际控制器的范围
out += mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin;
}
}
}
}
rsp.code = EXECUTE_HD_OUT;
rsp.dac = (uint32_t)out;
return &rsp;
}
/// <summary>
@ -621,7 +803,7 @@ static void pwmp_adjust_hd_idle(uint8_t *state, mode_pwmp_hd_adjust_state_e next
mode_pwmp_hd_adjust->adc_record_1 = pid_autotune_hd->data.adjust_tmp_actual;
mode_pwmp_hd_adjust->adc_record_0 = pid_autotune_hd->data.adjust_tmp_actual;
// 记录0位置电流的大小
if (udevice.value_action_type == ATO)
if (udevice.zero_power_condition == VALVE_OPEN)
{
mode_pwmp_hd_adjust->current_0 = ip2current();
}
@ -921,7 +1103,7 @@ static void pwmp_adjust_hd_rough_position100(uint8_t *state, mode_pwmp_hd_adjust
return;
}
sys_millis_reset();
if (udevice.value_action_type == ATO) // 若调节阀为气开阀
if (udevice.zero_power_condition == VALVE_OPEN) // 若调节阀为气开阀
{
mode_pwmp_hd_adjust->all_open_time_full = sys_millis(); // 记录满信号全开起始时间
}
@ -946,7 +1128,7 @@ static void pwmp_adjust_hd_rough_position100(uint8_t *state, mode_pwmp_hd_adjust
case POSITION_NO_CHANGE_FOREVER:
// 位置不再改变记录此时阀门位置AD值
mode_pwmp_hd_adjust->adc_record_2 = current_adc;
if (udevice.value_action_type == ATO) // 若调节阀为气开阀
if (udevice.zero_power_condition == VALVE_OPEN) // 若调节阀为气开阀
{
mode_pwmp_hd_adjust->tmp_time = sys_millis();
mode_pwmp_hd_adjust->all_open_time_full = mode_pwmp_hd_adjust->tmp_time - mode_pwmp_hd_adjust->all_open_time_full;
@ -1042,7 +1224,7 @@ static void pwmp_adjust_hd_accurate_position100(uint8_t *state, mode_pwmp_hd_adj
// 记录在100阀位的adc值
mode_pwmp_hd_adjust->arr_record_2 = mode_pwmp_hd_adjust->arr_current;
// 记录在100阀位时的电流大小
if (udevice.value_action_type == ATO)
if (udevice.zero_power_condition == VALVE_OPEN)
{
mode_pwmp_hd_adjust->current_100 = ip2current();
}
@ -1061,7 +1243,7 @@ static void pwmp_adjust_hd_accurate_position100(uint8_t *state, mode_pwmp_hd_adj
/*若快到顶时等待10s否则等待1s*/
if (adc_diff < 20)
{
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 50;
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 20;
}
else
{
@ -1096,7 +1278,7 @@ static void pwmp_adjust_hd_accurate_position100(uint8_t *state, mode_pwmp_hd_adj
}
}
/*计算控制的全关时间:以ATO类型角度命名*/
/*计算控制的全关时间:以VALVE_OPEN类型角度命名*/
static void pwmp_adjust_hd_all_close_time(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state)
{
if (!FSM_IS_WAIT(*state))
@ -1105,7 +1287,7 @@ static void pwmp_adjust_hd_all_close_time(uint8_t *state, mode_pwmp_hd_adjust_st
/*记录起始的全开时间*/
sys_millis_reset();
if (udevice.value_action_type == ATO)
if (udevice.zero_power_condition == VALVE_OPEN)
{
mode_pwmp_hd_adjust->all_close_time = sys_millis();
}
@ -1123,7 +1305,7 @@ static void pwmp_adjust_hd_all_close_time(uint8_t *state, mode_pwmp_hd_adjust_st
mode_pwmp_hd_adjust->psb_adc = get_actual_travel_adc();
if (abs(mode_pwmp_hd_adjust->psb_adc - mode_pwmp_hd_adjust->adc_record_0) < DIFF_ADC)
{
if (udevice.value_action_type == ATO) // 若调节阀为气开阀
if (udevice.zero_power_condition == VALVE_OPEN) // 若调节阀为气开阀
{
mode_pwmp_hd_adjust->tmp_time = sys_millis();
mode_pwmp_hd_adjust->all_close_time = mode_pwmp_hd_adjust->tmp_time - mode_pwmp_hd_adjust->all_close_time;
@ -1147,7 +1329,7 @@ static void pwmp_adjust_hd_all_open_time(uint8_t *state, mode_pwmp_hd_adjust_sta
/*记录起始的全开时间*/
sys_millis_reset();
if (udevice.value_action_type == ATO)
if (udevice.zero_power_condition == VALVE_OPEN)
{
mode_pwmp_hd_adjust->all_open_time = sys_millis();
}
@ -1165,7 +1347,7 @@ static void pwmp_adjust_hd_all_open_time(uint8_t *state, mode_pwmp_hd_adjust_sta
mode_pwmp_hd_adjust->psb_adc = get_actual_travel_adc();
if (abs(mode_pwmp_hd_adjust->psb_adc - mode_pwmp_hd_adjust->adc_record_2) < DIFF_ADC)
{
if (udevice.value_action_type == ATO)
if (udevice.zero_power_condition == VALVE_OPEN)
{
mode_pwmp_hd_adjust->tmp_time = sys_millis();
mode_pwmp_hd_adjust->all_open_time = mode_pwmp_hd_adjust->tmp_time - mode_pwmp_hd_adjust->all_open_time;
@ -1211,7 +1393,7 @@ static void pwmp_adjust_hd_calculate(uint8_t *state, mode_pwmp_hd_adjust_state_e
mode_pwmp_hd->pwmp_save->storage.all_close_time_full = mode_pwmp_hd_adjust->all_close_time_full;
/*判断调节阀类型(气开/气关),对最低行程和最高行程进行标定*/
if (udevice.value_action_type == ATO)
if (udevice.zero_power_condition == VALVE_OPEN)
{
mode_pwmp_hd->pwmp_save->storage.trip_100 = mode_pwmp_hd->pwmp_save->storage.trip_100;
mode_pwmp_hd->pwmp_save->storage.trip_0 = mode_pwmp_hd->pwmp_save->storage.trip_0;
@ -1226,11 +1408,11 @@ static void pwmp_adjust_hd_calculate(uint8_t *state, mode_pwmp_hd_adjust_state_e
// 保存安装方向
if (mode_pwmp_hd->pwmp_save->storage.trip_100 > mode_pwmp_hd->pwmp_save->storage.trip_0) // 上大下小,正装
{
udevice.dev_install_dir = 1;
udevice.invert_feedback = 1;
}
else // 充气ADC减小正装
{
udevice.dev_install_dir = 0;
udevice.invert_feedback = 0;
}
udevice.pos0_travel_vol = mode_pwmp_hd->pwmp_save->storage.trip_0;
@ -1258,7 +1440,7 @@ static void pwmp_adjust_hd_bleeding(uint8_t *state)
if (mode_pwmp_hd_adjust->all_bleed_time_flag == true)
{
sys_millis_reset();
if (udevice.value_action_type == ATO)
if (udevice.zero_power_condition == VALVE_OPEN)
{
mode_pwmp_hd_adjust->all_close_time_full = sys_millis();
}
@ -1280,7 +1462,7 @@ static void pwmp_adjust_hd_bleeding(uint8_t *state)
case POSITION_NO_CHANGE_FOREVER:
if (mode_pwmp_hd_adjust->all_bleed_time_flag == true)
{
if (udevice.value_action_type == ATO) // 若调节阀为气开阀
if (udevice.zero_power_condition == VALVE_OPEN) // 若调节阀为气开阀
{
mode_pwmp_hd_adjust->tmp_time = sys_millis();
mode_pwmp_hd_adjust->all_close_time_full = mode_pwmp_hd_adjust->tmp_time - mode_pwmp_hd_adjust->all_close_time_full;
@ -1481,26 +1663,48 @@ static void pwmp_hd_adjust_step_by_10_to_100(uint8_t *state, mode_pwmp_hd_adjust
execute_rsp_hd_t *execute_res;
if (!FSM_IS_WAIT(*state))
{
mode_pwmp_hd_adjust->ctrl_target = 10;
if (udevice.zero_power_condition == VALVE_OPEN)
{
mode_pwmp_hd_adjust->ctrl_target = 10;
}
else
{
mode_pwmp_hd_adjust->ctrl_target = 90;
}
mode_pwmp_hd_adjust->adjust_state = (mode_pwmp_hd_adjust_state_e)*state;
FSM_WAIT(mode_pwmp_hd_adjust->adjust_state); // 等放气完毕就可以切入到else里面了
*state = PWMP_HD_ADJUST_BLEEDING;
}
else
{
static unsigned int i = 0;
/*将模式调整为控制模式*/
static unsigned int i_open = 0;
static unsigned int i_close = 8;
float32 tmp = 0.0f;
/*更新设备参数*/
pwmp_control_update(FILTER_MEDIAN);
if (rt_data.loop_current >= 4.0)
{
if (mode_pwmp_hd_adjust->ctrl_target == 0)
{
pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8);
if (udevice.zero_power_condition == VALVE_OPEN)
{
pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8);
}
else
{
pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.5);
}
}
else if (mode_pwmp_hd_adjust->ctrl_target == 100)
{
pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.5);
if (udevice.zero_power_condition == VALVE_OPEN)
{
pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 1.5);
}
else
{
pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 0.8);
}
}
else
{
@ -1515,24 +1719,47 @@ static void pwmp_hd_adjust_step_by_10_to_100(uint8_t *state, mode_pwmp_hd_adjust
if (fabs(mode_pwmp_hd_adjust->real_error) > 1)
{
// 此处延时两秒钟
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 30;
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 50;
lpf_window_reset(&mode_pwmp_hd->filter.handle);
}
else
{
mode_pwmp_hd_adjust->wait_count--;
if (mode_pwmp_hd_adjust->wait_count == 0)
// TODO:加上本次控制值与上次控制值差值的判断
tmp = lpf_window_update(&mode_pwmp_hd->filter.handle, execute_res->dac);
if (udevice.zero_power_condition == VALVE_OPEN)
{
if ((unsigned int)mode_pwmp_hd_adjust->ctrl_target < 100)
if (mode_pwmp_hd_adjust->wait_count == 0)
{
mode_pwmp_hd_adjust->valvepos.valvepos_in[i] = execute_res->dac;
i++;
if ((unsigned int)mode_pwmp_hd_adjust->ctrl_target < 100)
{
mode_pwmp_hd_adjust->valvepos.valvepos_in[i_open] = tmp;
i_open++;
}
else
{
*state = next_state;
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 30;
}
mode_pwmp_hd_adjust->ctrl_target += 10;
}
else
}
else
{
if (mode_pwmp_hd_adjust->wait_count == 0)
{
*state = next_state;
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 30;
if ((unsigned int)mode_pwmp_hd_adjust->ctrl_target > 0)
{
mode_pwmp_hd_adjust->valvepos.valvepos_in[i_close] = tmp;
i_close--;
}
else
{
*state = next_state;
// mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 30;
}
mode_pwmp_hd_adjust->ctrl_target -= 10;
}
mode_pwmp_hd_adjust->ctrl_target += 10;
}
}
}
@ -1556,7 +1783,8 @@ static void pwmp_hd_adjust_step_by_10_to_0(uint8_t *state, mode_pwmp_hd_adjust_s
else
{
static unsigned int i = 0;
/*将模式调整为控制模式*/
float32 tmp = 0.0f;
pwmp_control_update(FILTER_MEDIAN);
if (rt_data.loop_current >= 4.0)
{
@ -1581,16 +1809,18 @@ static void pwmp_hd_adjust_step_by_10_to_0(uint8_t *state, mode_pwmp_hd_adjust_s
if (fabs(mode_pwmp_hd_adjust->real_error) > 1)
{
// 此处延时三秒钟
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 30;
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 50;
lpf_window_reset(&mode_pwmp_hd->filter.handle);
}
else
{
mode_pwmp_hd_adjust->wait_count--;
tmp = lpf_window_update(&mode_pwmp_hd->filter.handle, execute_res->dac);
if (mode_pwmp_hd_adjust->wait_count == 0)
{
if ((unsigned int)mode_pwmp_hd_adjust->ctrl_target > 0)
{
mode_pwmp_hd_adjust->valvepos.valvepos_de[i] = execute_res->dac;
mode_pwmp_hd_adjust->valvepos.valvepos_de[i] = tmp;
i++;
}
else
@ -1607,21 +1837,147 @@ static void pwmp_hd_adjust_step_by_10_to_0(uint8_t *state, mode_pwmp_hd_adjust_s
static void pwmp_hd_adjust_valvepos_calculate(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state)
{
*state = next_state;
mode_pwmp_hd_adjust->overimpulse_ex = mode_pwmp_hd_adjust->overimpulse_in;
mode_pwmp_hd->pwmp_save->storage.overimpulse_in = mode_pwmp_hd_adjust->overimpulse_in;
mode_pwmp_hd->pwmp_save->storage.overimpulse_ex = mode_pwmp_hd_adjust->overimpulse_ex;
for (unsigned int i = 0; i < 9; i++)
{
mode_pwmp_hd->pwmp_save->storage.valvepos_in[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i];
mode_pwmp_hd->pwmp_save->storage.valvepos_de[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
// mode_pwmp_hd->pwmp_save->storage.valvepos_de[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
}
for (unsigned int i = 0; i < 8; i++)
{
mode_pwmp_hd->pwmp_save->storage.valvepos_in_k[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i + 1] - mode_pwmp_hd_adjust->valvepos.valvepos_in[i];
mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i + 1] - mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
// mode_pwmp_hd->pwmp_save->storage.valvepos_de_k[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i + 1] - mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
mode_pwmp_hd->pwmp_save->storage.valvepos_in_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_in[i];
mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
// mode_pwmp_hd->pwmp_save->storage.valvepos_de_b[i] = mode_pwmp_hd_adjust->valvepos.valvepos_de[i];
}
mode_pwmp_hd->params_save_cb();
}
/*整定得到充气阶段的最大过冲量*/
static void pwmp_hd_adjust_overimpulse_inflate(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state)
{
static float32 max = 0.0;
static float32 tmp = 0.0;
static float32 last_tmp = 0.0;
if (!FSM_IS_WAIT(*state))
{
mode_pwmp_hd_adjust->ctrl_target = 50.0; // 将目标阀位定为50%
mode_pwmp_hd_adjust->adjust_state = (mode_pwmp_hd_adjust_state_e)*state;
FSM_WAIT(mode_pwmp_hd_adjust->adjust_state); // 等放气完毕就可以切入到else里面了
*state = PWMP_HD_ADJUST_BLEEDING;
}
else
{
pwmp_control_update(FILTER_MEDIAN);
if (udevice.zero_power_condition == VALVE_OPEN)
{
if (mode_pwmp_hd_adjust->ctrl_feedback < 50.0)
{
pdctrl_out(mode_pwmp_hd_adjust->arr_record_2);
}
else if (mode_pwmp_hd_adjust->ctrl_feedback >= 50.0)
{
pdctrl_out(mode_pwmp_hd_adjust->valvepos.valvepos_in[4]); // 输入百分之五十阀位处的稳定值
tmp = mode_pwmp_hd_adjust->ctrl_feedback - 50.0;
max = (tmp > max) ? tmp : max;
if (tmp <= last_tmp)
{
mode_pwmp_hd_adjust->wait_count--;
if (mode_pwmp_hd_adjust->wait_count == 0)
{
*state = next_state;
mode_pwmp_hd_adjust->overimpulse_in = max;
pdctrl_out((mode_pwmp_hd_adjust->arr_record_2 * 1.2));
}
}
else if (tmp > last_tmp)
{
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 5;
}
last_tmp = tmp;
}
}
else
{
if (mode_pwmp_hd_adjust->ctrl_feedback > 50.0)
{
pdctrl_out(mode_pwmp_hd_adjust->arr_record_2);
}
else if (mode_pwmp_hd_adjust->ctrl_feedback <= 50.0)
{
pdctrl_out(mode_pwmp_hd_adjust->valvepos.valvepos_in[4]); // 输入百分之五十阀位处的稳定值
tmp = fabs(mode_pwmp_hd_adjust->ctrl_feedback - 50.0);
max = (tmp > max) ? tmp : max;
if (tmp <= last_tmp)
{
mode_pwmp_hd_adjust->wait_count--;
if (mode_pwmp_hd_adjust->wait_count == 0)
{
*state = next_state;
mode_pwmp_hd_adjust->overimpulse_in = max;
pdctrl_out((mode_pwmp_hd_adjust->arr_record_2 * 1.2));
}
}
else if (tmp > last_tmp)
{
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 5;
}
last_tmp = tmp;
}
}
}
}
/*整定得到排气阶段的最大过冲量*/
static void pwmp_hd_adjust_overimpulse_exhaust(uint8_t *state, mode_pwmp_hd_adjust_state_e next_state)
{
static float32 max = 0.0;
static float32 tmp = 0.0;
static float32 last_tmp = 0.0;
pwmp_control_update(FILTER_MEDIAN);
if (!FSM_IS_WAIT(*state))
{
if (mode_pwmp_hd_adjust->ctrl_feedback <= 99.5)
{
return;
}
mode_pwmp_hd_adjust->ctrl_target = 50.0; // 将目标阀位定为50%
mode_pwmp_hd_adjust->adjust_state = (mode_pwmp_hd_adjust_state_e)*state;
FSM_WAIT(mode_pwmp_hd_adjust->adjust_state); // 等放气完毕就可以切入到else里面了
*state = PWMP_HD_ADJUST_BLEEDING;
}
else
{
if (mode_pwmp_hd_adjust->ctrl_feedback < 50.0)
{
pdctrl_out((mode_pwmp_hd_adjust->arr_record_0 * 0.8));
}
else if (mode_pwmp_hd_adjust->ctrl_feedback >= 50.0)
{
pdctrl_out(mode_pwmp_hd_adjust->valvepos.valvepos_de[4]); // 输入百分之五十阀位处的稳定值
tmp = 50.0 - mode_pwmp_hd_adjust->ctrl_feedback;
max = (tmp > max) ? tmp : max;
if (tmp <= last_tmp)
{
mode_pwmp_hd_adjust->wait_count--;
if (mode_pwmp_hd_adjust->wait_count == 0)
{
*state = next_state;
mode_pwmp_hd_adjust->overimpulse_ex = max;
}
}
else if (tmp > last_tmp)
{
mode_pwmp_hd_adjust->wait_count = mode_pwmp_hd->wait_count_max * 20;
}
last_tmp = tmp;
}
}
}
//////////////////////////////////*状态机模式END*//////////////////////////////////////////////////////
//////////////////////////////*整定程序入口BEGIN*//////////////////////////////////////////////////////
@ -1668,10 +2024,16 @@ void pwmp_adjust(uint8_t *state)
break;
/*GPS2000中特有的整定流程整定得到充排气过程中每百分之10稳定阀位的控制值并将控制值每10%区间做线性处理*/
case PWMP_HD_ADJUST_STEP_BY_10_TO_100:
pwmp_hd_adjust_step_by_10_to_100(state, PWMP_HD_ADJUST_STEP_BY_10_TO_0);
pwmp_hd_adjust_step_by_10_to_100(state, PWMP_HD_ADJUST_OVERIMPULSE_INFLATE);
break;
case PWMP_HD_ADJUST_STEP_BY_10_TO_0:
pwmp_hd_adjust_step_by_10_to_0(state, PWMP_HD_ADJUST_VALVEPOS_CALCULATE);
pwmp_hd_adjust_step_by_10_to_0(state, PWMP_HD_ADJUST_OVERIMPULSE_INFLATE);
break;
case PWMP_HD_ADJUST_OVERIMPULSE_INFLATE:
pwmp_hd_adjust_overimpulse_inflate(state, PWMP_HD_ADJUST_VALVEPOS_CALCULATE);
break;
case PWMP_HD_ADJUST_OVERIMPULSE_EXHAUST:
pwmp_hd_adjust_overimpulse_exhaust(state, PWMP_HD_ADJUST_VALVEPOS_CALCULATE);
break;
case PWMP_HD_ADJUST_VALVEPOS_CALCULATE:
pwmp_hd_adjust_valvepos_calculate(state, PWMP_HD_ADJUST_STOP);
@ -1697,31 +2059,31 @@ void pwmp_adjust(uint8_t *state)
switch (ts)
{
case PWMP_HD_ADJUST_IDEL:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_IDEL;
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STEP_1;
break;
case PWMP_HD_ADJUST_ROUGH_POSITION0:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_POSITION0;
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STEP_2;
break;
case PWMP_HD_ADJUST_ACCURATE_POSITION0:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_POSITION0;
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STEP_2;
break;
case PWMP_HD_ADJUST_ROUGH_POSITION100:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_POSITION100;
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STEP_3;
break;
case PWMP_HD_ADJUST_ACCURATE_POSITION100:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_POSITION100;
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STEP_3;
break;
case PWMP_HD_ADJUST_BLEEDING_TIMER:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_TIMER;
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STEP_4;
break;
case PWMP_HD_ADJUST_AERATE_TIMER:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_TIMER;
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STEP_4;
break;
case PWMP_HD_ADJUST_TUNING:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_TUNING;
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STEP_5;
break;
case PWMP_HD_ADJUST_SAVE:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_SAVE;
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STEP_6;
break;
case PWMP_HD_ADJUST_STOP:
mode_pwmp_hd->lcd_adjust_state = LCD_ADJUST_STOP;
@ -2022,13 +2384,13 @@ void mode_pwmp_hd_process(void)
p->enter_count++;
if (p->enter_count % WAIT_COUNT_MAX == 0) // 100ms输出一次
{
if (BIT_IS_SET(hc_24_state, BIT2))
if (BIT_IS_SET(bluetooth_state, BIT2))
{
// 蓝牙输出
char ble_data[128];
uint8_t ble_len = 0;
osel_memset((uint8_t *)ble_data, 0, 128);
// sprintf(ble_data, "%f,%f,%f,%d,%f\r\n", pid_target, show_actual, p->real_error, mode_pwm->output, rt_data.loop_current );
// sprintf(ble_data, "%f,%f,%f,%d,%f\r\n", rt_data.pid_target, show_actual, p->real_error, mode_pwm->output, rt_data.loop_current );
if (mode_pwmp_hd->process_state == PWMP_HD_PROCESS_TEST)
{
// sprintf(ble_data, "%f,%f,%f,%f\r\n", mode_pwmp_hd->control.ctrl_target, mode_pwmp_hd->control.ctrl_feedback, mode_pwmp_hd->control.real_error, rt_data.loop_current );
@ -2070,10 +2432,26 @@ void mode_pwmp_hd_process(void)
{
if (rt_data.loop_current < 4.5)
{
// if (udevice.zero_power_condition == VALVE_OPEN)
// {
// pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8);
// }
// else
// {
// pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.2);
// }
pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8);
}
else if (rt_data.loop_current > 19.5)
{
// if (udevice.zero_power_condition == VALVE_OPEN)
// {
// pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.2);
// }
// else
// {
// pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_min_origin * 0.8);
// }
pdctrl_out(mode_pwmp_hd->pwmp_save->storage.pwmp_max_origin * 1.2);
}
else if (rt_data.loop_current >= 4.5 && rt_data.loop_current <= 19.5)
@ -2158,7 +2536,10 @@ void mode_pwmp_hd_init(mode_interface_req_t *req, uint16_t positioner_model, mod
}
osel_memset((uint8_t *)mode_pwmp_hd_test, 0, sizeof(pwmp_hd_test_t));
/*滤波初始化*/
mode_pwmp_hd->filter.handle = lpf_window_init(20);
// mode_pwmp_hd->filter.handle = lpf_window_init(20); // 初始化控制模式中滤波窗口数据大小为20
lpf_window_init(&mode_pwmp_hd->filter.handle, 20);
lpf_window_init(&mode_pwmp_hd_adjust->filter.handle, 20);
// mode_pwmp_hd_adjust->filter.handle = lpf_window_init(20); // 初始化整定模式中滤波窗口数据大小为20
/*绑定要保存的参数与函数*/
mode_pwmp_hd->pwmp_save = params;
mode_pwmp_hd->params_save_cb = params_save_cb;

View File

@ -2,15 +2,24 @@
#define __MODE_PWMP_HD_H__
#include "main.h"
#define EXECUTE_PLAN EXECUTE_PLAN_1
#define MODE_DEFAULT_AUTOLOAD 99 // 预分频系数
#define WAIT_COUNT_MAX 2 // 蓝牙等待最大次数
#define VIP_H_EN_HD 1 // 高电压输出开关
///////////////////////////////////////*算法整定部分宏定义BEGIN*////////////////////////////////////////
#define TIME_CYCLE 0.01f // 定义时间周期:10ms
#define FSM_WAIT(st) BIT_SET(st, BIT7)
#define FSM_IS_WAIT(st) (st & BIT7)
#define DIFF_ADC 10U
#define DIFF_ADC_MAX 6U
///////////////////////////////////////*算法整定部分宏定义END*///////////////////////////////////////////
#define EXECUTE_PLAN EXECUTE_PLAN_2
/*----------------------------------------*/
typedef enum
{
ANGULAR_TRAVEL,
LINEAR_TRAVEL,
} mode_pwmp_hd_valve_type_e; // 阀门类型
typedef enum
{
PWMP_HD_PROCESS_CONTROL,
PWMP_HD_PROCESS_ADJUST,
@ -19,28 +28,48 @@ typedef enum
PWMP_HD_PROCESS_STOP,
} mode_pwmp_hd_process_state_e; // 处理状态
typedef enum
{
INFLATE = 0,
DEFLATE,
} mode_pwmp_hd_action_e; // 运动状态(充气/排气)
/*需要存储的变量*/
typedef struct
{
uint8_t tuned_flag; // 整定标志 0未整定1整定中2整定成功3整定失败
uint16_t startup_value; // 阀位启动值
uint16_t arr_diff; // 控制区间
uint16_t ad_diff; // 磁条区间
uint16_t pwmp_min; // 控制最小值
uint16_t pwmp_max; // 控制最大值
uint16_t pwmp_min_origin; // 整定控制最小值
uint16_t pwmp_max_origin; // 整定控制最大值
uint16_t trip_0; // 磁条0位置AD
uint16_t trip_100; // 词条100位置AD
uint16_t trip_min0; // 小回路行程0位置AD
uint16_t trip_min100; // 小回路行程100位置AD
uint16_t current0; // 电流最小值
uint16_t current100; // 电流最大值
uint16_t all_open_time; // 全开时间
uint16_t all_close_time; // 全关时间
uint16_t all_open_time_full; // 最大信号全开时间
uint16_t prov_flag; // 磁条安装的正反倒装0 正装1
uint16_t valve_type; // 阀门正反行程气开VALVE_CLOSE 气关VALVE_OPEN
/*充气过程:各百分之十阀位的控制信号值*/
uint16_t valvepos_in[9]; // 充气过程中9个不同阀位的控制信号值
/*排气过程:各百分之十阀位的控制信号值*/
uint16_t valvepos_de[9]; // 排气过程中9个不同阀位的控制信号值
float32_t valvepos_in_k[8];
float32_t valvepos_de_k[8];
float32_t valvepos_in_b[8];
float32_t valvepos_de_b[8];
/*最大过冲量*/
float32_t overimpulse_in;
float32_t overimpulse_ex;
uint8_t tuned_flag; // 整定标志 0未整定1整定中2整定成功3整定失败
uint16_t startup_value; // 阀位启动值
uint16_t arr_diff; // 控制区间
uint16_t ad_diff; // 磁条区间
uint16_t pwmp_min; // 控制最小值
uint16_t pwmp_max; // 控制最大值
uint16_t pwmp_min_origin; // 整定控制最小值
uint16_t pwmp_max_origin; // 整定控制最大值
uint16_t trip_0; // 磁条0位置AD
uint16_t trip_100; // 词条100位置AD
uint16_t trip_min0; // 小回路行程0位置AD
uint16_t trip_min100; // 小回路行程100位置AD
uint16_t current0; // 电流最小值
uint16_t current100; // 电流最大值
uint16_t all_open_time; // 全开时间
uint16_t all_close_time; // 全关时间
uint16_t all_open_time_full; // 最大信号全开时间
uint16_t all_close_time_full; // 最大信号全关时间
uint16_t prov_flag; // 磁条安装的正反倒装0 正装1
uint16_t valve_type; // 阀门正反行程气开ATO 气关ATC
float32 kp;
float32 ki;
float32 kd;
@ -54,19 +83,36 @@ typedef struct
float32 real_error; // 实际误差
uint16_t current_adc; // 当前ADC值
uint16_t small_trip_current_adc; // 小行程反馈当前ADC值
uint16_t pwmp_min_stable; // 稳定区间下限值
uint16_t pwmp_max_stable; // 稳定区间上限值
} mode_pwmp_hd_control_t;
/*滤波处理*/
typedef struct
{
lpf_t actual_lpf;
lpf_t target_lpf;
lpf_window_t handle;
uint16_t value;
} mode_pwmp_hd_filter_t;
typedef union
{
//
uint8_t data[300];
// 自定义数据结构
mode_pwmp_hd_storage_data_t storage;
} mode_pwmp_hd_params_u;
typedef enum
{
INAUTO_C, // PID控制器开始模式
OFFAUTO_C, // PID控制器关闭模式
} mode_pwmp_hd_pid_mode_e;
typedef struct
{
mode_pwmp_hd_pid_mode_e pid_mode; // PID控制模式
mode_pwmp_hd_action_e action; // 运动状态(充气/排气)
uint8_t lcd_adjust_state; // LCD自整定流程状态
float32 duty_percent; // 占空比
float32 current_electric; // 电流
@ -80,9 +126,11 @@ typedef struct
uint16_t current_adc; // 当前位置反馈的AD值
uint32_t count; // 计数
float32 valvepos_stable; // 10%-90%阀位之间的稳定控制值
mode_pwmp_hd_control_t control;
mode_pwmp_hd_filter_t filter;
mode_pwmp_hd_storage_data_t *pwmp_save;
mode_pwmp_hd_params_u *pwmp_save;
void (*params_save_cb)(void);
} mode_pwmp_hd_t;
@ -145,6 +193,12 @@ typedef enum
PWMP_HD_ADJUST_SAVE, // 存储变量
PWMP_HD_ADJUST_BLEEDING, // 在整定状态中放气
PWMP_HD_ADJUST_BLEEDING_POSITION0, // 放气位置0
PWMP_HD_ADJUST_INITIATE, // 启动值
PWMP_HD_ADJUST_STEP_BY_10_TO_100, // 由0-100找到控制值
PWMP_HD_ADJUST_STEP_BY_10_TO_0, // 由100-0找到控制值
PWMP_HD_ADJUST_VALVEPOS_CALCULATE, // 对各区间阀位控制值进行线性化处理
PWMP_HD_ADJUST_OVERIMPULSE_INFLATE, // 求取充气过程中的最大过冲量
PWMP_HD_ADJUST_OVERIMPULSE_EXHAUST, // 求取排气过程中的最大过冲量
PWMP_HD_ADJUST_STOP,
PWMP_HD_ADJUST_FAIL, // 整定失败
PWMP_HD_ADJUST_TEST,
@ -164,9 +218,27 @@ typedef enum
PWMP_HD_ADJUST_RESULT_FAIL,
} mode_pwmp_hd_adjust_result_e; // 整定结果
typedef struct
{
/*充气过程:各百分之十阀位的控制信号值*/
uint16_t valvepos_in[9]; // 充气过程中9个不同阀位的控制信号值
/*排气过程:各百分之十阀位的控制信号值*/
uint16_t valvepos_de[9]; // 排气过程中9个不同阀位的控制信号值
} mode_pwmp_hd_adjust_valvepos_t;
/*滤波处理*/
typedef struct
{
lpf_window_t handle;
uint16_t value;
} mode_pwmp_hd_adjust_filter_t;
typedef struct
{
mode_pwmp_hd_adjust_state_e adjust_state;
mode_pwmp_hd_adjust_valvepos_t valvepos; // 记录处于每10%阀位的控制信号值
mode_pwmp_hd_adjust_filter_t filter;
volatile uint16_t wait_count;
volatile uint16_t psb_adc;
@ -177,6 +249,7 @@ typedef struct
BOOL adc_0_100_flag; // 判断0-100移动过程中ad值是增大还是减少TRUE 增大FALSE 减小
BOOL flag_stable_begin;
BOOL flag_stable_end;
BOOL all_bleed_time_flag;
uint16_t adc_record_0; // 记录放气时阀门最小位置ad值
uint16_t adc_record_1; // 记录放气时阀门最小位置ad值
@ -189,11 +262,21 @@ typedef struct
uint16_t arr_record_stable_begin; // 记录阀门稳定区域开始的ad值
uint16_t arr_record_stable_end; // 记录阀门稳定区域结束的ad值
uint32_t all_open_time; // 全开时间
uint32_t all_open_time_full; // 信号为最大输出时的全开时间
uint32_t all_close_time; // 全关时间
BOOL all_close_time_flag;
uint32_t tmp_time; // 临时用来记录全开全关/整定时间
uint32_t all_open_time; // 全开时间
uint32_t all_open_time_full; // 信号为最大输出时的全开时间
uint32_t all_close_time; // 全关时间
uint32_t all_close_time_full; // 信号为最大输出时的全关时间
uint32_t tmp_time; // 临时用来记录全开全关/整定时间
uint32_t current_0; // 0位置电流大小
uint32_t current_100; // 100位置电流大小
float32 ctrl_target; // 控制目标值
float32 real_error; // 实际误差
float32 ctrl_feedback; // 反馈值
float32 overimpulse_in; // 充气过程的最大超调量
float32 overimpulse_ex; // 排气过程的最大超调量
/*输出值*/
uint16_t arr_default; // 默认计数器(推动计数值)
@ -287,7 +370,7 @@ typedef struct
} execute_rsp_hd_t;
/////////////////////////////////////////*控制算法END*////////////////////////////////////////
void mode_pwmp_hd_init(mode_interface_req_t *req, uint16_t positioner_model, mode_pwmp_hd_storage_data_t *params, void (*params_save_cb)(void));
void mode_pwmp_hd_init(mode_interface_req_t *req, uint16_t positioner_model, mode_pwmp_hd_params_u *params, void (*params_save_cb)(void));
void mode_pwmp_hd_dinit(void);
void mode_pwmp_hd_process(void);
void pwmp_hd_process_state_set(mode_pwmp_hd_process_state_e state);