完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 还能孩子hj 于 2016-9-7 12:17 编辑
<一>STM32 的 ADC 主要技术指标: 对于ADC来说,我们最关注的就是它的分辨率、转换速度、ADC 类型、参考电压范围。 分辨率:12 位分辨率。不能直接测量负电压,所以没有符号位,即其最小量化单位 LSB = Vref+ / 212 。 转换时间:转换时间是可编程的。采样一次至少要用14个ADC时钟周期,而ADC的时钟频率最高为14MHz,也就 是说,它的采样时间最短为1us。足以胜任中、低频数字示波器的采样工作。 ADC类型:ADC 的类型决定了它性能的极限,STM32的是逐次比较型ADC。 参考电压范围(见附件图片1) <二>ADC采集数据实例(采用DMA模式) 使用ADC时常常需要不间断采集大量的数据,在一般的器件中会使用中断进行处理,但使用中断的效率还是不够高。在STM32中,使用ADC时往往采用DMA传输的方式,由DMA把ADC外设转换得的数据传输到SRAM,再进行处理,甚至直接把ADC的数据转移到串口发送给上位机。 ADC引脚(GPIO)配置:ADC1_GPIO_Config() 代码非常简单,就是使能DMA时钟,GPIO时钟及ADC1时钟。然后把ADC1的通道11使用的GPIO引脚PC1配置成模拟输入模式,在作为ADC的输入时,必须使用模拟输入。
DMA模式配置:ADC模式及其 DMA传输方式都是在用户函数ADC1_Mode_Config()中实现的。
ADC主要配置:
配置 ADC 模式 :从ADC1_Mode_Config()函数代码的第32行开始,为ADC模式的配置,主要为对ADC 的初始化结构体进行赋值。下面对这些结构体成员进行介绍: (1) .ADC_Mode STM32具有多个ADC,而不同的ADC又是共用通道的,当两个ADC采集同一个通道的先后顺序、时间间隔不同,就演变出了各种各样的模式,如同步注入模式、同步规则模式等10种,根据应用要求选择适合的模式以适应采集数据的要求。本实验用于测量电阻分压后的电压值,要求不高,只使用一个ADC就可以满足要求了,所以本成员被赋值为 ADC_Mode_Independent (独立模式)。 (2) .ADC_Scan Conv Mode 当有多个通道需要采集信号时,可以把ADC配置为按一定的顺序来对各个通道进行扫描转换,即轮流采集各通道的值。若采集多个通道,必须开启此模式。本实验只采集一个通道的信号,所以DISABLE(禁止)使用扫描转换模式。 (3) .ADC_Continuous Conv Mode 连续转换模式,此模式与单次转换模式相反,单次转换模式ADC只采集一次数据就停止转换。而连续转换模式则在上一次ADC转换完成后,立即开启下一次转换。本实验需要循环采集电压值,所以ENABLE(使能)连续转换模式。 (4) .ADC_External Trig Conv ADC需要在接收到触发信号才开始进行模数转换,这些触发信号可以是外部中断触发(EXTI 线)、定时器触发。这两个为外部触发信号,如果不使用外部触发信号可以使用软件控制触发。本 实 验 中 使 用 软 件 控 制 触 发 所 以 该 成 员 被 赋 值为ADC_External Trig Conv_None(不使用外部触发)。 (5) .ADC_Data Align 数据对齐方式。ADC转换后的数值是被保存到数据寄存器(ADC_DR)的0~15位或16~32位,数据宽度为16位,而 ADC转换精度为12位。把12位的数据保存到16位的区域,就涉及左对齐和右对齐的问题。这里的左、右对齐跟word 文档中的文本左、右对齐是一样的意思。 (6) .ADC_Nbr Of Channel 这个成员保存了要进行ADC数据转换的通道数,可以为1~16个。本实验中只需要采集PC1这个通道,所以把成员赋值为1就可以了。填充完结构体,就可以调用外设初始化函数进行初始化了,ADC的初始化使用ADC_Init()函数,初始化完成后别忘记调用ADC_Cmd()函数来使能ADC外设,用 ADC_DMACmd()函数来使能ADC的DMA 接口。在本实验中初始化ADC1。 <三> ADC 自校准配置 ADC 自校准在开始ADC转换之前,需要启动ADC的自校准,ADC 有一个内置自校准模式,校准可大幅减小因内部电容器组的变化而造成的准精度误差。在校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用消除在随后的转换中每个电容器上产生的误差。这是在 ADC1_Mode_Config()函数中的 ADC 自校准时调用的库函数和使用步骤。
在 调 用 了 复 位 校 准 函 数 ADC_Reset Calibration()和 开 始 校 准 函 数ADC_Start Calibration()后,要检查标志位等待校准完成,确保完成后才开始ADC转换。建议在每次上电后都进行一次自校准。在校准完成后,就可以开始进行ADC转换了。本实验代码中配置的ADC模式为软件触发方式,我们可以调用库函数ADC_Software Start ConvCmd()来开启软件触发。 <四> 电压检测: float 型变量ADC_Converted Value Local保存了由转换值计算出来的电压值,其计算公式是ADC 通用的:实际电压值= ADC转换值*LSB STM32的ADC的精度为12位,而我用的板子中Vref+接的参考电压值为3.3v ,所以 LSB =3.3/2的12次方
<四> 实验现象: 当旋转开发板开发板上的滑动变阻器时,ADC1转换的电压值则会改变。板载的是10K的精密电阻,旋转的圈数要多点才能看到ADC值的明显变化。(串口调试见图片2) |
|
相关推荐
6 个讨论
|
|
只有小组成员才能发言,加入小组>>
2250个成员聚集在这个小组
加入小组灵动微电子MM32全系列MCU产品应用手册,库函数和例程和选型表
11767 浏览 3 评论
【MM32 eMiniBoard试用连载】+基于OLED12864的GUI---U8G2
5957 浏览 1 评论
【MM32 eMiniBoard试用连载】移植RT-Thread至MM32L373PS
10994 浏览 0 评论
【MM32 eMiniBoard测评报告】+ 开箱 + 初探
4586 浏览 1 评论
灵动微课堂(第106讲) | MM32 USB功能学习笔记 —— WinUSB设备
4317 浏览 1 评论
[MM32软件] MM32F002使用内部flash存储数据怎么操作?
1111浏览 1评论
829浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-11 15:22 , Processed in 0.576436 second(s), Total 53, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号