本章节比较重要,欧意交易所app官方下载推荐的波形刷新方式都经过了大量测试验证。 5.1 波形快速刷新方案 5.2 示波器背景的快速刷新 5.3 系统上电,主界面无闪烁感 5.4 测量窗口的刷新 5.5 开关对话框时,界面的刷新方式 5.6 五个数值显示窗口的快速刷新 5.7 总结 5.1 波形快速刷新方案选择 波形快速刷新有很多方案需要测试,由于我们的GUI是采用的emWin,所以下面的这些测试都是基于emWin实现的。 (1)选择8位色还是16位色。 (2)使能三缓冲还是窗口存储设备。 (3)选用ARGB格式的emWin库还是ABGR格式的库。 (4)将STM32F429超频后刷新是否有提升。 (5)使用存储设备函数GUI_MEMDEV_Draw绘制还是多缓冲函数GUI_MULTIBUF_Begin()和GUI_MULTIBUF_End()。 (6)使用函数GUI_DrawGraph还是GUI_DrawPolyLine绘制波形。 下面将这几个方案以此为大家做个说明。 5.1.1 选择8位色还是16位色 之前测试emWin刷颜色块,8位色可以跑到2亿多点每秒,而16位色是1亿多点每秒。实际测试发现8位色刷颜色块还行,刷波形却不行,比较卡,所以采用16位色。 也许有读者会问为什么不使用32位色?对于单片机来说,刷32位色比16位色要吃力。所以32位色也不考虑。 知识点拓展 新版emWin教程第34章:STemWin支持的颜色格式:?mod=viewthread&tid=19834 。 5.1.2 使用三缓冲还是窗口存储设备 对于STM32F429而言,使能三缓冲是指的用户要在LCDConf_Lin_Template.c文件中配置多缓冲,并在应用程序中调用函数WM_MULTIBUF_Enable(1)来使能。 使用内存设备是调用函数WM_SetCreateFlags(WM_CF_MEMDEV)来实现。 如果emWin的配置支持多缓冲和窗口存储设备,务必优先选择使用多缓冲,实际使用STM32F429BIT6 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效地降低窗口移动或者滑动时的撕裂感,并有效地提高流畅性,通过使能窗口使用内存设备是做不到的。所以我们示波器也是选择使用三缓冲。使能多缓冲方式如下: /* ********************************************************************************************************* * 函 数 名: MainTask * 功能说明: GUI主函数 * 形 参: 无 * 返 回 值: 无 ********************************************************************************************************* */ void MainTask(void) { /* emWin初始化 */ GUI_Init(); /* 使能多缓冲 */ WM_MULTIBUF_Enable(1); /* 省略 */ } 5.1.3 使用ARGB格式emWin库还是ABGR格式库 由于前面我们已经选择了使用RGB565颜色格式,对于这个颜色格式,使用ARGB格式的emWin库并没有性能提升,而且实际做应用代码还要注意额外的事项。所以继续使用ABGR格式库。 知识点拓展 专题教程第1期:基于STM32的硬件RGB888接口实现emWin的快速刷新方案,32位色或24位色:?mod=viewthread&tid=44512 。 5.1.4 将STM32F429超频后刷新是否有提升 STM32F429操作自带的Flash无法实现0延迟,随着设置的主频越高,延迟参数就要设置的越大, 参数手册中给的测试结果如下: 实际测试,将其超频到216MHz并没有任何性能提升,为了稳定起见,数字货币交易平台依然使用的168MHz。至于为什么不使用F429支持的180MHz,其原因在这个帖子里面有描述:?mod=viewthread&tid=16830 。 5.1.5 使用存储设备函数还是三缓冲函数做整体刷新 之前的一代示波器是采用下面的方式进行绘制的: GUI_MEMDEV_Draw(&Rect, _Draw, &Param, 0, GUI_MEMDEV_NOTRANS); 在函数_Draw里面实现波形显示区和波形的绘制,但是速度比较慢,600*480显示区的刷新率差不多10帧左右,现在做二代示波器显然不能再使用这种方法了,速度太慢,而且实际测试发现F429使用这种方式比一代示波器中F407采用这种方式要慢一点,这样的结果显然不是我们想要的。现在的绘制方式是采用的多缓冲函数: GUI_MULTIBUF_Begin(); /* 在这两个函数之间实现波形绘制 */ GUI_MULTIBUF_End(); 使用这两个函数做整体刷新,可以有效的避免波形刷新时的闪烁和撕裂感。 5.1.6 使用哪个函数绘制波形 之前一代示波器中波形的绘制是采用的函数GUI_DrawPolyLine,二代示波器中也采用这个函数的话,发现速度慢了好多,而使用函数GUI_DrawGraph却不存在这个问题。而且重新优化底层,函数GUI_DrawPolyLine的性能并没有提升,估计是内部执行机制的问题。使用函数GUI_DrawPolyLine的好处就是可以实现各种波形效果,鉴于这个函数性能比较差,所以还是继续使用GUI_DrawGraph。 5.1.7 使用单图层还是双图层 由于STM32F429的硬件双图层性能有限,而且使用emWin管理比较麻烦,所以二代示波器就采用单图层来实现。 5.2 示波器背景的快速刷新 示波器的界面显示效果如下: 波形显示区背景是固定的,所以上电后就将其绘制到存储设备里面,以后显示背景就可以直接调用存储设备的API函数。下面是示波器背景的绘制: /* ********************************************************************************************************* * 函 数 名: CreateWindowAmplitude * 功能说明: 创建幅值窗口 * 形 参: x0 左上角x坐标 * y0 左上角y坐标 * x1 右下角x坐标 * y1 右下角y坐标 * 返 回 值: 无 ********************************************************************************************************* */ void DSO_DrawBakFrame(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1) { uint16_t x; uint16_t y; /* 填充背景 */ GUI_SetBkColor(GUI_BLACK); GUI_ClearRect(x0, y0, x1, y1); GUI_SetColor(GUI_WHITE); /* 绘制水平刻度点 */ for (y = 0; y < 9; y++) { for (x = 0; x < 61; x++) { GUI_DrawPoint(x0 + (x * 10), y0 + (y * 50)); } } for (x = 0; x < 61; x++) { GUI_DrawPoint(x0 + (x * 10), y1); } /* 绘制垂直刻度点 */ for (x = 0; x < 12; x++) { for (y = 0; y < 41; y++) { GUI_DrawPoint(x0 + (x * 50), y0 + (y * 10)); } } for (y = 0; y < 41; y++) { GUI_DrawPixel(x1, y0 + (y * 10)); } /* 绘制最后脚上的那个点 */ GUI_DrawPixel(x1 - 1, y1 - 1); /* 绘制垂直中心刻度点 */ for (y = 0; y < 41; y++) { GUI_DrawPixel(x0 - 1 + (300), y0 + (y * 10)); GUI_DrawPixel(x0 + 1 + (300), y0 + (y * 10)); } GUI_DrawPixel(x0 - 1 + (300), y1); GUI_DrawPixel(x0 + 1 + (300), y1); /* 绘制水平中心刻度点 */ for (x = 0; x < 61; x++) { GUI_DrawPixel(x0 + (x * 10), y0 - 1 + (200)); GUI_DrawPixel(x0 + (x * 10), y0 + 1 + (200)); } GUI_DrawPixel(x1, y0 - 1 + (200)); GUI_DrawPixel(x1, y0 + 1 + (200)); } 通过下面的方式将示波器背景绘制到存储设备里面: hMemDSO = GUI_MEMDEV_CreateFixed(0, 0, 600, 400, GUI_MEMDEV_HASTRANS, GUI_MEMDEV_APILIST_16, GUICC_M565); /* 绘制示波器窗口背景 */ GUI_MEMDEV_Select(hMemDSO); DSO_DrawBakFrame(0,0,599,399); GUI_MEMDEV_Select(0); 以后程序中绘制示波器背景,仅需调用如下函数就可以实现 GUI_MEMDEV_WriteAt(hMemDSO, 40, 40); 实际测试这个函数仅需9-10ms就可以完成。 5.3 系统上电,主界面无闪烁感 为了追求极致的用户体验,需要解决板子开机后存在的两个问题。 1、界面整体加载 有时候界面设计比较复杂,开机后不能保证所有的控件同时加载出来,这个时候有个非常简单的解决办法,绘制前隐藏桌面窗口,绘制完毕后显示桌面窗口。 WM_HideWin(WM_HBKWIN); /* 初始化 DSO */ DSO_Init(1); WM_ShowWin(WM_HBKWIN); 2、上电瞬间产生的高亮 这个问题不仔细注意的话,数字货币交易所不容易看到。起初以为是软件配置问题,调试了下没有效果,后来又设置背光PWM的不同占空比,发现也不行。 后来干脆关闭PWM,而且也关闭emWin和LCD的图层,仅显示背景层,直接操作PWM引脚的高低电平。测试发现将其配置为低电平后,要延迟200ms左右再点亮LCD就没有问题了,延迟时间短了则会有个瞬间的高亮。知道了这个原因,程序中就好解决了,可以直接延迟200ms后再点亮,而这个二代示波器无需这么做,因为上电后需要将各种测量窗口的背景和波形显示区背景绘制到存储设备里面,正好用于替代者200ms延迟。 GUI_Init(); /* 先关闭背光 */ LCD_SetBackLight(0); /* 在这里加载各种窗口背景 */ /* 显示出所有的窗口 */ GUI_Exec(); /* 再开启背光 */ LCD_SetBackLight(255); /* 开启其它操作 */ 通过这种方式就完美解决了瞬间高亮的问题。 5.4 测量窗口的刷新 测量功能是指的下面的水平测量和垂直测量: 测量功能的数据显示不要以窗口的形式呈现,因为将窗口显示在波形显示区上会造成波形刷新慢。当前的方案是在绘制完毕波形后,直接2D函数绘制测量窗口,这种方式的实际效果好很多。 5.5 开关对话框时,界面的刷新方式 二代示波器主界面上有如下五个按键,点击后会弹出一个对话框。 我们这里要讨论的是关闭这个对话框时存在的问题。关闭这个对话框时,为了保证主界面整体的刷新效果,需要清背景的同时,将示波器波形显示区背景也一起刷出来(文件DSO_Init.c): GUI_SetBkColor(0x905040); GUI_Clear(); GUI_MEMDEV_WriteAt(hMemDSO, 40, 40); 通过这种方式,关闭对话框绘制的效果就好很多。 5.6 五个数值显示窗口的快速刷新 五个数值显示窗口是指的下面这五个: 主要有幅值窗口,两个状态窗口,频率窗口和系统信息窗口。这几个窗口的创建都是以对话框的形式创建,方便管理。对话框回调函数的WM_PAINT消息里面通过大量的2D函数进行绘制,每次刷新数值还是比较影响系统性能的,为了降低影响,需要提前将其绘制到存储设备里面,跟本章节5.2小节的方法类似。我们这里以其中一个状态窗口为例进行说明,WM_PAINT消息里面要绘制如下这些图形和字符: /* ********************************************************************************************************* * 函 数 名: PaintDialogStatus1 * 功能说明: 状态窗口的回调函数重绘消息 * 形 参:pMsg 指针地址 * 返 回 值: 无 ********************************************************************************************************* */ void PaintDialogStatus1(WM_MESSAGE * pMsg) { /* 清背景色 */ GUI_SetBkColor(0x905040); GUI_Clear(); /* 绘制填充的抗锯齿圆角矩形 */ GUI_SetColor(GUI_BLACK); GUI_AA_FillRoundedRect(0, 0, 509, 34, 10); /* 绘制抗锯齿圆角矩形 */ GUI_SetColor(0XEBCD9E); GUI_SetPenSize(2); GUI_AA_DrawRoundedRect(0, 0, 509, 34, 10); /* 绘制抗锯齿圆角矩形,并填数值1 */ GUI_SetColor(GUI_YELLOW); GUI_AA_FillRoundedRect(10, 4, 30, 16, 3); GUI_SetColor(GUI_BLACK); GUI_SetFont(&GUI_Font16_1); GUI_SetTextMode(GUI_TEXTMODE_TRANS); [1] [2] 关键字:示波器 波形 引用地址:示波器设计—波形快速刷新方案上一篇:示波器选型参数
推荐阅读最新更新时间:2024-10-01 22:28 泰克公司强化在中端示波器市场上的领先地位 泰克公司宣布,推出具有2 GHz最大带宽和10 GS/s采样速率以及5,000万样点标准记录长度的MSO/DPO5000B系列示波器,使其在中端示波器细分市场上的领先地位进一步提升。这一同类领先的采集性能再加上先进的分析功能,使该系列示波器可为设计人员设计更快、更复杂的嵌入式系统提供了更全面的测试功能。 许多趋势正在推动着中端示波器市场的变革。USB 2.0、USB HSIC和以太网等速度更快的串行总线日益被用于嵌入式设计。这些总线又带来了新的设计挑战,如嵌入式时钟或更小的抖动预算,并且常常需要更专业化的分析和一致性测试来确保互操作性。另一个关键应用是功率转换效率,这在一定程度上由碳化硅 (SiC) 和氮化镓 (GaN) 等新 [测试测量] 示波器“带宽”对日常测试测量工作的影响 不管是产品开发工程师,电子工程师,硬件工程师还是采购人员,在选购示波器的时候,一般都要选择一款能够帮助我们工程师们高效并且精确的完成测试测量任务的示波器。可能有很多的新手工程师或者示波器初学者可能知道如何使用示波器,会一些示波器的基本操作,但是对示波器的一些参数特性和工作原理都不是特别清楚。今天,安泰测试就跟大家分享一下关于示波器非常重要的一个参数指标——“带宽”对我们日常测试测量工作的影响有哪些。 示波器的“带宽”是我们平时判断一个 示波器 性能以及选购 示波器 时非常看重的一个参数指标。因为“带宽”它决定了 示波器 能够显示的信号范围,并且“带宽”也是对 示波器 价格高低的一个绝对性的因素,也就是说一台 示波器“带宽”高低 [测试测量] 泰克波形监测仪可满足拍摄、后期制作及广播市场的4K需求 客户可轻松升级其WFM/WVR8200与WFM/WVR8300波形监测仪和光栅化器来支持4K要求。 中国 北京,2014年8月7日 —广播视频测试、监测及分析解决方案的市场领导厂商---泰克公司日前宣布,其WFM8200与WFM8300波形监测仪和WVR8200与WVR8300光栅化器目前可通过软件实现轻松升级,以支持4K要求,使客户无需为了拍摄、制作和播送4K节目而购买昂贵的硬件。 WFM8200与WFM8300波形监测仪和WVR8200与WVR8300光栅化器能够进行广泛的4K测量,包括波形、画面、矢量、全域的四块(four tile)显示以及针对YPbPr格式的眼图。这些全面的测量功能使得用户能够减少隔离、论 [测试测量] 揭秘泰克全新5系MSO混合信号示波器幕后故事 第一眼就可以看出,泰克最新推出的5系混合信号示波器(MSO)与其他示波器有着明显差别。首先,脸大更有面儿了,屏幕占前面板的85%,而大多数示波器中屏幕只占大约50%。第二,端口多更能容了,就是模拟输入的数量,最多有8个模拟输入,而大多数示波器一般只有4个。下面就随测试测量小编一起来了解一下相关内容吧。 待到示波器开机并连接被测器件测试时,你会发现这不是去年示波器的改良版,而是一个全新的端到端重新设计。从汽车、飞机到家用电器,再到物联网等各个领域中,所有设备中的嵌入式系统正变得越来越复杂,对 测试测量 设备的需求也变得越来越高。一方面,越来越多的应用需要四个以上的模拟输入通道,而数字通道的集成度也需要更高。用户界面也必需更新,以适 [测试测量] R&S公司示波器的时钟和数据信号抖动分析功能 2013年5月22日,慕尼黑 – 为可靠地测试信号的完整性,开发人员需要功能强大的测试仪器。R&S RTO示波器具有超群的低噪声模拟前端、高动态范围ADC,高波形捕获和分析速度和触发抖动极低的数字触发系统。除自动的抖动测量外,新的R&S RTO-K12抖动分析选件还提供广泛的智能测试功能,如:设置向导帮助用户完成大多数重要测量设置,快速获得测量结果;可配置的软件时钟恢复功能自动实现时间间隔测试;趋势跟踪功能显示测量值的变化以及时间上的趋势关系,并在此基础上增加更多的分析功能;多边形几何模块帮助用户快速设置测试模板。 抖动测量功能对于包含USB2.0和HDMI这类高速数字信号接口的电路设计是非常重要的。一个典型的挑战是信号使用内嵌 [测试测量] 双踪示波器使用实验 017C(YB4242型)双踪示波器使用 一 、实验目的 学会正确使用YB4242 双踪示波器,EM1635函数发生器,电子管毫伏表。 二、 试验原理 整机方框图如图2-1-1所示。 图2-1-1 示波器整机原理框图 YB4242( SR-017C)型示波器是高灵敏度,慢扫描,双踪示波器。他具有DC-7MHz的带宽,并具有x-y显示功能。机能有1KHz方波标准信号,以满足在定量测试时校准偏转灵敏度和扫描之用。 电路结构主要由:双通道Y轴放大器,触发电路,扫描电路,增辉电路,X放大器,电子开关,标准信号,显示部分,高低电源等单元所组成。 输入信号经衰减器至Y1(Y2)的输入端经前置发大器后,借助电子开关的作用。可以控制任意 [测试测量] 示波器探头的正确使用 别看一个示波器探头很简单,其实还是很有讲究的。以下是使用示波器探头的一点小经验,供大家使用时参考一下。 首先是带宽,这个通常会在探头上写明,多少MHz。如果探头的带宽不够,示波器的带宽再高也是无用,瓶颈效应。 另外就是探头的阻抗匹配。探头在使用之前应该先对其阻抗匹配部分进行调节。通常在探头的靠近示波器一端有一个可调电容,有一些探头在靠近探针一端也具有可调电容。它们是用来调节示波器探头的阻抗匹配的。如果阻抗不匹配的话,测量到的波形将会变形。调节示波器探头阻抗匹配的方法如下:首先将示波器的输入选择打在GND上,然后调节Y轴位移旋钮使扫描线出现在示波器的中间。检查这时的扫描线是否水平(即是否跟示波器的水平中线重合),如果不是,则需要调 [测试测量] 使用STM32微控制器系列中的DAC生成音频和波形之应用实例 《使用DAC生成正弦波形》 1、说明 本示例分步说明如何生成正弦波形。 正弦波形也称作单频正弦波音,它是一种纯音或绝对音。在确定听觉系统的各种响应时,正弦音一般用作刺激源。 2、准备数字模式的正弦波形 要准备数字模式的波形,需要进行一些数学运算。这里的目标是产生正弦波的 10 个数字模式数据(采样),变化范围为 0 到 2*PI。 采样间隔为 (2*PI)/ ns (采样数)。 sin(x) 的结果值在 -1 到 1 之间,经过必要的重新校准后,可以生成 0 和 0xFFF 之间(对应电压范围为 0 V 到 3.3 V)的正向正弦波。 经过线性转换后,数字输入会转换为 0 到 VREF+ 之间的输出电压。 各 DAC 通道 [单片机] (责任编辑:) |