Air001 ADC内部输入通道温度传感器读取

news2024/10/6 1:45:22

Air001 ADC内部输入通道温度传感器读取


📋Air001 内部集成的温度传感器说明

🖍温度传感器产生一个随温度线性变化的电压。温度传感器在内部被连接到ADC内部的输入通道上,用于将传感器的输出转换成数字数值。

📓Air001模拟/ 数字转换( ADC)

✨Air001芯片具有 1 个 12 位的 SARADC(successive approximation analog-to-digital converter)。该模块共有 12个要被测量的通道,包括 10 个外部通道和 2 个内部通道。

  • 🌿各通道的转换模式可以设定为单次、连续、扫描、不连续模式。转换结果存储在左对齐或者右对齐的 16 位数据寄存器中。
  • 🔰ADC 主要特性
    ◼ 高性能
    ➢ 12bit、10bit、8bit 和 6bit 分辨率可配置
    ➢ ADC 转换时间:1us@12bit(1MHz)
    ➢ 自校准
    ➢ 可编程的采样时间
    ➢ 可编程的数据对齐模式
    ➢ 支持 DMA
    ◼ 低功耗
    ➢ 为低功耗操作,降低 PCLK 频率,而仍然维持合适的 ADC 性能
    ➢ 等待模式:防止以低频 PCLK 运行产生溢出
    ◼ 模拟输入通道
    ➢ 10 个外部模拟输入通道:PA[7:0]和 PB[1:0]
    ➢ 1 个内部 temperature sensor 通道
    ➢ 1 个内部参考电压通道(VREFINT)
    ◼ 转换操作启动可以通过
    ➢ 软件启动
    ➢ 可配置极性的硬件启动(TIM1、TIM3 或者 GPIO)
    ◼ 转换模式
    ➢ 单次模式(single mode):可以转换 1 个单通道或者可以扫描一系列通道
    ➢ 连续模式(continuous mode):连续转换被选择的通道
    ➢ 不连续模式(discontinuous mode):每次触发,转换被选择的通道 1 次。

🛠可编程采样时间 (SMP)

🔖在启动 ADC 转换之前,ADC 需要在被测电压源和内嵌采样电容间建立一个直接连接。采样时间必须足够长以便输入电压源对内嵌电容充电到输入电压的水平。

  • 🔗总转换时间计算如下:

tCONV = 采样时间 + (转换分辨率+0.5) x ADC 时钟周期例如:

  • 🌿当 ADC_CLK = 16MHz,分辨率为 12 位,且采样时间为 3.5 个 ADC 时钟周期:
    tCONV = (3.5 + 12.5) x ADC 时钟周期= 16 x ADC 时钟周期 = 1 μs
    🔖EOSMP 标志位用来表明采样阶段的结束。

⛳影响测量精度要素

  • 🚩MCU参考电压和实际MCU的供电电压。

  • 🚩采样时间。

  • ✨通过Air001 SDK公开资料包,可找到相对应的测试例程,采用的是ADC中断模式读取内部温度传感器数据。
    在这里插入图片描述

  • ⚡如果调整MCU时钟频率,需要调整对应的采样时间或者调整AHB时钟分频系数,以确保ADC转换总转换时间足够。

  • 🔨ADC配置函数:

/**
  * @brief  ADC配置函数
  * @param  无
  * @retval 无
  */
static void APP_AdcConfig(void)
{
    __HAL_RCC_ADC_FORCE_RESET();
    __HAL_RCC_ADC_RELEASE_RESET();                                                  /* 复位ADC */
    __HAL_RCC_ADC_CLK_ENABLE();                                                     /* ADC时钟使能 */

    AdcHandle.Instance = ADC1;

    /* ADC校准 */
    if(HAL_ADCEx_Calibration_Start(&AdcHandle) != HAL_OK)
    {
        Error_Handler();
    }

    AdcHandle.Instance                   = ADC1;                                    /* ADC1 */
    AdcHandle.Init.ClockPrescaler        = ADC_CLOCK_SYNC_PCLK_DIV4;               /* 设置ADC时钟 */
    AdcHandle.Init.Resolution            = ADC_RESOLUTION_12B;                      /* 转换分辨率12bit */
    AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;                     /* 数据右对齐 */
    AdcHandle.Init.ScanConvMode          = ADC_SCAN_DIRECTION_FORWARD;              /* 扫描序列方向:向上 */
    AdcHandle.Init.EOCSelection          = ADC_EOC_SEQ_CONV;                        /* 转换结束标志 */
    AdcHandle.Init.LowPowerAutoWait      = ENABLE;                                  /* 等待转换模式开启 */
    AdcHandle.Init.ContinuousConvMode    = DISABLE;                                 /* 单次转换模式 */
    AdcHandle.Init.DiscontinuousConvMode = DISABLE;                                 /* 不使能非连续模式 */
    AdcHandle.Init.ExternalTrigConv      = ADC_SOFTWARE_START;                      /* 软件触发 */
    AdcHandle.Init.ExternalTrigConvEdge  = ADC_EXTERNALTRIGCONVEDGE_NONE;           /* 触发边沿无 */
    AdcHandle.Init.DMAContinuousRequests = ENABLE;                                  /* DMA循环模式 */
    AdcHandle.Init.Overrun               = ADC_OVR_DATA_OVERWRITTEN;                /* 当过载发生时,覆盖上一个值 */

    AdcHandle.Init.SamplingTimeCommon    = ADC_SAMPLETIME_239CYCLES_5;               /* 通道采样时间为8MHz->41.5ADC时钟周期 */
    /* ADC初始化 */
    if(HAL_ADC_Init(&AdcHandle) != HAL_OK)
    {
        Error_Handler();
    }

    sConfig.Rank         = ADC_RANK_CHANNEL_NUMBER;                                 /* 设置加入规则组通道 */
    sConfig.Channel      = ADC_CHANNEL_TEMPSENSOR;                                  /* 设置采样通道 */
    /* 配置ADC通道 */
    if(HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)
    {
        Error_Handler();
    }
}
  • 📝main函数代码:
/**
  * @brief  应用程序入口函数.
  * @retval int
  */
int main(void)
{
    uint32_t TimerUART = 0;
    /* 初始化所有外设,Flash接口,SysTick */
    HAL_Init();
    /* 系统时钟 初始化 */
    SystemClock_Config(RCC_HSICALIBRATION_24MHz);
	SystemCoreClockUpdate();
    /* 串口初始化*/
    MX_USART_UART_Init();
    /*GPIO 初始化LED */
    MX_GPIO_Init();
    /* 配置ADC */
    APP_AdcConfig();
    printf("Air001 SysClockFreq:%d \r\n", HAL_RCC_GetSysClockFreq());
    TimerUART = HAL_GetTick();
    while(1)
    {
        if((HAL_GetTick() - TimerUART) > 1000)
        {
            /* 校准并启动ADC并使能ADC中断 */
			HAL_ADCEx_Calibration_Start(&AdcHandle);
            if(HAL_ADC_Start_IT(&AdcHandle) != HAL_OK)
            {
                Error_Handler();
            }
            /* LED翻转 */
            HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_1);
            HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0);
            HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_3);
			printf("Air001 RCC_GetPCLK1Freq:%d \r\n", HAL_RCC_GetPCLK1Freq());
             printf(" TEMPERAUTE = %d \r\n", aTEMPERATURE);
			TimerUART = HAL_GetTick();
        }
    }
}
  • 📜串口打印结果:
    在这里插入图片描述

📚测试工程源码:

链接:https://pan.baidu.com/s/1ZH7Grq26t78Lz4zkwjxoDg 
提取码:v301

  • 🔖此文章仅作为个人学习探索知识的总结,不作为他人引用者的理论依据,由于学识所限,难免会出现错误或纰漏,欢迎大家指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1091316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CANdb++数据库操作

CANdb数据库操作 创建工程结构文件夹新建数据库&总线描述节点设置节点创建配置Message属性信号设置节点收发信号 环境变量配置一致性检验数据库工程XVehicle.dbc导入工程文件总结 创建工程结构文件夹 在文件夹X-Vehicle-1下,建立工程目录文件夹CANdb&#xff0…

优雅而高效的JavaScript——模板字面量

🤨博主:小猫娃来啦 🤨文章核心:优雅而高效的JavaScript——模板字面量 文章目录 什么是模板字面量使用模板字面量插入变量处理多文本模板字面量的高级应用标签模板字量自定义模板字面量函数 常见应用场景拼接字符串HTML模板SQL查询…

【LeetCode热题100】--347.前K个高频元素

347.前K个高频元素 方法:堆 首先遍历整个数组,并使用哈希表记录每个数字出现的次数,并形成一个「出现次数数组」。找出原数组的前 k 个高频元素,就相当于找出「出现次数数组」的前 k 大的值 利用堆的思想:建立一个小…

tomcat多实例部署jenkins

tomcat多实例部署jenkins 文章目录 tomcat多实例部署jenkins1.简介:2.优缺点:3.工作原理:4.工作流程:5.tomcat多实例部署jenkins流程5.1.环境说明5.2.部署前准备工作5.3.多实例部署tomcat5.4.部署jenkins5.5.创建一个jenkins项目5…

乐高Studio打开Solidworks零件/装配体 (sw另存obj文件)

solidworks 2020 Lego studio / part designer 截至2023-10-13🎂最新版 文章目录 操作步骤1) solidworks 开启 ScanTo3D 功能2) 零件 / 装配体 保存至stl格式文件3) 以SanTo3D网格文件方式打开stl4) 将打开的stl另存为…

销毁二叉树

同样是利用递归的方法——后序遍历 void TreeDestroy(BTNode* root) {if (root NULL){return 0;}TreeDestroy(root->left);TreeDestroy(root->right);free(root);}

React18入门(第四篇)——React中的4种CSS使用方式,CSS Module、CSS-in-Js详解

文章目录 一、普通方式使用CSS1.1 元素内联 style1.2 引入 CSS 文件1.3 类名插件 -- Classnames1.4 注意事项 二、CSS Module2.1 普通 CSS 的问题2.2 CSS Module 的特点2.3 简单使用 三、使用 sass3.1 sass 简介3.2 使用 四、CSS-in-JS4.1 CSS-in-JS 简介4.2 CSS-in-JS 常用工具…

计算机网络 实验七 NAT 和 DHCP 实验

实验目的: 1. 掌握NAT技术的基本原理,熟悉NAT基本配置。 2. 掌握DHCP协议的基本原理,熟悉配置DHCP服务器和中继。 实验过程分析: Nat基本配置 分别写出实验步骤中3)、4)、6)的连通性情况&…

怎样学习C#上位机编程?

怎样学习C#上位机编程? 00001. 掌握C#编程和.NET框架基础。 00002. 学WinForm应用开发,了解控件使用和事件编程。 00003. 熟悉基本数据结构和算法,如链表、栈、队列。 00004. 理解串口通信协议和方法,用于与硬件交互。 00005…

SLAM从入门到精通(数据回放工具之rosbag)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 前面我们学习了hector-slam、gmapping slam两种slam方法。当时我们操作的时候,是通过手动操作的方法来建图的。但是这里面可能存在一个…

统信UOS 1060系统新增备份

原文链接:统信UOS 1060系统新增备份 hello,大家好啊,今天给大家带来关于统信UOS 1060系统备份还原的系列内容的第二篇文章,系统新增备份,我们可以将系统新增备份到u盘中,后面需要的话,可以进行还…

Raven2靶机渗透

1. 信息收集 1.1 主机探测 sudo arp-scan -l1.2 端口扫描 nmap -p- -A 192.168.16.185开放了80端口,尝试登录网址查看信息,通过浏览器插件找出指纹 1.3 目录扫描 访问登录界面,发现remember Me怀疑是shiro界面 登录/vendor/界面&#xff0…

springboot中如何进行测试用例数据的随机设定

测试用例数据设定 测试用例数据通常采用随机值进行测试,使用SpringBoot提供的随机数为其赋值 1.在application.yml中设置随机值 testcast:book:id: ${random.int} # 随机整数id2: ${random.int(10)} # 10以内随机数type: ${random.int(10,20)} # …

谜题(Puzzle, ACM/ICPC World Finals 1993, UVa227)rust解法

有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A, B, L, R,分别表示把空格上、下、左、右的相邻字母移到空格中。输入初始网格和指令序列(以数字0结束),输出指…

模板进阶和反向迭代器

文章目录 模板非类型模板参数模板特化函数模板特化类模板特化 模板分离编译 反向迭代器 模板 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参&#xff0c…

黑龙江省人口与社会经济数据集(2015-2016年)

摘要 a. 数据内容(数据文件/表名称,包含的观测指标内容) 黑龙江省人口与社会经济数据集(2015-2016年)反映了黑龙江省社会经济、人口和劳动力、农业生产、金融、旅游、卫生、教育、社会保障等情况,包含年末…

MTC证书|欧盟与英国金属类产品清关新要求

英国禁止进口俄钢材的通告内容 从2023年 9 月 30 日起,欧盟和英国将对在第三国加工的特定钢铁产品实施新的制裁,这些产品包含俄罗斯原产的钢铁原料。进口商需要在进口时申报进口货物是否合规。 MTC认证 欧盟严抓MTC认证 获悉,从10月1日起&a…

倒置边框半径卡片

效果展示 CSS 知识点 实现多曲面的思路 实现整体布局 <div class"card"><div class"img_box"></div><div class"content"><div class"price"></div></div> </div>.card {position…

微信小程序入门开发教程

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《微信小程序开发实战》。&#x1f3af;&#x1f3a…