CW32学习笔记——ADC“自动模式”
上个章节介绍了ADC的基本框架和用法,本章节会较为全面地讲解如何灵活地使用ADC功能。
点击查看上个章节:CW32学习笔记——CW32的模数转换器使用教学
通常来说,外设执行的各种命令都是由CPU发出的,比如我们需要进行AD转换,就通过某个寄存器标志位启动ADC,随后用判断函数去检测执行情况,亦或是开启中断功能,转换完成之后会提示CPU,再由CPU判断接下来该做什么。
这当然没问题,不过有些时候,我们需要实现一些循环重复的功能,比如在做傅里叶分析的时候,需要按照固定间隔采集一定数量的数据,比如采样率1000Hz,共采集1024个数据。为了实现这个目标,当然可以使用软件定时实现,也可以使用定时器外设,在中断服务函数中直接进行AD转换来定时获取数据,但数据很多,若是还要进行快速傅里叶变换,CPU会在定时器中断中花费很多时间来采集数据,留给计算的时间就少了很多。有一种方案可以完美解决这类问题,不仅可以保证数据采集的精确性,还几乎不需要CPU参与,那就是使用定时器触发ADC转换,而AD转换完成之后会由DMA进行数据搬运,若CPU需要使用这批数据,直接访问数据进行读取即可。具体的逻辑关系如下图所示。
这种组合涉及到DMA、ADC、定时器的使用,文章将详细介绍上图的联动过程。
按照顺序,首先是定时器触发AD转换。
前文也提到过,一般来讲可以用软件开关去启动AD转换,此处并没有用到这一功能,而是使用定时器触发,这是一种硬件触发方式,且触发源不属于ADC外设本身,故而也是一种外部触发方式。在ADC外设的配置项中,可以设置AD转换的开启是否由外部信号触发,只要ADC能正常使用,再配置好外部触发源,我们就能用外部硬件信号触发AD采集了。
注意!在实际使用中,外部触发源不一定非得是定时器,它也可以是某个片外模块提供的事件电平(完成事件会改变指定IO的电平,就和中断一样),最简单的就是按键触发的IO中断。
接下来是第二个部分,DMA功能的配置。
DMA,全名叫直接存储器访问,这个外设可以像CPU一样访问单片机内部的各个存储区(包括RAM和外设寄存器),但它只能做一件事情,就是数据搬运。通俗来说,数据存放在0-9共10个格子里面,DMA可以把这10个数据搬运到其他地方(并不会改变原本的值,效果类似赋值语句),而其他地方可以是同一个地方(将10个数据按顺序搬运10次,最终一层层覆盖到同一个地址),也可以是不同地方(将10个数据搬运10次并最终存放在10个不同地址的存储空间)。
总体上来讲DMA只做搬运这一个功能,除了搬运转换完成的AD数据,他还能用于各种数据接口(比如UART、SPI等),或是其他需要大量赋值的场合。
注意!DMA并不能完全代替CPU进行数据转移,因为DMA不像CPU那样拥有全部存储区域的访问权限。
最后是定时器的配置,这一部分没什么变化,就是选择一个可以用来触发AD采集的定时器,按需求配置即可。不过需要注意的是,记得把溢出中断打开,这个是AD转换的启动开关。
介绍完了每一步需要做的事情,下面说说代码应该怎么写。我会贴出主要代码,对于一些变量我会做说明但不做代码展示(变量什么的自己随便定义一个就行了呀!)
这段就是正常配置一个定时器,本案例中选择的是通用定时器2,根据手册,它可以触发AD采集。
除最后一行,其余代码与上一章节的初始化过程没太大差别,只需把DMA功能开启即可。这里补充一下其他配置项的说明:
时钟频率和采样时钟周期,如上一章说到的,采样时间当然是越长越好,其中的时钟频率就是ADC外设从内部时钟电路获得的时钟信号,频率越高,ADC速度越快,这个时钟速度一定程度上决定了一个ADC的最大采样速率(1秒内完成的转换次数)。
右对齐设置。AD转换的结果是存放在一个寄存器里面的,它本质上是个二进制数,右对齐就是将转换结果的第0位放到最右边,高位不为1的补0,若仍不清楚,可自行百度。
转换结果累加。为满足一些需求,ADC结果可能需要进行数据处理来减小误差,求加权平均值是一种很常用的办法,该功能开启之后,每次转换的结果都会直接累加,方便开发者取出后直接求平均值(所以实际上不要这个功能也可以)。
我们使用的是定时器触发采样,所以只需要使用单次采集模式就行了,ADC会在每次转换完成之后停止并等待下一次采集的启动信号(定时器溢出中断)。
总的来说,一定记住要把外部触发打开并绑定定时器2,随后只要定时器2的标志位被置位一次,ADC就会启动一次。
相对来说比较麻烦的是DMA的配置,要配置一个DMA,首先需要确定数据搬运的起点和终点,我们搬运的起点只有一个,就是ADC转换结果寄存器,搬运的终点是一个1024大小的数组,其中起点被称为源地址,终点被称为目标地址,且这两个地址都可以设置成自增模式(完成一次搬运之后,地址自动+1)。
关于DMA的初始化,DMA通常会有不止一个通道,每个通道都能独立进行数据搬运,初始化函数需要开启DMA的时钟总线,打开要用的DMA通道的中断。
关于DMA的启动和配置:
传输模式:DMA帮助CPU进行数据搬运,这难免会出现DMA和CPU传输冲突的情况,非锁定传输会在DMA搬运数据的间隔内预留时间间隙,必要时候CPU会抢占对外设的访问权限,届时CPU可进行数据传输,DMA只能等待CPU放弃对该外设的使用权限后才能继续自己的数据传输。相对应的,还有锁定传输,具体的功能在用户手册DMA章节有详细介绍。
传输位宽:根据需要搬运的数据长度进行选择即可。
触发方式和触发源:由于我们需要的是在AD转换完成之后立刻进行数据搬运,所以DMA的触发方式选择为硬件触发,触发源应该设置为ADC转化为完成,这会让DMA在每次ADC转换完成之后都进行一次数据搬运,且不论ADC处于什么模式。
源地址和目标地址:源地址设置为ADC数据寄存器,具体的地址有两种办法来获取,一种是用图中的办法,对寄存器取地址,另一种办法是直接查用户手册,找到ADC数据寄存器的基地址和偏移量计算得到地址(这种办法最终填进去的是一个hex数)。目标地址也是直接取地址数组即可。
地址自增:我们不希望源地址有变动,故源地址设置成不自增;目标地址是一个数组,所以每搬运一次数据都要让目标地址自增一个元素,这样下一次搬运的时候,数据就会被正确写入下一个格子。
传输次数:需求是采集1024个数据,那传输次数自然是1024次。
全部配置完后完成DMA的功能初始化,随后只需要启动ADC、定时器、DMA功能即可,图中代码做了一个开关启动,方便随时关闭。关闭的时候清零定时器计数器是为了在下次启动的时候让定时采集依然准确。
准备工作基本完成,接下来还剩一些小细节需要处理,我们打开了DMA和定时器的中断功能,他们会在完成搬运之后进入中断服务函数,至少得写个清除标志位的语句,除此之外还要加一些小功能。
定时器的中断服务函数只需要清除标志位即可,DMA的中断函数除了清除标志位,还需要将采样功能关掉(至少得把定时器关了)。如果使用的不是定时器触发,而是ADC的连续采样模式,需要在这里手动关闭ADC,不然即使DMA完成了搬运,ADC还会继续进行AD转换,由于DMA搬运已经完成了,自增的地址也不会自己变回去,之后就会出现“意想不到的”DMA错误搬运,但本案例中使用的是单次采集模式,ADC只在启动之后采集一次,所以不必担心ADC会连续采样导致程序异常的问题。
现在快速编写一个按键检测函数并调用刚刚写好的启动代码,其中的key_down变量会在按键中断服务函数中被置位。
再在main函数中循环调用这个按键检测函数,按键按下抬起后就会自动采集ADC数据,这里我用vofa+上位机显示一下采集的数据。
我这里采集的是单片机上定时器1输出的50Hz方波,占空比为50%,周期为20ms,效果还不错。
- |
- +1 赞 0
- 收藏
- 评论 0
本文由咪猫转载自武汉芯源(CW32生态社区公众号),原文标题为:【有那么点详细的CW32学习笔记】ADC“自动模式”,本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。
相关研发服务和供应服务
相关推荐
【经验】武汉芯源CW32系列MCU PWM输出功能指南
脉冲宽度调制(PWM),是在数字电路中达到模拟输出效果的一种手段,常见应用电机调速,照明灯调光等。在MCU中,主要通过定时器单元来时实现PWM输出,以CW32L083VxTx为例,LPTIM,GTIM,ATIM都可以输出PWM信号。
设计经验 发布时间 : 2023-02-23
武汉芯源半导体安全低功耗MCU CW32L010 | 新品使用初体验
CW32L010新品的正式发布,标志着嵌入式技术领域的又一次创新突破。今日,我们有幸进行该新品的首次使用体验,以一块L010核心板为例,体验一下这颗芯片
设计经验 发布时间 : 2024-10-18
【经验】芯源CW32系列MCU电容式触摸按键设计指南
芯源半导体的CW32系列MCU电容式触摸按键设计指南向客户提供利用CW32内部资源结合软件编程实现电容式触摸按键有效触摸检测的方法。本指南内容重点在于工作原理、软件检测过程以及调试指引。通过本文可了解到如何利用内置电压比较器和内置定时器及软件配合,实现灵活方便的按键检测。在介绍标准演示板和演示软件的性能参数同时,还会给出详细的调试建议以及设计参数选择倾向分析,帮助客户快速自信地完成设计并实施调试。
设计经验 发布时间 : 2023-07-27
CW32F030C8T6 MCU Supports an Ultra Wide Temperature Range of -40~105 ℃, Ensures Safe and Stable Operation of Portable Charging Gun
Wuhan Core Source Semiconductor‘s CW32F030C8T6 serves as the core control chip of the portable charging gun of Sihao New Energy Vehicle, indicating that CW32F030C8T6 microcontroller has been recognized by frontline host manufacturers.
应用方案 发布时间 : 2024-11-07
【应用】基于CW32L系列MCU的指夹式血氧仪,实现更高精度测量
主控芯片建议使用CW32F003(20pin)资源足够,还便宜。CW32抗干扰性能可轻松通过ESD 8KV认证,加之优秀的ADC性能,是血氧仪类产品的不二之选
应用方案 发布时间 : 2023-09-07
M0+产品行业新标杆诞生,武汉芯源CW32L010安全低功耗MCU集合多项技术性能优势
2024年9月26日,武汉芯源半导体带着最新产品CW32L010安全低功耗MCU作客电巢直播间,举行了一场璀璨的XR技术新品发布会,此次直播,武汉芯源半导体技术总监 张亚凡、北中国区销售总监 孙秀艳与大家分享了武汉芯源半导体的发展历程和重要时刻,全面介绍和讲解了新品CW32L010实现的技术优势。
原厂动态 发布时间 : 2024-11-05
【技术】武汉芯源CW32定时器输入捕获的操作讲解
CW32系列MCU的GTIM、ATIM的每个定时器都带有至少4路独立的捕获/比较通道,输入捕获功能可以测量输入信号的脉冲宽度或者频率。本文进行武汉芯源CW32定时器输入捕获的操作讲解。
技术探讨 发布时间 : 2023-02-16
【技术】一文介绍使用CW32系列MCU实现电池备份(VBAT)功能
本文档介绍了如何基于CW32系列MCU,通过增加简单的外部电路配合软件实现VBAT功能,在系统电源掉电后仍能保持RTC时钟正常计时,以及如何降低系统功耗,从而延长后备电池的使用寿命。
技术探讨 发布时间 : 2023-09-14
Application of CW32L083 Series MCU in Air Purifiers, Supported by Built in Independent Calibration RTC
The air purifier introduced in this article adopts the CW32L083 series microcontroller as the control core of the air purifier, and combines important components such as sensors, displays, drivers, and wireless transceivers to complete the required functions of the controller system.
应用方案 发布时间 : 2024-11-05
【产品】武汉芯源CW32L083系列MCU中断系统介绍
本文针对武汉芯源CW32L083系列MCU,同系列产品亦可参考。ARM® Cortex®-M0+内核的嵌套向量中断控制器(NVIC),用于管理中断和异常。NVIC和处理器内核紧密相连,可以实现低延迟的异常和中断处理。
产品 发布时间 : 2022-12-02
介绍MCU的ARM处理器——Cortex-M0+内核
ARM Cortex-M0+是2012年3月14日ARM公司发布的一款低功耗效率、能效最高的ARM处理器,可用于存在设计约束的嵌入式应用。它具有最小的硅面积和极少的代码量,从而使开发人员能够以16和8位的价位实现32位性能。处理器的低门数使其能够部署在需要简单功能的应用中。本文中武汉芯源来给大家介绍Cortex-M0+内核,希望对各位工程师有所帮助。
技术探讨 发布时间 : 2024-05-31
The Application of CW32F030 Series MCU in Electric Welding Machines
Applying a microcontroller in an electric welding machine can achieve automated control, improve welding quality and efficiency by writing specific programs. This article introduces the application of Wuhan Core Source Semiconductor CW32F030 series microcontroller in arc welding machines.
应用方案 发布时间 : 2024-11-05
使用通用串口模块下载CW32F030芯片的方法
在常见的客户技术支持中,常有需要串口下载CW32芯片的问题,现整理一份文档供参考。
设计经验 发布时间 : 2024-07-20
【经验】武汉芯源CW32系列MCU芯片低功耗模式的特性介绍
武汉芯源CW32系列芯片支持3种工作模式,运行模式、休眠模式以及深度休眠模式,本文以CW32L083为例介绍低功耗模式的特性。
设计经验 发布时间 : 2023-01-03
【IC】武汉芯源CW32L010安全低功耗MCU,树立M0+产品行业新标杆!
近日,武汉芯源半导体CW32L010系列产品正式官方发布。这款产品以其卓越的产品性能,迅速在业界引起了广泛关注,并成功树立M0+产品行业的新标杆。产品是基于eFlash的单芯片低功耗微控制器,集成了主频高达48MHz的ARM®Cortex®-M0+内核、高速嵌入式存储器(多至64K字节FLASH和多至4K字节SRAM)以及一系列全面的增强型外设和I/O口。
产品 发布时间 : 2024-10-10
电子商城
现货市场
服务
可定制显示屏的尺寸0.96”~15.6”,分辨率80*160~3840*2160,TN/IPS视角,支持RGB、MCU、SPI、MIPI、LVDS、HDMI接口,配套定制玻璃、背光、FPCA/PCBA。
最小起订量: 1000 提交需求>
可烧录IC封装SOP/MSOP/SSOP/TSOP/TSSOP/PLCC/QFP/QFN/MLP/MLF/BGA/CSP/SOT/DFN;IC包装Tray/Tube/Tape;IC厂商不限,交期1-3天。支持IC测试(FT/SLT),管装、托盘装、卷带装包装转换,IC打印标记加工。
最小起订量: 1pcs 提交需求>
登录 | 立即注册
提交评论