MCU & FPGA Periféricos,STM32 Usando o Sensor Interno de Temperatura do STM32F411

Usando o Sensor Interno de Temperatura do STM32F411


Introdução ao Sensor Interno de Temperatura

Os microcontroladores da família STM32F4, incluindo o STM32F411, possuem um sensor interno de temperatura capaz de medir a temperatura do chip (junction temperature). Esse recurso é extremamente útil em sistemas embarcados que exigem monitoramento térmico, proteção contra sobreaquecimento, calibração térmica de ADC ou simplesmente coleta de telemetria para diagnóstico.

É importante destacar que este sensor não é pensado como um termômetro ambiental de alta precisão. Ele mede a temperatura interna do silício e sua calibração depende de constantes fornecidas pela ST no banco de dados do próprio microcontrolador. Ainda assim, quando configurado corretamente, oferece leituras estáveis e suficientemente precisas para aplicações de controle interno.

Neste artigo, vamos desenvolver um projeto completo para ler a temperatura interna do STM32F411, usando o STM32CubeMX para gerar a configuração base, o HAL ADC para realizar a aquisição e, por fim, exibiremos a temperatura em graus Celsius através da porta serial (UART) padrão.


Configurando o ADC e o Sensor de Temperatura no STM32CubeMX

A configuração do sensor interno de temperatura no STM32F411 começa pela ativação correta do ADC1, que é o periférico responsável por ler o canal dedicado ao sensor térmico. O CubeMX torna esse processo mais intuitivo ao apresentar as opções de forma gráfica, porém alguns detalhes técnicos são essenciais para garantir uma leitura precisa.

O sensor de temperatura do STM32 está ligado ao canal ADC1_IN16 (temperature sensor chanel), um canal especial que não se conecta a nenhum pino físico do microcontrolador. Para habilitá-lo, abra o CubeMX, crie um novo projeto selecionando a placa ou o microcontrolador STM32F411, e navegue até a aba de configuração dos ADCs. É necessário habilitar o ADC1 e marcar o canal interno correspondente ao sensor térmico. Além disso, como esse canal depende da estabilidade de referência interna, é imprescindível ativar o Temperature Sensor dentro das opções internas do ADC.

Ainda no CubeMX, habiliter o continuous conversion mode, caso você deseje atualização contínua de temperatura, ou manter o modo simples de conversão por software, ideal para monitoramento periódico.

Depois da configuração do ADC, configure uma UART (geralmente USART2) para permitir o envio das leituras para o computador. Defina velocidade, pinos e parâmetros tradicionais de comunicação. Por fim, gere o código automaticamente via CubeMX. O projeto estará pronto para receber a lógica de cálculo da temperatura e impressão via UART. Veja como fazer no artigo: Como Ler e Escrever Dados pela UART no STM32F411RE: Guia Completo com STM32CubeMX


Seção 3 — Cálculo da Temperatura em Graus Celsius e Código em C (HAL)

Com o projeto gerado pelo CubeMX, o próximo passo é transformar o valor bruto do ADC em uma leitura de temperatura em graus Celsius. O STM32F411 fornece constantes de calibração na memória do sistema que permitem calcular a temperatura interna com boa precisão. A fórmula geral utilizada pela ST é:

\[
T(°C) = \left(\frac{V_{\text{sense}} – V_{25}}{\text{Avg_Slope}}\right) + 25
\]

Onde:

  • Vsense é a tensão lida no canal do sensor de temperatura.
  • V25 é o valor de Vsense quando o chip está a 25°C (valor fornecido pela ST, geralmente 0,76V).
  • Avg_Slope é a inclinação média da curva do sensor (típico 2,5 mV/°C).

Como o ADC trabalha por amostragem digital, calcula-se Vsense usando:

\[
V_{\text{sense}} = \frac{\text{ADC_Value} \times V_{\text{ref}}}{4095}
\]

Em que:

  • ADC_Value é o valor lido do ADC.
  • Vref é a tensão de referência do ADC, tipicamente 3,3V.
  • 4095 corresponde à resolução de 12 bits do ADC.

Após esse cálculo, basta aplicar a fórmula principal para obter a temperatura real. No firmware, essa operação deve ocorrer sempre após uma conversão válida do ADC.

A seguir apresento um exemplo completo em C usando HAL, incluindo a aquisição do ADC e a impressão da temperatura via UART:

#include "main.h"
#include <stdio.h>

extern ADC_HandleTypeDef hadc1;
extern UART_HandleTypeDef huart2;

float read_internal_temperature(void) {
    uint32_t raw = 0;
    float Vsense, temperature;

    // Inicia a conversão ADC
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
    raw = HAL_ADC_GetValue(&hadc1);

    // Converte leitura para tensão
    Vsense = (raw * 3.3f) / 4095.0f;

    // Aplica fórmula da ST
    const float V25 = 0.76f;
    const float Avg_Slope = 0.0025f; // 2.5 mV/°C

    temperature = ((Vsense - V25) / Avg_Slope) + 25.0f;

    return temperature;
}

void print_temperature(void) {
    char buffer[64];
    float temp = read_internal_temperature();

    snprintf(buffer, sizeof(buffer), "Temperatura Interna: %.2f C\r\n", temp);
    HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);
}

Com essa função, basta chamá-la dentro do while(1) de sua aplicação:

while (1) {
    print_temperature();
    HAL_Delay(1000); // 1 segundo entre leituras
}

Esse código fornece a temperatura interna do microcontrolador e a envia pela UART configurada no CubeMX, permitindo visualização direta no terminal serial do computador.


Exibindo a Temperatura na Porta Serial e Testando o Sistema

Com o ADC e a UART configurados no CubeMX e o código de leitura implementado, o próximo passo é garantir que a temperatura interna seja exibida corretamente na saída serial padrão (por exemplo, USART2, ligada ao conversor USB–Serial da sua placa de desenvolvimento).

No CubeMX, normalmente a UART usada como “console” é a USART2, configurada como Asynchronous, com parâmetros típicos: 115200 bps, 8 bits de dados, 1 stop bit, sem paridade e sem controle de fluxo. Esses ajustes devem ser reproduzidos no software terminal do PC (PuTTY, minicom, screen, TeraTerm etc.). Certifique-se também de selecionar a porta COM correta (no Linux, algo como /dev/ttyUSB0 ou /dev/ttyACM0).

No firmware, ao chamar periodicamente a função print_temperature() dentro do laço principal, a cada segundo (ou intervalo definido por você) será enviada uma linha de texto pelo UART com a leitura atual. Ao abrir o terminal no computador, você deverá ver algo como:

Temperatura Interna: 32.45 C
Temperatura Interna: 32.62 C
Temperatura Interna: 32.80 C
...

É normal que a temperatura interna seja superior à temperatura ambiente, pois o próprio núcleo do microcontrolador se aquece com a execução do código. Para testar o comportamento, você pode tocar o dedo sobre o encapsulamento do microcontrolador ou usar uma fonte de calor moderada (como a aproximação da mão ou um leve fluxo de ar quente) e observar a variação gradual dos valores.

Caso não apareça nada no terminal, verifique:

  • Se a HAL_UART_Transmit está usando o mesmo UART_HandleTypeDef configurado no CubeMX.
  • Se o SystemClock_Config() está correto (clock interferindo no baud rate).
  • Se o cabo USB está funcionando e a porta serial foi reconhecida pelo sistema operacional.
  • Se a função de leitura do ADC está sendo chamada corretamente e o projeto não está preso em interrupções ou em Error_Handler().

Uma vez validada a comunicação, você passa a ter uma telemetria térmica básica do STM32F411, que pode ser integrada a outras rotinas, logs ou mecanismos de proteção térmica.


Seção 5 — Boas Práticas, Conclusão e Materiais de SEO

O sensor interno de temperatura do STM32F411 é uma ferramenta valiosa para monitoramento térmico de sistemas embarcados. Apesar de não substituir sensores externos de alta precisão, oferece uma forma simples e eficiente de acompanhar variações internas, auxiliar em algoritmos de proteção, calibração térmica ou levantamento de diagnóstico. Uma boa prática importante é sempre considerar que a leitura térmica interna sofre influências da carga de processamento, clock, periféricos ativos e dissipação geral do encapsulamento. Por isso, quando o objetivo for avaliação absoluta de temperatura, recomenda-se aplicar curvas de calibração próprias ou ajustes empíricos baseados em testes de bancada.

Outro ponto relevante é a escolha de tempos adequados de amostragem no ADC. O sensor térmico da ST exige tempos de conversão maiores do que canais analógicos comuns devido à natureza interna do sinal. Utilizar tempos muito curtos pode introduzir ruído ou leituras inconsistentes. Além disso, lembre-se de que o cálculo da temperatura depende de valores típicos fornecidos no datasheet. Alguns microcontroladores possuem valores de calibração únicos gravados em memória, o que pode melhorar ainda mais a precisão se utilizados corretamente.

O envio da leitura pela UART, como apresentado no artigo, permite integrar o microcontrolador a sistemas de log, análise ou monitoramento remoto. Isso é particularmente útil em laboratórios, projetos educacionais e sistemas mais complexos, como servidores embarcados, drones, sensores industriais e robôs autônomos. Ao dominar essa técnica, você abre caminho para implementar lógica adaptativa baseada em temperatura — como redução de clock, acionamento de ventilação, alarmes e muito mais.

Com essas práticas, o desenvolvedor ganha autonomia e visão clara do comportamento térmico interno do STM32F411. Esse conhecimento fortalece a segurança e a confiabilidade dos sistemas embarcados, alinhando-se aos padrões profissionais do mercado e às necessidades de projetos robustos.

0 0 votos
Classificação do artigo
Inscrever-se
Notificar de
guest
0 Comentários
mais antigos
mais recentes Mais votado
Feedbacks embutidos
Ver todos os comentários

Related Post

Como Funcionam os Fuse Bits (Option Bytes) nos Microcontroladores STM32: Parametrização e Segurança do FirmwareComo Funcionam os Fuse Bits (Option Bytes) nos Microcontroladores STM32: Parametrização e Segurança do Firmware

Os microcontroladores STM32 utilizam Option Bytes como um sistema equivalente aos fuse bits tradicionais, permitindo configurar parâmetros essenciais de operação e segurança do firmware. Esses recursos controlam proteção de leitura,

0
Adoraria saber sua opinião, comente.x