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
    +关注

    关注

    1

    文章

    81

    浏览量

    20655
  • Vcc
    Vcc
    +关注

    关注

    2

    文章

    305

    浏览量

    35840
  • ADC模块
    +关注

    关注

    1

    文章

    19

    浏览量

    11058
收藏 人收藏

    评论

    相关推荐

    MS5185T——三通道、低噪声、低功耗 20 位∑-Δ ADC

    MS5185T 为适合高精度测量应用的低功耗、低噪声、三通道差分输入的 20bit 模数转换器。提供方案和FAE支持,欢迎大家咨询了解
    的头像 发表于 11-14 10:35 279次阅读
    MS5185T——<b class='flag-5'>三通道</b>、低噪声、低功耗 20 位∑-Δ <b class='flag-5'>ADC</b>

    ADS126x精密5通道10通道40kSPS 24位Δ-Σ ADC数据表

    电子发烧友网站提供《ADS126x精密5通道10通道40kSPS 24位Δ-Σ ADC数据表.pdf》资料免费下载
    发表于 07-23 11:37 0次下载
    ADS126<b class='flag-5'>x</b>精密5<b class='flag-5'>通道</b>和<b class='flag-5'>10</b><b class='flag-5'>通道</b>40kSPS 24位Δ-Σ <b class='flag-5'>ADC</b>数据表

    ADC12xJ1600四通道/双通道/单通道模数转换器(ADC)数据表

    电子发烧友网站提供《ADC12xJ1600四通道/双通道/单通道模数转换器(ADC)数据表.pd
    发表于 07-15 11:25 0次下载
    <b class='flag-5'>ADC</b>12xJ1600四<b class='flag-5'>通道</b>/双<b class='flag-5'>通道</b>/<b class='flag-5'>单通道</b>模数<b class='flag-5'>转换</b>器(<b class='flag-5'>ADC</b>)数据表

    ADC12xJ1600-Q1四通道/双通道/单通道、1.6GSPS、12位模数转换器(ADC)数据表

    电子发烧友网站提供《ADC12xJ1600-Q1四通道/双通道/单通道、1.6GSPS、12位模数转换器(
    发表于 07-15 11:24 0次下载
    <b class='flag-5'>ADC</b>12xJ1600-Q1四<b class='flag-5'>通道</b>/双<b class='flag-5'>通道</b>/<b class='flag-5'>单通道</b>、1.6GSPS、12位模数<b class='flag-5'>转换</b>器(<b class='flag-5'>ADC</b>)数据表

    ADC12xJ800四通道/双通道/单通道800MSPS 12位模数转换器(ADC)数据表

    电子发烧友网站提供《ADC12xJ800四通道/双通道/单通道800MSPS 12位模数转换器(ADC
    发表于 07-15 11:22 0次下载
    <b class='flag-5'>ADC</b>12xJ800四<b class='flag-5'>通道</b>/双<b class='flag-5'>通道</b>/<b class='flag-5'>单通道</b>800MSPS 12位模数<b class='flag-5'>转换</b>器(<b class='flag-5'>ADC</b>)数据表

    ADC12xJ800-Q1四通道/双通道/单通道、800MSPS、12位模数转换器(ADC)数据表

    电子发烧友网站提供《ADC12xJ800-Q1四通道/双通道/单通道、800MSPS、12位模数转换器(
    发表于 07-15 11:21 1次下载
    <b class='flag-5'>ADC</b>12xJ800-Q1四<b class='flag-5'>通道</b>/双<b class='flag-5'>通道</b>/<b class='flag-5'>单通道</b>、800MSPS、12位模数<b class='flag-5'>转换</b>器(<b class='flag-5'>ADC</b>)数据表

    ADC09xJ1300-Q1四通道/双通道/单通道、1.3GSPS、9位模数转换器(ADC)数据表

    电子发烧友网站提供《ADC09xJ1300-Q1四通道/双通道/单通道、1.3GSPS、9位模数转换器(
    发表于 07-15 11:16 0次下载
    <b class='flag-5'>ADC</b>09xJ1300-Q1四<b class='flag-5'>通道</b>/双<b class='flag-5'>通道</b>/<b class='flag-5'>单通道</b>、1.3GSPS、9位模数<b class='flag-5'>转换</b>器(<b class='flag-5'>ADC</b>)数据表

    ADC09xJ800四通道/双通道/单通道800MSPS 9位模数转换器(ADC)数据表

    电子发烧友网站提供《ADC09xJ800四通道/双通道/单通道800MSPS 9位模数转换器(ADC
    发表于 07-15 11:15 0次下载
    <b class='flag-5'>ADC</b>09xJ800四<b class='flag-5'>通道</b>/双<b class='flag-5'>通道</b>/<b class='flag-5'>单通道</b>800MSPS 9位模数<b class='flag-5'>转换</b>器(<b class='flag-5'>ADC</b>)数据表

    ADC09xJ1300四通道/双通道/单通道1.3GSPS 9位模数转换器(ADC)数据表

    电子发烧友网站提供《ADC09xJ1300四通道/双通道/单通道1.3GSPS 9位模数转换器(ADC
    发表于 07-15 11:01 0次下载
    <b class='flag-5'>ADC</b>09xJ1300四<b class='flag-5'>通道</b>/双<b class='flag-5'>通道</b>/<b class='flag-5'>单通道</b>1.3GSPS 9位模数<b class='flag-5'>转换</b>器(<b class='flag-5'>ADC</b>)数据表

    CW32使用DMA单通道、定时器触发ADC实现了多路AD采集

    本测试样例基于CW32F030C8T6MCU,使用DMA单通道、定时器触发ADC实现了12路AD采集。
    的头像 发表于 05-24 09:29 786次阅读
    CW32使用DMA<b class='flag-5'>单通道</b>、定时器<b class='flag-5'>触发</b><b class='flag-5'>ADC</b>实现了多路AD采集

    STM32F0 ADC通道转换,最后一个通道的EOC不置位是为什么?

    STM32F030 ADC采样序列中包括IN0,IN1,IN2通道,采用
    发表于 04-16 06:34

    汽车类四通道/三通道/双通道/单通道窗口或标准电压监控器TPS3704-Q1数据表

    电子发烧友网站提供《汽车类四通道/三通道/双通道/单通道窗口或标准电压监控器TPS3704-Q1数据表.pdf》资料免费下载
    发表于 03-21 10:06 0次下载
    汽车类四<b class='flag-5'>通道</b>/<b class='flag-5'>三通道</b>/双<b class='flag-5'>通道</b>/<b class='flag-5'>单通道</b>窗口或标准电压监控器TPS3704-Q1数据表

    具有1.8V逻辑电平的24V、8:1单通道、4:1双通道和2:1三通道多路复用器TMUX405x数据表

    电子发烧友网站提供《具有1.8V逻辑电平的24V、8:1单通道、4:1双通道和2:1三通道多路复用器TMUX405x数据表.pdf》资料免费下载
    发表于 03-20 16:11 0次下载
    具有1.8V逻辑电平的24V、8:1<b class='flag-5'>单通道</b>、4:1双<b class='flag-5'>通道</b>和2:1<b class='flag-5'>三通道</b>多路复用器TMUX405<b class='flag-5'>x</b>数据表

    通道/三通道/双通道窗口或标准电压监控器TPS3704x数据表

    电子发烧友网站提供《四通道/三通道/双通道窗口或标准电压监控器TPS3704x数据表.pdf》资料免费下载
    发表于 03-14 09:41 0次下载
    四<b class='flag-5'>通道</b>/<b class='flag-5'>三通道</b>/双<b class='flag-5'>通道</b>窗口或标准电压监控器TPS3704<b class='flag-5'>x</b>数据表

    需要让AD7176-2读取4个模拟通道的数据,如何不影响ADC对0通道进行的AD转换

    公司项目中的一块电路板上,需要让AD7176-2读取4个模拟通道的数据,由于其中0号通道上的输入存在较大的扰动,需要开启增强型50/60Hz滤波器,导致该通道
    发表于 12-18 07:26