【GD32F470紫藤派开发板使用手册】第八讲 ADC-规则组多通道采样实验

发布者:SereneJourney最新更新时间:2024-11-19 来源: elecfans关键字:ADC  采样实验 手机看文章 扫描二维码
随时随地手机看文章

8.1实验内容

通过本实验主要学习以下内容:

  • ADC的简介

  • GD32F470 ADC工作原理

  • DMA原理

  • 规则组多通道循环采样

8.2实验原理

8.2.1ADC原理

我们知道,自然界中有非常多的模拟信号,比如光照强度,还有其他的例如温度、声音等等,那么人们是怎么来衡量一个模拟信号的呢?

我们通常会说今天光照度达到了3万Lux(照度单位),现在测量到的体温是36.5℃,我们所处的环境是40分贝,没错,人们就是通过将这些模拟信号数字化,从而达到衡量这些模拟信号的目的。那对于MCU来说,如果要测量一个模拟量,可以通过自带的ADC(Analog-to-Digital converters)模块,即模-数转换器将模拟量转化为可以被MCU读取到的数字量。

8.2.2GD32F470 ADC工作原理

GD32F470有3个12位逐次逼近型ADC(SAR ADC),这三个ADC可以独立工作,也可以工作在同步模式下。有最多24个外部ADC引脚可用于将连接到这些引脚的电压值转换为数字量,这些引脚号可以通过Datasheet获得。

wKgaomZAIVmARwItAAEDvz4ApIM664.png?imageView2/2/w/1000

表中ADC012_INx的意思是:该IO口可以作为通道x用于ADC0、ADC1和ADC2。如ADC012_IN0,表示PA0可以用于ADC0的通道0使用,也可以作为ADC1和ADC2的通道0使用。但要注意:不能在同一个时刻让不同的ADC去转换同一个通道,否则会有无法预料的结果

以下总结了GD32F470 ADC的特性:

  • 高性能:

– ADC采样分辨率:12位、10位、8位、或者6位分辨率;

– ADC采样率:12位分辨率为2.6 MSPs,10位分辨率为3.0 MSPs。分辨率越低,转换越快;

–自校准时间:131个ADC时钟周期;

–可编程采样时间;

–数据存储模式:最高有效位对齐和最低有效位对齐;

– DMA请求。

  • 模拟输入通道:

– 16个外部模拟输入通道;

– 1个内部温度传感通道(VSENSE);

– 1个内部参考电压输入通道(VREFINT);

– 1个外部监测电池VBAT供电引脚输入通道。

  • 转换开始的发起:

–软件触发;

–硬件触发。

  • 运行模式:

–转换单个通道,或者扫描一序列的通道;

–单次运行模式,每次触发转换一次选择的输入通道;

–连续运行模式,连续转换所选择的输入通道;

–间断运行模式;

–同步模式(适用于具有两个或多个ADC的设备)。

  • 转换结果阈值监测器功能: 模拟看门狗。

  • 中断产生:

–常规转换结束;

–模拟看门狗事件;

–溢出事件。

  • 过采样:

– 16位的数据寄存器
–可调整的过采样率,从2x到256x;
–高达8位的可编程数据移位。

  • ADC供电要求:
    – 2.4V到3.6V,一般供电电压为3.3V。

  • ADC输入范围:VREFN ≤VIN ≤VREFP 。

下面介绍下GD32F470的ADC框图:

wKgaomZAIXyAYoG5AAFSX577neA039.png?imageView2/2/w/1000

标注1:输入电压和参考电压

输入电压引脚定义如下表:

wKgaomZAIY-AU-Z0AAFEKWA5sR8340.png?imageView2/2/w/1000

大于等于100pin的GD32F470,ADC参考电压等于VREFP,100pin以下的GD32F470,ADC参考电压等于VDDA

GD32F470的ADC是12bit有效位的,满量程对应的转换值是4095,即当采样引脚上的电压等于ADC参考电压时,得到的转换值即为4095。故理论采样是指可通过以下公式得到:

wKgZomZAIaCAZZtvAAAFYUtB9V8222.png?imageView2/2/w/1000

标注2:输入通道

前面提到,ADC有最多16个外部模拟通道和3个内部通道,外部通道号从IN0~IN15,由IO口号来决定,两个内部通道是IN16(温度传感器)和IN17(内部Vrefint,典型值1.2V),下表给出了IO口号对应的ADC通道:

wKgaomZAIbKAFRS_AADTktEBH4w901.png?imageView2/2/w/1000

标注3:规则组

GD32F470的ADC转换组称为规则组,也叫常规序列。

规则组有两个重要的参数,其一为转换的个数,其二为转换的序列,规定好这两个参数后,一旦开始规则组的转换,则ADC就按照转换序列一个一个的进行模-数转换,直到达到要求的转换个数。

规则组的转换个数由ADC_RSQ0寄存器的RL[3:0]位规定,转换的总数目为RL[3:0]+1,转换总数目最大为16个;转换序列由ADC_RSQ0~ADC_RSQ2共同决定,我们来看下这几个寄存器。

ADC_RSQ0寄存器:

wKgZomZAIcKAJZyRAAA38c3g2hs770.png?imageView2/2/w/1000

ADC_RSQ1寄存器:

wKgaomZAIdWAZsAvAABgZEY1Sss974.png?imageView2/2/w/1000

ADC_RSQ2寄存器:

wKgZomZAIeKAVJF7AABcB9r0jug096.png?imageView2/2/w/1000

举个例子,现需要按照CH3->CH2->CH1的顺序进行规则组转换,则设定RL[3:0] = 2,然后设定RSQ0为CH3,RSQ1为CH2,RSQ2为CH1,则当开始规则组转换时,ADC首先进行RSQ0规定的通道即CH3的转换,再进行RSQ1规定的通道即CH2的转换,最后进行RSQ2规定的通道即CH1转换,当这三个通道转换完后,规则组转换结束。

需要注意的是,每转换一个规则组通道,转换结果都会放在寄存器ADC_RDATA中,所以CPU一定要在下一个通道转换完成前将上一个通道转换结果读走,否则会导致上一个通道数据被新的数据覆盖。所以在多通道规则组转换时,为了保证能读到所有通道的数据,一定要使用DMA(直接存储器访问控制器),每个通道转换结束后,都会给DMA发送请求,DMA就会将最新的ADC_RDATA中的数据搬走。关于ADC配合DMA的使用,后面会详细介绍。

标注4:触发源

ADC的规则组需要选特定的触发源用于触发ADC转换,注意,ADC的Enable(即ADC_CTL1寄存器的ADC_ON位置“1”)不会触发ADC转换,而是当选定的触发源来临后ADC才开始转换。

触发源分为内部触发和外部触发,内部触发是指软件触发;外部触发源是除了内部触发源以外的触发源,外部触发源可以通过ADC_CTL1寄存器查看:

ADC_CTL1寄存器:

wKgaomZAIfqAG0qdAABYixbk8e8960.png?imageView2/2/w/1000wKgZomZAIgCAbeBPAAFe32mD9D0677.png?imageView2/2/w/1000

标注5:规则组数据寄存器

如标注3规则组的表述,每个ADC的规则组只有一个数据寄存器ADC_RDATA,每转换一个通道,转换结果放在这个寄存器中,在下一通道转换结束前必须要将上一个通道的转换结果取走。

标注6:ADC中断及标志位

ADC的中断总共有两种:规则组转换结束中断以及模拟看门狗,可以通过将ADC_CTL0中的EOCIE和WDEIE置“1”来开启相应中断。

ADC_STAT寄存器中的EOC和WDE表示相应事件发生,EOC置“1”表示规则组的转换已经结束。

8.2.3DMA原理

本实验中ADC通道有两个,分别为PF7和PF10,所以我们用规则组多通道采样实现双电压读取,从上一节内容中可以知道,ADC规则组实现多通道转换时,必须要用到DMA。下面我们介绍下DMA原理。

DMA(直接存储器访问控制器)是一个非常好用的外设,它提供了一种硬件的方式在外设和存储器之间或者存储器和存储器之间传输数据,而无需CPU的介入,从而使CPU可以专注在处理其他系统功能上。GD32F470有两个DMA,其中DMA0有8个通道,DMA1也有8个通道。

GD32F470支持DMA的单一传输和多数据传输模式。这里只讲解单一传输。DMA实现很简单,只要配置好以下几要素即可。

  1. 源地址和目标地址:DMA进行数据搬运过程为从源地址读取到数据,再搬运到目标地址。本实验中,需要把ADC转换结果搬运到自定义的buffer中,所以源地址就要设置为ADCx_RDATA寄存器地址,目标地址为buffer地址。

  2. 源和目标的地址增量方式:地址增量方式有固定模式和增量模式两种,固定模式是指进行一次DMA搬运后,下次搬运的源地址或目标地址保持不变;增量模式指进行一次DMA搬运后,下次搬运的源地址或目标地址会加1。本实验中,源地址始终都应该为ADCx_RDATA地址,所以源地址增量方式需要设置为固定模式,而目标地址为自定义buffer,我们需要用buffer[0]存储x轴数据,buffer[1]存储y轴数据,所以目标地址增量方式需要设置为增量模式。

  3. DMA传输方向:DMA传输方向有三种,分别为外设地址->存储器地址、存储器地址->外设地址以及存储器->存储器。本实验中源地址是外设地址,目标地址为自定义buffer地址即存储器地址,故传输方向需设置为外设地址->存储器地址。

  4. 源和目标数据位宽:源和目标数据位宽表示每次搬运的数据长度,可以设置为8bit、16bit和32bit。本实验中ADC的数据只占用ADCx_RDATA寄存器的低半字即16bit,所以源和目标位宽选择16bit即可。

  5. DMA传输个数和循环模式:传输个数表示一轮DMA传输可以搬运的次数。循环模式表示当一轮DMA传输结束后,是否直接进行下一轮搬运,当开启循环模式后,当上一轮DMA传输结束后,源地址和目标地址会恢复到最开始的状态。本实验中,需要转换2个通道ADC,故DMA传输个数设置为2,循环模式开启。

  6. DMA通道优先级:DMA的每个通道都有一个软件优先级,当DMA控制器在同一时间接收到多个外设请求时,仲裁器将根据外设请求的优先级来决定响应哪一个外设请求。优先级包括软件优先级和硬件优先级,优先级规则如下:
    软件优先级:分为4级,低,中,高和极高。可以通过寄存器DMA_CHxCTL的PRIO位域来配置。
    硬件优先级:当通道具有相同的软件优先级时,编号低的通道优先级高。例:通道0和通道2配置为相同的软件优先级时,通道0的优先级高于通道2。

上面描述了DMA配置的一些要素,那么DMA是如何被触发的呢,我们来看下DMA请求映射表:

DMA0各通道请求表:

wKgZomZAIhOALHZYAAGGKVo7VoA769.png?imageView2/2/w/1000

DMA1各通道请求表:

wKgaomZAIh-ADnuLAADN4e4DnRg733.png?imageView2/2/w/1000wKgZomZAIiWAJD0CAADEOZ9WUYw132.png?imageView2/2/w/1000

本实验中是ADC配合DMA来使用,如果使用DMA去搬运ADC0的数据,从上表查询得知需要使用DMA1的通道0,如果是搬运ADC2的数据,也可以用到DMA1的通道0。如现在设置DMA1的通道0去搬运ADC2的数据,当ADC2每转换一个通道,ADC2_RDATA会更新一次数据,此时ADC2会自动向DMA1的通道0发出一次搬运请求,DMA收到请求后会进行一次数据搬运。DMA的请求和应答方式见下图:

wKgaomZAIjCABX9vAAFNiQtq8RQ834.png?imageView2/2/w/1000

8.3硬件设计

本实验是使用PF7和PF10来进行电压采集,读者可以采用飞线方式外接电压到这两个引脚进行测试。

8.4代码解析

本实验用到两个ADC2通道,使用ADC2规则组搭配DMA1通道0进行数据转换和搬运,ADC2规则组和DMA1通道0都开启循环模式,一旦开始ADC2规则组转换,会持续PF7和PF10上的电压进行转换和数据搬运。


8.4.1DMA和ADC初始化


在driver_adc.c中定义driver_adc_regular_ch_dma_config函数,该函数实现DMA和ADC的初始化。


C

void driver_adc_regular_ch_dma_config(typdef_adc_ch_general *ADC, typdef_adc_ch_parameter *ADC_CH,void *buffer)

{

dma_single_data_parameter_struct dma_single_data_parameter;

rcu_periph_clock_enable(ADC->dma_parameter.rcu_dma); /*DMA时钟开启*/

dma_deinit(ADC->dma_parameter.dma_periph, ADC->dma_parameter.dma_channel); /*DMA通道参数复位*/

/*DMA源地址、目标地址、增量方式、传输位宽、传输方向、传输个数、优先级设置*/

dma_single_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC->adc_port));

dma_single_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;

dma_single_data_parameter.memory0_addr = (uint32_t)(buffer);

dma_single_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;

if(ADC->adc_mode == ADC_DAUL_ROUTINE_PARALLEL)

{

dma_single_data_parameter.periph_memory_width = DMA_PERIPH_WIDTH_32BIT;

}

else

{

dma_single_data_parameter.periph_memory_width = DMA_PERIPH_WIDTH_16BIT;

}

dma_single_data_parameter.direction = DMA_PERIPH_TO_MEMORY;

dma_single_data_parameter.number = ADC->dma_parameter.dma_number;

dma_single_data_parameter.priority = ADC->dma_parameter.dma_priority;

dma_single_data_mode_init(ADC->dma_parameter.dma_periph, ADC->dma_parameter.dma_channel, &dma_single_data_parameter);

dma_channel_subperipheral_select(ADC->dma_parameter.dma_periph, ADC->dma_parameter.dma_channel,ADC->dma_parameter.dma_subperipheral_num);

/*DMA循环模式设置*/

if(ADC->dma_parameter.dma_circulation_mode == ENABLE)

{

dma_circulation_enable(ADC->dma_parameter.dma_periph, ADC->dma_parameter.dma_channel);

}

else

{

dma_circulation_disable(ADC->dma_parameter.dma_periph, ADC->dma_parameter.dma_channel);

}

dma_channel_enable(ADC->dma_parameter.dma_periph, ADC->dma_parameter.dma_channel); /* 使能DMA */

driver_adc_config(ADC,ADC_CH); /* ADC初始化 */

}

在driver_adc.h中声明了ADC DMA的结构体:


C

typedef struct __typdef_adc_dma_parameter

{

rcu_periph_enum rcu_dma; //DMA时钟

uint32_t dma_periph; //DMA号

dma_channel_enum dma_channel;//DMA通道号

dma_subperipheral_enum dma_subperipheral_num;//外设请求号

uint32_t dma_number; //DMA传输个数

uint32_t dma_priority; //DMA通道优先级

EventStatus dma_circulation_mode;//循环模式

}typdef_adc_dma_parameter;

这段代码比较简单,请读者按照前面介绍的DMA原理进行解析。


8.4.2BSP_ADC设置所需要的参数及IO口结构体定义


在bsp_adc.c中,对BSP_ADC设置所需要的参数及IO扩结构体数组进行了定义:


C

typdef_adc_ch_general BSP_ADC= {

.rcu_adc = RCU_ADC2, /* ADC2的时钟 */

.adc_psc = ADC_ADCCK_PCLK2_DIV8, /* ADC2设置为APB2 8分频 */

.adc_port = ADC2, /* ADC口为ADC2 */

.adc_mode = ADC_SYNC_MODE_INDEPENDENT, /* ADC模式为独立模式 */

.adc_channel_group = ADC_ROUTINE_CHANNEL, /* 使用规则组 */

.adc_scan_function = ENABLE, /* 开启扫描模式 */

.adc_continuous_function = ENABLE, /* 开启循环模式 */

.ch_count = 2, /* 转换长度为2 */

.adc_external_trigger_mode = EXTERNAL_TRIGGER_DISABLE,

.dma_parameter =

{

.rcu_dma = RCU_DMA1, /* DMA1的时钟 */

.dma_periph = DMA1, /* 使用DMA1 */

.dma_channel = DMA_CH0, /* 使用通道4 */

.dma_number = 2, /* DMA传输长度为2 */

.dma_subperipheral_num = DMA_SUBPERI2,

.dma_priority = DMA_PRIORITY_HIGH, /* DMA通道优先级 */

.dma_circulation_mode = ENABLE /* DMA循环模式打开 */

},

.trigger_source = ADC_EXTTRIG_ROUTINE_T0_CH0, /* ADC触发源选择为软件触发 */

.DMA_mode = ENABLE /* 使用DMA */

};


typdef_adc_ch_parameter BSP_ADC_ch[2] =

{

{

.rcu_port = RCU_GPIOF, /* GPIOF时钟 */

.port = GPIOF, /* GPIO port */

.pin = GPIO_PIN_7, /* PF7 */

.gpio_speed = GPIO_OSPEED_2MHZ, /* PF7速度设置为10MHz */

.adc_channel = ADC_CHANNEL_5, /* PF7是ADC2的通道5 */

.sample_time = ADC_SAMPLETIME_144 /* 设置采样周期为55.5 */

}

,

{

.rcu_port = RCU_GPIOF, /* GPIOF时钟 */

.port = GPIOF, /* GPIO port */

.pin = GPIO_PIN_10, /* PF8 */

.gpio_speed = GPIO_OSPEED_2MHZ, /* PF8速度设置为10MHz */

.adc_channel = ADC_CHANNEL_8, /* PF8是ADC2的通道10 */

.sample_time = ADC_SAMPLETIME_144 /* 设置采样周期为55.5 */

}

};/* ADC通道参数配置,包括IO口,和对应通道以及采样周期 */

8.4.3BSP_ ADC初始化和触发ADC转换的具体实现函数


在bsp_adc.c中定义了DMA和ADC初始化和触发ADC转换的函数:


C

uint16_t BSP_ADC_data[2] ;

void bsp_ADC_config()

{

driver_adc_regular_ch_dma_config(&BSP_ADC,BSP_ADC_ch,(uint16_t*)BSP_ADC_data);

driver_adc_software_trigger_enable(&BSP_ADC);

}

8.4.4main函数实现


C

int main(void)

{

driver_init();//延时函数初始化

bsp_uart_init(&BOARD_UART);//BOARD_UART串口初始化

bsp_ADC_config();//ADC配置

while (1)

{

delay_ms(100);//延时100ms

printf_log(' the BSP_ADC data is %d,%d rn', BSP_ADC_data[0],BSP_ADC_data[1]);//打印ADC数据

}

}

本例程main函数首先进行了延时函数初始化,为了演示实验结果,这里初始化了BOARD_UART串口,关于串口的使用,请读者参考串口章节,然后是BSP_ADC配置。在主循环中,每100ms打印一次PF7和PF10的ADC转换数据。


8.5实验结果


如上main函数实现说明。


关键字:ADC  采样实验 引用地址:【GD32F470紫藤派开发板使用手册】第八讲 ADC-规则组多通道采样实验

上一篇:【GD32F470紫藤派开发板使用手册】第十三讲 USB_虚拟键盘实验
下一篇:意法半导体推出 STM32WL33 低功耗、长距离无线微控制器,扩展专用生态系统

推荐阅读最新更新时间:2026-03-25 10:30

GD32F470紫藤开发板使用手册】第八讲 ADC-规则组多通道采样实验
8.1实验内容 通过本实验主要学习以下内容: ADC的简介 GD32F470 ADC工作原理 DMA原理 规则组多通道循环采样 8.2实验原理 8.2.1ADC原理 我们知道,自然界中有非常多的模拟信号,比如光照强度,还有其他的例如温度、声音等等,那么人们是怎么来衡量一个模拟信号的呢? 我们通常会说今天光照度达到了3万Lux(照度单位),现在测量到的体温是36.5℃,我们所处的环境是40分贝,没错,人们就是通过将这些模拟信号数字化,从而达到衡量这些模拟信号的目的。那对于MCU来说,如果要测量一个模拟量,可以通过自带的ADC(Analog-to-Digital converters)模块,即模-数转换器将模拟量转化为可以被
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第八讲 <font color='red'>ADC</font>-规则组多通道<font color='red'>采样</font><font color='red'>实验</font>
GD32F470紫藤开发板使用手册】第七讲 FWDG-看门狗实验
7.1实验内容 通过本实验主要学习以下内容: 独立看门狗的原理 独立看门狗功能介绍 实现独立看门狗功能 7.2实验原理 前面讲到,看门狗的计数值在每一个计数器时钟来的时候减1,那么这个时钟是什么呢,我们来看一下GD32F470的时钟树: 从时钟树可以看到,FWDGT的时钟来源于IRC32K,这是GD32F470的内部时钟,典型的频率值是32KHz。但要注意,这个IRC32K不是直接连到FWDGT计数器的,而是需要经过一个预分频器,这个分频器大小通过FWDGT_PSC进行设定。 预分频寄存器(FWDGT_PSC): 如设定PS 为001b,那么计数器的时钟频率就为32K/8 = 4KHz,即每隔250us计数值减1
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第七讲 FWDG-看门狗<font color='red'>实验</font>
GD32F470紫藤开发板使用手册】第三讲 EXTI-按键中断检测实验
3.1实验内容 通过本实验主要学习以下内容: EXTI中断原理; 按键中断检测原理; 3.2实验原理 3.2.1NVIC中断向量控制器 介绍EXTI之前,首先为各位读者介绍NVIC中断向量控制器,NVIC为M4内核组件,用于实现高效的异常和中断处理。NVIC可以支持抢占以及咬尾中断,具有多达68种外设中断以及4位中断优先等级配置(最多支持16个中断有限等级),当中断或异常产生时,系统自动将当前处理器工作状态压栈,在执行完中断服务子程序(ISR) 后自动将其出栈。 有关NVIC中断相关配置函数可参考gd32f4xx_misc.c,其中主要有以下几个函数,其功能简介如下表所示。 3.2.2EXTI中断原理 EXTI为外部中断
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第三讲 EXTI-按键中断检测<font color='red'>实验</font>
GD32F470紫藤开发板使用手册】第五讲 PMU-低功耗实验
5.1实验内容 通过本实验主要学习以下内容: PMU原理; 低功耗的进入以及退出操作; 5.2实验原理 5.2.1PMU结构原理 PMU即电源管理单元,其内部结构下图所示,由该图可知,GD32F4xx系列MCU具有三个电源域,包括VDD/VDDA电源域、1.2V电源域以及电池备份域,其中,VDD /VDDA域由电源直接供电。在VDD/VDDA域中嵌入了一个LDO,用来为1.2V域供电。在备份域中有一个电源切换器,当VDD/VDDA电源关闭时,电源切换器可以将备份域的电源切换到VBAT引脚,此时备份域由VBAT引脚(电池)供电。 VDD/VDDA电源域 VDD 域为数字电源域包括HXTAL(高速外部晶体振荡器)、LD
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第五讲 PMU-低功耗<font color='red'>实验</font>
GD32F470紫藤开发板使用手册】第十三讲 USB_虚拟键盘实验
13.1实验内容 通过本实验主要学习以下内容: USB协议基本原理 GD32F4xx USBFS的使用 虚拟键盘的协议原理及使用 13.2实验原理 13.2.1USB通信基础知识 USB的全称是Universal Serial Bus,通用串行总线。它的出现主要是为了简化个人计算机与外围设备的连接,增加易用性。USB支持热插拔,并且是即插即用的,另外,它还具有很强的可扩展性,传输速度也很快,这些特性使支持USB接口的电子设备更易用、更大众化。GD32F4xx系列MCU集成了USB2.0全速OTG模块以及高速OTG模块。首先为大家介绍USB通信的一些基础知识,包括USB协议、枚举流程等,建议读者可以多多阅读USB协议,以更深
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第十三讲 USB_虚拟键盘<font color='red'>实验</font>
1.2μVpp+24 位!一颗24位同步采样国产ADC解决方案 - CBM24AD92
随着医疗技术持续进步、生命科学研究不断深入,生物电信号的精确测量在现代医疗设备中的应用愈发重要。从脑电图(EEG)到心电图(ECG),再到胎儿心电监测和睡眠研究,生物电信号的采集已经成为医疗设备和可穿戴设备不可或缺的一部分。与此同时,随着对设备体积和功耗要求的提升,传统精密采集设备逐渐显现出体积大、功耗高、设备复杂等问题。 芯佰微电子 CBM24AD92-2CQ 是一款专为人体生物电信号采集设计的 2 通道 24 位同步采样 ΔΣ 模数转换器模拟前端(AFE),核心面向脑电图(EEG)、心电图(ECG)等医疗监测场景,可满足可穿戴脑机接口、便携医疗设备的小型化、高精度研发要求 。产品凭借低噪声高精度的信号采集能力、高集成度
[医疗电子]
1.2μVpp+24 位!一颗24位同步<font color='red'>采样</font>国产<font color='red'>ADC</font>解决方案 - CBM24AD92
手写STM32 FOC记录-----pwm触发adc电流采样
PWM的配置详见上一章节。 ADC配置需要使用 PWM 和 ADC 的同步机制,ADC 的采样由 TIM1 的 CCR4在 0 矢量中心附近触发: 首先配置三相电流和母线电压的ADC通道,此处根据硬件平台原理图去配置 然后是ADC基本配置 全部默认即可,说明一下,使用CubeMX配置ADC,使用注入组就用不到规则组。 这里配置比较关键,重点是以下几项,详细说明下: Number Of Conversions :使用到注入组的通道个数3 External Trigger Source :外部触发源,使用前边说的定时器1的通道四作为触发源。 External Trigger Edge
[单片机]
STM32 ADC转换完成回调函数解析:HAL_ADC_ConvCpltCallback与HAL_ADC_ConvHalfCpltCallback详解
HAL_ADC_ConvCpltCallback 和 HAL_ADC_ConvHalfCpltCallback 是 STM32 HAL 库中用于处理 ADC(模数转换器)转换完成事件的回调函数。它们分别在 ADC 转换完成和转换完成一半时被调用。以下是它们的详细说明: 1. HAL_ADC_ConvCpltCallback 功能:当 ADC 转换完全完成时,此回调函数会被调用。 使用场景:适用于需要处理完整转换数据的场景。例如,当 ADC 完成一组采样后,你可以在这个回调函数中读取转换结果并进行处理。 示例代码: void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* ha
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved