由于传统示波器虽然功能齐全但是体积旁大,不方便携带,本设计针对这种缺点设计一种体积小、成本低、功耗小、便携数字示波器,同时达到学以致用,理论和实践相结合,进一步学习课外知识,培养综合应用知识,锻炼动手和实际工作的能力。示波器实现输入频率范围为20HZ—1KHZ,幅度范围为0V—+3.26V(由于时间和元件关系只能做到这一量程,换上带有vref-和vref+的stm芯片即可做出正负电压检测的功能),实现波形实时显示以及幅度测量。示波器在电子、电气、控制等领域应用十分广泛,随着计算机的发展,示波器已经实现了和计算机互联,共享数据,但现有示波器有诸多不足,体积庞大,价格昂贵,功能齐全的示波器在某些场合并不能得到充分的应用。本课题所研究的示波器定位于抵挡型,即在性能上满足大多场合的需要,努力实现小型化,价格低廉,携带方便,这样在财力有限的小用户能够普及,并和功能齐全高档示波器配合使用,取长补短。本设计的硬件设计简洁,结构明了,而且体积细小,非常方便携带。而且电池采用可充电大容量镍镉电池,可使用时间长。本设计对信号的采样,使用实时采样方式和有限的数据队列储存方式存储,这种方法的优点是,设计相对简单,能实时显示所测信号的波形。缺点是,由于受AD转换速率的限制不能测量频率很高的信号。另外,AD只能测量范围很小的电压信号,单输入信号可能更小,或者更大,所以要对信号进行程控放大和衰减。由于本设计时间和元件有限,只能做出检测0到3.26v的示数。只要在信号输入处加上加法电路改变量程或者把stm32f103c8t6芯片换成stm32f103vct6(带vref+和vref-)即可。
从任务的要求分析,主要包括的内容为电压的实时测量和采集,通过stm32f103c8t6控制,运用算法描绘成连续曲线,在4.2英寸液晶显示屏上显示出来。
整体设计思路:stm32的PA0~PA7与4.2英寸液晶屏的8个数据位通信,通过PB8、PB9,、PB10、PB11分别控制液晶屏的RST、CS、RS、WR、液晶屏的RD接3.3v来控制液晶屏的显示。通过PB0输入信号进行信号采集。PB1为暂停键,方便暂停波形观测波形。PB7和PB4分别为增大网格时间间隔和减少网格时间间隔。
系统如下图1.1:
图1.1 系统图
本设计使用方法:
STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品。
本设计所用的STM32F103C8T6集成的片上功能如下:
(1) 1.2v内核供电,1.8V/2.5V/3.3/V存储器供电,3.3V外部I/O供电
(2) 外部存储控制器
(3) LCD 控制器
(4) 4通道DNA并有外部请求引脚 (5) 3通道UART电子技术综合实践
(5) 3通道UART
(6) 2通道SPI
(7) 1通道IIC总线接口1通道IIS总线接口 (8) AC’97编解码器接口
(9) 兼容SD主接口协议1.0版和MMC卡协议2.11兼容版 (10) 2通道USB主机1通道USB设备
(11) 4通道PWM定时器和1通道内部定时器/看门狗定时器
(12) 8通道10位ADC和触摸屏接口
(13) 80个通用I/O和24通道外部中断源
而本次使用的是STM32F103C8T6是已经集成好的最小系统板如下图:
图2.1.1 STM32F103C8T6最小系统实物图
图2.1.2 STM32F103C8T6最小系统电路图
2.2 、4.2英寸TFT液晶显示屏
尺寸:320*400;
图2.2 4.2英寸液晶显示屏图片
2.3电源设计:
图2.2 电池盒
软件的任务包括通过初始化GPIO、RCC、ADC、 SYSTICK、EXIT、NVIC、4.2英寸液晶屏等进行初始化。然后通过AD采集的信号以队列方式储存起来,再输送到液晶屏。当完成了一个屏幕的数据点采集,再从头开始消点、采集、画点,当然在写程序的时候加入了一个使数据点连在一起的小算法达到显示效果。
所编写程序如下:(以下为主要程序,其他次要程序文件均在附录中)
通过无数的错误与更正,总结如下几点特别需要注意的要点:
2、经过很多次调试,已经搞清楚本程序编写液晶屏颜色参数时,24位颜色参数格式为G-R-B,其中G、R、B各用一个8位数据表示。而颜色表数据也比较难找。我的微博中有转发过有关颜色RGB混合参数的非常实用的微博。详情请关注新浪微博@中南大学陈锦熙。
3、 以下程序为调试多天之后能最终成功的“消点-采点-画点”的程序,也是本设计的核心程序。其中加入了让采集点连续起来的小算法,参考自百度的资料。曾试过在每一次采集结束时通过for(mm=0;mm<400;mm++)adre[mm]=ad[mm];使ad[mm]为实时数据,adre[mm]为上一轮数据。利用adre[mm]在下一轮消点(包括连续算法的连线),但是调试过几天发现adre[mm]=ad[mm]得到的的数据竟然是乱值。所以在调试程序时必须要灵活变通,敢于怀疑。
if(clr_flag==1) //清点
{
draw_point(allnum + move_x ,ad[allnum]+ move_y,0x0000);
if((allnum<=398)&&(ad[allnum+1]>ad[allnum]))
for(nn=ad[allnum+1]-ad[allnum];nn>0;nn--)
draw_point(allnum +1+ move_x ,ad[allnum+1]-nn+move_y,0x0000);
if((allnum<=398)&&(ad[allnum+1]0;nn--)
draw_point(allnum +1+ move_x ,ad[allnum+1]+nn+move_y,0x0000);
}
ad[allnum]=ADC_GetConversionValue(ADC1)/30; //取值画图
draw_point(allnum + move_x ,ad[allnum]+ move_y,0xffc000);
if((allnum>=1)&&(ad[allnum]>ad[allnum-1]))
for(nn=ad[allnum]-ad[allnum-1];nn>0;nn--)
draw_point(allnum + move_x ,ad[allnum]-nn+move_y,0xffc000);
if((allnum>=1)&&(ad[allnum]0;nn--)
draw_point(allnum + move_x ,ad[allnum]+nn+move_y,0xffc000);
allnum++;
4、做按键程序的时候,打算用中断做,可是全局变量定义总是出错。克服了这个问题之后,发现芯片用PB3做中断按键时运作失败。通过多次的调试,发现PB3总是为低电平。换了芯片之后情况一样。所以换做PB4、PB7作为中断按键。而PB1作为常开/常闭开关用来暂停波形。最后得到了应有效果。
5、关于4.2英寸液晶屏的调解程序,复杂度相当高。而且大部分指令都难以理解。连说明书都只有英文版的。所以在此我已经在本次工程的4.2寸液晶屏c文件中用中文注释了所有命令的中文功能。便于自己理解,也可以帮助大家的学习液晶屏这一个优秀的输出平台。
通过这次基于STM32的微型掌上示波器的设计,我更加深入地理解和运用到了更多关于ARM尤其是STM32的特点和功能。
在之前我也用过51做温度器、做霍尔元件测速器、振动报警器、用过stm32做水力发电叶片、风力发电叶片控制电路(比赛作品)。但这次示波器的设计断断续续耗计了我三个星期,是我学习到最多的一次。因为这次设计涉及到的AD、和42英寸液晶屏都是STM32的中端应用。其实这个设计如果用COSII来做的话应该能达到更丰富的效果。
STM32F103C8T6的参考正、负电压默认连接到芯片工作电压3.3V(实际3.26V)和地(0V)。所以示波器检测的电压区间只能为0~3.26V。如果要实现负电压的检测,则要加入加法电路。市面上的STM32F103C8T6升级版STM32F103VCT6有AD对应的的VREF+和VREF-接口,可以完美地解决这个问题。
这次没有用PCB板做,是因为芯片用的是最小系统集成板,显示屏用的是ili9325和液晶板的集成板,核心器件已经是高度集成化的,连接电路比较简单,所以选用了较为简便的洞洞板来拼接这两个模块。
因为没有昂贵的函数发生器,而且去物理院借用函数发生器非常麻烦,所以我用51单片机开发板做出来了简易函数发生器(能产生矩形波、三角波、锯齿波、正弦波,用独立按键1、2、3、4控制)。程序在附录中。
这次的作品需要改进的地方有很多:
1、运用多路AD即可做出多踪示波器,这个很容易实现。
2、可以做储存数据的程序;
3、可以做成触屏,使用界面更加友好;
4、用UCOSII做可能有更佳的效果。
总之,通过这次作品设计,我撞到了数不清的困难和到现在解不开的难题。可以有困难就去克服,克服不了就寻求网络资源帮忙。如果实在解不开,就用另一种方法代替。虽然“写程序用了三个小时,调试用了三天。”可是坚持下去,我得到的是锻炼和经验。这个设计有很多废命令和不太合理、累赘的地方,还望大家指正!
附录一 字库(本程序适用)
51hei.png (6.02 KB, 下载次数: 188)
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |