forked from achamaikin/CCSModuleSW30Web
beta version
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user