色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

基于單片機的ADC采樣設計

CHANBAEK ? 來源:凌云物聯網實驗室 ? 作者:郭工 ? 2022-12-19 09:23 ? 次閱讀

在RA6M4處理器ADC里,有兩路ADC可以分別采樣當前的CPU內部溫度和參考電壓值。

6.1 ADC接口配置

首先,在FSP配置中選擇 Stacks ,點擊 "New Stack" -> "Analog" -> "ADC(r_adc)" 添加 ADC 協議棧。

圖片

接下來設置 ADC 的相關配置,并重新生成代碼。

圖片

  • 設置ADC的名稱為 g_adc0, 并選擇 Unit 0;
  • 修改采樣方式為 Single Scan 模式;
  • 設置ADC采樣中斷的優先級為2,并設置中斷回調函數為 adc0_callback() ;

然后在 "Module g_adc ADC(r_adc)" -> "Input" -> "Channel Scan Mask(channel availability varies by MCU)" 下選擇 "Temperature Sensor" 和 "Voltage Sensor"兩個通道,并生成代碼。

圖片

6.2 源碼修改

創建ADC操作相關的頭文件 src/bsp_adc.h 如下:

#ifndef BSP_ADC_H_
#define BSP_ADC_H_

/* Macro to provide delay in read adc data*/
#define ADC_READ_DELAY        0x01

fsp_err_t adc_init(void);

void adc_deinit(void);

fsp_err_t adc_read_cpu_hwinfo(void);

#endif /* BSP_ADC_H_ */

創建ADC操作相關的C文件 src/bsp_adc.c 如下:

#include 
#include "bsp_api.h"
#include "hal_data.h"
#include "bsp_adc.h"

/* Flag to notify that adc scan is started, so start reading adc */
volatile bool scan_complete_flag = false;

fsp_err_t adc_init(void)
{
    fsp_err_t err = FSP_SUCCESS;

    /* Open/Initialize ADC module */
    err = R_ADC_Open (&g_adc0_ctrl, &g_adc0_cfg);
    if (FSP_SUCCESS != err)
    {
        printf("** R_ADC_Open API failed ** 
");
        return err;
    }

    /* Configures the ADC scan parameters */
    err = R_ADC_ScanCfg (&g_adc0_ctrl, &g_adc0_channel_cfg);
    if (FSP_SUCCESS != err)
    {
        printf("** R_ADC_ScanCfg API failed ** 
");
        return err;
    }

    return FSP_SUCCESS;
}

void adc_deinit(void)
{
    fsp_err_t err = FSP_SUCCESS;

    /* close the ADC driver */
    err = R_ADC_Close (&g_adc0_ctrl);
    if (FSP_SUCCESS != err)
    {
        printf("** R_ADC_Close API failed **  
");
    }
}

#define ADCTEMP_AS_C(a)             ((((float)a) * 0.196551f) - 277.439f)
#define ADCTEMP_AS_F(a)             ((((float)a) * 0.353793f) - 467.39f)
#define ADCTEMP_AS_V(a)             (float)((((float)a) * 3.3) / 4096.0)
fsp_err_t adc_read_cpu_hwinfo(void)
{
    fsp_err_t err = FSP_SUCCESS;     // Error status
    uint16_t adc_data;
    float mcu_temp = 0.0;
    float mcu_vol = 0.0;

    scan_complete_flag = false;

    /* Start the ADC scan*/
    err = R_ADC_ScanStart (&g_adc0_ctrl);
    if (FSP_SUCCESS != err)
    {
        /* ADC Failure message */
        printf("** R_ADC_ScanStart API failed ** 
");
        return err;
    }

    while (!scan_complete_flag)
    {
        /* Wait for callback to set flag. */
    }

    /* Read the internal temperature sample result */
    err = R_ADC_Read (&g_adc0_ctrl, ADC_CHANNEL_TEMPERATURE, &adc_data);
    if (FSP_SUCCESS != err)
    {
        /* ADC Failure message */
        printf("** R_ADC_Read API failed ** 
");
        return err;
    }

    mcu_temp = ADCTEMP_AS_C(adc_data);  /* Conversion ADC temperature in celsius */
    printf("
MCU Internal Temperature ADC Data: %d Celsius: %.02f'C
", adc_data, mcu_temp);

    /* Read the internal reference voltage sample result */
    err = R_ADC_Read (&g_adc0_ctrl, ADC_CHANNEL_VOLT, &adc_data);
    if (FSP_SUCCESS != err)
    {
        /* ADC Failure message */
        printf("** R_ADC_Read API failed ** 
");
        return err;
    }
    mcu_vol = ADCTEMP_AS_V(adc_data);  /* Conversion ADC to voltage */
    printf("MCU Internal Reference Voltage ADC Data: %d Voltage: %.02fV
", adc_data, mcu_vol);

    /* 1 Seconds Wait time between successive readings */
    R_BSP_SoftwareDelay (ADC_READ_DELAY, BSP_DELAY_UNITS_SECONDS);
    return err;
}

/* Callback function */
void adc0_callback(adc_callback_args_t *p_args)
{
    FSP_PARAMETER_NOT_USED(p_args);
    scan_complete_flag = true;
}

修改 src/hal_entry.c 源文件,在里面添加按鍵初始化代碼并修改藍色Led燈為系統運行的心跳燈狀態。

... ...
#include "bsp_adc.h"
... ...
void hal_entry(void)
{
    ... ...
    adc_init();
    while (1)
    {
        ... ...
        adc_read_cpu_hwinfo();
    }
}

6.3 編譯運行

代碼修改完成后,在開發板上編譯運行,此時調試串口上將會實時打印當前CPU的內核溫度和參考電壓值。

圖片

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

    關注

    68

    文章

    19259

    瀏覽量

    229653
  • 單片機
    +關注

    關注

    6035

    文章

    44554

    瀏覽量

    634652
  • adc
    adc
    +關注

    關注

    98

    文章

    6495

    瀏覽量

    544466
  • ADC采樣
    +關注

    關注

    0

    文章

    134

    瀏覽量

    12840
收藏 人收藏

    評論

    相關推薦

    STC單片機ADC采樣程序設計

    BOOLRun;//BOOL量作為定時采樣標志,比如每隔3秒,置位一 次該標志 BYTECurch;//當前通道 BYTEtempCvData[6];//轉換結果臨時緩沖
    發表于 05-29 14:45 ?8022次閱讀

    單片機ADC采樣問題

    其他的問題都解決了,不知道為什么ADC采樣交流電流這么困難,好多天了都沒有解決,愁死人了
    發表于 12-14 15:27

    單片機adc采樣原理

    單片機adc采樣原理,關于卡爾曼濾波,看看百度百科上的定義算法的核心思想是,根據當前的儀器"測量值" 和上一刻的 "預測量" 和 "誤差"
    發表于 07-14 06:09

    STM8S003單片機ADC采樣通道有幾個呢

    STM8S003單片機ADC采樣通道總共有5個,從AIN2---AIN6,多通道采樣時需要將ADC轉換設置為單次轉換模式,每次切換
    發表于 02-21 07:04

    怎樣去測試STM32單片機ADC采樣速率問題

    突然想測試一下STM32單片機ADC采樣速率問題,按照常規方法,可以通過ADC采樣,然后將采樣
    發表于 02-22 06:28

    單片機ADC采樣頻率和采樣速率是不是同一個概念?采樣頻率、速率要遠遠大于被采樣的信號頻率和速率?

    單片機ADC采樣頻率和采樣速率是不是同一個概念?采樣頻率、速率要遠遠大于被采樣的信號頻率和速率
    發表于 11-15 19:09

    STC12系列單片機ADC采樣是多少位的?

    STC12系列單片機ADC采樣是多少位的
    發表于 10-16 07:39

    STM8SF103單片機ADC采樣電壓設計

    要做AD采樣,首先要解決的就是AD的參考電壓,之前查看手冊上并沒有描述AIN7通道,有的僅僅是幾個外部采樣通道。AIN7通道是內部通道,用于提供一個恒定的電壓參考值。 從別的資料找到下面這句話,很明顯是存在這么一個通道的,后面測試也證明這個是正確的。
    發表于 12-06 15:42 ?1.3w次閱讀
    STM8SF103<b class='flag-5'>單片機</b>的<b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>電壓設計

    STC12C4052ADSTC單片機ADC采樣C程序

    STC12C4052ADSTC單片機ADC采樣C程序(羅馬仕電源技術偏執狂價格)-STC12C4052ADSTC單片機ADC
    發表于 09-18 10:27 ?55次下載
    STC12C4052ADSTC<b class='flag-5'>單片機</b><b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>C程序

    AVR單片機ADC采樣編程需要注意的問題

    AVR單片機ADC采樣編程需要注意的問題10位ADC高6位沒有使用,所以取值時應首先做:ADCH & 0X03取低兩位,屏蔽高6位
    發表于 11-14 20:51 ?2次下載
    AVR<b class='flag-5'>單片機</b><b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>編程需要注意的問題

    單片機ADC采樣算法----平均值采樣

    單片機在模擬電路中使用的時候,經常需要用到AD功能,而通過單片機ADC采集回來的數據往往不能直接使用,在不同場合下需要對采集到的數據要通過不同的算法對數據進行處理,先來看看最簡單的平均值采樣
    發表于 11-15 15:06 ?26次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>算法----平均值<b class='flag-5'>采樣</b>法

    解決STM32單片機ADC采樣不準確偏移的問題

    項目場景:用STM32CubeMX生成的ADC采樣測量電壓。單片機:STM32G070MDK:V5.25問題描述:采樣回來的數值Debug看總是大了些許,幾個通道都是這樣,具體測試情況
    發表于 11-16 20:36 ?19次下載
    解決STM32<b class='flag-5'>單片機</b>的<b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>不準確偏移的問題

    單片機ADC采樣算法----中位值濾波法

    中位值濾波法就是通過連續采樣奇數個數據,然后對數據從小到大排序,取中間的值做為本次采樣值。 下面看C代碼的實現#define M 11unsigned int filter2( void
    發表于 11-17 09:06 ?18次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>算法----中位值濾波法

    單片機ADC采樣算法----卡爾曼濾波

    關于卡爾曼濾波,看看百度百科上的定義 算法的核心思想是,根據當前的儀器"測量值" 和上一刻的 "預測量" 和 "誤差",計算得到當前的最優量. 再預測下一刻的量,里面比較突出的是觀點是.把誤差納入計算, 而且分為預測誤差和測量誤差兩種.通稱為 噪聲.還有一個非常大的特點是,誤差獨立存在,始終不受測量數據的影響。下來先了解一個卡爾曼濾波中幾個參數的含義:概率(Pr...
    發表于 12-29 19:30 ?27次下載
    <b class='flag-5'>單片機</b><b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>算法----卡爾曼濾波

    單片機ADC采樣輸入阻抗怎么匹配

    單片機ADC采樣輸入阻抗怎么匹配
    的頭像 發表于 05-17 17:00 ?9649次閱讀
    <b class='flag-5'>單片機</b><b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>輸入阻抗怎么匹配
    主站蜘蛛池模板: 肉蒲团从国内封禁到日本成经典| 美女露出撒尿的部位| 午夜福利免费视频921000电影| 96.8在线收听| 99热这里只有精品6| WWW国产精品内射老师| 大香伊人久久| 国语自产拍大学生在线观看| 九色PORNY真实丨国产免费 | 亚洲综合色婷婷在线影院| 月夜直播免费看| 99久久99久久免费精品蜜桃| 广东95后小情侣酒店自拍流出| 国产亚洲精品久久久久久禁果TV | 国产成人一区二区三中文| 国产午夜精品理论片| 久久久久国产一级毛片高清片| 嫩草影院久久精品| 天天影视色欲 影视| 一区二区三区内射美女毛片| 99视频免费在线| 国产精品资源网站在线观看| 久久笫一福利免费导航| 日本xxxx96| 亚洲一区二区三区高清网| 最近中文字幕mv手机免费高清| 亚洲国产精品免费观看| 视频成人永久免费看| 一二三四电影完整版免费观看 | 中文字幕在线观看亚洲日韩| 成 人 动漫3d 在线看| 寂寞夜晚视频在线观看| 青青视频国产色偷偷| 亚洲欧美日本久久综合网站| xxx粗大长欧美| 黄小说免费看| 三级全黄a| 中文字幕无码乱人伦蜜桃| 国产高清视频在线观看97| 理论片午午伦夜理片2021| 忘忧草日本在线WWW日本|