您的位置:首页 > 汽车 > 时评 > 网络公司是干什么的_凡科模板_杭州排名推广_seo的方法

网络公司是干什么的_凡科模板_杭州排名推广_seo的方法

2024/9/22 12:22:45 来源:https://blog.csdn.net/JK03820/article/details/142408432  浏览:    关键词:网络公司是干什么的_凡科模板_杭州排名推广_seo的方法
网络公司是干什么的_凡科模板_杭州排名推广_seo的方法

一、什么是ADC?

ADC(Analog-to-Digital Converter)即模数转换器。它是一种将模拟信号转换为数字信号的电子器件。在电子系统中,ADC 起着至关重要的作用,它能将连续变化的模拟量(如电压、电流等)转换为离散的数字量,以便数字电路进行处理、存储和传输。ADC通过将模拟量转化为数字量,例如将连续的电压信号转化为离散的数字信号。

二、配置工程

蓝桥杯竞赛板有两个模拟电压输出,分别是PB15和PB12.STM32G431内部集成2个有最高12位精度ADC(ADC1、ADC2)可配置的转换精度:6位,8位,10位,12位。12位精度为:0000 0000 0000 ~ 1111 1111 1111,2^12 = 4096。意思是把0 ~ 3.3v分成4096份  一份精度约为0.0008v(电压变换了0.0008v,ADC都能感受到).如原理图所示,两个采集端均存在跳线帽,若跳线帽拔掉,则无法正常工作。

分别配置PB15和PB12

三、使用步骤

在adc.c中编写getADC1和getADC2函数,目的是为了获取AD值,并在adc.h声明
uint16_t getADC2(void)
{
uint16_t adc=0;HAL_ADC_Start(&hadc2);//启动ADC转换adc=HAL_ADC_GetValue(&hadc2);//获取AD值return adc;
}
uint16_t getADC1(void)
{
uint16_t adc=0;HAL_ADC_Start(&hadc1);adc=HAL_ADC_GetValue(&hadc1);return adc;
}

对上述代码进行详解

  1. uint16_t adc=0;:定义一个 16 位无符号整数变量 adc,并初始化为 0。
  2. HAL_ADC_Start(&hadc2);:调用特定的硬件抽象层(HAL)函数来启动 hadc2 的 ADC 转换。
  3. adc=HAL_ADC_GetValue(&hadc2);:使用 HAL 函数获取 hadc2 转换得到的 AD 值,并将其存储到 adc 变量中。
  4. return adc;:函数返回获取到的 AD 值。

uint16_t adc=0初始化为 0 主要有以下原因:

  1. 明确初始状态:确保变量在使用前有一个明确的、可预期的初始值,避免出现未定义或不确定的情况。
  2. 避免潜在错误:如果不进行初始化,变量可能会包含随机或无效的数据,这可能导致后续计算或操作出现错误。
  3. 一致性:将其初始化为 0 可以保持代码的一致性和可读性,使代码更易于理解和维护。

&hadc2 表示取变量 hadc2 的地址。

在这个函数中,它是将 hadc2 的地址传递给 HAL_ADC_Start 和 HAL_ADC_GetValue 等函数,以便这些函数能够对指定的 ADC 进行操作。

在adc.h中声明
/* USER CODE BEGIN Prototypes */
uint16_t getADC2(void);
uint16_t getADC1(void);
/* USER CODE END Prototypes */
在main.c中添加校准函数,也可以放置与adc.c中的初始化函数中void MX_ADC1_Init(void),void MX_ADC2_Init(void)
HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);

这两行代码的作用是分别启动hadc1hadc2这两个 ADC 的校准操作。ADC_SINGLE_ENDED表示单端模式的校准。通过执行校准,可以提高 ADC 的测量精度。

 定义两个值,用来获取ADC采集到的值
 double volt_R37;double volt_R38;

double是双精度浮点数,是一种计算机数据类型。它具有更高的精度和范围,能表示比单精度浮点数更精确的小数。

volt_R37=getADC2()*3.2/4096;
volt_R38=getADC1()*3.2/4096;

这两行代码是在对获取到的 ADC 值进行进一步的计算和转换。getADC2()getADC1()获取到的是经过 ADC 转换后的数值,然后分别乘以3.2/4096,可能是为了将 ADC 值转换为实际的电压值。

sprintf(buf,"     R37:%.2fV      ",volt_R37);LCD_DisplayStringLine(Line4,(uint8_t*)buf);sprintf(buf,"     R38:%.2fV      ",volt_R38);LCD_DisplayStringLine(Line5,(uint8_t*)buf);

 %.2f表示以保留的浮点数形式输出电压值两位小数

四、效果展示

五、代码开源

通过网盘分享的文件:16-TEST7-ADC.zip
链接: https://pan.baidu.com/s/1N3-lp_dettxJMHnpxKlvHg?pwd=0820 提取码: 0820

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com