找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5808|回复: 0
打印 上一主题 下一主题
收起左侧

STM32多功能双通道数字示波器,虚拟信号分析仪设计资料

[复制链接]
跳转到指定楼层
楼主
软件运行界面:

Stu-02型双通道数字示波器,是一款以“低成本、高性能”为设计目标,精心设计的200K、400KS/s、2通道的虚拟示波器。通过USB将采集数据快速的传输给PC,借助PC的强大计算能力,可以完成对采集数据的“波形合成”、“滤波处理”、“李萨茹图形”、“幅频”、“相频”、“对数幅频”、“自功率谱”、“对数自功率谱”、“自相关”和“互相关”的分析功能。其中滤波器,支持设计IIR和FIR滤波器设计。IIR支持“巴特沃斯”、“切比雪夫I”、“切比雪夫II”、“椭圆”和“贝塞尔”类型的滤波器设计;FIR支持“矩形窗”、“三角窗”、“汉宁窗”、“海明窗”、“布莱克曼窗”和“凯塞—贝塞尔窗”。


1. 简介
“低成本和高性能”为设计思想, 借助虚拟仪器的概念和高速的数字信号处理算法将传统的函数发生器、 示波器、 数据记录仪、 频率计、 谱分析仪以及滤波器设计和仿真等功能高度集成、统一平台方便使用。
软件环境支持声卡、 USB模块和虚拟仿真,三种模式。声卡模式,可以借助电脑的声卡来完成对音频范围内信号的分析和处理; USB模块,可以完成对带宽允许内的信号的分析和处理;其中仿真模式采用软件模拟来实现所有的功能,便于教学和理论的演示  
2. 特性说明
带宽 200K
采样率 400KS/s
通道 2
输入电压范围  [-150,150V]
存储深度              8K*2
AD采样位数 8位
软件触发              上升沿、下降沿、上升/下降沿、差分、上下+差分
分析功能              波形合成:波形相加 波形相减 波形相乘,
滤波处理:支持设计IIR和FIR滤波器。IIR支持“巴特沃斯”、“切比雪夫I”、“切比雪夫II”、“椭圆”和“贝塞尔”类
型的滤波器设计;FIR支持“矩形窗”、“三角窗”、“汉宁窗”、“海明窗”、“布莱克曼窗”和“凯塞—贝塞尔窗”,
波形分析:李萨茹图形、幅频、相频、对数幅频、自功率谱、对数
自功率谱、自相关、互相关。
抓帧功能              支持连续抓帧功能
传输接口 USB2.0

3. 示波器使用说明
当将Stu-02型的USB和电脑相连后,软件会自动检测到,并和硬件建立连接。在数字存储示波器右侧工作区“属性控制”的顶端便会出现一个Stu-02(N)的下拉选项,N会随不同的电脑而不同,用于区别多个的相同的设备。选择该选项后弹出如图3.1的界面。

3.1 通道控制 “通道控制”里的“左通道”和“右通道”用于启动和关闭对应的示波器通
道。

3.2 自动和暂停 当打开示波器后,点击“自动”可以开启示波器的自动检测功能;点击“暂停”可 以将采集数据暂停。
3.3 触发条件 “触发”可以是硬件触发和软件触发。
硬件触发采用硬件电路触发;软件触发只是 将采集的数据,采用算法来进行触发。
软件触发:选择软件触发后, “触发 源”可以是“各自”、“左通道”和“右通 道”; “触发条件”可以是“不触发”、“上升 沿”、“下降沿”、“上升/下降沿”、“差 分”和“上下+差分”;“触发电平”用于设 置触发的电平;”触发延迟”用于设置触发 点,向前或向后的数据显示比例。

说明:
a、触发:“硬件触发”采用硬件电路的触发;“软件触发”采用软件触发。
b、触发源:“各自”,两个通道,各自对采集的. 数据进行触发;“左通道”,右通道使用左通道的触 发点,而不是采用自己的触发点;“右通道”,左通 道使用右通道的触发点,而不是采用自己的触发点。
c、触发条件:“不触发”,对于硬件电路,不触发直接采集,对于软件触发,采集的数据 直接显示,不做任何触发;“上升沿”,检测到上升沿并且高于触发电平便触发;“下降沿”,检 测到下降沿并且低于触发电平便触发;“上升/下降沿”满足上述“上升沿”或“下降沿”情况就触发;“差分”触发电平为正值时,当两次的数据采集的差大于 触发电平设置的值便触发(此时波形应该是上升的),当触发电 平为负值时,当两次的数据采集的差觉得值大于触发电平设置的

图3.1属性设置

值的绝对值便触发(此时波形应该是下降的);“上下+差分”当两次的数据采集的差大于或小于 触发电平设置的值便触发。
d、触发电平用于设置触发的电平,对于沿触发和差分触发的意义不同,详细解释见d中。
e、触发延迟用于设置触发点,向前或向后的数据显示比例g。如果小于0就代表,就从“触发点-采集长度*g”处开始显示;如果大于0就代表,就从“触发点+采集长度*g”处开始显示。

3.4自动 和传统的示波器一样,点击“自动”以后,示波器将自动检测信号,并根据实际的信号调整显示界面。
3.5暂停
点击“暂停”可以,暂停示波器的数据采集。
3.6内插
支持自动和手动来内插,选择内插后,将根据给定的内插频率,当采集的波形的频率大于内插频率,系统就会启动正弦内插功能。

3.7 探头 当改变了示波器探头上面的×1,×10,需要在界面上选择相应的探头倍数,这样便可以正确的现实波形峰值。
3.8抓帧
如图3.1,在“属性设置”窗口的顶端,有“抓帧”按钮,点击便可以启动抓帧;“双通道”下拉复选框用于选择抓帧的通道,可以是“左通道”、“右通道”和“双通道”;“1帧”下拉复选框用于选择连续抓帧的帧数,可以是1~100帧。
抓取完成后,可以在“数据记录”选项卡里面,找到以日期的时间命名的txt文本文件,例如10-5+14-13-2+1.txt表示这是10月5日14时13分2秒抓取的第一帧数据。只要双击或者右键“导入分析”便可以将数据载入分析。
3.9 设备属性
“设备信息”显示了该设备的一些具体的参数。
3.10波形分析
请参照“多功能虚拟信号分析仪使用说明书”。

安装说明:
1.安装驱动

正确连接 9V/1A 电源适配器,主机指示灯亮,然后将方口 USB 数据线连接于主机与电脑直接,电脑右下角出现发现新硬件 STM Virtual Com Port,如下图所示,使用向导查找新硬件驱动,选择从列 表或指定位置安装(高级)(S), 点 击 下 一 步 (N)。


首先解压上位机驱动安装包,出现 driver 文件夹,将驱动浏览到 此文件夹,点击下一步(N)。


出现硬件安装警告,点击仍然继续(C)。



点击完成。

安装完成后,右下角会出现新硬件已安装并可以使用了,然后将 USB 线与电脑断开,在重新连接一次,此次即可正常驱动,检查“我 的电脑 属性 硬件 设备管理器”在端口中出现主机设备的正常连 接,如下所示,由于各个电脑中设备号均不相同,所以 COM 号各异 , 属正常现象。




2.软件互联

双击多功能虚拟信号分析仪软件图标,出现下图所示界面,详读 软件许可协议后,点击接受。



进入软件第一主界面,在显示界面上方有四个工作切换区,分别 是函数发生器、数字存储示波器、数据记录仪、滤波器设计。


如使用数字存储示波器功能,点击上方工作切换区,即弹出数字 存储示波器主界面,或在电脑下方工作区内多出一个软件,即数字存 储示波器,双击使其最大化,并选择波形界面最大化,软件右下方工 作条如下图所示。




点击属性设置,上方下拉列表中出现主机设备编号 Stu-0.2(X), 选择即可,如下图所示。




通道控制内有左、右通道选择开关,勾上后即可使用相应通道进
行示波显示功能,如下图所示,绿色信号线表示 CH1( 左 通 道 ), 红
色信号线表示 CH2( 右 通 道 )。

软件相应功能,请详见使用说明书。

stm32单片机源程序如下:
  1. /*
  2. * Copyright (c) 2010 仪星电子
  3. *
  4. * This program is free software; you can redistribute it and/or
  5. * modify it under the terms of the GNU General Public License
  6. * as published by the Free Software Foundation; either version 2
  7. * of the License, or (at your option) any later version.

  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. * GNU General Public License for more details.

  12. * You should have received a copy of the GNU General Public License
  13. * along with this program; if not, write to the Free Software
  14. * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  15. */

  16. /*
  17. * 著作权所有(C) 2010 仪星电子
  18. *
  19. * 本程序为自由软件;您可依据自由软件基金会所发表的GNU通用公共授权条款规定,
  20. * 就本程序再为发布与/或修改;无论您依据的是本授权的第二版或(您自行选择的)
  21. * 任一日后发行的版本。

  22. * 本程序是基于使用目的而加以发布,然而不负任何担保责任;亦无对适售性或特定
  23. * 目的适用性所为的默示性担保。详情请参照GNU通用公共授权。

  24. * 您应已收到附随于本程序的GNU通用公共授权的副本;如果没有,请写信至自由软件
  25. * 基金会:59 Temple Place - Suite 330, Boston, Ma 02111-1307, USA。

  26. * Email yixingdianzi@126.com
  27. * Email/MSN yixingdianzi@hotmail.com
  28. * QQ 648887464
  29. */

  30. /******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
  31. * File Name          : main.c
  32. * Author             : MCD Application Team
  33. * Version            : V3.1.0
  34. * Date               : 10/30/2009
  35. * Description        : Virtual Com Port Demo main file
  36. ********************************************************************************
  37. * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
  38. * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
  39. * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
  40. * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
  41. * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
  42. * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  43. *******************************************************************************/

  44. /* Includes ------------------------------------------------------------------*/
  45. //#include "stm32f10x.h"
  46. #include "stm32f10x_gpio.h"
  47. #include "usb_lib.h"
  48. #include "usb_desc.h"
  49. #include "usb_pwr.h"
  50. #include "qdmx_usb.h"
  51. #include "qdmx_adc.h"

  52. #define SEND 32

  53. /* Private typedef -----------------------------------------------------------*/
  54. /* Private define ------------------------------------------------------------*/
  55. /* Private macro -------------------------------------------------------------*/
  56. /* Private variables ---------------------------------------------------------*/
  57. /* Extern variables ----------------------------------------------------------*/
  58. extern __IO uint32_t count_in;
  59. extern uint8_t Controla_a;
  60. extern uint8_t Controla_b;

  61. /* Private function prototypes -----------------------------------------------*/
  62. /* Private functions ---------------------------------------------------------*/
  63. void Set_System(void);
  64. void Callback(uint8_t *p);
  65. void Delay(__IO uint32_t nCount);
  66. void GPIO_configure(void);                                       
  67. /*******************************************************************************
  68. * Function Name  : main.
  69. * Description    : Main routine.                                
  70. * Input          : None.
  71. * Output         : None.
  72. * Return         : None.
  73. *******************************************************************************/
  74. int main(void)
  75. {  
  76.         vu8 s;
  77.         /*设置系统时钟*/
  78.         Set_System();
  79.         
  80.         /*初始化USB模块*/  
  81.         Set_USBClock();
  82.         USB_Interrupts_Config();
  83.         USB_Init();
  84.         /*初始化AD模块*/
  85.         m_adc_clk_config();
  86.           m_adc_gpio_config();
  87.           m_adc_Interrupts_Config();
  88.           m_adc_init();

  89.         /*初始化GPIO引脚作为放大控制引脚*/
  90.         GPIO_configure();
  91.                                           
  92.           count_in=0;
  93.         /*默认初始值为放大1倍*/

  94.         GPIO_ResetBits(GPIOA,GPIO_Pin_0);
  95.         GPIO_ResetBits(GPIOA,GPIO_Pin_1);
  96.         GPIO_ResetBits(GPIOA,GPIO_Pin_2);

  97.         GPIO_ResetBits(GPIOB,GPIO_Pin_12);
  98.         GPIO_ResetBits(GPIOB,GPIO_Pin_13);
  99.         GPIO_ResetBits(GPIOB,GPIO_Pin_14);

  100.           while (1)
  101.           {                 
  102.           }
  103. }

  104. void GPIO_configure(void)
  105. {
  106.         GPIO_InitTypeDef GPIO_InitStructure;

  107.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
  108.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);
  109.         
  110.         RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
  111.         RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE);               

  112.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14;
  113.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  114.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  115.           GPIO_Init(GPIOB, &GPIO_InitStructure);

  116.         
  117.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2;
  118.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  119.           GPIO_Init(GPIOA, &GPIO_InitStructure);
  120. }

  121. void Delay(__IO uint32_t nCount)
  122. {
  123.   for(; nCount != 0; nCount--);
  124. }


  125. void Callback(uint8_t *p)
  126. {
  127.         if (GetENDPOINT(ENDP1) & EP_DTOG_RX)
  128.         {
  129.                    FreeUserBuffer(ENDP1, EP_DBUF_IN);
  130.                    UserToPMABufferCopy((uint8_t*) p, ENDP1_TX1ADDR, SEND);
  131.                    SetEPDblBuf1Count(ENDP1,EP_DBUF_IN,SEND);
  132.         }
  133.         else
  134.         {
  135.                    FreeUserBuffer(ENDP1, EP_DBUF_IN);
  136.                    UserToPMABufferCopy((uint8_t*) p, ENDP1_TX0ADDR, SEND);
  137.                    SetEPDblBuf0Count(ENDP1,EP_DBUF_IN,SEND);
  138.         }
  139. }

  140. #ifdef USE_FULL_ASSERT
  141. /*******************************************************************************
  142. * Function Name  : assert_failed
  143. * Description    : Reports the name of the source file and the source line number
  144. *                  where the assert_param error has occurred.
  145. * Input          : - file: pointer to the source file name
  146. *                  - line: assert_param error line source number
  147. * Output         : None
  148. * Return         : None
  149. *******************************************************************************/
  150. void assert_failed(uint8_t* file, uint32_t line)
  151. {
  152.   /* User can add his own implementation to report the file name and line number,
  153.      ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

  154.   /* Infinite loop */
  155.   while (1)
  156.   {}
  157. }
  158. #endif

  159. /*******************************************************************************
  160. * Function Name  : Set_System
  161. * Description    : Configures Main system clocks & power
  162. * Input          : None.
  163. * Return         : None.
  164. *******************************************************************************/
  165. void Set_System(void)
  166. {
  167.   ErrorStatus HSEStartUpStatus;
  168.   /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   
  169.   /* RCC system reset(for debug purpose) */
  170.   RCC_DeInit();

  171.   /* Enable HSE */
  172.   RCC_HSEConfig(RCC_HSE_ON);

  173.   /* Wait till HSE is ready */
  174.   HSEStartUpStatus = RCC_WaitForHSEStartUp();

  175.   if (HSEStartUpStatus == SUCCESS)
  176.   {
  177.     /* Enable Prefetch Buffer */
  178.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  179.     /* Flash 2 wait state */
  180.     FLASH_SetLatency(FLASH_Latency_2);

  181.     /* HCLK = SYSCLK */
  182.     RCC_HCLKConfig(RCC_SYSCLK_Div1);
  183.   
  184.     /* PCLK2 = HCLK */
  185.     RCC_PCLK2Config(RCC_HCLK_Div1);

  186.     /* PCLK1 = HCLK/2 */
  187.     RCC_PCLK1Config(RCC_HCLK_Div2);

  188. #ifdef STM32F10X_CL
  189.     /* Configure PLLs *********************************************************/
  190.     /* PLL2 configuration: PLL2CLK = (HSE / 5) * 8 = 40 MHz */
  191.     RCC_PREDIV2Config(RCC_PREDIV2_Div5);
  192.     RCC_PLL2Config(RCC_PLL2Mul_8);

  193.     /* Enable PLL2 */
  194.     RCC_PLL2Cmd(ENABLE);

  195.     /* Wait till PLL2 is ready */
  196.     while (RCC_GetFlagStatus(RCC_FLAG_PLL2RDY) == RESET)
  197.     {}

  198.     /* PLL configuration: PLLCLK = (PLL2 / 5) * 9 = 72 MHz */
  199.     RCC_PREDIV1Config(RCC_PREDIV1_Source_PLL2, RCC_PREDIV1_Div5);
  200.     RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);
  201. #else
  202.     /* PLLCLK = 8MHz * 9 = 72 MHz */
  203.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
  204. ……………………

  205. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

0.png (36.86 KB, 下载次数: 91)

0.png

0.png (5.83 KB, 下载次数: 77)

0.png

0.png (2.52 KB, 下载次数: 84)

0.png

0.png (4.2 KB, 下载次数: 82)

0.png

0.png (6.09 KB, 下载次数: 86)

0.png

多功能虚拟信号分析仪上位机 (1).zip

2.96 MB, 下载次数: 39, 下载积分: 黑币 -5

下位机原理图和PCB源文件.zip

355.18 KB, 下载次数: 41, 下载积分: 黑币 -5

下位机源码和USB驱动.zip

1.09 MB, 下载次数: 36, 下载积分: 黑币 -5

测量图片以及信号分析仪说明书等.zip

7.21 MB, 下载次数: 33, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表