历史上的今天
返回首页

历史上的今天

今天是:2024年11月19日(星期二)

正在发生

2018年11月19日 | STM32单片机之ADC学习经验总结

2018-11-19 来源:eefocus

 因为公司的产品上需要使用AD来检测电池电压,要求不是很高,突然想用下DMA+ADC+TIM,以前以为很简单,实际使用中让我觉得很惭愧,遇到的问题让我一下子蒙了,不停的查资料,不停的测试,终于一个一个的问题都解决了,同时对STM32的ADC有了新的认识,并且打算再闲暇时间内将STM32的资源尽量的实践下。


我用的是STM32F4 来调试ADC3+DMA+TIM1(单通道),首先我先查看了下DMA的资料,之后参考官方提供的ADC3+DMA很快可以正常读取数据,之后我直接添加定时器触发AD转换,结果失败,我开始查资料看手册,逐渐对这三者之间的关系有了一个认识


首先定时器产生触发信号,AD检测到转换信号后开始转换,每转换一次就通过DMA将数据放到指定的内存地址中,直到达到DMA设定的DMA_BufferSize设定值后DMA置位相应的标志位,从而完成一次DMA传输。


由上面的关系的可以得知ADC转换是一次一次即单次非扫描模式(我测试的是AD单通道),因为连续模式一旦触发就会不停的转换,这样的话定时器触发转换就失去了意义,之后DMA设置成普通模式,即完成一次DMA传输后,停止传输,之后的DMA请求不被响应,因为DMA传输完成后以为着可以进行数据处理了,这个时候为了防止数据被覆盖(网上还有其他方法防止数据被覆盖)。


1>关于定时器的PWM输出


一开始我用定时器1的CH1来作为AD的触发信号对应的管脚是PA8,管脚配置的时候配置成复用模式没有调用 GPIO_PinAFConfig,将PA8复用成TIM1的输出脚,关于定时器的时钟我忽略了一个重要的因素,所以设置的频率一直不对


查看stmf4的参考手册 如果APBx_PRESC为1则定时器的时钟为PCLKx的时钟 否则为2倍的PCLKx


-如果是定时器1和定时器8 需要调用TIM_CtrlPWMOutputs来开启pwm输出之后通过示波器可以正确查看PA8的的波形输出。


2>AD转换

-ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;


我对这句一点都不懂,通过查资料发现stm32F4的ADC的DMA有4种模式,主要是为了通过联合使用ADC模块提升采样速度,其中默认模式和模式1差不多,


DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)


//从依次取ADC的值,分辨率为12位,


DMA mode 2 enabled (2 / 3 half-words by pairs - 2&1 then 1&3 then 3&2)


//可以联合使用这三个ADC模块进行采样,采样速度也是单独的三倍(2.4*3Msps),分辨率是12位,完成两次转换后,将值取走应该是


//ADC2+ADC1 ,ADC1+ADC3 ,ADC3+ADC2


DMA mode 3 enabled (2 / 3 bytes by pairs - 2&1 then 1&3 then 3&2)


//模式3和模式2差不多 但是分辨率要求是8位或6位,虽然分辨率降低了但是转换时间相对12位的要短。


-ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;


//连续模式必须被禁止,不然定时器触发就失去了意义


ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;


//查看寄存器,发现需要使能外部触发,上面就是开启并制定触发信号的极性


ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;


//选择触发时间


-一旦使用外部触发,那么 软件触发就不需要再调用。


3> DMA的传输


-ADC每转换一次,DMA搬运一次,达到指定的次数后,完成一次传输。


-DMA重启,看了网上很多人说DMA关闭后再开启后无法实现DMA传输,在STM32研讨会的演讲稿上有关于DMA重启的解决办法,


我按照第二种方法测试,发现如果处理数据时间长就会有问题,之后我吧定时器和ADC一起关闭之后处理数据,再配置DMA,在开启AD和定时器,就正常了。不太清楚哪里的问题。


-stm32f4的DMA分为数据流和通道,其中通道与stm32f1的触发源类似,F4的数据流与F1的通道类似21ic基础知识


这样ADC+DMA+TIM就正常工作了。


我想用内部ADC把采集的波形通过ucgui显示出来,从而加强对AD的运用与认识,我用STM32采集信号发生器的法波信号进行采集,一次采集300个点,之后通过ucgui将其显示在TFT屏上,为了让波形好看一些,我查了下网上的一些例程和示波器的资料,里面讲到可以通过数字内插的方法将波形重现和回放,数字内插的方法常用的有两种,一种是线性内插一种是sinx/x内插,线性内插比较好了解,关于sinx/x内插就复杂的多,仅仅是理解就很麻烦,数学功底严重不足的悲剧,原理都不懂想用c语言描述就别想了,所以只能用线性内插了,不过网上有关于sinx/x内插的c语言实例,使用线性内插后,波形比之前好看多了,通过调整TIM1的触发信号的频率达到了t/div 的作用如何算频率,一开始我打算把AD采集的结果的最大值和最小值的下标做个差,之后绝对值再乘tim1的周期 后来果断放弃,原因很明显。后来我查询最大值和最小值 之后求平均值,然后一次查询(前一个AD值比均值小且其后一个值比均值大)记录下标,之后查询前一个AD值比均值大且其后一个值比均值小 记录下标,将两次下标做差求绝对值之后与触发信号的频率运算可以求出采集的波形的频率。目前我仅仅测试了占空比为50%的方波信号,效果还好,不过还要完善,比如占空比不为50%的情况。


折腾了几个晚上,我发现STM32的资源很丰富,而我只掌握了很少很少的一部分基础的东西。以后要不断的完善和实践。将折腾的过程中遇到的问题和理解写出来与大家分享,其中有误的地方希望大家提出来交流。


推荐阅读

史海拾趣

明微公司的发展小趣事

在全球芯片市场不断扩大的背景下,明微公司面临着原材料供应紧张、价格波动等挑战。为了应对这些挑战,公司积极优化供应链管理,与供应商建立长期稳定的合作关系,确保原材料的稳定供应。同时,公司还加强了对市场需求的预测和分析能力,提前布局产能和库存,有效应对市场变化。这些措施的实施使明微公司在市场竞争中更加稳健。

风华邦科(FH-BK)公司的发展小趣事

在电子科技领域,FlyWin集团不断投入研发资源,致力于新技术的开发与应用。公司成立了专门的研发团队,专注于人工智能、物联网等前沿技术的探索。通过不断的技术创新,FlyWin成功推出了一系列具有自主知识产权的电子产品,如智能传感器、物联网解决方案等。这些产品不仅提升了公司的市场竞争力,也为公司的长远发展提供了强大的技术支撑。

Fair Rite公司的发展小趣事

随着全球进入数字化、网络化、智能化时代,电子元器件市场发生了深刻的变化。Fair Rite积极应对市场变化,通过技术创新和产品研发,不断推出适应新需求的产品。例如,公司针对EMF/EMI干扰较严重或容易出现导漏流问题的情况,推出了EMI抑制铁芯线圈(SM-BL系列),帮助客户节省PCB空间并降低干扰信号。同时,Fair Rite还注重满足客户的性价比需求,为每个新产品进行定制化设计和质量验证(遵循ISO9001:2008标准),确保其在不同应用场景下稳定可靠。

这些故事展示了Fair Rite在电子行业中不断发展壮大的历程。通过不断创新、拓展市场和提升品质,Fair Rite已经成为电子行业中的佼佼者之一。

Astec [Astec America, Inc]公司的发展小趣事

随着技术的不断成熟和市场的不断扩大,Astec开始积极寻求市场拓展的机会。公司不仅加大了在国内市场的宣传力度,还通过参加国际电子展会等方式,将产品推向了国际市场。同时,Astec还注重品牌形象的建立,通过提供优质的产品和服务,逐渐树立了良好的品牌形象。

FETek Technology(东沅)公司的发展小趣事

随着业务的不断扩展,东沅开始寻求国际化的发展道路。他们积极参加国际电子展会和技术交流活动,与全球各地的客户和合作伙伴建立了广泛的联系。同时,东沅还加大了对品牌建设的投入,通过广告宣传、媒体合作等方式提升品牌知名度和美誉度。这些努力使得东沅在国际市场上逐渐崭露头角,成为一家备受瞩目的电子企业。

台湾固锝(GD)公司的发展小趣事
根据输入信号的类型(如模拟信号、数字信号等)选择合适的放大器芯片和电路结构。

问答坊 | AI 解惑

国赛最新题目

本帖最后由 paulhyde 于 2014-9-15 09:06 编辑 各位参加09国赛的同学 有可靠的题目不要私藏了 大家研究研究  …

查看全部问答>

数据总线操作时遇到的难题,请大家指点一下

在我的电路板上(现在只焊了最小系统部分)对LPC2292进行数据总线操作时,用示波器测到脉冲的高电平只有600mV样子,加了10K上拉电阻之后,电平也只能到1.5V样子,同样的程序我下载到Magic ARM2200开发板上时,用示波器测到的脉冲的高电平能达到3.3V ...…

查看全部问答>

波特图的相位是这样看的吗?

先选一个参考位,为-180.那么-90~-180为相位超前。比-180小的为相位滞后。对吗? …

查看全部问答>

全国电子设计大赛赛后感

本帖最后由 paulhyde 于 2014-9-15 09:23 编辑 国大学生电子设计竞赛给我们提供了一个培养创新、协作和钻研精神的平台,是大学生展现自己、积累经验的舞台。激情创造,精彩无限!参加过“索尼杯”电子设计竞赛的人,都从中体会到了奋斗的快乐、团 ...…

查看全部问答>

ADC问题

大家好,关于ADC问题请教大家:1)我要用到20通道AD,选的芯片是STM32F103ZCT6,用到ADC3、ADC1,设置如下:void ADC3_Configuration(void){    ADC_InitTypeDef ADC_InitStructure;    &n ...…

查看全部问答>

05.16【每日一问】:PWM

今天起晚了 想早点起来发问题的   大家讨论讨论啊   你是怎样理解或者计算PWM的精度和分辨率的   可以用实际的程序来讨论或者计算 …

查看全部问答>

见过双卡双待的,见过双电池的手机吗

看电池的商标,打的是基伍,在印度曾经是市场占有率第一哦!…

查看全部问答>

提交试卷的时候出现这个

在提交试卷的时候出现了atel学习平台的登陆界面,是不是就是提交失败了 ?…

查看全部问答>

俞洪敏:跟什么样的老板会倒霉

    “年轻人进入职场,都希望先拿高薪,再认真工作,心里想的是我工资待遇不够,凭什么努力工作。但实际上最后真正在职场取胜的,是那些不计较个人得失辛勤工作,持续不懈努力的人。”俞敏洪告诉刚入职场的年轻人,不要太计较一开始的薪 ...…

查看全部问答>