基于图像识别的波形发生器
前言
时隔许久,经过了研究生考试、毕业设计,终于有时间让自己写点东西了。前段时间做了一个基于图像识别的波形发生器,这个项目刚开始在看到要求时感觉应该是可以做的,然后就答应下了,真正开始做的时候才发现有些技术指标比较棘手,也是让我苦恼了许久。
一、题目要求是什么?
设计制作一个基于摄像头的图像识别系统,根据识别到的图像内容产生指定参数的正弦波、方波、三角波等波形,通过TFT液晶屏观察产生的波形是否符合要求。
1)由键盘设置波形类型和参数,系统输出指定波形。其中,正弦波、方波、三角波的频率范围为1Hz~100kHz,峰峰值范围为0.1V~10V;
2)由摄像头读取图像格式、二维码格式指令,根据不同的图像产生相应要求的波形;
3)以文字形式显示摄像头读取的内容;
4)摄像头读取自定义指令,改变波形参数。
二、设计步骤
1.方案设计
在查阅了许多许多资料后,基于图像识别的波形发生器的方案采用的微处理器最小系统为STM32F407(可用探索者),人机接口模块采用键盘和TFT触摸屏(4.3寸或2.8寸均可)、视觉模块采用OpenMV。可实现通过矩阵键盘设置波形参数与种类并在TFT液晶显示屏上显示所设置的波形,同时支持机器视觉OpenMV识别到不同颜色的圆形、三角形、正方形以及二维码和特殊图形后在TFT屏中显示相对应的波形。
注:
(1)红色的圆形、三角形、正方形对应的波形参数分别为频率为1kHz Vpp为10V的正弦波、三角波、方波;
(2)黄色的圆形、三角形、正方形对应的波形参数分别为频率为10kHz Vpp为1V的正弦波、三角波、方波;
(3)绿色的圆形、三角形、正方形对应的波形参数分别为频率为100kHz Vpp为0.1V的正弦波、三角波、方波;
(4)二维码内的所设置的信息为波形的频率和幅值信息;
(5)特殊图像为新冠病毒细胞。
2.硬件设计
基于图像识别的波形发生器的硬件由微处理器最小应用系统电路、矩阵键盘电路、TFT液晶显示屏电路、机器视觉单元、波形调理电路、波形发生选择电路以及辅助电源电路构成,可实现图像识别和根据图像信息或者按键输入的参数产生符合要求的波形。
(1)微处理器最小应用系统电路
微处理最小应用系统由STM32F407ZGT6以及时钟电路和复位电路构成。STM32F407ZGT6支持外设定时器、ADC、DAC、SDIO、SPI和USART等;可通过串行单线调试(SWD)和JTAG接口两种调试方式,设计采取SWD下载模式。可完成对机器视觉发送过来的图像信息进行处理并且实现TFT显示对应波形等。
(2)矩阵键盘电路与显示模块
键盘电路采用矩阵键盘电路,可完成输出波形种类的选择和输出波形幅值与频率的设置。在矩阵键盘电路由SB1-SB16这16个按键构成,SB1-SB11分别设置为数字“9-1”按键,SB14设置为数字“0”按键,SB4设置为“正弦波”按键,SB8设置为“方波”按键,SB12设置为“三角波”按键,SB13设置为“幅值”按键SB15设置为“频率”按键,SB16设置为“确定”按钮。
显示模块采用正点原子的TFT-LCD屏(2.8寸或4.3寸),该设计采用4.3寸的TFT屏。
(3)机器视觉单元
机器视觉采用星瞳科技的OpenMV,关于该机器视觉模块可以搜索“星瞳科技”其官网上有具体介绍,资料也在官网上。可以实现图形形状的识别、二维码的识别以及特殊图像的识别。
(4)波形调理电路与波形发生选择电路
由于通过软件实现高频率的波形发生,其输出波形的形状不太好看,因此采用了波形调理电路与波形发生选择电路来调理输出波形。在做实验的时候发现90kHz-100kHz的方波和三角波波形形状不好看,于是在波形输出I/O口分别设计了基于AD8552电压比较电路和基于AD8552的低通滤波电路,用于处理该问题。又因为软件实现波形发生采用的是DAC+DMA+TIME形式,通过一个DAC单元输出三种波形,所以采用模拟开关ISL84052构成波形发生选择电路对微处理器DAC引脚输出的波形电路进行选择。
3.软件设计
基于图像识别的波形发生器软件包括键盘程序、波形发生程序、波形显示程序、图像识别程序。键盘程序实现矩阵键盘完成输出波形选择以及波形幅值与频率的设置;波形发生程序通过STM32F407ZGT6内部的DAC单元、DMA控制器和定时器实现不同幅值与频率的正弦波、方波和三角波的产生;波形显示程序用于实现所识别到的图像中包含的有关波形参数信息以及矩阵键盘设置的波形参数信息,通过微处理器处理后在TFT液晶屏上显示出相应的波形;图像识别程序设计由机器视觉OpenMV实现对不同图像进行识别。
(1)系统初始化
对系统的I/O口、DAC单元、DMA单元、TIM6、ADC单元、TFT液晶屏、中断口等进行初始化配置。
(2)键盘程序和TFT屏显示程序
TFT屏显示程序可参考正点原子例程 中文显示
(3)波形发生程序
在程序里分别写好正弦波、三角波、方波自定义的波形发生函数sin_Generation()、triangle_Generation()、rectangle_Generation(),定义数组sinTable[tableSize]用于接收正弦波、三角波、方波的波形数据,将DMA初始化中的外设基地址设置为&sinTable,tableSize设置为DMA的缓存大小即ADC采集点数,定时器6的自动转载值设置为波形频率值,在子程序里面同时调用DAC、DMA、TIM6的初始化函数和自定义的正弦波、三角波、方波波形数据生成函数便可以实现相应种类、频率的波形输出。
(4)图像识别程序
图像识别采用OpenMV,颜色识别采用Blob算法,圆形识别采用霍夫检测算法,特殊图像识别可采用模板匹配。这部分的识别算法在官网中都可以找到,但是基础的识别算法不能正确的分辨出圆形、三角形、正方形,此时还需要设计者在编写程序时设置一些识别成功的条件,以便以较为精确的识别出不同颜色的图形形状。二维码的识别很准确。该模板匹配算法是在灰度图中进行识别的但是图形颜色的识别却是在RGB565中进行识别,需要注意这两者之间的切换。
总结
今天就写到这里,有兴趣的朋友可以一起讨论,也给一些建议哟。基于图像识别的波形发生器在1-10Hz之间的波形不太准确,暂时还未找到原因,初步推断是由于采集点的设置问题。该项目中TFT屏显示1Hz-100kHz的波形着实困扰了我许久。我在做这个的时候拆开三部分来做的,第一部分完成软件设计波形发生,在示波器上显示与设置参数一致的正确频率与幅值的波形;第二部分实现基于矩阵键盘的波形发生器,通过矩阵按键输入波形参数在TFT屏中显示波形,尤其是TFT屏显示波形费了很多时间;第三部分实现基于机器视觉的波形发生器,通过机器视觉识别指定的图像,将图像信息发送给微处理器经处理后在TFT屏显示相应的波形;最后总体调试。