TPYBoard讀取晶元上的溫度感測器

2021-08-19 13:06:28 字數 2817 閱讀 4731

一、stm32內部溫度感測器概要

stm32晶元內部一項獨特的功能就是內部整合了乙個溫度感測器,因為是內建,所以測試的是晶元內部的溫度,如果晶元外接負載一定的情況下,那麼晶元的發熱也基本穩定,相對於外界的溫度而言,這個偏差值也是基本穩定的.也就是說用stm32內部感測器來測量外界環境的溫度。

在一些惡劣的應用環境下面,可以通過檢測晶元內部而感知裝置的工作環境溫度,如果溫度過高或者過低了則馬上睡眠或者停止運轉.可以保證您的裝置工作的可靠性。

目前我國的北斗導航定位系統已經比較成熟,北斗導航應用的範圍越來越廣,正是基於這個時代大背景下做出一塊利用北斗系統定位的開發板,可以方便演示定位系統,提高北斗智慧型的技術技能,讓更多的人了解北斗智慧型以及北斗導航相關知識和開發北斗相關產品方向。

二、stm32內部溫度感測器引數

1.stm32內部溫度感測器與adc的通道16相連,與adc配合使用實現溫度測量;

2.測量範圍–40~125℃,精度±1.5℃。

3.溫度感測器產生乙個隨溫度線性變化的電壓,轉換範圍在2v

# main.py -- put your code here!

import pyb

import time

import stm

from pyb import pin

defadcread

(chan):

# 16 temp 17 vbat 18 vref

assert chan >= 16

and chan <= 18, 'invalid adc channel'

start = pyb.millis()

timeout = 100

stm.mem32[stm.rcc + stm.rcc_apb2enr] |= 0x100

# enable adc1 clock.0x4100

stm.mem32[stm.adc1 + stm.adc_cr2] = 1

# turn on adc

stm.mem32[stm.adc1 + stm.adc_cr1] = 0

# 12 bit

if chan == 17:

stm.mem32[stm.adc1 + stm.adc_smpr1] = 0x200000

# 15 cycles

stm.mem32[stm.adc + 4] = 1

<< 23

elif chan == 18:

stm.mem32[stm.adc1 + stm.adc_smpr1] = 0x1000000

stm.mem32[stm.adc + 4] = 0xc00000

else:

stm.mem32[stm.adc1 + stm.adc_smpr1] = 0x40000

stm.mem32[stm.adc + 4] = 1

<< 23

stm.mem32[stm.adc1 + stm.adc_sqr3] = chan

stm.mem32[stm.adc1 + stm.adc_cr2] = 1 | (1

<< 30) | (1

<< 10) # start conversion

while

not stm.mem32[stm.adc1 + stm.adc_sr] & 2: # wait for eoc

if pyb.elapsed_millis(start) > timeout:

raise oserror('adc timout')

data = stm.mem32[stm.adc1 + stm.adc_dr] # clear down eoc

stm.mem32[stm.adc1 + stm.adc_cr2] = 0

# turn off adc

return data

defv33

():return

4096 * 1.21 / adcread(17)

defvbat

():return

1.21 * 2 * adcread(18) / adcread(17) # 2:1 divider on vbat channel

defvref

():return

3.3 * adcread(17) / 4096

deftemperature

():return

25 + 400 * (3.3 * adcread(16) / 4096 - 0.76)

adc = pyb.adcall(12)

leds = [pyb.led(i) for i in range(1,5)]

sw=pyb.switch()

deftest

(): pyb.led(1).on()

pyb.led(2).on()

pyb.led(3).on()

pyb.led(4).on()

pyb.delay(2000)

sw.callback(test)

for l in leds:

l.off()

n = 0

try:

while

true:

n = (n + 1) % 4

leds[n].toggle()

pyb.delay(50)

print('v33:',v33())

print('vbat:',vbat())

print('vref:',vref())

print('temperature:',temperature())

finally:

for l in leds:

l.off()

晶元上的資料流

人們對於高效能低成本資料處理的追求是無止境的!伴隨大規模積體電路的快速發展,從第一塊微處理器晶元 1971 年在intel 誕生到今天,微處理器已經歷了 35年的發展。在這 35年中,微處理器晶元上的電晶體數量增加了 4個數量級,效能增加了 5個數量級 其發展同著名的摩爾 moore 定律十分吻合,...

教你認識主機板上的主要晶元

1 bios晶元 bios basic input output system 是基本輸入u出系統,它是為電腦中的硬體提供服務的。bios屬於唯讀儲存器,它包含了系統啟動程式 系統啟動時必需的硬體裝置的驅動程式 基本的硬體介面裝置驅動程式。目前,主機板中的bios晶元主要由award和ami兩個公司...

有關晶元手冊上的偏置的概念

因為要使電晶體處於放大狀態,其基極 射極之間的pn結應該正偏,集電極 基極之間的pn結應該反偏。因此,設定電晶體基射結正偏 集基結反偏。使電晶體工作在放大狀態的電路,簡稱為偏置電路 可以理解為設定正反偏的電路 而使電晶體工作在放大狀態的關鍵是其 基極電壓,因此,基極電壓又稱為偏置電壓。又由於使電晶體...