一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

讀取STM32芯片溫度與當(dāng)前供電電壓

撞上電子 ? 2023-11-20 08:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在做低功耗產(chǎn)品的時(shí)候讀取芯片溫度和當(dāng)前電壓是十分重要的一件事情。通過(guò)當(dāng)前供電電壓可以知曉電池電量是否低于水平值實(shí)現(xiàn)電池缺電報(bào)警。讀取芯片溫度也很重要,可以在使用內(nèi)部振蕩器的時(shí)候通過(guò)校準(zhǔn)算法根據(jù)溫度變化來(lái)實(shí)現(xiàn)實(shí)時(shí)校準(zhǔn)芯片。如果不使用或盡量少使用外部元器件來(lái)實(shí)現(xiàn)這兩個(gè)功能是擺在我們面前一個(gè)很重要的事情,遺憾的是現(xiàn)在網(wǎng)上的資料非常混亂,基本上直接使用總有點(diǎn)那么別扭。如何讀取芯片電壓?當(dāng)然肯定是需要用ADC了。不過(guò)這個(gè)時(shí)候需要有一個(gè)參考電壓作為比對(duì),很多人提出在外面使用一組LDO實(shí)現(xiàn)參考電壓,那樣其實(shí)LDO本身也有一定能耗,在我們追求極致低消耗的時(shí)候也不適合。當(dāng)然很多人說(shuō)了為什么不使用PVD來(lái)做,那么我來(lái)說(shuō)說(shuō),PVD本身是做電壓曲線檢測(cè)的,如果你要求低于2.5V就報(bào)警,你會(huì)發(fā)現(xiàn)如果你啟動(dòng)電壓<2.5V的時(shí)候無(wú)法檢測(cè)出來(lái)。所以還是自己做。還好STM32L0單片機(jī)在內(nèi)部有一個(gè)核心電壓,并且有一個(gè)寄存器VREFINT_CAL值可以用作基準(zhǔn)參考從而計(jì)算出相當(dāng)比較精準(zhǔn)的電壓。經(jīng)過(guò)測(cè)量,誤差還是基本滿足電池供電檢測(cè)的要求。如何讀取芯片溫度?在STM32L0下,只要讀到當(dāng)前電壓,配合溫度寄存器,就可以取得當(dāng)前溫度了。當(dāng)前溫度誤差比較大,即使高精度采樣,為了節(jié)省運(yùn)算時(shí)間,誤差還是有3度的誤差,因此這個(gè)地方需要寬泛一些。

#include "stm32l0xx_ll_adc.h" //需要這個(gè)庫(kù)實(shí)現(xiàn)公式計(jì)算//初始化void init_adc1(void){ ADC_ChannelConfTypeDef sConfig;
hadc.Instance = ADC1; hadc.Init.OversamplingMode = DISABLE; hadc.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV1; hadc.Init.Resolution = ADC_RESOLUTION_12B;//ADC_RESOLUTION_12B; hadc.Init.SamplingTime = ADC_SAMPLETIME_160CYCLES_5; //160.5cycles如果低于39.5cycles溫度采樣精準(zhǔn)度不夠 hadc.Init.ScanConvMode = ADC_SCAN_DIRECTION_FORWARD; hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc.Init.ContinuousConvMode = DISABLE; hadc.Init.DiscontinuousConvMode = DISABLE; hadc.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc.Init.DMAContinuousRequests = DISABLE; hadc.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc.Init.LowPowerAutoWait = DISABLE; hadc.Init.LowPowerFrequencyMode = DISABLE; hadc.Init.LowPowerAutoPowerOff = DISABLE; if (HAL_ADC_Init(&hadc) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }/**Configure for the selected ADC regular channel to be converted. */ sConfig.Channel = ADC_CHANNEL_VREFINT; //初始化VREFINT_CAL參考電壓 sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); } sConfig.Channel = ADC_CHANNEL_TEMPSENSOR; //初始化芯片溫度傳感器 sConfig.Rank = ADC_RANK_CHANNEL_NUMBER; if (HAL_ADC_ConfigChannel(&hadc, &sConfig) != HAL_OK) { _Error_Handler(__FILE__, __LINE__); }}//讀取adc1值uint16_t readchannel_adc1(uint32_t Channel){ ADC_ChannelConfTypeDef adcConf; uint16_t adcData = 0; /* wait the the Vrefint used by adc is set */ while (__HAL_PWR_GET_FLAG(PWR_FLAG_VREFINTRDY) == RESET) {};//啟動(dòng)CLK時(shí)鐘 __HAL_RCC_ADC1_CLK_ENABLE();
/*calibrate ADC if any calibraiton hardware*/ HAL_ADCEx_Calibration_Start(&hadc, ADC_SINGLE_ENDED );
/* Deselects all channels*/ adcConf.Channel = ADC_CHANNEL_MASK; adcConf.Rank = ADC_RANK_NONE; HAL_ADC_ConfigChannel( &hadc, &adcConf);
/* configure adc channel */ adcConf.Channel = Channel; adcConf.Rank = ADC_RANK_CHANNEL_NUMBER; HAL_ADC_ConfigChannel( &hadc, &adcConf);

/* Start the conversion process */ HAL_ADC_Start(&hadc);
/* Wait for the end of conversion */ HAL_ADC_PollForConversion( &hadc, HAL_MAX_DELAY );
/* Get the converted value of regular channel */adcData+=HAL_ADC_GetValue(&hadc);
__HAL_ADC_DISABLE(&hadc);
__HAL_RCC_ADC1_CLK_DISABLE();
return adcData;}//具體調(diào)用代碼void main(void){ init_adc1(); //完成初始化 uint16_tvdda_mV=__LL_ADC_CALC_VREFANALOG_VOLTAGE(readchannel_adc1(ADC_CHANNEL_VREFINT),LL_ADC_RESOLUTION_12B);//取得當(dāng)前VDDA的電壓,單位mV uint16_t temp_degress = __LL_ADC_CALC_TEMPERATURE(vdda_mV,readchannel_adc1(ADC_CHANNEL_TEMPSENSOR),LL_ADC_RESOLUTION_12B); //取得當(dāng)前的溫度,單位攝氏度}

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 芯片
    +關(guān)注

    關(guān)注

    460

    文章

    52520

    瀏覽量

    441054
  • 電壓
    +關(guān)注

    關(guān)注

    45

    文章

    5709

    瀏覽量

    117985
  • STM32
    +關(guān)注

    關(guān)注

    2293

    文章

    11032

    瀏覽量

    365039
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    通過(guò)stm32控制AD9914遇到芯片問(wèn)題

    控制程序,使用的usb5V供電,上電就很燙,這正常嗎?如果給芯片寫(xiě)代碼,初始化時(shí)候,如果控制了里面的寄存器CFR3,就會(huì)把供電電壓拉低一半??刂破渌拇嫫鰿FR1或者CFR2與CFR4
    發(fā)表于 06-04 11:08

    如何讀取LPC55S28溫度傳感器?

    我正在嘗試讀取芯片溫度傳感器。 我嘗試使用 LPADC 組件來(lái)讀取傳感器。我意識(shí)到我必須禁用掉電、啟用 kclock_adc0 并為其附加一個(gè)時(shí)鐘,以便計(jì)算 ADC 的模擬值。 由于某
    發(fā)表于 04-04 06:46

    ADS8699模數(shù)轉(zhuǎn)換讀取模擬電壓數(shù)值不正確

    我用STM32F103C8T6主控芯片,ADS8699模數(shù)轉(zhuǎn)換芯片對(duì)模擬電壓進(jìn)行采集。現(xiàn)在遇到的問(wèn)題1是對(duì)控制芯片輸入范圍的寄存器寫(xiě)不進(jìn)去數(shù)
    發(fā)表于 03-24 09:45

    motor pilot的母線電壓檢測(cè)、溫度檢測(cè)讀取錯(cuò)誤的原因?怎么解決?

    參考ST的Motor Control開(kāi)發(fā)板,我畫(huà)了自己的板子。兩種板子,使用MotorControl Workbench生成的代碼,都能跑。目前的問(wèn)題是,我自己的板子,無(wú)法讀取電壓溫度等信號(hào)。實(shí)際
    發(fā)表于 03-14 08:33

    XTR117芯片支持HART協(xié)議嗎?XTR117的電壓輸出5v的電流是多少,能不能正常給STM32單片機(jī)供電?

    1、XTR117芯片支持HART協(xié)議嗎? 2、XTR117的電壓輸出5v的電流是多少,能不能正常給STM32單片機(jī)供電?就是說(shuō)能不能滿足功耗! 謝謝!
    發(fā)表于 01-07 08:23

    ADS1243如何確保當(dāng)前通道數(shù)據(jù)已經(jīng)采集完成,可以開(kāi)始讀取數(shù)據(jù)了?

    我們有使用貴司得ADS1243芯片,但目前沒(méi)后找到該芯片得使用demo,可否告知,感謝! 主要疑惑點(diǎn): 1. 硬件上需要確保那些連接(PDWN,CS,DRDY)? 2.如何切換通道? 3.如何確保當(dāng)前通道數(shù)據(jù)已經(jīng)采集完成,可以
    發(fā)表于 12-16 06:04

    使用STM32F103讀取ADS8515數(shù)據(jù),當(dāng)stm32端接通電源ADS8515未接通電源時(shí)會(huì)有電壓干擾怎么解決?

    使用5V電源,分別供電。現(xiàn)在數(shù)據(jù)讀取都正常,有一個(gè)問(wèn)題,當(dāng)stm32端接通電源,ADS8515未接通電源時(shí),測(cè)量ADS8515電源引腳會(huì)有大約2.15V電壓;當(dāng)
    發(fā)表于 12-09 06:28

    ADS1158輸入電壓越大,讀取數(shù)據(jù)偏差越大,為什么?

    為3.3v時(shí),讀取數(shù)據(jù)只有3.05v。而讀取供電電壓和參考電壓數(shù)據(jù)偏差便很小。為什么輸入電壓越大
    發(fā)表于 11-29 15:48

    關(guān)于某芯片輸出電壓波動(dòng)噪聲與其供電開(kāi)關(guān)電源關(guān)系的疑問(wèn)?

    題主在驅(qū)動(dòng)PA194高壓運(yùn)放輸出電壓至高阻負(fù)載時(shí),因?yàn)闆](méi)有合適的高壓線性電源,我選用的DCDC供電模塊為HRA12150D-20W提供±150V供電,發(fā)現(xiàn)其電壓輸出噪聲頻率跟
    發(fā)表于 11-14 17:34

    ADS1299的配套軟件不支持讀取級(jí)聯(lián)的其他芯片的數(shù)據(jù),如何實(shí)現(xiàn)讀取級(jí)聯(lián)的多個(gè)芯片的數(shù)據(jù)呢?

    ADS1299的配套軟件不支持讀取級(jí)聯(lián)的其他芯片的數(shù)據(jù),如何實(shí)現(xiàn)讀取級(jí)聯(lián)的多個(gè)芯片的數(shù)據(jù)呢,是用stm32進(jìn)行spi通信嗎,如何實(shí)現(xiàn)呢
    發(fā)表于 11-13 06:36

    如何根據(jù)已知功放芯片供電電壓和喇叭阻抗來(lái)計(jì)算功率?

    我想咨詢個(gè)問(wèn)題,怎樣根據(jù)已知功放芯片供電電壓和喇叭阻抗來(lái)計(jì)算功率?假設(shè)供電是20V,喇叭是4歐,供電電源足夠大, 這時(shí)功放最大不失真功率
    發(fā)表于 10-12 06:44

    給INA116芯片供電時(shí),供電電壓采用正負(fù)3.3V可行嗎?

    給INA116芯片供電時(shí),供電電壓采用正負(fù)3.3V可行么。技術(shù)手冊(cè)上給的是4.5~18,但是我在測(cè)試某型號(hào)表時(shí)發(fā)現(xiàn)INA116供電
    發(fā)表于 09-03 06:06

    stm32讀取boot引腳狀態(tài)

    STM32微控制器中,Boot引腳(通常指的是BOOT0和BOOT1引腳)的狀態(tài)決定了設(shè)備啟動(dòng)時(shí)的引導(dǎo)模式。這些引腳的狀態(tài)在復(fù)位時(shí)被讀取,并據(jù)此選擇啟動(dòng)哪塊存儲(chǔ)器。比如,STM32F103系列
    的頭像 發(fā)表于 08-22 09:48 ?2804次閱讀

    AMC1200進(jìn)行采樣電壓,測(cè)試時(shí)發(fā)現(xiàn)給芯片供電,無(wú)輸入電壓時(shí)仍有紋波,為什么?

    AMC1200芯片進(jìn)行采樣電壓,輸入前端用電阻分壓,測(cè)試時(shí)發(fā)現(xiàn)給芯片供電,無(wú)輸入電壓時(shí)仍有紋波;去掉
    發(fā)表于 08-20 06:37

    第六章-V1.5 STM32 ADC讀取電壓 ADC采樣電壓 STM32f103c8t6adc采集電壓

    STM32智能小車(chē) 庫(kù)函數(shù)開(kāi)發(fā)。功能:循跡、避障、跟隨、遙控、電池電壓顯示等。
    的頭像 發(fā)表于 08-15 16:23 ?1934次閱讀
    第六章-V1.5 <b class='flag-5'>STM32</b> ADC<b class='flag-5'>讀取</b><b class='flag-5'>電壓</b> ADC采樣<b class='flag-5'>電壓</b> <b class='flag-5'>STM32</b>f103c8t6adc采集<b class='flag-5'>電壓</b>