ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:420.36KB ,
资源ID:7505044      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7505044.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于stm32的示波器.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于stm32的示波器.docx

1、基于stm32的示波器 做一个数字采样示波器一直是我长久以来的愿望,不过毕竟这个目标难度比较大,涉及的方面实在太多,模拟前端电路、高速ADC、单片机、CPLD/FPGA、通讯、上位机程序、数据处理等等,不是一下子就能成的,慢慢一步步来呗,呵呵,好歹有个目标,一直在学习各方面的知识,也有动力:)由于高速ADC涉及到采样后的数据存储问题,大量的数据涌入使得单片机无法承受,因此通常需要用外部高速RAM加CPLD配合,或者干脆用大容量的FPGA做数据存储处理等,然后通知单片机将数据发送出去。这部分实在是难度比较大,电路非常复杂,自己是有心无力啊,还得慢慢地技术积累。正好ST新推出市场的以CORTEX-

2、M3为核心的STM32,内部集成了2个1Msps 12bit的独立ADC,并且内部高达72MHZ的主频,高达1.25DMIPS/MHZ的处理速度,高速的DMA传输功能,灵活强大的4个TIMER等等,这些真是非常有吸引力,何不用它来实现一个低频的数字示波器功能呢,我的目标是暂时只要定量定性地分析20KHZ以下的低频信号就行了,目标不高吧,用STM32可以方便地实现,等有了一定经验之后慢慢再用FPGA和高速ADC搞个100Msps采样的示波器!1、ADC转换:STM32增强型芯片内置的2个独立ADC,可以有16个通道,并且2个通道可以并行的同步采样,触发方式很灵活,可以通过TIMER以及外部电平等

3、方式触发,并行方式下ADC2自动同步于ADC1;ADC在最高速采样的时候需要1.5+12.5个ADC周期,在14M的ADC时钟下达到1Msps的速度,因为我主频是72M所以4分频后稍微高了点,18MHZ的ADC时钟,采样速度应该高于1M了。ADC 采样2路同时采样方式,用TIM2 CC2来生成时钟信号触发ADC来实现指定频率的采样。ADC1/ADC2采样的结果是一个word2、采样频率控制:由于STM32内部的4个TIMER非常强大,每个TIMER又有4个通道,再加上独立的预分配器,实际上可以实现任意分频,因此用TIM2 CC2来产生指定频率的时钟,用来触发ADC1连续采样。3、采样数据传输及

4、每次采样深度控制:ADC产生的转换数据通过高速DMA 通道1来传输置指定的内部RAM中,并且将DMA通道一设置成最高优先级,以保证数据准确,并且用DMA每次传输的个数来控制采样的深度,例如我要采集100个点那么就设置DMA传输100个次,每次从32位ADC转换寄存器传输一个word到RAM中,等完成了100次传输后,DMA通道自动停止(实际上ADC是一直按照要求的采样频率连续在后台采样,只是我去取数据而已),下次采集的时候我只要再设置下采样的个数使能DMA CHANNEL1就行了。4、与上位机通讯:通讯也是个难题,要达到快速地将大量数据发给上位机的目的,传输的速率肯定低不了,开始我想先用串口,

5、不过很快就放弃了,一则即使我用外部USB转串口的芯片最高也只能达到1M的速度,并且数据会丢失; 后来还是采用了网络传输的方式,用SPI 接口的ENC28J60芯片,这个芯片我在MEGA32和AT91SAM7S64上都用过,接口简单挺方便的,速度还可以,在SAM7S64上DMA凡是用UDP协议单向发送的速度可以达到400KB/S以上,这次用了STM32发现速度大增,经过我用STM32的DMA传输后,同样UDP协议单向发速度竟然达到了500KB/S以上,甚至最高可以达到600KB/S,这个真是意外的收获。5、上位机程序:还是用VS2005,我还是喜欢用C#,主要是微软的C#做得是在太舒服了,编辑器

6、智能化程度真高,缺点就是程序执行时候CPU利用率要高点,。波形显示还是用NI的measurementStudio8来实现,一个是漂亮方便,另外最要紧的就是MeasurementStudio8里面有一大堆数据处理的库,从简单的波形有效值计算,频率计算,到各种各样的函数滤波器功能,还有FFT频域分析,时域分析等等,但凡要用到的仪器相关处理里面都有,另外本来我打算要在模拟前端里面加一个相位锁定的电路,以固定显示的波形起点,后来发现MeasurementStudio8里面有个PeakDetector的类,用这个来实现波形的锁定连这个电路都可以省了。用MeasurementStudio8来实现实在是非常

7、方便,并且准确。只是我没啥资料,还在探索当中ENC28J60网络子卡以及自己DIY的信号发生器照片,下面的绿板子是STM32的评估板 数据采样后输出到PC上显示的图形很精确,包括MAX038产生的正弦波上部的小尖峰也很清楚,STM32的ADC精度很稳定性相当好,对于音频范围的低频信号来说,1Msps的采样也基本够用了。只要采集足够的点送给measurementsudio提供的函数来分析,可以达到非常精确的程度,12BIT的分辨率相当于数字表的3位半的效果,用来测试信号的频率、真有效值、峰值、峰峰值等等非常方便和精确,和我用硬件实现的频率计和真有效值的读数相同(这也说明了我做的信号发生器的硬件是

8、准确的,哈哈,之前跟数字表总对不上,看来是数字表准确度差),实现完全可以当作低频示波器来用,再加上个模拟前端电路,完全可以实用化了上位机的程序还处在对于measuremenStudio的摸索当中,只是初步了解到了几个函数,用它来实现数据处理实在是方便,lookpublic void DataReceived_Proc() /UDP数据接收、数据处理、数据显示函数trywhile (bStates)myudpcomm.Receive(ref CommReceiveBuffer);Received_Command = Bytes2Struct(ref CommReceiveBuffer);/tex

9、tBox3.Text = Received_Command.SampleRate.ToString() + (acEstimate+).ToString();dADC1_Result = new doubleReceived_Command.SampleDepth;dADC2_Result = new doubleReceived_Command.SampleDepth;/数据处理,将通讯接收区中的ADC数据传入绘图用数组中for (int i = 0; i (int)(Received_Command.SampleDepth); i+)dADC1_Resulti = (BitConverte

10、r.ToUInt16(CommReceiveBuffer, 40 + 4 * (i + 0) * (3.3 / 4096.0);dADC2_Resulti = (BitConverter.ToUInt16(CommReceiveBuffer, 40 + 4 * (i + 0) + 2) * (3.3 / 4096.0);str = 通道A(绿色)rn;/测试真有效值Measurements.ACDCEstimator(dADC1_Result, out acEstimate, out dcEstimate);/交流(AC方式相当于信号通过一个电容隔直后进行测量)和直流(DC直通方式进行测量)真

11、有效值测量str += AC方式有效值: + (int)(acEstimate * 1000).ToString() + mV + DC方式有效值 + (int)(dcEstimate * 1000).ToString() + mVrn;/测试信号频率、振幅VpmySingleToneInformationADC1 = new SingleToneInformation(dADC1_Result, Received_Command.SampleRate);str += 频率: + (int)(acEstimate * 1000)=0 ? 0:(int )mySingleToneInformat

12、ionADC1.Frequency).ToString() + Hz + 振幅Vp: + (int )mySingleToneInformationADC1.Amplitude*1000).ToString() + mVrn;str += rn通道B(红色)rn;/测试真有效值Measurements.ACDCEstimator(dADC2_Result, out acEstimate, out dcEstimate);/交流(AC方式相当于信号通过一个电容隔直后进行测量)和直流(DC直通方式进行测量)真有效值测量str += AC方式有效值: + (int)(acEstimate * 100

13、0).ToString() + mV + DC方式有效值 + (int)(dcEstimate * 1000).ToString() + mVrn;/测试信号频率、振幅VpmySingleToneInformationADC2 = new SingleToneInformation(dADC2_Result, Received_Command.SampleRate);str += 频率: + (int)(acEstimate * 1000) = 0 ? 0 : (int)mySingleToneInformationADC1.Frequency).ToString() + Hz + 振幅Vp:

14、 + (int)mySingleToneInformationADC1.Amplitude * 1000).ToString() + mVrn;textBox3.Text = str;/ThresholdPeakDetector.Analyze用来找出从波谷到波峰上升沿顶点的数组序号/可以用于固定显示波形从上升沿的某固定点开始,相当与硬件的同步触发电路功能/b = ThresholdPeakDetector.Analyze(dADC2_Result, 2, 10);/foreach (int k in b)/textBox3.Text += k.ToString() + ;/for (int i = 0; i CCR &= (1IFCR |= 0x0000000F;/清除CHANNEL1的4个标志DMA_Channel1-CNDTR = (u16)Transfer_ReceiveData_Buffer.InWord.SampleDepth;/重新设置要设置的DMA传输数据量DMA_Channel1-CCR |= (1ISR & DMA_FLA

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1