0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F10x_ADC三通道逐次转换 (单次、单通道软件触发)

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-25 11:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Ⅰ、概述

本文讲述关于STM32功能比较强大的ADC模块。ADC(Analog to Digital Converter)也就是模拟量转化为数字量,而STM32的ADC模块功能比较多,本文主要讲述“三条通道逐次转换(单次、单通道软件触发)”。

根据笔者的经验,STM32所有系列芯片的ADC模块功能及配置都差不多。因此,本文虽是以F1为例,其实其他系列(F0、F2、F4等)都适用。

本文提供实例代码:三条通道,配置为逐次转换(间隔模式),适用软件触发转换(每触发一次转换一条通道),一个循环也就是需要软件触发三次。

实例实验效果:

通道1接地、通道2接1.5V电源、通道3接VCC

本文讲述的知识点相对较多,若初次学习STM32的ADC转换功能,可以参考我另外一篇相对简单一点的文章:

STM32F10x_ADC1单通道单次采集

关于本文的更多详情请往下看。

Ⅱ、实例工程下载

笔者针对于初学者提供的例程都是去掉了许多不必要的功能,精简了官方的代码,对初学者一看就明白,以简单明了的工程供大家学习。

笔者提供的实例工程都是在板子上经过多次测试并没有问题才上传至360云盘,欢迎下载测试、参照学习。

提供下载的软件工程是基于Keil(MDK-ARM) V5版本、STM32F103ZE芯片,但F1其他型号也适用(适用F1其他型号: 关注微信,回复“修改型号”)。

STM32F10x_ADC三通道逐次转换(单次、单通道软件触发)实例源代码工程:

https://yunpan.cn/cBNcrax8UHhmE访问密码 8bae

STM32F1资料:

https://yunpan.cn/crBUdUGdYKam2访问密码 ca90

Ⅲ、关于ADC

关于ADC的介绍及功能,请下载参考手册查看,笔者这里讲述几点重要的知识:

1.12位分辨率

在STM32所有系列芯片中只有少部分是16位的,如:F373芯片。

12位分辨率意味着我们采集电压的精度可以达到:Vref /4096。

采集电压 = Vref * ADC_DR / 4096;

Vref:参考电压

ADC_DR:读取到ADC数据寄存器的值

由于寄存器是32位的,在配置的时候分左对齐和右对齐,一般我们使用右对齐,也就是对低12位数据为有效数据。

2.转换模式

A.单次和连续转换

单次:单通道单次转换、多通道单次(分多次)转换;

连续:单通道连续转换、多通道连续(循环)转换;

B.双ADC模式

也就是使用到了两个ADC,比如:ADC1和ADC2同时使用也就是双ADC模式。在该模式下可以配置为如下一些模式:同步规则模式、同步注入模式、独立模式等。

3.触发源

触发源就是触发ADC转换的来源,有外部中断线、定时器、软件等触发源。我们初学者常用软件触发,也就是需要转换一次,我们软件启动一次(本文提供实例也是软件触发)。

Ⅳ、本文实例描述

本文实例中关于ADC部分的配置及知识点,针对初学者相对比较多、理解起来也相对比较难一点。

根据题目“ADC三通道逐次转换(单次、单通道软件触发)”我们不难理解其转换的过程,但如何实现是一个难点。

1、三通道:我们定义了3条通道ADC1的ADC_Channel_1、ADC_Channel_2、ADC_Channel_3.

2.逐次转换:我们使用的是间断模式(规则组),也就是在规则组中定义了触发转换的序列。

3.单次:我们是没触发一次转换一次。

4.单通道:每次触发只转换一条通道。

Ⅴ、源代码分析

笔者以F1标准外设库(同时也建议初学者使用官方的标准外设库)为基础建立的工程,主要以库的方式来讲述(若您的F1芯片与提供工程不一样,可微信回复“修改型号”)。

下面将讲述ADC重要的几点:

1.输入引脚配置


该函数位于adc.c文件下面;

引脚与通道的对应关系请参看你使用芯片的数据手册。


注意:

为什么是“ADC123_IN1”?而不是ADC1_IN1,或者ADC2_IN1?

原因是ADC1、ADC2和ADC3共用这些引脚。

2.ADC配置


该函数位于rtc.c文件下面;

这个函数是本文的重点,是配置工作模式、规则通道及间断模式等的重点。下面依次来讲述源代码内容的意思;

A.初始化基本参数:

工作模式:ADC_Mode = ADC_Mode_RegSimult;

总共有10种,主要都是针对双ADC下使用。针对初学者这里不多描述,感兴趣的朋友可以先自行研究一下各个模式的使用。

浏览模式:ADC_ScanConvMode = ENABLE;

主要是针对多条通道而言,也就是说你是否有多条通道。

多通道:ENABLE;

单通道:DISABLE;

转换模式:ADC_ContinuousConvMode = DISABLE;

这里是配置是否需要连续转换。

连续转换ENABLE:也就是只需要启动(触发)转换一次,后面就不用再次启动(触发)就可以连续工作了。

单次转换DISABLE:也就是根据一次转换完后需要再次启动(触发)才能工作。

触发方式:ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;

触发方式也就是使用什么方法触发ADC转换。哟定时器、外部触发、软件触发,一般常用软件触发。这里有很多种触发方式,详情可以参考其参数。

对其方式:ADC_DataAlign = ADC_DataAlign_Right;

右对其:低12位数据为有效位(常用);

左对其:高12为数据为有效位;

通道数:ADC_NbrOfChannel = 3;

这个参数比较简单,我们定义工作的通道数量。

B.设置规则组通道:

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 2, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 3, ADC_SampleTime_55Cycles5);

我们定义通道1的转换顺序为第1、通道2的转换顺序为第2、通道3的转换顺序为第3;

ADC_DiscModeChannelCountConfig(ADC1, 1);

ADC_DiscModeCmd(ADC1, ENABLE);

规则组间断模式配置。我们配置短序列为1,也就是说每触发一次转换一条通道。

关于间断模式请看参考手册。

C.校验:

ADC_ResetCalibration(ADC1); //校验复位

while(ADC_GetResetCalibrationStatus(ADC1)); //等待复位完成

ADC_StartCalibration(ADC1); //开始ADC1校准

while(ADC_GetCalibrationStatus(ADC1)); //等待校验完成

建议每次上电校正一次。

ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。在校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差。

3.ADC采集


该函数位于adc.c文件下面;

上面的配置完成之后,就是实际采集数据的过程了。由于我们配置的是浏览(循环)模式,单次采集,也就是说我们没调用触发一次该函数,就会循环采集一条通道。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32F10x
    +关注

    关注

    2

    文章

    82

    浏览量

    21259
  • Vcc
    Vcc
    +关注

    关注

    2

    文章

    308

    浏览量

    39507
  • ADC模块
    +关注

    关注

    1

    文章

    19

    浏览量

    11376
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    ADS8688 16位、500kSPS 8通道电源SAR ADC技术手册

    ADS8684和ADS8688是基于16位逐次逼近(SAR)模数转换器(ADC)的4通道和8通道集成数据采集系统,工作吞吐量为500 kSP
    的头像 发表于 11-13 09:54 403次阅读
    ADS8688 16位、500kSPS 8<b class='flag-5'>通道</b><b class='flag-5'>单</b>电源SAR <b class='flag-5'>ADC</b>技术手册

    ADC12DJ2700 12位、双通道2.7GSPS或单通道5.4GSPS、RF采样模数转换器技术手册

    ADC12DJ2700器件是一款射频采样、千兆采样、模数转换器 (ADC),可直接对从 DC 到 10 GHz 以上的输入频率进行采样。在双通道
    的头像 发表于 11-06 09:38 340次阅读
    <b class='flag-5'>ADC</b>12DJ2700 12位、双<b class='flag-5'>通道</b>2.7GSPS或<b class='flag-5'>单通道</b>5.4GSPS、RF采样模数<b class='flag-5'>转换</b>器技术手册

    ADS7038 8通道、1MSPS、12位模数转换器(ADC)技术手册

    该ADS7038是一款易于使用的8通道、多路复用、12位逐次逼近寄存器模数转换器(SAR ADC)。八个通道可以独立配置为模拟输入、数字输入
    的头像 发表于 11-03 15:22 359次阅读
    ADS7038  8<b class='flag-5'>通道</b>、1MSPS、12位模数<b class='flag-5'>转换</b>器(<b class='flag-5'>ADC</b>)技术手册

    ADC12DJ5200RF 具有双通道 5.2 GSPS 或单通道 10.4 GSPS 的射频采样 12 位 ADC技术手册

    ADC单通道 10.4GSPS ADC。支持高达 10GHz 的可用输入频率范围,可对频率捷变系统进行 L 波段、S 波段、C 波段和 X
    的头像 发表于 11-01 10:25 812次阅读
    <b class='flag-5'>ADC</b>12DJ5200RF 具有双<b class='flag-5'>通道</b> 5.2 GSPS 或<b class='flag-5'>单通道</b> 10.4 GSPS 的射频采样 12 位 <b class='flag-5'>ADC</b>技术手册

    0.7 至 2.7 GHz 三通道 SPST (3xSPST) 分流 MIPI® 天线调谐开关 skyworksinc

    电子发烧友网为你提供()0.7 至 2.7 GHz 三通道 SPST (3xSPST) 分流 MIPI® 天线调谐开关相关产品参数、数据手册,更有0.7 至 2.7 GHz 三通道 SPST
    发表于 10-31 18:30
    0.7 至 2.7 GHz <b class='flag-5'>三通道</b> SPST (3xSPST) 分流 MIPI® 天线调谐开关 skyworksinc

    AMC131M03 三通道隔离型 ΔΣ ADC 技术总结

    该AMC131M03是一款精密、三通道、数据和电源隔离、同步采样、24位、角积分(ΔΣ)模数转换器(ADC)。该AMC131M03提供宽动态范围、低功耗和电能测量专用功能,专为电能计
    的头像 发表于 10-28 10:56 394次阅读
    AMC131M03 <b class='flag-5'>三通道</b>隔离型 ΔΣ <b class='flag-5'>ADC</b> 技术总结

    ADC3569 单通道高速模数转换器(ADC)产品文档总结

    ADC3568和ADC3569 (ADC356x) 是 16 位、250MSPS 和 500MSPS、单通道模数转换器 (
    的头像 发表于 10-23 15:30 556次阅读
    <b class='flag-5'>ADC</b>3569 <b class='flag-5'>单通道</b>高速模数<b class='flag-5'>转换</b>器(<b class='flag-5'>ADC</b>)产品文档总结

    三通道 LCD 偏置电源管理 IC,带有三通道高效白光 LED 驱动器 skyworksinc

    电子发烧友网为你提供()三通道 LCD 偏置电源管理 IC,带有三通道高效白光 LED 驱动器相关产品参数、数据手册,更有三通道 LCD 偏置电源管理 IC,带有三通道高效白光 LED
    发表于 07-30 18:33
    <b class='flag-5'>三通道</b> LCD 偏置电源管理 IC,带有<b class='flag-5'>三通道</b>高效白光 LED 驱动器 skyworksinc

    STM32通道FFT运算异常的原因?怎么解决?

    :CMSIS-DSParm_rfft_fast_f32 内存分配:静态 DMA设置:ADC -> 内存,使用双缓冲 、复现方法 系统启动后,DMA连续采集16通道数据至bu
    发表于 06-19 06:27

    ADS1278采集数据不对,偶尔出现后三通道的数据等于前三通道,请问这是什么原因?

    我用ADS1278,8通道,SPI模式,如果用CLK-11.0592Mhz的晶振,SCLK用5MHZ,数据采集正确,若果把晶振(CLK)提高到20M以上,SCK频率提高,采集数据不对,偶尔出现后三通道的数据等于前三通道,请问这
    发表于 02-13 08:26

    EV10AS940芯片通道模数转换器(ADC

    EV10AS940芯片通道模数转换器(ADC)EV10AS940是一款高性能的
    发表于 01-24 08:44

    ADS1247工作于3通道端模式,数据读取异常的原因?怎么解决?

    ADC转换结果。但MCU运行后第一读取的结果总是0(MCU硬上电或者复位)。 2、循环依次读取0、1、2个模拟输入通道的结果,结果发现
    发表于 12-31 07:37

    ADC124S021同时使用两个通道,两个通道转换数据发生串扰怎么解决?

    用DSP的SPI接口接ADC124S021,如果只是进行单通道的信号采集,则转换后的数值稳定,但是同时使用两个通道时则两个通道的数据发生串
    发表于 12-30 07:41

    ADC122s021通道转换输出数据总是跳动,怎么解决?

    ADC122s021通道转换正常,但为什么通道转换输出数据总是跳动? 通道一发送0
    发表于 12-23 06:49

    浅谈瑞盟科技·MS5173M——16bit、单通道、200kSPS、 SAR 型 ADC

    MS5173M 是单通道、16bit、电荷再分配逐次逼近型模数转换器,采用电源供电。提供FAE支持,欢迎咨询了解
    的头像 发表于 12-19 17:09 1599次阅读
    浅谈瑞盟科技·MS5173M——16bit、<b class='flag-5'>单通道</b>、200kSPS、 SAR 型 <b class='flag-5'>ADC</b>