当前位置: 首页 > article >正文

【蓝桥杯嵌入式】ADC模数转换的原理图解析与代码实现(以第十一届省赛为例)——STM32G4

🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏🎏🎏

🪔本系列专栏 -  蓝桥杯嵌入式_勾栏听曲_0的博客

🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️

📌个人主页 - 勾栏听曲_0的博客📝

🔑希望本文能对你有所帮助,如有不足请指正,共同进步吧🏆

🎇君子之道,暗然而日章;小人之道,明然而日亡。📈

目录

原理图解析

 设置STM32CubeMX

 手搓代码

实例运用


原理图解析

        从图中可以看出,模拟输出的引脚分别为PB15和PB12。

 设置STM32CubeMX

        打开STM32CubeMX后,找到PB15和PB12,并把他们设置为ADC输入模式。PB15的为ADC2_IN15,PB12的为ADC1_IN11。

         然后在左侧的Analog中设置ADC,如我们设置刚刚配置给PB12的ADC1,通道为IN11设置为slingle ended,PB15的ADC2的通道IN15前打勾。这样ADC在STM32CubeMX的设置就完成了。

 手搓代码

        利用STM32CubeMX生成号代码后,我们新建两个文件来单独写ADC的代码,但是要注意的是,新文件不能命名为adc.c和adc.h,因为用STM32CubeMX会生成adc.c和adc.h的库文件,为例使命名不冲突,就想要命名为其他名字。

        如下所示,ADC的有效代码只有4行,而且也没什么难点,等一下我们直接以十一届省赛左例子来使用一下,这里我们来讨论一下这四行代码中的最后一句,这个算式为什么这样写呢。

        我们通过HAL_ADC_GetValue();这个函数获取的是一个电压值,而存储这个电压值是12位的空间,也就是说这个函数理论上取出来的电压值在0~4095之间。3.3是这个电位器的实际最大电压为3.3。因此我们除以4096再乘3.3就知道这个电压值对应的真实电压数值是多少啦。

double getADC(ADC_HandleTypeDef *pin)
{
	uint adc;
	HAL_ADC_Start(pin);
	adc = HAL_ADC_GetValue(pin);
	return adc*3.3/4096;
}

实例运用

题目

        这里要求使用PB0来检测电位器R37的电压信号,我们在STM32CubeMX上的PB0接口选择ADC_IN15就可以啦,这里我们改一下题目,将两个电位器都测一下

        使用STM32微控制器ADC通道(PB15和PB12)分别测量竞赛板电位器R37与R38输出的模拟电压信号。并在LCD屏中显示出来。

代码实现

aadc.c中依旧是我们上面提到的获取ADC的函数

double getADC(ADC_HandleTypeDef *pin)
{
	uint adc;
	HAL_ADC_Start(pin);
	adc = HAL_ADC_GetValue(pin);
	return adc*3.3/4096;
}

        在lcd.c中调用getADC并显示,getADC(&hadc1)获取的是R38电位器的模拟电压信号,getADC(&hadc2)获取的是R37电位器的模拟电压信号。

void disp_proc()
{
	char text[30];
	sprintf(text,"      Para   ");
	LCD_DisplayStringLine(Line4, (uint8_t *)text);

	sprintf(text,"    V: %.2f",getADC(&hadc1));
	LCD_DisplayStringLine(Line6, (uint8_t *)text);
	sprintf(text,"    V: %.2f",getADC(&hadc2));
	LCD_DisplayStringLine(Line7, (uint8_t *)text);
}


http://www.kler.cn/a/120.html

相关文章:

  • 【大数据基础】大数据概述
  • 在 macOS 中,设置自动将文件夹排在最前
  • P10424 [蓝桥杯 2024 省 B] 好数
  • Visio 画阀门 符号 : 电动阀的画法
  • Mysql--基础篇--事务(ACID特征及实现原理,事务管理模式,隔离级别,并发问题,锁机制,行级锁,表级锁,意向锁,共享锁,排他锁,死锁,MVCC)
  • 软件23种设计模式完整版[附Java版示例代码]
  • 51单片机使用AT24C02
  • 17、江科大stm32视频学习笔记——USART串口协议和USART串口外设
  • 英雄算法学习路线
  • Git代码提交规范
  • C 语言编程 — 线程池设计与实现
  • C++回顾(一)——从C到C++
  • 三体到底是啥?用Python跑一遍就明白了
  • 【python实操】用python写软件弹窗
  • 数据结构与算法基础-学习-15-二叉树之BST的前序遍历、后序遍历、中序遍历的递归和非递归方法实现
  • HashMap原理
  • 【Linux学习】进程间通信——匿名管道 | 命名管道
  • DDOS攻击
  • 【满分】【华为OD机试真题2023 JAVA】最多几个直角三角形
  • SpringBoot+WebSocket实时监控异常
  • Java每日一练(20230312)
  • Proximal Policy Optimization (PPO) 算法理解:从策略梯度开始
  • JAVA进阶 —— Steam流
  • 全国程序员薪酬大曝光!看完我酸了····
  • docker 安装 mysql:5.7 并进行数据库测试
  • 单片机怎么实现真正的多线程?