Compare commits

...

2 Commits

Author SHA1 Message Date
kkkjtr eae43f03b7 修改完成 2025-12-12 14:30:59 +08:00
kkkjtr e4af8b2619 待会议完成后补充修正 2025-12-09 16:41:42 +08:00
10 changed files with 878 additions and 3959 deletions

View File

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<component_viewer schemaVersion="0.1" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="Component_Viewer.xsd">
<component name="EventRecorderStub" version="1.0.0"/> <!--name and version of the component-->
<events>
</events>
</component_viewer>

View File

@ -1,103 +0,0 @@
T8684 1513:581.568 SEGGER J-Link V7.96q Log File
T8684 1513:581.696 DLL Compiled: Jun 28 2024 12:33:32
T8684 1513:581.696 Logging started @ 2024-09-06 11:31
T8684 1513:581.696 Process: C:\APP\KeilMDK\UV4\UV4.exe
T8684 1513:581.696 - 1451569.920ms
T8684 1513:581.696 JLINK_SetWarnOutHandler(...)
T8684 1513:581.696 - 0.003ms
T8684 1513:581.696 JLINK_OpenEx(...)
T8684 1513:583.360 Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04
T8684 1513:584.000 Firmware: J-Link ARM-OB STM32 compiled Aug 22 2012 19:52:04
T8684 1513:585.408 Hardware: V7.00
T8684 1513:585.408 S/N: 20090928
T8684 1513:585.408 OEM: SEGGER
T8684 1513:585.408 Feature(s): RDI,FlashDL,FlashBP,JFlash,GDB
T8684 1513:585.664 Bootloader: (Could not read)
T8684 1513:586.176 TELNET listener socket opened on port 19021
T8684 1513:614.080 Device "CORTEX-M0" selected.
T8684 1513:615.104 WEBSRV WEBSRV_Init(): Starting webserver thread(s)
T8684 1513:615.232 WEBSRV Webserver running on local port 19080
T8684 1513:615.232 Looking for J-Link GUI Server exe at: C:\APP\KeilMDK\ARM\Segger\JLinkGUIServer.exe
T8684 1513:615.360 Looking for J-Link GUI Server exe at: C:\Program Files\SEGGER\JLink_V796q\JLinkGUIServer.exe
T8684 1513:615.360 Forking J-Link GUI Server: C:\Program Files\SEGGER\JLink_V796q\JLinkGUIServer.exe
T8684 1513:627.264 J-Link GUI Server info: "J-Link GUI server V7.96q "
T8684 1513:630.208 - 48.508ms returns "O.K."
T8684 1513:630.208 JLINK_GetEmuCaps()
T8684 1513:630.208 - 0.008ms returns 0x88EA5833
T8684 1513:630.208 JLINK_TIF_GetAvailable(...)
T8684 1513:632.768 - 2.520ms
T8684 1513:633.152 JLINK_SetErrorOutHandler(...)
T8684 1513:633.152 - 0.017ms
T8684 1513:633.152 JLINK_ExecCommand("ProjectFile = "D:\home\Desktop\items\Ó²¼þСÏîÄ¿\Öпذå\Èí¼þ\bleSDK6_v1.4.1\projects\blezongkong\mdk\JLinkSettings.ini"", ...).
T8684 1513:637.120 Device "CORTEX-M0" selected.
T8684 1513:637.632 - 4.325ms returns 0x00
T8684 1513:639.936 JLINK_ExecCommand("Device = B6x", ...).
T8684 1513:640.064 Flash bank @ 0x18000000: SFL: Parsing sectorization info from ELF file
T8684 1513:640.064 FlashDevice.SectorInfo[0]: .SectorSize = 0x00001000, .SectorStartAddr = 0x00000000
T8684 1513:640.064 OFL: Init() present @ offset 0x000000AB
T8684 1513:640.064 OFL: UnInit() present @ offset 0x000001E1
T8684 1513:640.064 OFL: EraseSector() present @ offset 0x00000293
T8684 1513:640.064 OFL: ProgramPage() present @ offset 0x000002C5
T8684 1513:640.064 OFL: EraseChip() present @ offset 0x00000225
T8684 1513:640.064 OFL: BlankCheck() N/A
T8684 1513:640.064 OFL: Verify() present @ offset 0x00000383
T8684 1513:640.064 OFL: SEGGER_FL_Erase() N/A
T8684 1513:640.192 OFL: SEGGER_OPEN_Erase() N/A
T8684 1513:640.192 OFL: SEGGER_FL_Program() N/A
T8684 1513:640.192 OFL: SEGGER_OPEN_Program() N/A
T8684 1513:640.192 OFL: SEGGER_FL_Read() N/A
T8684 1513:640.192 OFL: SEGGER_OPEN_Read() N/A
T8684 1513:640.192 OFL: SEGGER_FL_CalcCRC() N/A
T8684 1513:640.192 OFL: SEGGER_OPEN_CalcCRC() N/A
T8684 1513:640.192 OFL: SEGGER_FL_Start() N/A
T8684 1513:640.192 OFL: SEGGER_OPEN_Start() N/A
T8684 1513:640.192 OFL: SEGGER_FL_GetFlashInfo() N/A
T8684 1513:640.192 OFL: SEGGER_OPEN_GetFlashInfo() N/A
T8684 1513:640.192 OFL: SEGGER_FL_Verify() N/A
T8684 1513:640.192 OFL: SEGGER_FL_CheckBlank() N/A
T8684 1513:640.192 OFL: SEGGER_FL_Prepare() N/A
T8684 1513:640.192 OFL: SEGGER_FL_Restore() N/A
T8684 1513:640.192 OFL: SEGGER_FL_EraseChip() N/A
T8684 1513:640.192 OFL var <SEGGER_FL_GoIntEn>: N/A
T8684 1513:643.904 Device "B6X" selected.
T8684 1513:644.288 - 4.394ms returns 0x00
T8684 1513:644.288 JLINK_ExecCommand("DisableConnectionTimeout", ...).
T8684 1513:644.288 ERROR: Unknown command
T8684 1513:644.288 - 0.011ms returns 0x01
T8684 1513:644.416 JLINK_GetHardwareVersion()
T8684 1513:644.416 - 0.006ms returns 70000
T8684 1513:644.416 JLINK_GetDLLVersion()
T8684 1513:644.416 - 0.006ms returns 79617
T8684 1513:644.416 JLINK_GetOEMString(...)
T8684 1513:644.416 JLINK_GetFirmwareString(...)
T8684 1513:644.416 - 0.037ms
T8684 1513:652.096 JLINK_GetDLLVersion()
T8684 1513:652.224 - 0.024ms returns 79617
T8684 1513:652.224 JLINK_GetCompileDateTime()
T8684 1513:652.224 - 0.006ms
T8684 1513:654.144 JLINK_GetFirmwareString(...)
T8684 1513:654.144 - 0.014ms
T8684 1513:655.808 JLINK_GetHardwareVersion()
T8684 1513:655.936 - 0.010ms returns 70000
T8684 1513:657.600 JLINK_GetSN()
T8684 1513:657.600 - 0.012ms returns 20090928
T8684 1513:659.008 JLINK_GetOEMString(...)
T8684 1513:664.640 JLINK_TIF_Select(JLINKARM_TIF_SWD)
T8684 1513:664.896 - 0.316ms returns 0x00
T8684 1513:664.896 JLINK_HasError()
T8684 1513:664.896 JLINK_SetSpeed(5000)
T8684 1513:664.896 - 0.059ms
T8684 1513:664.896 JLINK_GetId()
T8684 1513:668.992 ConfigTargetSettings() start
T8684 1513:668.992 J-Link Script File: Executing ConfigTargetSettings()
T8684 1513:670.528 ConfigTargetSettings() end - Took 14us
T8684 1513:774.848 Failed to attach to CPU. Trying connect under reset.
T8684 1514:295.552 Connect fallback: Reset via Reset pin & Connect.
T8684 1514:351.360 ConfigTargetSettings() start
T8684 1514:351.360 J-Link Script File: Executing ConfigTargetSettings()
T8684 1514:352.384 ConfigTargetSettings() end - Took 10us
T8684 1514:458.752 - 793.763ms returns 0x00000000
T8684 1582:110.080 JLINK_Close()
T8684 1582:130.432 - 20.341ms
T8684 1582:130.432
T8684 1582:130.432 Closed

File diff suppressed because one or more lines are too long

View File

@ -343,7 +343,7 @@
<GroupNumber>2</GroupNumber>
<FileNumber>14</FileNumber>
<FileType>1</FileType>
<tvExp>1</tvExp>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>..\src\sys_config.c</PathWithFileName>

View File

@ -10,7 +10,7 @@
<TargetName>OTA</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
@ -48,7 +48,7 @@
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\output\</OutputDirectory>
<OutputName>OTA_V2_8</OutputName>
<OutputName>OTA_V2_9</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>

View File

@ -30,35 +30,54 @@ float temp_bat_voltage=0;
// uint8_t bat_str[50]={0,0},bat_str_len=0;
const uint16_t coulomp_voltage_table[11] = {
BAT_LEVEL_0PERCENT_VOLT,
BAT_LEVEL_10PERCENT_VOLT,
BAT_LEVEL_20PERCENT_VOLT,
BAT_LEVEL_30PERCENT_VOLT,
BAT_LEVEL_40PERCENT_VOLT,
BAT_LEVEL_50PERCENT_VOLT,
BAT_LEVEL_60PERCENT_VOLT,
BAT_LEVEL_70PERCENT_VOLT,
BAT_LEVEL_80PERCENT_VOLT,
BAT_LEVEL_90PERCENT_VOLT,
BAT_LEVEL_100PERCENT_VOLT,
const float coulomp_voltage_tablesSLA[3][21] = {
{ // 4串
420.0f, 423.6f, 427.2f, 430.8f, 434.4f, 438.0f, 441.6f, 445.2f, 448.8f, 452.4f,
456.0f, 459.6f, 463.2f, 466.8f, 470.4f, 474.0f, 477.6f, 481.2f, 484.8f, 488.4f, 492.0f
},
{ // 5串
525.0f, 529.5f, 534.0f, 538.5f, 543.0f, 547.5f, 552.0f, 556.5f, 561.0f, 565.5f,
570.0f, 574.5f, 579.0f, 583.5f, 588.0f, 592.5f, 597.0f, 601.5f, 606.0f, 610.5f, 615.0f
},
{ // 6串
630.0f, 635.4f, 640.8f, 646.2f, 651.6f, 657.0f, 662.4f, 667.8f, 673.2f, 678.6f,
684.0f, 689.4f, 694.8f, 700.2f, 705.6f, 711.0f, 716.4f, 721.8f, 727.2f, 732.6f, 738.0f
}
};
const float coulomp_voltage_tablesLi[3][21] = {
{ // 4串
},
{ // 5串
},
{ // 6串
}
};
uint8_t pmu_voltage_to_percent(uint32_t volt){//电压转百分比
uint8_t i, percent;
uint8_t table_index = BAT_Message.Bat_PACK ;
const float* voltage_table = coulomp_voltage_tablesSLA[table_index];
uint8_t i, percent;
float step, base;
if((volt < coulomp_voltage_table[0])){
if((volt < voltage_table[0])){
return 0;
}
if((volt >= coulomp_voltage_table[10])){
if((volt >= voltage_table[20])){
return 100;
}
for (i = 0; i < 10; i++) {
if((volt < coulomp_voltage_table[i+1]) && (volt >= coulomp_voltage_table[i])){
step = (coulomp_voltage_table[i+1] - coulomp_voltage_table[i]) / 10.0;
base = coulomp_voltage_table[i];
for (i = 0; i < 20; i++) {
if((volt < voltage_table[i+1]) && (volt >= voltage_table[i])){
step = (voltage_table[i+1] - voltage_table[i]) / 10.0;
base = voltage_table[i];
percent = (10 * i) + (volt - base) / step;
DEBUG("\n\ni:%d,volt:%d,step:%02.2f,base:%02.2f,percent:%d\n\n",i,volt,step,base,percent);
return (uint8_t)percent;

View File

@ -1,37 +1,37 @@
#ifndef _APP_BAT_H_
#define _APP_BAT_H_
#include "b6x.h"
#define BAT_SxP1 4 // 电池四串一并
#define BAT_VOLT(_Volt) (_Volt * BAT_SxP1) //电压单位转换
#define BAT_Low_VOLT BAT_VOLT(105) //10.5V x 4 = 42V
#define BAT_Full_VOLT BAT_VOLT(144) //14.4V x 4 = 57.6V
// #define BAT_LEVEL_0PERCENT_VOLT BAT_VOLT(105) // 0%:(105~110]=(42.0V~44.0V]
// #define BAT_LEVEL_10PERCENT_VOLT BAT_VOLT(113) // 10%:(110~113]=(44.0V~45.2V]
// #define BAT_LEVEL_20PERCENT_VOLT BAT_VOLT(116) // 20%:(113~116]=(45.2V~46.4V]
// #define BAT_LEVEL_30PERCENT_VOLT BAT_VOLT(119) // 30%:(116~119]=(46.4V~47.6V]
// #define BAT_LEVEL_40PERCENT_VOLT BAT_VOLT(122) // 40%:(119~122]=(47.6V~48.8V]
// #define BAT_LEVEL_50PERCENT_VOLT BAT_VOLT(125) // 50%:(122~125]=(48.8V~50.0V]
// #define BAT_LEVEL_60PERCENT_VOLT BAT_VOLT(128) // 60%:(125~128]=(50.0V~51.2V]
// #define BAT_LEVEL_70PERCENT_VOLT BAT_VOLT(131) // 70%:(128~131]=(51.2V~52.4V]
// #define BAT_LEVEL_80PERCENT_VOLT BAT_VOLT(134) // 80%:(131~134]=(52.4V~53.6V]
// #define BAT_LEVEL_90PERCENT_VOLT BAT_VOLT(137) // 90%:(134~137]=(53.6V~54.8V]
// #define BAT_LEVEL_100PERCENT_VOLT BAT_VOLT(144) //100%:(137~144]=(54.8V~57.6V]
// 内阻 20mΩ * 4 =80mΩ // 线损 10A 0.1V
#define BAT_LEVEL_0PERCENT_VOLT BAT_VOLT(105) // 0%
#define BAT_LEVEL_10PERCENT_VOLT BAT_VOLT(107) // 10%
#define BAT_LEVEL_20PERCENT_VOLT BAT_VOLT(109) // 20%
#define BAT_LEVEL_30PERCENT_VOLT BAT_VOLT(111) // 30%
#define BAT_LEVEL_40PERCENT_VOLT BAT_VOLT(113) // 40%
#define BAT_LEVEL_50PERCENT_VOLT BAT_VOLT(115) // 50%
#define BAT_LEVEL_60PERCENT_VOLT BAT_VOLT(117) // 60%
#define BAT_LEVEL_70PERCENT_VOLT BAT_VOLT(119) // 70%
#define BAT_LEVEL_80PERCENT_VOLT BAT_VOLT(123) // 80%
#define BAT_LEVEL_90PERCENT_VOLT BAT_VOLT(127) // 90%
#define BAT_LEVEL_100PERCENT_VOLT BAT_VOLT(134) //100%
#define BAT_LEVEL_5PERCENT_VOLT BAT_VOLT(105.9) // 0%
#define BAT_LEVEL_10PERCENT_VOLT BAT_VOLT(106.8) // 10%
#define BAT_LEVEL_15PERCENT_VOLT BAT_VOLT(107.7) // 10%
#define BAT_LEVEL_20PERCENT_VOLT BAT_VOLT(108.6) // 20%
#define BAT_LEVEL_25PERCENT_VOLT BAT_VOLT(109.5) // 20%
#define BAT_LEVEL_30PERCENT_VOLT BAT_VOLT(110.4) // 30%
#define BAT_LEVEL_35PERCENT_VOLT BAT_VOLT(111.3) // 30%
#define BAT_LEVEL_40PERCENT_VOLT BAT_VOLT(112.2) // 40%
#define BAT_LEVEL_45PERCENT_VOLT BAT_VOLT(113.1) // 40%
#define BAT_LEVEL_50PERCENT_VOLT BAT_VOLT(114) // 50%
#define BAT_LEVEL_55PERCENT_VOLT BAT_VOLT(114.9) // 50%
#define BAT_LEVEL_60PERCENT_VOLT BAT_VOLT(115.8) // 60%
#define BAT_LEVEL_65PERCENT_VOLT BAT_VOLT(116.7) // 60%
#define BAT_LEVEL_70PERCENT_VOLT BAT_VOLT(117.6) // 70%
#define BAT_LEVEL_75PERCENT_VOLT BAT_VOLT(118.5) // 70%
#define BAT_LEVEL_80PERCENT_VOLT BAT_VOLT(119.4) // 80%
#define BAT_LEVEL_85PERCENT_VOLT BAT_VOLT(120.3) // 80%
#define BAT_LEVEL_90PERCENT_VOLT BAT_VOLT(121.2) // 90%
#define BAT_LEVEL_95PERCENT_VOLT BAT_VOLT(122.1) // 90%
#define BAT_LEVEL_100PERCENT_VOLT BAT_VOLT(123) //100%
// 充电状态
@ -53,6 +53,9 @@ typedef struct BAT_Message{
uint16_t Bat_Voltage; // 480=48.0V
uint16_t Runing_Time; // 系统运行时间
uint16_t Deep_ACC_Time; // 深踩油门时间
uint8_t Bat_TYPE;
uint8_t Bat_PACK;
} BAT_Message_t;
uint8_t pmu_voltage_to_percent(uint32_t volt); // 电压转百分比

View File

@ -346,7 +346,7 @@ void FunctionalCode_03_06(uint8_t CMDCode, uint16_t reg_addr , uint16_t reg_val_
}
}else if(CMDCode == 0x06){
BAT_Message.Bat_Voltage = get_bat_voltage() * 10;
BAT_Message.Bat_Percent = pmu_voltage_to_percent(BAT_Message.Bat_Voltage);
BAT_Message.Bat_Percent = pmu_voltage_to_percent(BAT_Message.Bat_Voltage);
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_STA;
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_Percent;
break;
@ -428,6 +428,35 @@ void FunctionalCode_03_06(uint8_t CMDCode, uint16_t reg_addr , uint16_t reg_val_
len_count =0;
break;
}
case 0x0308: // 电池类型信息
if(CMDCode == 0x03){
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_TYPE >> 8;
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_TYPE & 0xff;
MODBUS_Sent_BUF[2] +=2;
if(0 == --reg_val_num){
break;
}
}else if(CMDCode == 0x06){
BAT_Message.Bat_TYPE =reg_val_num ? 1 : 0;
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_TYPE >> 8;
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_TYPE & 0xff;
break;
}
case 0x0309: // 电池包信息
if(CMDCode == 0x03){
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_PACK >> 8;
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_PACK & 0xff;
MODBUS_Sent_BUF[2] +=2;
if(0 == --reg_val_num){
break;
}
}else if(CMDCode == 0x06){
BAT_Message.Bat_PACK =reg_val_num > 10 ? 10 : reg_val_num;
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_PACK >> 8;
MODBUS_Sent_BUF[len_count++] =BAT_Message.Bat_PACK & 0xff;
break;
}
}
default:
len_count =0;

View File

@ -57,7 +57,7 @@ void conf_init(void);
/**************************系统版本**************************/
// 软件本号
#define SW_VERSION (8)
#define SW_VERSION (9) //之前是8
// 硬件本号
#define HW_VERSION (2)
// 版本类型00x0400010x20000//不可修改