clasa ADCAll – acces la toate canalele ADC

ADCAll expune fiecare canal ADC al MCU printr-un singur obiect – atât pinii externi de intrare analogică, cât și canalele interne pentru temperatura siliciului, referința de 1,21 V și VBAT. Este utilă pentru monitorizarea liniei de alimentare a MCU și a senzorilor de pe cip fără a instanția câte un ADC pentru fiecare pin.

Exemplu:

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()

Constructori

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

Oferă acces simultan la fiecare canal ADC al MCU, inclusiv la canalele interne pentru temperatura siliciului, referința internă de 1,21 V și VBAT. Construirea acestui obiect comută toți pinii ADC externi mascați în modul de intrare analogică.

  • resolution este rezoluția de conversie a ADC în biți (de obicei 8, 10 sau 12).

  • mask este o mască de biți pe 32 de biți care selectează ce canale să fie activate; bitul N activează canalul N. Implicit este 0xffffffff (toate canalele). Canalele interne se află la biții 16 (temperatură), 17 (VBAT) și 18 (VREF), așa că pentru a activa doar canalele interne transmiteți 0x70000.

Senzorul de temperatură de pe cip este calibrat din fabrică și are o precizie de aproximativ ±1 °C, dar măsoară temperatura siliciului – care este de obicei cu zeci de grade peste cea ambiantă atunci când MCU este activ. Citirile sunt relevante ca aproximare a temperaturii ambiante doar pe o placă proaspăt trezită din somn.

Atenționare

Tensiunile de intrare analogice nu trebuie să depășească niciodată tensiunea reală de alimentare.

Metode

read_channel(channel: int) int

Citește canalul ADC dat. Canalele externe (015) returnează valori brute nescalate la rezoluția configurată; canalele interne (1618) returnează tot valori brute, dar funcțiile ajutătoare dedicate de mai jos le convertesc în tensiuni.

read_core_temp() float

Returnează temperatura siliciului în grade Celsius, calculată din canalul intern de temperatură și valorile de calibrare din fabrică stocate în MCU.

read_core_vbat() float

Returnează tensiunea bateriei de rezervă în volți. Citirea este efectuată printr-un divizor de tensiune de pe cip (astfel încât rezerva de tensiune să nu restricționeze gama de intrare a ADC) și scalată înapoi la tensiunea reală a bateriei. Divizorul este activ doar pe durata conversiei ADC, astfel încât consumul în standby al bateriei de rezervă este neglijabil.

read_core_vref() float

Returnează tensiunea de referință internă de 1,21 V (nominal) în volți, măsurată folosind alimentarea MCU ca referință a ADC. Acesta este rezultatul brut al conversiei.

read_vref() float

Returnează tensiunea de alimentare a MCU în volți. Calculată prin măsurarea referinței interne de tensiune și scalarea înapoi folosind valoarea sa de calibrare din fabrică. Cu o linie sănătoasă de 3,3 V, citirea va fi apropiată de 3.3. MCU continuă să funcționeze – iar conversiile ADC rămân relevante – cu o alimentare de până la aproximativ 2 V, cu condiția respectării setărilor corespunzătoare de ceas al MCU, de viteză de acces la memoria flash și de mod de programare.