基于STM32的便携式多功能数字示波器设计
摘 要: 本设计是基于STM32平台,移植μC/OS-Ⅱ嵌入式操作系统和μCGUI嵌入式应用图形支持系统,形成一个完善的有人机接口的实时嵌入式系统,在这个平台上设计制作一个便携式多功能数字示波器,采用STM32高性能ARM处理器作为核心控制芯片,显示器选用TFT真彩液晶。实时性高,人机界面友好,具有很好的推广使用价值,可广泛应用于信号采集、工程实践等领域。
0 引言
目前平台化、集成化成为示波器发展的重要趋势。市场上存在的示波器,一般把目标定位在产品的高性能和强大功能的竞争上,造成市场上的模拟及数字示波器一般价格高昂、体积较大且很多专业功能并不实用。更便宜、更小巧、更方便使用的示波器成为当今市场的主流需求,使用者们需要借助具有各种功能的、方便携带的、小巧灵活的测试工具,来验证和解决越来越多的高复杂性问题。
1 系统设计理念
随着嵌入式处理器的快速发展,STM32系列针对高性能、低成本、低功耗需求的嵌入式应用专门设计的ARM芯片,系统时钟频率高达72 MHz,内部外设丰富,STM32功耗36 mA,是32位市场上功耗最低的产品。基于STM32嵌入式平台设计的便携式多功能数字示波器,移植μC/OS-II实时多任务操作系统[1]和μCGUI图形支持系统,形成一个完善的有人机接口的实时嵌入式精密测量仪器,通过数字插值算法和快速傅里叶算法处理[2],可以进行频谱分析。通过STM32内部自带高速AD模块,实现高速采样,采样速度可以达到3 MHz。具有边沿触发模式选择、自动捕捉波形、复位、暂停、波形存储、频率和幅值拉伸缩小、波形整体平移、峰-峰值、有效值、频率、周期、占空比显示、频谱分析等功能。由于采用高速集成处理器,外设资源丰富,简化了电路板的设计制作,更加便携,功能多样。
2 系统硬件设计
基于STM32的便携式多功能数字示波器的设计原理如图1所示。其中,阻抗匹配电路3采用电压跟随器电路,增大输入阻抗和减小输出阻抗,实现对微弱信号的无衰减的传输;程控放大电路5采用高带宽运放和模拟开关串联实现;数模转换器[3]10采用主控芯片内部集成的高速AD模块,转换速度可达1 MHz,充分利用STM32内部自带的3个AD模块,采用交叉互补采样模式,可以实现3 MHz的采样速率。由于STM32内部自带的AD无法对负电压进行采集,通过设计加法器6将负压抬高到零电平以上,过压保护电路7防止高电压对处理器造成损害。为了使示波器工作在触发模式,系统中需要有个触发电平,这里的触发电平由斯密特触发器电路8产生,同时用来对频率进行计数。波形存储模块11采用通用的SD卡,STM32有专属的SPI和SD接口协议与其通信,SPI串行通信接口读写速度可达18 MHz。液晶显示模块13采用TFT真彩液晶;触摸屏模块12采用电阻式触摸屏,其抗干扰能力强于电容屏,两个模块都集成在一块屏幕上,采用并行数据总线,读写方便,速度快。
信号调理电路[4]如图2所示,考虑到对处理器的保护作用,特别在信号的输入端和输出端加上过压保护二极管进行钳压保护,输入钳制在-5.0 V~+5.0 V之间,防止信号调理电路的烧毁,输出钳制在0~3.3 V之间,防止主控芯片因超出额定电源电压而损坏。
运算放大器采用高带宽、共模抑制比大的单片集成双运放的AD827,其原本是为视频电路设计的,增益带宽达50 MHz,SR达到300 V/μs,是目前市场上电压反馈型双运放的顶级产品,其高频特性非常优越,在±5 V的供电下仍有优异的性能,放大3 MHz的高频信号没有衰减和相位偏移现象出现。所有的集成电路的电源管脚都相应地加上10 μF和0.1 μF去耦滤波电容。
模拟开关采用CD4052,CD4052是一个差分4通道数字控制模拟开关,有A、B两个二进制控制输入端和INH输入,具有低导通阻抗和很低的截止漏电流。0~5.0 V的数字信号可控制-13.5~+5.0 V的模拟信号,幅值为 4.5~20 V的数字信号可控制峰峰值至20 V的模拟信号。
3 软件设计
在整个设计中,核心部分是软件设计,包括μC/OS多任务操作系统和μCGUI图形界面系统的移植、波形的检测、处理、显示等。
3.1 任务的建立
操作系统μC/OS-II移植好了之后,需要建立四个任务,分别为:
任务一:static void APP_TaskStart(void*pdata),主要作用是建立任务二、三、四并执行它们,运行结束后便将其挂起,挂起函数用OSTaskSuspend(OS_PRIO_SELF)来实现,之后由int main(void)进行建立和执行。
任务二:static void Task_TouchScreen(void*pdata),主要作用是连续地监视和刷新触摸板,该触摸屏驱动程序通过调用函数GUI_TOUCH_Exec实现,该函数在它辨认出一个动作已经执行或者情况有所变化时,调用μCGUI提供的触摸屏API函数,大约每秒调用100次。
任务三:static void Task_GUIExce(void*pdata),主要作用是执行回调函数(一般是重绘窗口),通过调用函数GUI_Exec实现,该函数会自动重复调用GUI_Exec1直到它完成全部工作。通常该函数不需要被用户应用程序调用,它自动地被GUI_Delay所调用。
任务四:static void Task_MainTask(void*pdata),它是整个应用程序的核心,包括液晶界面的显示、触摸板信号的处理、波形信号的采集、计算、显示等操作。
3.2 图形界面设计
人机界面显示采用TFT液晶,分辨率为320×240,触摸板采用电阻式的触摸屏。驱动库采用μCGUI,支持液晶和触摸板的应用,并且功能强大。界面采用的是比较绚丽的坐标网格形式,主要调用下列函数。
(1)void GuiMainTask(void),该函数中调用了三个函数,GUI_CreateDialogBox创建对话框,内部包含多个按钮控件和滑动条控件,用于实现人机交换。WM_CreateWindow创建一个窗口函数,用来显示版本的基本信息,包括产品名称、编号。WM_CreateWindow创建一个窗口函数,用来显示所测波形的频率、周期、占空比、幅值等信息。
(2)void WaveTaskCreat(void),该函数中主要调用GRAPH的一些控件,用来创建一个波形显示的网格窗口,可以实现波形的显示,波形的X、Y轴的拉伸、平移功能。
此外还包括上升沿触发、下降沿触发、单次触发(毛刺触发)、自动、复位的触发响应和后台处理程序。通过事件响应机制以及回调函数GUI_Exec进行图像的重画,运行后的显示界面如图3所示。
3.3 波形检测与处理程序设计
波形检测和处理部分[5]采用单片机内部自带的高速A/D和强大的TIM实现。A/D单元的作用是将连续的模拟信号转变为离散的数字序列,然后按照数字序列的先后顺序重建波形。定时器TIM既要为A/D提供可变的采样时基,也要实时捕捉由斯密特触发器整形好的脉冲信号上升沿、下降沿的触发时间,为后期信号的频率、周期、占空比、幅值计算做准备。
3.3.1 波形检测程序
A/D转换:STM32增强型芯片内置3个独立A/D,可以有21个通道,并且3个A/D可以并行地同步采样,触发方式很灵活,可以通过TIM以及外部电平等方式触发,并行方式下AD3、AD2自动同步于AD1;A/D在最高速采样时需要1.5+12.5个时钟周期,在14 MHz的AC时钟下达到1 MS/s的速度。
采样频率控制:由于STM32内部的4个TIM非常强大,每个TIM又有4个通道,再加上独立的预分配器,实际上可以实现任意分频,因此用TIM2 CC2来产生指定频率的时钟,用来触发A/D连续采样。
采样数据传输及每次采样深度控制:A/D产生的转换数据通过高速DMA通道1、2、3来传输到指定的内部RAM中,并且将DMA中断优先级设置成最高优先级,以保证数据读取准确,用DMA每次传输的个数来控制采样的深度,例如要采集100个,那么就设置DMA传输100次,每次从16位A/D转换寄存器传输一个16位数据到RAM中,等完成了100次传输后,DMA通道自动停止(实际上A/D是一直按照要求的采样频率在后台连续采样,只是未去取数据而已),下次采集时只要再设置采样的个数就行了。
采用外中断的形式,外面波形数据先不采集,先让它通过一个比较器,比如比较器的基准电压是1.0 V,也就是每次都与1.0 V比较。当波形电压大于1.0 V时,比较器输出高电平,高电平接到单片机外中断口,外中断就被触发。然后开始采集,这样就能保证每帧数据的起始点都相同。定时器的捕捉模式设置成双沿捕捉,从而可以捕捉波形的上升沿和下降沿。
3.3.2 处理程序
对采集好的数据,首先要将数据中最大的和最小的找出来,并根据放大倍数计算出波形的峰峰值,通过读取缓存中的数据计算,转换成真实电压值。通过定时器捕捉到的波形连续的上升沿、下降沿和上升沿三次时间T1、T2、T3,从而计算出待测波形的周期=T3-T1和占空比=(T2-T1)/(T3-T1)。将数据一次性放到液晶上进行显示,通过调用μCGUI内部自带的GRAPH_DATA_ YT_AddValue函数,可以实现多浮点处理数据并显示,其功能非常强大,程序流程如图4所示。
4 系统测试
不同频率下测量占空比为50%、峰峰值为1.25 V的方波的检测波形图如5所示,方波测试数据如表1。
不同频率下测量占空比为50%、峰峰值为1.25 V的正弦波的检测波形图如6所示,正弦波数据如表2。
不同频率下测量占空比为50%、峰峰值为1.25 V的三角波的检测波形图如7所示,三角波数据如表3。
5 结论
通过对该系统的整体测试可知,该系统体积小巧、简单易用、成本低,主控芯片STM32F103x内部集成了丰富的功能模块,使系统无需外扩大量芯片便可实现数据采集功能,降低了开发的复杂度和成本,达到了提高系统稳定性的目的。示波器能够实现3 MHz的采样速度,带宽500 kHz,可以测出从1 Hz到500 kHz的频率。输入信号幅度可以是50 mV~25 V(通过示波器探头衰减10倍之后),通过电路上电阻的选择控制它的放大和衰减,该示波器还可以选择触发方式:上升沿触发、下降沿触发、单次触发,可以捕获瞬时出现的波形,如遥控器波形等。
参考文献
[1] LABROSSE J J.嵌入式实时操作系统μCOS-II[M].邵贝贝,译.北京:北京航空航天大学出版社,2003.
[2] CRISTI R.现代数字信号处理[M].徐盛,译.北京:机械工业出版社,2005:129-1481.
[3] 童诗白.模拟电子技术[M].北京:高等教育出版社,2001.
[4] 黄敏松,行鸿彦,刘建成.ECG监护仪前置放大电路设计[J].现代电子技术,2007(16):187-189.
[5] 王昌明,孔德仁,何云峰.传感与测试技术[M].北京:北京航空航天大学出版社,2005.