classe ADCAll – acesso a todos os canais ADC

ADCAll expõe todos os canais ADC do MCU através de um único objeto – tanto os pinos externos de entrada analógica como os canais internos para temperatura do chip, a referência de 1,21 V e VBAT. É útil para monitorizar o barramento de alimentação do MCU e os sensores no chip sem instanciar um ADC por pino.

Exemplo:

import pyb

# 12-bit resolution, internal channels only (temp + VBAT + VREF).
adcall = pyb.ADCAll(12, 0x70000)
temp = adcall.read_core_temp()
vbat = adcall.read_core_vbat()
vref = adcall.read_core_vref()
vdda = adcall.read_vref()

Construtores

class pyb.ADCAll(resolution: int, mask: int = 0xffffffff)

Fornece acesso simultâneo a todos os canais ADC do MCU, incluindo os canais internos para temperatura do chip, a referência interna de 1,21 V e VBAT. A construção deste objeto coloca todos os pinos ADC externos não mascarados no modo de entrada analógica.

  • resolution é a resolução de conversão ADC em bits (tipicamente 8, 10 ou 12).

  • mask é uma máscara de bits de 32 bits que seleciona os canais a ativar; o bit N ativa o canal N. O valor predefinido é 0xffffffff (todos os canais). Os canais internos encontram-se nos bits 16 (temperatura), 17 (VBAT) e 18 (VREF); para ativar apenas os canais internos, passe 0x70000.

O sensor de temperatura no chip é calibrado em fábrica e tem uma precisão de aproximadamente ±1 °C, mas mede a temperatura do chip – que normalmente é dezenas de graus acima da temperatura ambiente quando o MCU está ativo. As leituras só são significativas como estimativa da temperatura ambiente numa placa recém-ligada.

Aviso

As tensões de entrada analógica nunca devem exceder a tensão de alimentação real.

Métodos

read_channel(channel: int) int

Lê o canal ADC indicado. Os canais externos (015) devolvem valores brutos não escalados com a resolução configurada; os canais internos (1618) também devolvem valores brutos, mas os métodos auxiliares dedicados abaixo convertem-nos para tensões.

read_core_temp() float

Devolve a temperatura no chip em graus Celsius, calculada a partir do canal de temperatura interno e dos valores de calibração de fábrica armazenados no MCU.

read_core_vbat() float

Devolve a tensão da bateria de reserva em volts. A leitura é obtida através de um divisor de tensão no chip (para que a margem de tensão não restrinja o intervalo de entrada do ADC) e escalada de volta para a tensão real da bateria. O divisor só fica ativo durante a conversão ADC, pelo que o consumo em espera da bateria de reserva é negligenciável.

read_core_vref() float

Devolve a tensão de referência interna de 1,21 V (nominal) em volts, medida com a alimentação do MCU como referência do ADC. Este é o resultado bruto da conversão.

read_vref() float

Devolve a tensão de alimentação do MCU em volts. Calculada medindo a referência de tensão interna e escalando de volta usando o seu valor de calibração de fábrica. Com um barramento de 3,3 V saudável, a leitura estará próxima de 3.3. O MCU continua a funcionar – e as conversões ADC permanecem significativas – com uma alimentação tão baixa como cerca de 2 V, desde que sejam respeitadas as definições adequadas de relógio do MCU, velocidade de acesso à flash e modo de programação.