Procházet zdrojové kódy

V7r1r2_20220513
1 ADC1_Result_Filt[ADC1_RANK_HARDWARE_VER]要等初始化完后才会更新,板子第一次运行程序时会擦写EEPROM,
初始化完成时间在3.4s左右,这会导致硬件版本识别错误。新建一个变量HardwareVersion_AD作为判断值,
HardwareVersion_AD变量在ADC启动后就开始更新。
2 硬件版本识别函数增加判断初始化完成时间,若初始化完成时间大于1.8s,则硬件判断时间延长200ms.

white.xu před 3 roky
rodič
revize
181773726f

+ 5 - 1
Core/Src/adc.c

@@ -448,7 +448,7 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	static TrueOrFalse_Flag_Struct_t T_MCU_Init_Flag = FALSE;
 	static uint8_t T_MCU_Init = 0;
 	static uint16_t T_MCU_Init_AD = 0;
-	static int32_t GasSensorFltSum = 0;
+	static int32_t GasSensorFltSum = 0, HardwareVersionADFltSum=0;
 	
 	//更新PCB温度,绕组温度,MCU温度
 	T_PCB_Sum += ADC1_Result[ADC1_RANK_NTC_PCB];
@@ -626,6 +626,10 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
 	{
 	  ADC_SensorData.GasSensor = 0;
 	}	
+	
+	//更新硬件版本AD
+	HardwareVersionADFltSum += ((ADC1_Result[ADC1_RANK_HARDWARE_VER] << 10) - HardwareVersionADFltSum) >> 9;
+	HardwareVersion_AD = (uint16_t)(HardwareVersionADFltSum >> 10);
 }
 
 //ADC1和ADC2数据滑动滤波

+ 1 - 1
Core/Src/main.c

@@ -324,7 +324,7 @@ int main(void)
 			
 			//定时发送传感器数据给TE
 			MC_TE_SensorData_Process(&MC_TE_SensorData);
-			GetHardware_Versin( ADC1_Result_Filt[ADC1_RANK_HARDWARE_VER] );
+			GetHardware_Versin( HardwareVersion_AD );
 			
 			//指拨模式计算函数
 			SpdProportion_calculate();

+ 10 - 4
J-scope.jscope

@@ -6,11 +6,11 @@
             <JLink>
                 <Options IsRTTSession="0" IsRTTWithTimeStamp="1" SamplingPeriod="100" Connection="1" SerialNo="0" IP="" TargetDevice="Cortex-M3" TargetInterface="SWD" InterfaceSpeed="4000" />
             </JLink>
-            <ElfFile Name="D:\MOTINOVAϵͳ\Motor\TT_KZ_010A\³öÎÊÌâµÄ³ÌÐò\TT-KZ-010A_CTRL_APP\MDK-ARM\QD007A_CTL_APP\QD007A_CTL_APP.axf" />
+            <ElfFile Name="D:\MOTINOVAϵͳ\Motor\TTKZ019A\TT-KZ-010A_CTRL_APP\MDK-ARM\QD007A_CTL_APP\QD007A_CTL_APP.axf" />
             <DataFile Name="" />
             <RawFile Name="" />
             <Scope>
-                <Options TimeResolutionUs="500000" />
+                <Options TimeResolutionUs="100000" />
             </Scope>
         </Configuration>
         <Windows>
@@ -19,10 +19,16 @@
         </Windows>
         <SelectedSymbols>
             <Symbol>
-                <Options Name="DisablePWMCount" Address="0x2000043C" Type="uint" TypeID="8" Size="4" GraphColorRed="255" GraphColorGreen="215" GraphColorBlue="0" YMinSampled="0" YMaxSampled="101" YAvgSampled="14" Offset="4" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="20" MaxValue="109" File="..\Core\Src\gpio.c" Scope="1" DrawStyle="0" />
+                <Options Name="ADC1_Result[7]" Address="0x20001592" Type="ushort" TypeID="11" Size="2" GraphColorRed="255" GraphColorGreen="215" GraphColorBlue="0" YMinSampled="-1" YMaxSampled="770" YAvgSampled="767" Offset="4" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="500" MaxValue="1000" File="..\Core\Src\adc.c" Scope="0" DrawStyle="0" />
             </Symbol>
             <Symbol>
-                <Options Name="EnablePWMCount" Address="0x20000438" Type="uint" TypeID="8" Size="4" GraphColorRed="0" GraphColorGreen="255" GraphColorBlue="0" YMinSampled="0" YMaxSampled="100" YAvgSampled="14" Offset="8" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="20" MaxValue="109" File="..\Core\Src\gpio.c" Scope="1" DrawStyle="0" />
+                <Options Name="ADC1_Result_Filt[7]" Address="0x200015A8" Type="ushort" TypeID="11" Size="2" GraphColorRed="0" GraphColorGreen="255" GraphColorBlue="0" YMinSampled="-1" YMaxSampled="767" YAvgSampled="766" Offset="6" ShowInGraph="1" YOffset="200" IsAutoConfig="1" YResolution="500" MaxValue="1000" File="..\Core\Src\adc.c" Scope="0" DrawStyle="0" />
+            </Symbol>
+            <Symbol>
+                <Options Name="uwTick" Address="0x20000044" Type="volatile uint" TypeID="8" Size="4" GraphColorRed="0" GraphColorGreen="0" GraphColorBlue="176" YMinSampled="0" YMaxSampled="-2147483648" YAvgSampled="26978028" Offset="8" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="50" MaxValue="1065032704" File="../Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal.c" Scope="0" DrawStyle="0" />
+            </Symbol>
+            <Symbol>
+                <Options Name="HardwareVersion_AD" Address="0x20000198" Type="ushort" TypeID="7" Size="2" GraphColorRed="160" GraphColorGreen="32" GraphColorBlue="240" YMinSampled="0" YMaxSampled="65535" YAvgSampled="767" Offset="12" ShowInGraph="1" YOffset="200" IsAutoConfig="0" YResolution="500" MaxValue="103000" File="..\User\Src\var.c" Scope="0" DrawStyle="0" />
             </Symbol>
         </SelectedSymbols>
     </Project>

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2253 - 2253
MDK-ARM/QD007A_CTL_APP/QD007A_CTL_APP_CRC.hex


binární
MDK-ARM/bin/QD007A_CTL_APP.bin


+ 1 - 0
User/Inc/var.h

@@ -488,6 +488,7 @@ extern MC_RideLog_Struct_t MC_RideLog;
 extern MC_AvgPower_Struct_t MC_AvgPower;
 extern MCU_Manufacturter_Struct_t MCUManufacturer;                         
 extern uint16_t SpeedRatio;
+extern uint16_t HardwareVersion_AD;
 /**************************全局变量声明End***************************/
 
 /**************************全局函数声明Begin*************************/

+ 19 - 2
User/Src/hardware_check.c

@@ -28,13 +28,30 @@ const char Hardware_VersionTable[9]={
 void GetHardware_Versin(uint16_t VolaVal)
 {
 	uint8_t Count;
-	static _Bool VersionIdentifyExecuteFlag = FALSE;
+	static uint16_t timecount = 0;
+	static _Bool VersionIdentifyExecuteFlag = FALSE, FirstExecuteFlag = FALSE;
 	
-	if(HAL_GetTick() > 2000) //3s后开始识别
+	if(FirstExecuteFlag == FALSE)
+	{
+		FirstExecuteFlag = TRUE;
+		if( HAL_GetTick()>1800 ) 	timecount=HAL_GetTick()+200;	//若初始化时间太长,硬件版本识别时间延后200ms
+		else timecount=2000;	
+	}
+	
+	if(HAL_GetTick() > timecount) //2s后开始识别
 	{
 		if(VersionIdentifyExecuteFlag == FALSE)
 		{
 			VersionIdentifyExecuteFlag = TRUE;
+			
+//			strncpy(MC_VerInfo.FW_Version, (char*)"                 ", 16);						
+//			sprintf(&MC_VerInfo.FW_Version[0], "%4u", VolaVal);
+//			if( IsComOK_TE.IsOK_Flag == TRUE ) MC_VerInfo.FW_Version[4] = 'Y';
+//			else MC_VerInfo.FW_Version[4] = 'N';
+//			sprintf(&MC_VerInfo.FW_Version[5], "%4u", MC_TE_SyncClockFreqScan);
+//			MC_VerInfo.FW_Version[9] = ' ';
+//			sprintf(&MC_VerInfo.FW_Version[10], "%5u", timecount);
+			
 			if( (IsComOK_TE.IsOK_Flag == TRUE)||(MC_TE_SyncClockFreqScan>200)||((VolaVal>1986)&&(VolaVal<2110)) ) //有反相器和TE的电路板
 			{
 				MC_HallSensorData.InverterExistFlag = TRUE;

+ 2 - 1
User/Src/var.c

@@ -40,6 +40,7 @@ MC_RideLog_Struct_t MC_RideLog;                           //
 MC_AvgPower_Struct_t MC_AvgPower;                         //助力平均功耗
 MCU_Manufacturter_Struct_t MCUManufacturer;               //MCU生厂商
 uint16_t SpeedRatio;
+uint16_t HardwareVersion_AD=0;
 //BMS默认设计信息
 const BMS_DesignInfo_Struct_t BMS_DesignInfo_Default =
 {
@@ -498,7 +499,7 @@ void Var_Init(void)
 		
 	//MC版本信息初始化,Mode和SN从EEPROM读取
 	strncpy(MC_VerInfo.HW_Version, (char*)"TTKZ010D.       ", 16);
-	strncpy(MC_VerInfo.FW_Version, (char*)"V7r1r2_20220509C", 16);
+	strncpy(MC_VerInfo.FW_Version, (char*)"V7r1r2_20220513C", 16);
   #if NormalWork
 	MC_VerInfo.FW_Version[15] = '.';
   #endif

Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů