labview入门到出家11(补充)——基于单片机和labview开发的虚拟示波器
之前有小伙伴提到需要虚拟示波器的资料,有些库还有文件丢失了,直接给的工程跑不起来,这里我把关键的地方讲解一下,大家可以自行开发。其实开发不难,只是有些点会耗点时间。虚拟示波器,顾名思义就是非实物的示波器,但也还是硬件(便携的采集设备)和软件(在电脑上显示和操作)的结合,和数字示波器相比,本质上区别不大,现在贵一些的数字示波器从功能上看,也很像一台计算机了)。今天要讲的只是低配的,简易版的虚拟示波器(在下当年的毕业设计)。下位机是基于STM32的ADC采集实现的信号抓取,然后通过串口传到上位机中显示。单片机的ADC和串口传输,注定了这虚拟示波器采集的波形频率不会太高,之前能在上位机上还原得比较好的波形频率是25Khz以下,如果大家有其他更快的采集(DSP,FPGA,NI采集卡)和数据上传的方式(USB等),可以尝试一下,也期待你们的分享。下面大体对硬件(外围电路),单片机程序(STM32),和上位机程序(labview)三部分进行讲解。

编辑
1、硬件
硬件很简单,就是将输入到单片机的波形信号进行处理。因为我用的STM32的单片机,能检测到的电压值是0~3.3V,所以硬件部分就是把输入的交流信号先控制在-1.65V~1.65V之间,最后再通过电路将信号往上偏置1.65V就可以给单片机采集了。至于如何将信号放大放小,控制到可采集的电压范围呢,可以通过上位机发送串口数据给单片机,让单片机控制继电器(或者其他开关方式)切换运放端的电阻,达到更改运放倍数的方式,最后上位机呈现波形的时候加上放大缩小的倍数,就可以在上位机界面上还原波形信号了。我这里先采用了LM358的双电源运放芯片(交流信号,需要双电源运放芯片),后面因为LM358在高频输入的时候,运放输出的信号在零点处会失真,换了一款高频的运放芯片UA741,问题解决。双电源里面的负电压是通过LCL7660输出的。至于偏置电压,是我在multisim上面仿真出来的,实际测试后确实可以偏置,大家可以尝试使用1比1的运放后加偏置电压,也可以参考我的设计电路。附上完整电路图。

编辑
1-1:运放电路
这是直接用了毕业设计里面的图片,之前的文件不见了。应该能看懂吧 。运放采用的是最简单的负反馈放大电路。放大倍数Vout/Vin=R1/R2。

编辑
1-2:负电压电路
由于运放芯片想运放负极电压信号,需要采用双电源模式,必须为运放芯片提供负电压。所以本设计采用低功率,额定电压为5V的电源极性转换器ICL7660。ICL7660输入5V正电压,输出-5V电压。为LM358提供双电源。本设计采用ICL7660的基本负电压转换模式。

编辑
1-3:1.65V偏置电路(自己仿真实现的,实测可用)

编辑
2、单片机软件
这个直接用STM32的单片机ADC采集和串口例程,将数据分高4位和低8位的方式(单片机串口只能上传8位的数据),将12位的ADC数据通过串口分别传输给上位机,ADC采样率调到最高,串口通过DMA的方式,这样可以达到最高的采集速度。最后分别用两个for循环,循环往串口发送1000个低8位和1000个高4位数据。每次发送两组1000个数据的间隔你们可以自己定,我记得我应该间隔是100ms左右刷新一次数据,上位机整合两组数据后,一次显示1000个数据点。ADC和串口传输数据的可以在STM32的例程中找到,具体逻辑这里不再累述。不过还是附上当年写的几条程序吧。

编辑
1、连续读取1000个ADC数据;
2、拆分低8位和高4位;
3、向串口上传低8位数据;
4、向串口上传高4位数据;
3、上位机
上位机在整合两次接收的数据,直接调用Labview提供的信号分析函数,如单频测量函数,频谱测量函数以及幅值和电平测量函数。
3-1:读取串口数据

编辑
3-2:整合高4位,低8位位数据。右侧输出直接给到波形显示控件

编辑
3-3:波形控件
前面板->控件->新式->图形->波形图。

编辑
4、最终整合后的虚拟示波器效果

编辑
采集的信号范围为5HZ~25KHZ(STM32F1系列采样率最高为0.5MS/s),0.1V~16.5V的模拟信号;幅值误差低于5%,频率误差低于2%,能满足日常中大多信号/电压的信号采集与分析。希望对大家有所作用,也希望国内开源资源能越来越丰富吧。虽然一般技术不能给我们工程师带来多大的财富,但至少在某个年龄段,在追求一种引以为傲的技能的时候,能让我们感到充实,自豪,也是一种不错的人生体验呢!
原创不易,一键三连拉!
labview入门到出家11(补充)——基于单片机和labview开发的虚拟示波器的更多相关文章
- labview入门到出家10(进阶)——CAN通讯
讲完串口,这边再讲一个labveiw工控程序中比较常用的CAN通讯吧.很久没有写过CAN通讯的程序了,网上一搜就是什么现场总线,控制器局域网总线,然后一堆复杂的协议.在这里还是一 ...
- labview从入门到出家5(进阶篇)--程序调试以及labview函数库的运用
跟了前面几章的操作流程,相信大家对labview有了一定的认识.其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了.跟其他编程语言一样 ...
- labview从入门到出家6(进阶篇)--移位寄存器的使用
前面介绍了如何熟悉和使用Labview自带的库函数以及调试方式,大家后期基本可以凭借这两个方式从入门到出家了,哈哈,后面就靠各位同仁99%的努力了.这篇为啥要讲移位寄存器呢,主要是之前做的项目和经验告 ...
- labview从入门到出家9(进阶篇)--串口通讯
Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...
- 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示
申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...
- 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示
前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...
- JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识
JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...
- Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制
Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制 201311.27 代码下载 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 前言 ...
- Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级
1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...
随机推荐
- XCTF练习题---MISC---掀桌子
XCTF练习题---MISC---掀桌子 flag:flag{hjzcydjzbjdcjkzkcugisdchjyjsbdfr} 解题步骤: 1.观察题目,发现没有附件,只有一串代码. 2.根据代码内 ...
- Apollo的docker配置详解步骤
Apollo 的docker配置 基础环境 centOS7 + Docker服务 + mysql服务 1. 下载Apollo的包 git clone https://github.com/ctripc ...
- ubuntu 18及以上版本配置IP的方法,你get了吗
本文讲讲 Ubuntu 18 及以上版本配置 IP 的方法,为什么它值得一讲,因为以 Ubuntu 16 为首的版本的配置方法已经不适用了,如果你还不知道,那本文正好 get 一个新技能. Ubunt ...
- 《C++Primary》阅读简要总结
三月份的主要任务之一就是阅读C++Primary这本书,终于在昨天25号下午完成了基础部分的阅读,算是对基础知识整体梳理了一遍,开始看这本书大概可以追溯到去年12月份,在那之前看了C++的入门书籍&l ...
- 面试题|Docker的优缺点
开源Linux 长按二维码加关注~ 上一篇:Linux中几个正则表达式的用法 Docker解决的问题: 由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环 ...
- viewport布局
1.viewport实例 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <h ...
- 4┃音视频直播系统之浏览器中通过 WebRTC 进行桌面共享
一.共享桌面原理 共享桌面在直播系统中是一个必备功能 共享者:每秒钟抓取多次屏幕,每次抓取的屏幕都与上一次抓取的屏幕做比较,取它们的差值,然后对差值进行压缩:如果是第一次抓屏或切幕的情况,即本次抓取的 ...
- OSError: no library called "cairo-2" was found
环境 Windows 11 python 3.8.13 (anaconda->envs) PyCharm 场景 我使用了GitHub上的第三方组件进行GUI开发,https://github.c ...
- 【单片机】使用 sscanf 提取AT命令返回结果中的有效数据
摘要:1. sscanf函数 sscanf是C标准库函数,用于从字符串中读取格式化输入. 头文件: #include <stdio.h>函数原型如下: int sscanf(const c ...
- spring-boot @Async注解 解决异步多线程入库的问题
前言在开发过程中,我们会遇到很多使用线程池的业务场景,例如定时任务使用的就是ScheduledThreadPoolExecutor.而有些时候使用线程池的场景就是会将一些可以进行异步操作的业务放在线程 ...