beta version

This commit is contained in:
Артём Чамайкин
2024-08-20 12:20:24 +03:00
parent b86b879ede
commit ad4ae7357a
10 changed files with 20741 additions and 20362 deletions

View File

@@ -1,17 +1,25 @@
//
// Created by Артём Чамайкин on 20.07.2024.
//
#ifndef EDCAN_CONFIG_H
#define EDCAN_CONFIG_H
#define DEVICE_ID 0x20
#define FWVER 1
//#define ED_CAN1
#define ED_CAN2
//если используется STM32 с одним каном
//#define ED_CANx
//extern CAN_HandleTypeDef hcan;
//#define ED_CAN_INSTANCE hcan
//если используется CAN1 на STM32 с двумя канами
//#define ED_CAN1
//extern CAN_HandleTypeDef hcan1;
//#define ED_CAN_INSTANCE hcan1
//если используется CAN2 на STM32 с двумя канами
#define ED_CAN2
extern CAN_HandleTypeDef hcan2;
#define ED_CAN_INSTANCE hcan2
//можно уменьшать для уменьшения объема потребляемой памяти
#define BUFFER_SIZE 256
#endif //EDCAN_CONFIG_H

View File

@@ -38,11 +38,70 @@ void Init_Peripheral(){
}
uint8_t GBT_ReadTemp(){
//TODO
return 0;
float pt1000_to_temperature(float resistance) {
// Константы для PT1000
const float R0 = 1000.0; // Сопротивление при 0 °C
const float C_A = 3.9083E-3f;
// const float A = 3.9083e-03; // Коэффициент температурного изменения (°C^-1)
// const float B = -5.775e-07; // Второй коэффициент (°C^-2)
//
// // Расчет температуры по формуле
// float temperature = -A / (B - (R0 / resistance - 1) * A);
float temperature = (resistance-R0) / ( R0 * C_A);
return temperature;
}
float calculate_NTC_resistance(int adc_value, float Vref, float Vin, float R) {
// Преобразуем значение АЦП в выходное напряжение
float Vout = (adc_value / 4095.0) * Vref;
// Проверяем, чтобы Vout не было равно Vin
if (Vout >= Vin) {
return -1; // Ошибка: Vout не может быть больше или равно Vin
}
// Вычисляем сопротивление термистора
float R_NTC = R * (Vout / (Vin - Vout));
return R_NTC;
}
int16_t GBT_ReadTemp(uint8_t ch){
//TODO
if(ch)ADC_Select_Channel(ADC_CHANNEL_8);
else ADC_Select_Channel(ADC_CHANNEL_9);
// Начало конверсии
HAL_ADC_Start(&hadc1);
// Ожидание окончания конверсии
HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
// Получение значения
uint32_t adcValue = HAL_ADC_GetValue(&hadc1);
// Остановка АЦП (по желанию)
HAL_ADC_Stop(&hadc1);
// int adc_value = 2048; // Пример значения АЦП
float Vref = 3.3; // Напряжение опорное
float Vin = 5.0; // Входное напряжение
float R = 1000; // Сопротивление резистора в Омах
float temp = pt1000_to_temperature(calculate_NTC_resistance(adcValue, Vref, Vin, R));
return (int16_t)temp;
}
void ADC_Select_Channel(uint32_t ch) {
ADC_ChannelConfTypeDef conf = {
.Channel = ch,

View File

@@ -68,9 +68,9 @@ void CONN_Task(){
GBT_Lock(0);
// RELAY_Write(RELAY_AUX, 0);
//TODO: Reconnection
if(GBT_EDCAN_Input.chargeControl == CHARGING_NOT_ALLOWED){
CONN_SetState(CONN_Initializing);
}
// if(GBT_EDCAN_Input.chargeControl == CHARGING_NOT_ALLOWED){
// CONN_SetState(CONN_Initializing);
// }
if(CONN_CC_GetState()==GBT_CC_6V){
CONN_SetState(CONN_Initializing);
}

View File

@@ -143,6 +143,9 @@ void parse_command(uint8_t* buffer, size_t length) {
break;
}
} else if (strncmp((const char*)buffer, "temp", length) == 0) {
printf("temp1 %d\n",GBT_ReadTemp(0));
printf("temp2 %d\n",GBT_ReadTemp(1));
} else if (strncmp((const char*)buffer, "info1", length) == 0) {
printf("Battery info:\n");
printf("maxCV %dV\n",GBT_BATStat.maxCellVoltage/100); // 0.01v/bit
@@ -193,6 +196,7 @@ void parse_command(uint8_t* buffer, size_t length) {
printf("stop\n");
printf("stop1\n");
// printf("force\n");
printf("temp\n");
printf("info1\n");
printf("info2\n");
printf("info3\n");