Compare commits

..

4 Commits

Author SHA1 Message Date
kkkjtr a5739ad609 上传文件至 /
增加说明文档
2025-10-12 23:11:21 +08:00
kkkjtr 1790496208 ble_expansion_board 2025-07-28 10:09:29 +08:00
zsx 273560b3ac Merge branch 'Control_Borad_V1.2' into Expansion_Board 2025-04-26 12:29:15 +08:00
zsx cfc764438b 根据新板子调整软件配置 zsxfly20240104 2025-01-04 12:59:51 +08:00
16 changed files with 5448 additions and 462 deletions

Binary file not shown.

View File

@ -0,0 +1,9 @@
<?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

@ -0,0 +1,103 @@
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

Binary file not shown.

File diff suppressed because one or more lines are too long

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>0</tvExp>
<tvExp>1</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>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
<uAC6>0</uAC6>
<TargetOption>
<TargetCommonOption>
@ -48,7 +48,7 @@
<InvalidFlash>1</InvalidFlash>
</TargetStatus>
<OutputDirectory>.\output\</OutputDirectory>
<OutputName>OTA_V2_9</OutputName>
<OutputName>OTA_V2_8</OutputName>
<CreateExecutable>1</CreateExecutable>
<CreateLib>0</CreateLib>
<CreateHexFile>1</CreateHexFile>

View File

@ -25,7 +25,7 @@ void Event_Handle(uint16_t Event_List ,bool isOn,void *Parameter){
(void)Parameter;
switch(Event_List){
case Buzzer_Event:
Set_Status(IO_TTL_TX,isOn);
Set_Status(OUT_BUZZER,isOn);
break;
case Pmode_Timeout_Event:
if(!isOn){

View File

@ -30,54 +30,35 @@ float temp_bat_voltage=0;
// uint8_t bat_str[50]={0,0},bat_str_len=0;
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 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_tablesLi[3][21] = {
{ // 4串
},
{ // 5串
},
{ // 6串
}
};
uint8_t pmu_voltage_to_percent(uint32_t volt){//电压转百分比
uint8_t table_index = BAT_Message.Bat_PACK ;
const float* voltage_table = coulomp_voltage_tablesSLA[table_index];
uint8_t i, percent;
uint8_t i, percent;
float step, base;
if((volt < voltage_table[0])){
if((volt < coulomp_voltage_table[0])){
return 0;
}
if((volt >= voltage_table[20])){
if((volt >= coulomp_voltage_table[10])){
return 100;
}
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];
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];
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_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%
#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%
// 充电状态
@ -53,9 +53,6 @@ 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

@ -25,31 +25,18 @@ uint16_t ACC_Dmax ;
bool app_control_en[PA_MAX]={
[OUT_12V_Control] =OE_HIGH, // 12V电源控制输出 /H:12V输出
[OUT_Door_lock] =OE_HIGH, // 开锁 /H:开锁(同)
[IN_01] =OE_LOW, // 自定义输入
[IN_GPS] =OE_HIGH, // GPS输入0 /H:低使能/边沿触发
[IO_MANAGER_MODE] =OE_LOW, // 管理员模式 /边沿触发
[IO_MANAGER_MODE] =OE_LOW, // 管理员模式 /低电平触发
[IO_BACK] =OE_LOW, // 倒车 /H:前进/L:后退
[IO_AUTO_BRAKE] =OE_HIGH, // 自动刹车 /H:高使能
[IO_BRAKE] =OE_LOW, // 制动 /L:低使能
[IO_TTL_TX] =OE_LOW, // 串口发送
[IO_TTL_RX] =OE_LOW, // 串口接收
};
[OUT_BUZZER] =OE_HIGH, // 蜂鸣器输出 /H:蜂鸣器响
[IO_INTERACTION] =OE_LOW, // 交互信号输入 (人体感应器) /L:低电平触发
};
sys_sta_t sys_sta;
// ={
// .Pmode = 0,
// .Smode = 0,
// .O_12V = 0,
// .O_lock = 0,
// .I_01 = 0,
// .I_brake = 0,
// .I_back = 0,
// .IO_TX = 0,
// .IO_RX = 0,
// .A_brake = 0,
// .A_Speed_Cut = 0,
// .Reserve = 0,
// };
// 油门控制输入初始化/PA08/CH3
// 电池电压检测/充电检测/PA04/CH7
@ -60,7 +47,7 @@ static void acc_in_bat_in_sadc_init(void)
// ADC
iom_ctrl(PA08, IOM_ANALOG);//ACC//AIN7//油门
iom_ctrl(PA02, IOM_ANALOG);//ACC_FEEDBACK//AIN2//油门反馈
// iom_ctrl(PA02, IOM_ANALOG);//ACC_FEEDBACK//AIN2//油门反馈
iom_ctrl(PA04, IOM_ANALOG);//BAT//AIN3//电池电量
// sadc init
@ -146,44 +133,42 @@ void set_out_acc_percent(uint8_t percent){
//中控控制IO初始化
void app_control_init(void){
// out
// IO init
gpio_dir_output(OUT_12V_Control,OE_LOW);// 12V电源控制输出 /H:12V输出
gpio_dir_input(OUT_12V_Control,IE_UP);
gpio_dir_output(OUT_Door_lock,OE_LOW); // 电门锁 /H:开锁
gpio_dir_output(IO_MANAGER_MODE,OE_LOW);// 管理员模式 /边沿触发
gpio_dir_output(IO_BACK,OE_HIGH); // 倒车 /H:前进/L:后退
gpio_dir_output(IO_BRAKE,OE_LOW); // 制动 /L:低使能
gpio_dir_input(OUT_Door_lock,IE_UP);
gpio_dir_output(IO_TTL_TX,OE_HIGH); // 串口发送
gpio_dir_output(IO_TTL_RX,OE_LOW); // 串口接收
//in
// gpio_dir_input(OUT_12V_Control,IE_DOWN);// 12V电源控制输出 /H:12V输出
gpio_dir_input(OUT_Door_lock,IE_DOWN); // 电门锁 /H:开锁
gpio_dir_input(IO_MANAGER_MODE,IE_DOWN);// 管理员模式 /边沿触发
gpio_dir_input(IO_BACK,IE_DOWN); // 倒车 /H:前进/L:后退
gpio_dir_input(IO_BRAKE,IE_DOWN); // 制动 /L:低使能
gpio_dir_output(IO_MANAGER_MODE,OE_HIGH);// 管理员模式 /边沿触发
gpio_dir_input(IO_MANAGER_MODE,IE_UP);
gpio_dir_input(IO_TTL_TX,IE_DOWN); // 串口发送
gpio_dir_input(IO_TTL_RX,IE_DOWN); // 串口接收
gpio_dir_output(IO_BACK,OE_HIGH);// 倒车 /H:前进/L:后退
gpio_dir_input(IO_BACK,IE_UP);
gpio_dir_output(IO_AUTO_BRAKE,OE_HIGH); // 自动刹车 /H:高使能
gpio_dir_input(IO_AUTO_BRAKE,IE_UP);
gpio_dir_output(IO_BRAKE,OE_LOW); // 制动 /L:低使能
gpio_dir_input(IO_BRAKE,IE_UP);
gpio_dir_input(IO_TTL_TX,IE_UP); // 串口发送
gpio_dir_input(IO_TTL_RX,IE_UP); // 串口接收
gpio_dir_output(OUT_BUZZER,OE_LOW); // 蜂鸣器输出
gpio_dir_output(IO_INTERACTION,OE_HIGH);
gpio_dir_input(IO_INTERACTION,IE_UP); // 交互信号输入 (人体感应器)
//默认都失能
Set_Status(OUT_12V_Control,0);
Set_Status(OUT_Door_lock,0);
Set_Status(IO_MANAGER_MODE,0);
Set_Status(IO_BACK,0); //失能倒车
Set_Status(IO_AUTO_BRAKE,0);
Set_Status(IO_BRAKE,0);
Set_Status(IO_TTL_TX,0);
Set_Status(IO_TTL_RX,0);
// in
gpio_dir_input(IN_01,IE_UP); // 自定义输入
gpio_dir_input(IN_GPS,IE_UP); // GPS输入0 /边沿触发
Set_Status(OUT_BUZZER,0);
// // EXTI config
// exti_init(EXTI_DBC(15, 4));
// exti_set(EXTI_FTS, EXTI_SRC(IN_GPS) | EXTI_SRC(IO_BACK) | EXTI_SRC(IO_BRAKE) | EXTI_SRC(IO_MANAGER_MODE)); // falling
// exti_set(EXTI_DBE, EXTI_SRC(IN_GPS) | EXTI_SRC(IO_BACK) | EXTI_SRC(IO_BRAKE) | EXTI_SRC(IO_MANAGER_MODE));
// exti_set(EXTI_IER, EXTI_SRC(IN_GPS) | EXTI_SRC(IO_BACK) | EXTI_SRC(IO_BRAKE) | EXTI_SRC(IO_MANAGER_MODE));
// exti_set(EXTI_FTS, EXTI_SRC(IO_INTERACTION) | EXTI_SRC(IO_BACK) | EXTI_SRC(IO_BRAKE) | EXTI_SRC(IO_MANAGER_MODE)); // falling
// exti_set(EXTI_DBE, EXTI_SRC(IO_INTERACTION) | EXTI_SRC(IO_BACK) | EXTI_SRC(IO_BRAKE) | EXTI_SRC(IO_MANAGER_MODE));
// exti_set(EXTI_IER, EXTI_SRC(IO_INTERACTION) | EXTI_SRC(IO_BACK) | EXTI_SRC(IO_BRAKE) | EXTI_SRC(IO_MANAGER_MODE));
// IRQ enable
// NVIC_EnableIRQ(EXTI_IRQn);
@ -192,13 +177,13 @@ void app_control_init(void){
sys_sta.Manager =0;
sys_sta.Tourist =0;
// sys_sta.Smode = 0;
sys_sta.IOgps = Get_Status(IN_GPS);
sys_sta.IOgps = 0;
sys_sta.IOmanager = Get_Status(IO_MANAGER_MODE);
sys_sta.I_01 = Get_Status(IN_01);
sys_sta.I_interaction = Get_Status(IO_INTERACTION);
sys_sta.A_brake = Get_Status(IO_AUTO_BRAKE);
sys_sta.I_back = Get_Status(IO_BACK);
sys_sta.I_brake = Get_Status(IO_BRAKE);
sys_sta.A_brake = 0;
sys_sta.A_Speed_Cut = 0;
sys_sta.O_lock = 0;
sys_sta.P_Radar_EN =1;
@ -223,9 +208,9 @@ void EXTI_IRQHandler(void)
{
uint32_t irq_sta = EXTI->RIF.Word;
if (irq_sta & EXTI_SRC(IN_GPS))//
if (irq_sta & EXTI_SRC(IO_INTERACTION))//
{
EXTI->ICR.Word = EXTI_SRC(IN_GPS);
EXTI->ICR.Word = EXTI_SRC(IO_INTERACTION);
}
@ -252,26 +237,24 @@ void EXTI_IRQHandler(void)
void Control_procedure(void){
//电门锁
// sys_sta.Smode = 0;
sys_sta.IOgps = Get_Status(IN_GPS); //更新GPS状态
sys_sta.IOgps = 0; //更新GPS状态
sys_sta.IOmanager = Get_Status(IO_MANAGER_MODE); //更新管理员模式状态
sys_sta.O_lock = (0 != (sys_sta.Pmode | sys_sta.Smode));
Set_Status(OUT_Door_lock, sys_sta.O_lock);
// Set_Status(OUT_Door_lock,(PAD_User_Mode || PAD_Manager_Mode || Get_Status(IN_GPS) || SYS_Manager_STA));
//12V电源
Set_Status(OUT_12V_Control ,sys_sta.O_12V);// 更新12V电源状态
// Set_Status(OUT_12V_Control,(PAD_LED_ONOFF));
// 刹车
Set_Status(IO_BRAKE ,sys_sta.A_brake);// 输出为低电平时,可刹车
Set_Status(IO_AUTO_BRAKE ,sys_sta.A_brake);// 高刹车
Set_Status(IO_BRAKE ,sys_sta.A_brake);// 低刹车
sys_sta.I_brake = Get_Status(IO_BRAKE); //更新刹车状态// 输出为高电平时,可读取外部刹车状态
// Set_Status(IO_BRAKE,SYS_AUTO_brake);
sys_sta.I_01 = Get_Status(IN_01);
sys_sta.I_interaction = Get_Status(IO_INTERACTION);
sys_sta.I_back = Get_Status(IO_BACK);
sys_sta.IO_TX = Get_Status(IO_TTL_TX);
sys_sta.IO_RX = Get_Status(IO_TTL_RX);
// GRB_WS2812_Write_color(64, 0xffffff);
//油门控制
if(0 != (sys_sta.Pmode | sys_sta.Smode)){
uint8_t acc_percent =0;
@ -282,31 +265,12 @@ void Control_procedure(void){
acc_percent = (get_in_acc_percent() * sys_conf.Tourist_sLim) / 100.0;
}
}else{//管理员模式
// Time_Event_Blink(GRB_WS2812_Event,500,500,0xffff,NULL);
acc_percent = (get_in_acc_percent() * sys_conf.Manager_sLim) / 100.0;
}
set_out_acc_percent(acc_percent);
}else{
// Time_Event_Off(GRB_WS2812_Event,NULL);
set_out_acc_percent(0);
}
// //油门控制
// if((PAD_User_Mode || PAD_Manager_Mode || Get_Status(IN_GPS) || SYS_Manager_STA)){
// uint8_t acc_percent =0;
// // acc_percent = get_in_acc_percent() *
// // (((PAD_Manager_Mode || SYS_Manager_STA) ? sys_conf.Manager_sLim : (SYS_AUTO_Speed_Cut ? sys_conf.Speed_Cut_sLim : sys_conf.Tourist_sLim)) / 100.0);
// if(PAD_Manager_Mode || SYS_Manager_STA){//管理员模式
// acc_percent = (get_in_acc_percent() * sys_conf.Manager_sLim) / 100.0;
// }else{//游客模式
// if(SYS_AUTO_Speed_Cut){//自动减速
// acc_percent = (get_in_acc_percent() * sys_conf.Speed_Cut_sLim) / 100.0;
// }else{
// acc_percent = (get_in_acc_percent() * sys_conf.Tourist_sLim) / 100.0;
// }
// }
// set_out_acc_percent(acc_percent);
// }else{
// set_out_acc_percent(0);
// }
}

View File

@ -22,7 +22,6 @@ extern uint16_t ACC_Dmax ;
enum app_adc_dac_chx{
ACC_IN_CH =SADC_CH_AIN7, // 油门输入
ACC_FEED_CH =SADC_CH_AIN2, // 油门输出监测
BAT_IN_CH =SADC_CH_AIN3, // 电池输入
};
@ -30,27 +29,28 @@ enum app_adc_dac_chx{
enum app_control{
OUT_12V_Control =PA17, // 12V电源控制输出 /H:12V输出
OUT_Door_lock =PA18, // 电门锁 /H:开锁
IN_01 =PA19, // 自定义输入
IN_GPS =PA03, // GPS输入0 /边沿触发
IO_MANAGER_MODE =PA13, // 管理员模式 /边沿触发
IO_BACK =PA14, // 倒车 /H:前进/L:后退
IO_BRAKE =PA15, // 制动 /L:低使能
IO_AUTO_BRAKE =PA03, // 高制动 /高:高使能
IO_BRAKE =PA15, // 低制动 /L:低使能
IO_TTL_TX =PA11, // 串口发送
IO_TTL_RX =PA12, // 串口接收
RADAR_TXD0 =PA07, // 串口0发送
RADAR_RXD0 =PA06, // 串口0接收
RADAR_TXD0 =PA06, // 串口0发送
RADAR_RXD0 =PA07, // 串口0接收
PAD_TXD1 =PA10, // 串口1发送
PAD_RXD1 =PA09, // 串口1接收
ACC_PA8_ADC7 =PA08, // 油门输入
PWM4_DAC =PA05, // 油门输出
ACC_FEEDBACK_ADC2 =PA02, // 油门输出监测
RGB_DATA_IO =PA16, // RGB数据输出
BAT_PA4_ADC3 =PA04, // 电池电压输入
OUT_BUZZER =PA19, // 蜂鸣器输出
IO_INTERACTION =PA02, // 交互信号输入 (人体感应器)
};
typedef struct sys_sta{
@ -74,7 +74,7 @@ typedef struct sys_sta{
union{// 输入状态
uint8_t I_STA:8;
struct{
uint8_t I_01 :1; // 自定义输入状态
uint8_t I_interaction :1; // 交互信号(人体感应器)输入状态
uint8_t I_brake :1; // 制动信号输入状态
uint8_t I_back :1; // 倒车信号输入状态
uint8_t A_brake :1; // 自动刹车状态

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,35 +428,6 @@ 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 (9) //之前是8
#define SW_VERSION (8)
// 硬件本号
#define HW_VERSION (2)
// 版本类型00x0400010x20000//不可修改