在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

GD32開發實戰指南(基礎篇) 第14章 內部溫度傳感器

嵌入式大雜燴 ? 來源:嵌入式大雜燴 ? 作者:嵌入式大雜燴 ? 2023-05-17 08:58 ? 次閱讀

開發環境:

MDK:Keil 5.30

開發板:GD32F207I-EVAL

MCU:GD32F207IK

1 內部溫度傳感器工作原理

GD32 有一個內部的溫度傳感器,可以用來測量 CPU 及周圍的溫度(TA)。該溫度傳感器在內部和 ADCx_IN16 輸入通道相連接,此通道把傳感器輸出的電壓轉換成數字值。溫度傳感器模擬輸入推薦采樣時間是 17.1μs。GD32 的內部溫度傳感器支持的溫度范圍為: -40~125度。精度比較差,為±1.5℃左右。

GD32 內部溫度傳感器的使用很簡單,只要設置一下內部 ADC,并激活其內部通道就差不多了。關于 ADC 的設置,我們在前面的章節已經進行了詳細的介紹,這里就不再多說。接下來我們介紹一下和溫度傳感器設置相關的 2 個地方。

第一個地方,我們要使用 GD32的內部溫度傳感器,必須先激活 ADC 的內部通道,這里通過 ADC_CTL1的 TSVREN位(bit23)設置。設置該位為 1 則啟用內部溫度傳感器。置位ADC_CTL1寄存器的ADCON位,或者由外部觸發啟動ADC轉換。

第二個地方, GD32的內部溫度傳感器固定的連接在 ADC 的通道 16 上,所以,我們在設置好 ADC 之后只要讀取通道 16 的值,就是溫度傳感器返回來的電壓值了。根據這個值,我們就可以計算出當前溫度。GD32內置一個溫度傳感器,通過 ADC_IN16這個通道可以讀出溫度傳感器的電壓。其中給出了一個計算公式:

Temperature (in ℃) = {(V25- Vsense) / Avg_Slope} + 25

  • 公式中的 Vsense 就是在 ADC_IN16讀到的數值。單位是V。
  • Avg_Slope 就是溫度與 ADC 數值轉換的斜率。最小=4.0 典型=4.3 最大=4.6 單位是 mV/℃
  • V25 最小=1.34V 典型=1.43V 最大=1.52V

現在,我們就可以總結一下 GD32內部溫度傳感器使用的步驟了,如下:

1)設置 ADC,開啟內部溫度傳感器。

關于如何設置 ADC,上一節已經介紹了,我們采用與上一節相似的設置。 不同的是上一節溫度傳感器是讀取外部通道的值,而內部溫度傳感器相當與把通道端口連接在內部溫度傳感器上。所以這里,我們要開啟內部溫度傳感器功能:

adc_tempsensor_vrefint_enable();

2)讀取通道 16 的 AD 值,計算結果。

在設置完之后,我們就可以讀取溫度傳感器的電壓值了, 得到該值就可以用上面的公式計算溫度值。

例如讀到 Vsense= 1.30V。分別取 V25和 Avg_Slope 的典型值,

計算得到:(1.43 - 1.30)/0.0043 + 25 = 55.23

所以溫度大約為 55℃。

  • GD32內部溫度傳感器與 ADC 的通道16相連,與 ADC 配合使用實現溫度測量;
  • 測量范圍–40~125℃,精度±1.5℃。
  • 溫度傳感器產生一個隨溫度線性變化的電壓,轉換范圍在2V < VDDA < 3.6V之間。

2 內部溫度傳感器讀取實現

內部ADC實現代碼很簡單,配置函數如下:

/*
    brief      Configure the ADC peripheral
    param[in]  none
    param[out] none
    retval     none
*/
void adc_config(void)
{
    /* enable GPIOC clock */
    rcu_periph_clock_enable(RCU_GPIOC);

    /* enable ADC0 clock */
    rcu_periph_clock_enable(RCU_ADC0);

    /* config ADC clock */
    rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);

    /* config the GPIO as analog mode */
    gpio_init(GPIOC, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_3);

    /* ADC mode config */
    adc_mode_config(ADC_MODE_FREE);

    /* ADC continuous mode function disable */
    adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, DISABLE);

    /* ADC data alignment config */
    adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);

    /* ADC channel length config */
    adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1);

    /* ADC regular channel config */
    adc_regular_channel_config(ADC0, 0, ADC_CHANNEL_16, ADC_SAMPLETIME_1POINT5);

    /* ADC trigger config */
    adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE);

    /* ADC external trigger enable */
    adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);

    /* ADC temperature and Vrefint enable */
    adc_tempsensor_vrefint_enable();

    /* enable ADC interface */
    adc_enable(ADC0);
    delay_ms(1);

    /* ADC calibration and reset calibration */
    adc_calibration_enable(ADC0);

}

主函數也很簡單:

/*
    brief      main function
    param[in]  none
    param[out] none
    retval     none
*/
int main(void)
{
    uint32_t ad=0;  
    uint8_t i=0;

    //systick init
    sysTick_init();

    //usart init 115200 8-N-1
    com_init(COM1, 115200, 0, 1);

    //adc config
    adc_config();

    while(1)
    {      
        ad=0;
        for(i=0;i<50;i++)
        {

            adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);

            while(!adc_flag_get(ADC0,ADC_FLAG_EOC));//檢查轉換標志
            adc_flag_clear(ADC0, ADC_FLAG_EOC); // 清除結束標志

            ad=ad+adc_regular_data_read(ADC0);//ADC轉換結果
        }
        ad=ad/50;
        printf("The current AD value = 0x%04X \\r\\n", ad); 
        printf("The current AD value = %f V \\r\\n",(float)ad / 4096 * 3.3); //實際電壓
        printf("temperture =%f\\r\\n\\r\\n",(1.43-3.3/4096*ad)/0.0043+25);

        delay_ms(1000);
    }
}

值得注意的是,獲取內部溫度的核心代碼就以下幾行:

adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);

while(!adc_flag_get(ADC0,ADC_FLAG_EOC));//檢查轉換標志
adc_flag_clear(ADC0, ADC_FLAG_EOC); // 清除結束標志

ad=ad+adc_regular_data_read(ADC0);//ADC轉換結果

只是為了防止偶然誤差,這里求50次的均值。

3 實驗現象

將程序編譯好后下載到板子中,通過串口助手可以看到在接收區有溫度值輸出。

16842453000809fyvw7xhxs

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17148

    瀏覽量

    351186
  • 溫度傳感器
    +關注

    關注

    48

    文章

    2940

    瀏覽量

    156068
  • 開發板
    +關注

    關注

    25

    文章

    5050

    瀏覽量

    97456
  • Cortex-M
    +關注

    關注

    2

    文章

    229

    瀏覽量

    29761
  • GD32
    +關注

    關注

    7

    文章

    403

    瀏覽量

    24351
收藏 人收藏

    評論

    相關推薦

    GD32開發實戰指南(基礎) 1 開發環境搭建

    設計的GD32F207I-EVAL開發板。 GD32F207I-EVAL開發板使用 GD32F207IK作為主控制
    的頭像 發表于 05-07 23:35 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>1<b class='flag-5'>章</b> <b class='flag-5'>開發</b>環境搭建

    GD32開發實戰指南(基礎) 4 GD32啟動流程詳解(Keil版)

    ,所有的一切都需要由開發者來設置,這里處理是沒有堆棧,沒有中斷,更沒有外圍設備,這些工作是需要軟件來指定的,而且不同的CPU類型、不同大小的內存和不同種類的外設,其初始化工作都是不同的。本文將以GD32F207IK (基于Co
    的頭像 發表于 05-10 09:00 ?1.7w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>4<b class='flag-5'>章</b> <b class='flag-5'>GD32</b>啟動流程詳解(Keil版)

    GD32開發實戰指南(基礎) 7 定時

    系統滴答定時一般用來提供“心跳”作用,而GD32定時最基本功能也是定時,可以設置不同時間長度的定時。定時除了最基本的定時功能外,定時
    的頭像 發表于 05-11 09:00 ?1.2w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>7<b class='flag-5'>章</b> 定時<b class='flag-5'>器</b>

    GD32開發實戰指南(基礎) 8 定時

    Modulation” 的縮寫,簡稱脈寬調制,是利用微處理的數字輸出來對模擬電路進行控制的一種非常有效的技術。簡單一點,就是對脈沖寬度的控制。 GD32 的定時除了 TIMER5 和 6(基本定時
    的頭像 發表于 05-12 22:14 ?7967次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>8<b class='flag-5'>章</b> 定時<b class='flag-5'>器</b>

    GD32開發實戰指南(基礎) 11 CPU的高級代理-DMA

    或者存儲和存儲之間的高速數據傳輸,因而被廣泛地使用。早在 8086 的應用中就已經有 Intel 的 8237 這種典型的 DMA 控制,而 GD32的 DMA 則是以類似外設的
    的頭像 發表于 05-16 08:59 ?3870次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>11<b class='flag-5'>章</b> CPU的高級代理-DMA

    GD32開發實戰指南(基礎) 12 ADC

    GD32F2系列有 3 個逐次逼近型的ADC,精度為 12 位,有18個多路復用通道,可以轉換來自16個外部通道和2個內部通道的模擬信號。其中ADC0 和 ADC1都有 16 個外部通道, ADC2
    的頭像 發表于 05-16 09:03 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>12<b class='flag-5'>章</b> ADC

    GD32開發實戰指南(基礎) 15 低功耗

    GD32的工作電壓(VDD)為2.0~3.6V。通過內置的電壓調節提供所需的1.8V電源。當主電源VDD掉電后,通過VBAT腳為實時時鐘(RTC)和備份寄存提供電源。
    的頭像 發表于 05-17 08:59 ?8069次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>15<b class='flag-5'>章</b> 低功耗

    GD32開發實戰指南(基礎) 16 RTC

    開發環境: MDK:Keil 5.30 開發板:GD32F207I-EVAL MCU:GD32F207IK 1 RTC工作原理 1.1 RTC簡介
    的頭像 發表于 05-18 22:14 ?7180次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>16<b class='flag-5'>章</b> RTC

    GD32開發實戰指南(基礎) 17 看門狗

    開發環境: MDK:Keil 5.30 開發板:GD32F207I-EVAL MCU:GD32F207IK GD32 有兩個看門狗, 一個是
    的頭像 發表于 06-03 16:00 ?1.1w次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>17<b class='flag-5'>章</b> 看門狗

    【圖書分享】《STM32庫開發實戰指南

    庫函數開發小結 10 DMA——為CPU減負 11 ADC實驗(DMA方式) 12
    發表于 03-13 17:01

    STM32的內部溫度傳感器

    實驗目的STM32內部集成了一個溫度傳感器,可以用來測量芯片的溫度,本章學習如何讀取此溫度值,數據手冊請參看
    發表于 08-12 06:40

    STM32內部溫度傳感器概述

    記錄一下,方便以后翻閱~主要內容:1)STM32內部溫度傳感器概述;2)相關實驗代碼解讀。實驗功能:系統啟動后,實時將內部溫度
    發表于 12-10 06:11

    GD32 MCU原理及固件庫開發指南》+讀后感

    2介紹GD32 MCU快速入門與開發平臺搭建的方法,包括對軟硬件開發平臺、調試工具、GD32
    發表于 06-06 21:52

    GD32開發實戰指南(基礎) 19 程序加密

    GD32通過讀取芯片唯一ID號來實現程序的保護,防止被抄襲。96位的產品唯一身份標識所提供的參考號碼對任意一個GD32微控制
    的頭像 發表于 05-20 09:10 ?4154次閱讀
    <b class='flag-5'>GD32</b><b class='flag-5'>開發</b><b class='flag-5'>實戰</b><b class='flag-5'>指南</b>(基礎<b class='flag-5'>篇</b>) <b class='flag-5'>第</b>19<b class='flag-5'>章</b> 程序加密

    GD32 MCU內部溫度傳感器如何使用,以及適合哪種應用場景?

    GD32 MCU全系列產品均內置溫度傳感器內部溫度傳感器可以用于測量器件周圍
    的頭像 發表于 02-28 09:26 ?1974次閱讀
    <b class='flag-5'>GD32</b> MCU<b class='flag-5'>內部</b><b class='flag-5'>溫度</b><b class='flag-5'>傳感器</b>如何使用,以及適合哪種應用場景?
    主站蜘蛛池模板: 精品影视网站入口| 羞羞漫画喷水漫画yy漫画| 女a男0攻巨肉高h| 色wwwww| videossexotv极度另类高清| 国产理论在线观看| 伊人久久大香线蕉综合影| 久久天天躁狠狠躁夜夜免费观看| 456亚洲人成影院在线观| 色综合天天综合网国产国产人| 成人www视频| 性性欧美| 色欧美视频| 亚洲夜夜骑| 亚洲色图综合在线| 女人爽到喷水的视频大全在线观看| 天天射天天射天天射| 美女被免网站在线视频| 国产亚洲欧美一区二区| 寄宿日记免费看| www.夜| 三级黄色在线视频| 爽死你个放荡粗暴小淫视频| 日本一区免费观看| 精品三级内地国产在线观看| 黄网免费观看| 素股中文字幕| 午夜在线网站| 扒开末成年粉嫩的小缝强文| 国模私拍在线| 六月激情丁香| 毛片在线播放网站| 成年男人午夜片免费观看| 色偷偷伊人| 欧美jizzhd精品欧美4k| 亚洲精品卡1卡二卡3卡四卡 | 国产深夜福利在线观看网站| 五月婷婷之婷婷| 天天曰天天干天天操| h文 超乳 奶水| 宅宅午夜亚洲精品|