那曲檬骨新材料有限公司

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

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

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

基于單片機(jī)的ADC采樣設(shè)計(jì)

CHANBAEK ? 來源:凌云物聯(lián)網(wǎng)實(shí)驗(yàn)室 ? 作者:郭工 ? 2022-12-19 09:23 ? 次閱讀

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

6.1 ADC接口配置

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

圖片

接下來設(shè)置 ADC 的相關(guān)配置,并重新生成代碼。

圖片

  • 設(shè)置ADC的名稱為 g_adc0, 并選擇 Unit 0;
  • 修改采樣方式為 Single Scan 模式;
  • 設(shè)置ADC采樣中斷的優(yōu)先級(jí)為2,并設(shè)置中斷回調(diào)函數(shù)為 adc0_callback() ;

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

圖片

6.2 源碼修改

創(chuàng)建ADC操作相關(guān)的頭文件 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_ */

創(chuàng)建ADC操作相關(guān)的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 源文件,在里面添加按鍵初始化代碼并修改藍(lán)色Led燈為系統(tǒng)運(yùn)行的心跳燈狀態(tài)。

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

6.3 編譯運(yùn)行

代碼修改完成后,在開發(fā)板上編譯運(yùn)行,此時(shí)調(diào)試串口上將會(huì)實(shí)時(shí)打印當(dāng)前CPU的內(nèi)核溫度和參考電壓值。

圖片

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

    關(guān)注

    68

    文章

    19407

    瀏覽量

    231179
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6043

    文章

    44622

    瀏覽量

    638519
  • adc
    adc
    +關(guān)注

    關(guān)注

    99

    文章

    6533

    瀏覽量

    545745
  • ADC采樣
    +關(guān)注

    關(guān)注

    0

    文章

    134

    瀏覽量

    12903
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    STC單片機(jī)ADC采樣程序設(shè)計(jì)

    BOOLRun;//BOOL量作為定時(shí)采樣標(biāo)志,比如每隔3秒,置位一 次該標(biāo)志 BYTECurch;//當(dāng)前通道 BYTEtempCvData[6];//轉(zhuǎn)換結(jié)果臨時(shí)緩沖
    發(fā)表于 05-29 14:45 ?8066次閱讀

    單片機(jī)ADC采樣問題

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

    單片機(jī)adc采樣原理

    單片機(jī)adc采樣原理,關(guān)于卡爾曼濾波,看看百度百科上的定義算法的核心思想是,根據(jù)當(dāng)前的儀器"測(cè)量值" 和上一刻的 "預(yù)測(cè)量" 和 "誤差"
    發(fā)表于 07-14 06:09

    STM8S003單片機(jī)ADC采樣通道有幾個(gè)呢

    STM8S003單片機(jī)ADC采樣通道總共有5個(gè),從AIN2---AIN6,多通道采樣時(shí)需要將ADC轉(zhuǎn)換設(shè)置為單次轉(zhuǎn)換模式,每次切換
    發(fā)表于 02-21 07:04

    怎樣去測(cè)試STM32單片機(jī)ADC采樣速率問題

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

    單片機(jī)ADC采樣頻率和采樣速率是不是同一個(gè)概念?采樣頻率、速率要遠(yuǎn)遠(yuǎn)大于被采樣的信號(hào)頻率和速率?

    單片機(jī)ADC采樣頻率和采樣速率是不是同一個(gè)概念?采樣頻率、速率要遠(yuǎn)遠(yuǎn)大于被采樣的信號(hào)頻率和速率
    發(fā)表于 11-15 19:09

    STC12系列單片機(jī)ADC采樣是多少位的?

    STC12系列單片機(jī)ADC采樣是多少位的
    發(fā)表于 10-16 07:39

    STM8SF103單片機(jī)ADC采樣電壓設(shè)計(jì)

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

    STC12C4052ADSTC單片機(jī)ADC采樣C程序

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

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

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

    單片機(jī)ADC采樣算法----平均值采樣

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

    解決STM32單片機(jī)ADC采樣不準(zhǔn)確偏移的問題

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

    單片機(jī)ADC采樣算法----中位值濾波法

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

    單片機(jī)ADC采樣算法----卡爾曼濾波

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

    單片機(jī)ADC采樣輸入阻抗怎么匹配

    單片機(jī)ADC采樣輸入阻抗怎么匹配
    的頭像 發(fā)表于 05-17 17:00 ?1w次閱讀
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>ADC</b><b class='flag-5'>采樣</b>輸入阻抗怎么匹配
    沙龙百家乐娱乐平台| 什么是百家乐的大路| 桓仁| 百家乐翻天下载| 网页百家乐官网的玩法技巧和规则 | 百家乐桌布| 木棉百家乐官网的玩法技巧和规则| 广汉市| 威尼斯人娱乐场55556| 百家乐专业赌徒| 揭秘百家乐官网百分之50| 大发888赌场| 钱隆百家乐大师| 定24山尺寸深浅土色| 百家乐官网散台| 大发娱乐在线| 大发888娱乐城下载英皇国际| 澳门百家乐十大缆| 凱旋门百家乐官网的玩法技巧和规则| 百家乐官网棋牌游戏正式版| 88娱乐城网址tlyd| 普通牌二八杠分析仪| 娱乐城百家乐送白菜| 打百家乐的介绍| 百家乐官网小游戏单机版| 噢门百家乐官网玩法| 百家乐官网永利娱乐城| 大发888游戏在线客服| 百家乐怎么玩会| 广州百家乐牌具公司| 澳门百家乐娱乐城注册| 百家乐好不好玩| 百家乐官网微笑打| 百家乐官网国际赌场娱乐网规则 | 台北县| 石屏县| 台湾省| 思南县| 真钱娱乐游戏| bet365投注网| 博彩通天上人间|