之前有小伙伴提到需要虚拟示波器的资料,有些库还有文件丢失了,直接给的工程跑不起来,这里我把关键的地方讲解一下,大家可以自行开发。其实开发不难,只是有些点会耗点时间。虚拟示波器,顾名思义就是非实物的示波器,但也还是硬件(便携的采集设备)和软件(在电脑上显示和操作)的结合,和数字示波器相比,本质上区别不大,现在贵一些的数字示波器从功能上看,也很像一台计算机了)。今天要讲的只是低配的,简易版的虚拟示波器(在下当年的毕业设计)。下位机是基于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开发的虚拟示波器的更多相关文章

  1. labview入门到出家10(进阶)——CAN通讯

    ​          讲完串口,这边再讲一个labveiw工控程序中比较常用的CAN通讯吧.很久没有写过CAN通讯的程序了,网上一搜就是什么现场总线,控制器局域网总线,然后一堆复杂的协议.在这里还是一 ...

  2. labview从入门到出家5(进阶篇)--程序调试以及labview函数库的运用

    跟了前面几章的操作流程,相信大家对labview有了一定的认识.其实只要了解了labview的编程思路,再熟悉地运用各个变量,函数以及属性,那么我们就可以打开labview的大门了.跟其他编程语言一样 ...

  3. labview从入门到出家6(进阶篇)--移位寄存器的使用

    前面介绍了如何熟悉和使用Labview自带的库函数以及调试方式,大家后期基本可以凭借这两个方式从入门到出家了,哈哈,后面就靠各位同仁99%的努力了.这篇为啥要讲移位寄存器呢,主要是之前做的项目和经验告 ...

  4. labview从入门到出家9(进阶篇)--串口通讯

    ​ Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...

  5. 【原创】NIO框架入门(一):服务端基于Netty4的UDP双向通信Demo演示

    申明:本文由作者基于日常实践整理,希望对初次接触MINA.Netty的人有所启发.如需与作者交流,见文签名,互相学习. 学习交流 更多学习资料:点此进入 推荐 移动端即时通讯交流: 215891622 ...

  6. 【原创】NIO框架入门(二):服务端基于MINA2的UDP双向通信Demo演示

    前言 NIO框架的流行,使得开发大并发.高性能的互联网服务端成为可能.这其中最流行的无非就是MINA和Netty了,MINA目前的主要版本是MINA2.而Netty的主要版本是Netty3和Netty ...

  7. JAVA WEB快速入门之从编写一个基于SpringBoot+Mybatis快速创建的REST API项目了解SpringBoot、SpringMVC REST API、Mybatis等相关知识

    JAVA WEB快速入门系列之前的相关文章如下:(文章全部本人[梦在旅途原创],文中内容可能部份图片.代码参照网上资源) 第一篇:JAVA WEB快速入门之环境搭建 第二篇:JAVA WEB快速入门之 ...

  8. Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制

    Spring入门6事务管理2 基于Annotation方式的声明式事务管理机制 201311.27 代码下载 链接: http://pan.baidu.com/s/1kYc6c 密码: 233t 前言 ...

  9. Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

随机推荐

  1. vue2.x版本中Object.defineProperty对象属性监听和关联

    前言 在vue2.x版本官方文档中 深入响应式原理 https://cn.vuejs.org/v2/guide/reactivity.html一文的解释当中,Object.defineProperty ...

  2. 聊聊 node 如何优雅地获取 mac 系统版本

    背景 今天突然碰到了一个兼容性需求,需要根据不同 macOS 版本,进行不同的兼容性处理. 没想到看似简单的需求,中间也经历了一番波折,好在最后解决了问题. 在此记录一下解决问题的过程,也方便其他有类 ...

  3. [AcWing 26] 二进制中1的个数

    点击查看代码 class Solution { public: int NumberOf1(int n) { unsigned un = n; int res = 0; while (un) { re ...

  4. [AcWing 771] 字符串中最长的连续出现的字符

    点击查看代码 #include<iostream> using namespace std; string str; int n; int main() { cin >> n; ...

  5. [java并发编程]基于信号量semaphore实现限流器

    目录 一.什么是信号量 二.信号量类Semaphore 三.实现限流器 欢迎关注我的博客,更多精品知识合集 一.什么是信号量 "信号量"在编程术语中使用单词semaphore,那什 ...

  6. 1.0 vue开篇之作

    vue官网链接:https://cn.vuejs.org/ 一. vue简介 vue目前分为2.X版和3.X版,本文以2.X版为准,后续会更新3.X版本相关教程,建议从2.X版开始学起,因为此版本经过 ...

  7. 实验二——以点类 Point 为基类设计圆类 Circle

    学习内容:以点类 Point 为基类设计圆类 Circle 示例代码: package 实验二; import java.util.Scanner; class Point{//父类Point pri ...

  8. Tmux终端复用神器使用心得

    tmux在连接远程服务器做实验时很有帮助,可以为每一个项目设置一个Session,在Session中设置不同的Window同时跑多个实验,Window本身还可以分割为多个Pane,在一个视野内利用多个 ...

  9. 2021.04.24【NOIP提高B组】模拟 总结

    2021.04.24[NOIP提高B组]模拟 总结 T1 题意:有一圈数.两两之间有加法或乘法操作, 问你开始断掉那条边使得剩下的序列经过某种操作后的值最大 看上去是个区间 dp .然后直接断环成列, ...

  10. mybatis-plus分页插件

    package com.tanhua.server.config; import com.baomidou.mybatisplus.extension.plugins.PaginationInterc ...