历史上的今天
返回首页

历史上的今天

今天是:2024年10月30日(星期三)

正在发生

2019年10月30日 | STM32采集AD电压

2019-10-30 来源:eefocus

是否使用DMA传输

使用DMA传输,那么流程为:

ADC初始化,DMA初始化,TIM2初始化 

其中:TIM2作为ADC的中断源

当发生一次定时器的中断时,进入AD转换,在DMA的初始化时与ADC-DR寄存器进行绑定,在该寄存器获得数据时,直接通过DMA通道将该寄存器的数据保存在给定的数组里面,把缓存数组装满后,会触发一次DMA的中断,在DMA的中断里面将缓存数组保存到100个电压值的数组里面。

定时器设为200us发生一次中断,来进行一次AD转换,获得寄存器里面的数据以后,保存在数组,保存100个数组后停止定时器的工作以及DMA的工作,对这份数据进行处理。 

至此,DMA工作的流程已经结束,那么其中又怎样的缺漏导致不用DMA进行操作,按照上述流程获得的100个离散点的电压是较为准确的(PS:这里可以把TIM2的定时中断时间改为采集32个点的625us或者采集64个点的312us),但是,如果只是放置在采集单相电压电流可以考虑,如果采集多相的电流电压,就要考虑到相位的问题,在之前的思路中

使用定时采集,流程为:

ADC初始化、定时器TIM3初始化 

这里的TIM3的中断时间为100us

进过200us,即0.2ms,启动AD转换,比如三相交流电压,依次对A,B,C三通道AD进行转换,获得当前的电压值,保存在数组里面。

当保存了100个数据以后,如果不考虑误差,那么0.2ms*100=20ms,即为50Hz电压的一个周期的时间采集到的电压值,采集到的100个离散点使用均方根公式进行求值获得该通道的电压的有效值。

在此转换中,进过0.2ms进行一次转换,不停止,功耗比较大,但是每次获得数据后,都要通过数据是否过上升沿下降沿开始,判断有无错相。(关于是否错相算法见下文)

总结

对比两个流程可以知道:如果不考虑相位问题,那么可以使用DMA+ADC采集数据,比如0.5s开启一下DMA与定时器采集一次,采集到的100个数据保存在数组里面,关闭定时器与DMA,采集好以后进行处理一下存储在当前电压值的变量里面,但是这样的一组周期内的电压,存在着可能无法判断是否错相的情况,比如采集ABC三相,当A出现下降沿过抬高电压位置时,开始计时,可能从这时开始到这个周期结束没有发生B相出现上升沿过抬高电压的情况,这样判断错相就会出现问题,当然,也可以直接使用DMA+ADC去类似0.2ms就进行一次转换,不间断的进行这个流程,这个方式我认为与0.2ms手动开启AD转换,不经过DMA传输直接读取寄存器ADC-DR的值相差的功耗不大。(待测)


算法

采集

AD采集到的数据进行处理获得当前的瞬时电压值: 

ADC_DR/当前电压值 = 4096/3300毫伏 

即 当前电压值 = (ADC_DR*3300)/4096; 

在程序中我们对其进行了简化,最终的公式为 

当前电压值 = (ADC_DR*825)>>10 

就这样,我们保存了一个周期内100个点的电压值,也就是100个正弦波形上的离散点。

计算

根据100个离散点求得该引脚的电压的有效值: 

均方根公式:


这个网上不少,直接百度即可

Xi为离散点的电压值,N为100,Xrms为电压有效值 

其中要注意的是:Xi²实则为(引脚处电压 – 抬高电压)²


错相判断

下面为正相序时的波形图:


改天抽时间重画,原来的文件没了

譬如检测AB有无错相,当A出现下降沿并且过0点时(实际程序中是过抬高电压值时),开始计时,当B出现上升沿并且过0点时停止计时,这段时间T = 16.67ms,如果考虑一些特殊情况,比如电压的频率波动,开启计时的时间存在误差,可以假定T ≥15.5ms,AB为正相序。 

下面为反相序时的波形图:


由此图我们可以看出,依旧像上面说的那样,在A(假定是A)相电压出现下降沿过0点时开启计时,在B相电压出现上升沿过零点时停止计时,此时时间远远小于正相序时的时间,如果无误差时T = 3.3ms,考虑到上述误差影响,那么我们把时间T ≤3.6ms时判断得AB为反相序。在程序中扩大了一下范围,把这个判断是否为反相序的时间调整为4.0ms,如果这段时间小于4.0ms,那么就认为是错相,大于的话默认为正相序。


错相与缺相的逻辑判断:

<1>. 当存在缺相时,不执行错相判断函数; 

<2>. 当存在缺相时,将通信返回的内容里面的错相位置为0,只将缺相对应位置为1。 

<3>. 当不存在缺相时,只判断AB是否错相,从A出现下降沿过0点开始计时,B出现上升沿过0点关闭计时,判断是否小于4.0ms,若是,则将错相位全部置为1,如果不是,全部置为0。 

<4>. 关于缺相判断,在求得电压的有效值后,有一个范围,目前设定为50mv,如果小于50mv,说明该相电压缺相。


推荐阅读

史海拾趣

Global Power Technologies Group公司的发展小趣事
通过调整RC时间常数,可以实现信号的延时输出,用于信号处理、控制系统等领域。
ADATA公司的发展小趣事
在数字电路中,集基耦合单稳态电路可以用于将高频信号分频为低频信号。
Antex公司的发展小趣事

到了1965年,Antex公司迎来了一次重要的技术突破。公司成功研发出“环形件轧机”,这一创新技术不仅提高了生产效率,还大幅提升了产品的精度和稳定性。这一技术的成功应用,使得Antex的业务范围得到了进一步扩大,公司在电子行业中的地位也愈发稳固。

BTCPower公司的发展小趣事

随着技术的不断成熟和产品的广泛应用,BTCPower开始寻求更广阔的市场空间。公司积极与国际知名电子品牌进行合作,将其产品推向全球市场。通过与这些品牌的合作,BTCPower不仅提升了自身的品牌知名度,还获得了更多的商业机会和市场份额。

EDSYN公司的发展小趣事

2014年,Econais宣布推出新一代IEEE802.11b/g/n Wi-Fi模块——EC19D01。这款模块是物联网领域的一次重大突破,它采用了系统级封装(SiP)技术,实现了世界上最小、最容易集成和最低待机功耗的Wi-Fi模块。EC19D01的推出,进一步巩固了Econais在超低功耗物联网微型Wi-Fi模块领域的领先地位。

Hammond公司的发展小趣事

为了帮助客户更便捷地将设备连接到物联网,Econais与Xively展开了合作。通过这一合作,Econais的WiSmart Wi-Fi用户可以无缝连接到Xively云,为工业、商业和住宅市场带来了创新的医疗保健、智能能源、无线音频控制和监控产品。这种一站式的物联网解决方案大大加快了物联网产品的上市时间,同时也降低了产品的开发成本。

问答坊 | AI 解惑

微软Win 7出来了,你用了么?

据国外媒体报道,摩根士丹利分析师凯瑟琳·胡博蒂(Kathryn Huberty)于近日发布报告称,微软Windows 7的发布极大地推动了PC的销量增长。 根据市场调研机构NPD的数据,在截至10月24日的一周,PC销量同比增长了40%,这一周当中有三天是在Windows 7 ...…

查看全部问答>

.net cf2.0 装载项目的图片资源时,vs2005,调试时老弹出窗口提示文件找不到

在哪儿可以关掉这个提示? wince6.0 我把项目\\resource目录下的图片都设为嵌入方式了。但是在调用的时候老是找不到文件:NotFoundFileException和UnAuthorizedAccessException---但是图在form上会正确的显示出来,微软的bbs说是cf2.0的bug ...…

查看全部问答>

问个单片机数据接收问题!(应该比较简单,来就送分)

    单个字符接收没什么问题,多字节接收不行了!比如我要从串口调试助手送出一串字符(AAC234,7568等),单片机接收后存到缓存里?有几个菜的问题先问下:这个字符串是动态的,个数不定,是不是只要将接收数组定义大点就可以,数据处理 ...…

查看全部问答>

EVC下的定时函数问题

我在网上看到有人说在EVC下定时函数timeSetEvent()可以用, 但我不知道该怎么用,望高手教教我。最好是有示例代码。 参与讨论着也有分(除专门接分者)。…

查看全部问答>

DMA接收溢出的问题

请教各位高手 如果DMA接收设置为4个字节,但发了5个字节时,会吧数组前面的字节覆盖掉,等下一次在发送4个字节的时候,DMA接收数组还是串了一个字节?怎么解决呢?…

查看全部问答>

load program 时候出错拉!

我 load program 时总是提示在程序空间的VECT的首地址处失败,vector.asm分配到VECT空间, 着是怎么回事啊?请高手指点,谢谢拉 …

查看全部问答>

NPX1代表了世界第一代的远程轮胎压力检测(RTPM)传感器。

NPX1传感器集成了硅压力传感器,温度传感器,电压力传感器和低功耗8位RISC处理器,以及一个低频唤醒输入级以满足市场上对灵活、客户定制性能、解决方案和降低总体成本的需要。 在开发阶段,可以提供一个可编程版本的传感器,使用户可以下载应用程 ...…

查看全部问答>

大伙都怎样学习FPGA

我目前大三下,就读于电子科技大学(成都),接触FPGA半年多了。上学期报了个私人培训班,设计过一些小的程序(异步FIFO,SDH帧头搜索,SPI接口,SDRAM存储视频信号)。这学期想去公司找实习,但相关公司都不找实习生的。由于不想考研,课也就基本上 ...…

查看全部问答>

提问+MSP430的ADC10CLK的最大值可达6.3MHz MSP430的最大采样率是多少

ADC10CLK的最大值可达6.3MHz 为什么测试只到2.6M(根据200Ksps推算的值) MSP430的最大采样率是多少,注意芯片手册上的200Ksps的单位是转换率,而不是采样率,采样率包括前期的采样保持+数值转换。…

查看全部问答>