GD32F103 ADC

2023-10-14 23:36
文章标签 adc gd32f103

本文主要是介绍GD32F103 ADC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 模拟量于数字量。

模拟量:反应真实世界中的物理量(比如温度,压力,长度)模拟量通常是通过电压,电流等信号来表示。

数字量:通常是0和1来表示某个物理量的变化。

 2. ADC(模拟量转成信号量)

1. 分为并联比较,逐次逼近,计数型,双积分型。

1.并联比较型

Vin 大于 Vr 输出1 ,Vin 小于 Vr 输出0. 而Vin可以设置0~8v。每个比较器的Vr通过分压算出来。就可以控制比较器的输出。

上图是输出8位怎么输出三位呢。

利用D触发的当控制端 = 1 ,数据输入等于数据输出。

利用D触发的当控制端 = 0,保持数据输出不变。

如下电路就只输出三位的组合。

 2. 逐次逼近型

一次一次接近所需的值。如下未知砝码的重量。先用权重大的。慢慢加砝码。直到两边平衡。

VIN相当于待测量的值.于VDAC去比较。如果大于或者小于就去调整逐次逼近电路。

直到VIN = VDAC。B1,B2.....Bn的值就是模数的转换结果。

3. ADC的计数参数

3. DAC(数字量转成模拟量)

1. DAC的技术参数

4. ADC的框图 

GD32的框图

STM32的框图

分为规则通道与注入通道。并且规则通道最多可以16个。注入通道最多4个。规则通道只有一个数据寄存器。而注入每个都有单独的数据寄存器。当EOC标志位1。说明ADC转换完成。并且可以触发中断。要想成功转换还必须设置ADC的触发源。比如:软件触发。

  

 1. ADC的通道与序列

2. ADC上电 

 3. ADC时钟

 4. ADC的运行模式

分为单次运行,连续运行,扫描运行,间断运行。

1. 单次模式

单次转换模式:在这种模式下,ADC 仅进行一次转换。一旦转换完成,ADC 将停止工作。这是最基本的模式,适用于只需要一次转换的应用。

2. 连续模式

连续转换模式:在这种模式下,ADC 连续不断地进行转换。每次转换完成后,ADC 会自动启动下一次转换。这种模式适用于需要连续监测的应用,例如连续采集传感器数据。

 3. 扫描模式

扫描模式:在这种模式下,ADC 会按照预设的顺序对多个通道进行转换。每次转换完成后,ADC 会继续进行下一次转换,直到完成所有通道的转换。这种模式适用于需要定期监测多个通道的应用。

4. 间断模式 

间断运行模式:这种模式下,ADC 会在预定的时间间隔内进行转换。在转换完成后,ADC 会停止工作,直到下一次预定的时间到达。这种模式适用于需要定期进行转换,但转换频率较低的应用。

 5. ADC函数的介绍

1.  adc_mode_config

2.  adc_special_function_config 

3. adc_data_alignment_config 

4. adc_channel_length_config

5. adc_external_trigger_source_config

 

6. adc_external_trigger_config

7. adc_enable

8. adc_calibration_enable 

9. adc_regular_channel_config

10. adc_software_trigger_enable

11. adc_flag_get

12. adc_flag_clear

13. adc_regular_data_read

14. adc_interrupt_flag_get

15. adc_interrupt_flag_clear

16. adc_interrupt_enable

6. ADC的dome

光敏电阻与可调电阻的P7的3,1引脚。获取PA4,PA5的电压。根据分压求出光敏电阻与可调电阻

的电阻值。

 resister_adc.h

#ifndef _RESISTER_ADC
#define _RESISTER_ADC#include "gd32f10x.h"
#include "systick.h"void resister_adc_init(void);
void gpio_config(void);
void adc_config(void);uint16_t read_adc0_data(uint8_t adc_channel); // 读取ADC0转换的结果
float get_photo_r(void);    //获取光敏电阻的阻值
float get_var_r(void);      //获取可调电阻的阻值#endif

  resister_adc.c

#include "resister_adc.h"// 是与电阻相连的adc外设及其channel的初始化
void resister_adc_init(void){gpio_config();adc_config();
}/* 初始化IO口为模拟输入模式 */
void gpio_config(){rcu_periph_clock_enable(RCU_GPIOA);   // 1.使能rcu时钟gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4 |GPIO_PIN_5);  //2.初始化gpio输入模式
}/* 初始化adc0 */
void adc_config(){rcu_periph_clock_enable(RCU_ADC0);            // 使能时钟rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV8);  // 配置ADC的时钟/* 配置ADC0的参数 */adc_mode_config(ADC_MODE_FREE);            // 自由模式 各个ADC独立adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);        adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, DISABLE); //关闭连续模式adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);      //对齐方式adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1);   // 转换数量1 不同采集切换通道adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULAR_NONE); // 触发方式,软件触发adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);  // 使能外部触发/* 使能ADC0 */adc_enable(ADC0);delay_1ms(2);     //等待稳定/* 自校准 */adc_calibration_enable(ADC0);
}// 读取ADC0转换的结果
uint16_t read_adc0_data(uint8_t adc_channel){/*配置adc0的通道*/adc_regular_channel_config(ADC0, 0, adc_channel, ADC_SAMPLETIME_1POINT5);/*触发adc0的转换*/adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);/*等待EOC置位,即ADC0转换完成*/while(!adc_flag_get(ADC0, ADC_FLAG_EOC));/*清零EOC*/adc_flag_clear(ADC0, ADC_FLAG_EOC);/*读常规通道数据寄存器值并返回*/return adc_regular_data_read(ADC0);
}/*获取光敏电阻的阻值, 
* return:光敏电阻阻值,单位是千欧
*/
float get_photo_r(void){uint16_t adc_value = 0;uint8_t i;for(i=0; i<8; i++){adc_value += read_adc0_data(ADC_CHANNEL_5);}adc_value = adc_value / 8;float v_photo_res = adc_value * 3.3f / 4096.0f;  //得到模数转换的结果对应的电压值 基准电压3.3v  4096 = 2的12次方float result = (v_photo_res * 10) / (3 - v_photo_res);return result; 
}/*获取可调电阻的阻值, 
* return:可调电阻阻值,单位是千欧
*/
float get_var_r(void){      uint16_t adc_value = 0;uint8_t i;for(i=0; i<8; i++){adc_value += read_adc0_data(ADC_CHANNEL_4);}adc_value = adc_value / 8;float v_var_res = adc_value * 3.3f / 4096.0f;  //得到模数转换的结果对应的电压值float result = (v_var_res * 10) / (5 - v_var_res);return result; 
}

这篇关于GD32F103 ADC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/213904

相关文章

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

STM32 ADC+DMA导致写FLASH失败

最近用STM32G070系列的ADC+DMA采样时,遇到了一些小坑记录一下; 一、ADC+DMA采样时进入死循环; 解决方法:ADC-dma死循环问题_stm32 adc dma死机-CSDN博客 将ADC的DMA中断调整为最高,且增大ADCHAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, ADC_Buffer_Size); 的ADC_Bu

学习硬件测试05:NTC(ADC)+正弦波(DAC)+DMA(ADC+DAC)(P73、P76、P78)

文章以下内容全部为硬件相关知识,鲜有软件知识,并且记的是自己需要的部分,大家可能看不明白。 一、NTC(ADC) 1.1实验现象 本实验用 NTC 采集温度,数码管实时显示温度数据(整数),左下角 USB 小串口每隔 1S 打印温度信息。 1.2硬件电路 NTC 电阻是一个模拟温度传感器,随着温度的升高,电阻值逐渐减小。电路简单介绍如下: 电源滤波电容在 25℃ 室温下 NTC 电

STM32CubeMX 2 解锁ADC模块

掏出上次写完的project。选择引脚 选择PA4和ADC1_IN4 2.选择设置配置 3.发现改完前面的配置之后这里的时钟自动变成了56, 选定,改回72. 4.改configuration,双击ADC1 跳出如下界面: Mode 选independent mode Data Alignment选Right Aligment是为了方便读数,因为这是一个12位的AD

嵌入式s3c2240: ADC

ADC :模数转换 10 位 CMOS ADC (模 / 数转换器)是一个 8 通道模拟输入的再循环类型设备。其转换模拟输入信号为 10 位二进制数字编码,最大转换率为 2.5MHz A/D 转换器时钟下的 500 KSPS 。 模拟:连续信号 数字:离散信号 原理  当采样到信号后, 与各个比较器相比较 假设采样到2.5 2

ADC——模数转换器

一、转换流程 在处理器中主要进行ADC 1、AD转换流程 :采样、保持、量化、编码 通过比较器获得的电信号转换数字信号,根据自己需求,如果要求速率就可以使用较多的比较器,不要求速率考虑成本就可以使用较少的比较器,将最后的转换结果,通过编码来表示 2、转换需要考虑的指标: 量程:0~3.3V 精度:10位 转换速率:500 KSPS 二、使用处理器上的A/D转换器 10 位

物联网——模拟与数字转换器(ADC)

ADC(常用于信号发生器,音频解码器) 逐次逼近型ADC 利用逐次逼近寄存器SAR,二分法逼近未知电压,直到外部输入电压与输出电压保持一致:例如0~225V每次去中间值作为判断电压,逐次二分 stm32的ADC模块 规则通道一次只能选一个数据寄存器,通常搭配DMA使用; 注入通道一次能选4个数据寄存器存相应数值 ADC基本结构 ADC引脚复用 双ADC模式(同步采样

STM32单片机HAL库——ADC输入

一、单通道采集 二、单通道+DMA采集 使能DMA 三、定时器采集+DMA传输 选择定时器1的通道1作为触发源,在TIM1的上升沿进行采集 定时器1挂载在APB2上面,APB2上定时器的频率为168MHZ psc=168-1 arr=1000-1 TIM1的时钟频率为168/168/1000=1kHZ pulse设置为500,占空比为50%

STM32(十):ADC模数转换器

ADC(Analog-Digital Converter)模拟-数字转换器         ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。         12位逐次逼近型ADC,1us转换时间,分辨率:0~2^12-1           输入电压范围:0~3.3V,转换结果范围:0~4095         18个输入通道,可测量16个外

STM32单片机 ADC模数转换器

GPIO只能读取引脚的高低电平,只有两个值 ADC可对任意电压值进行量化,用变量来表示,相当于是电压表,可以测量引脚的具体电压 ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器。 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁。 DAC数字电路到模拟电路的桥梁,使用DAC可以将数字变量转换为模拟电压。DA