您的当前位置:首页正文

STM32的数字示波器设计说明

2022-12-26 来源:步旅网
STM32的数字示波器设计

示波器的设计分为硬件设计和软件设计两部分。示波器的控制核心采用ARM9,由于STM32芯片里有自带的AD,采样速率最高为500KSPS,分辨率为10位,供电电压为3.3V,基本上能满足本设计要求,显示部分用3.2寸TFTLCD(分辨率:320*240)模块。软件部分采用C语言进行设计,设计环境为Keil。

硬件总体结构

该设计采用模块化的设计方法,根据系统功能把整个系统分成不同的具有特定功能的模块,硬件整体框图如下图所示。

该示波器由4部分电路构成,分别是:

(1) 输入程控放大衰减电路;

(2) 极性转换电路;

(3) AD转换电路;

(4) 显示控制电路;

(5) 按键控制电路;

整体设计思路是:信号从探头输入,进入程控放大衰减电路进行放大衰减,程控放大器对电压大的信号进行衰减,对电压小信号进行放大以符合AD的测量范围,经过处理后信号进入极性转换电路进行电平调整成0—3.3V电压,因为被测信号可能是交流信号,而AD只能测量正极性电信号,经调整后送入AD转换电器对信号进行采样,采样所得数据送入LCD显示,这样实现了波形的显示。按键控制可以通过不同的按键来控制波形的放大和缩小,同时也可以改变采样间隔,以测量更大频率范围的信号。

STM32处理器介绍

STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。按性能分成两个不同的系列:STM32F103“增强型”系列和STM32F101“基本型”系列。增强型系列时钟频率达到72MHz,是同类产品中性能最高的产品;基本型时钟频率为36MHz,以16位产品的价格得到比16位产品大幅提升的性能,是16位产品用户的最佳选择。两个系列都内置32K到128K的闪存,不同的是SRAM的最大容量和外设接口的组合。时钟频率72MHz时,从闪存执行代码,STM32功耗36mA,是32位市场上功耗最低的产品。

本设计所用的STM32F103VCT6集成的片上功能如下:

(1) 1.2v内核供电,1.8V/2.5V/3.3/V存储器供电,3.3V外部I/O供电

(2) 外部存储控制器

(3) (3) LCD 控制器

(4) 4通道DNA并有外部请求引脚

(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通道外部中断源

LCD显示介绍

LCD液晶显示器是Liquid Crystal Display的简称,LCD的构造是在两片平行的玻璃当中放置液态晶体,两片玻璃中间有许多垂直和水平的细小电线,通过通电与否来控制 杆状水晶分子改变方向,将光线折射出来产生画面。

LCD的主要技术参数有:

1. 对比度 LCD制造时选用的控制IC、滤光片和定向膜等配件,与面板的对比度有关,对于一般用户而言,对比度能够达到350:1就足够了,但在专业领域这样的对比度还不能满足用户的要求。对比值定义是最大亮度值(全白)除以最小亮度值(全黑)的比值

2. 亮度 LCD是一种介于固态与液态之间的物质,本身是不能 发光的,需要借助于额外的光源才行。因此,灯管数目关系着液晶显示器亮度。液晶显示器的最大亮度,通常由冷阴极涉嫌管来决定,亮度值一般都在200~250cd/m2间。

3. 可视面积 液晶显示器所表示的尺寸就是与实际可以使用的屏幕范围一致。

4. 可视角度 当背光源通过偏极片、液晶和去向层之后,输出的光线变具有了方向性。也就是说大多说光都是从屏幕中 垂直射出来的,所以从某一个较大的角度观看液晶显示时,便不能看到原来的颜色,甚至是只能看到全白或者全黑。为了解决这个问题,制造商们也着手开发广角技术,到目前为止有三种比较流行的技术,分别是:TN+FILM、IPS和MVA。

5. 色彩度 任何一种色彩都是由红、绿、蓝三种基本色组成的。LCD面板上是由480×272个像素点组成现象的,每个独立的像素色彩是由红、绿、蓝(R、G、B)三种基本色来控制。

软件整体设计

整体设计思路是:信号从探头输入,进入程控放大衰减电路进行放大衰减,程控放大器对电压大的信号进行衰减,对电压小信号进行放大以符合AD的测量范围,经过处理后信号进入极性转换电路进行电平调整成0—3.3V电压,因为被测信号可能是交流信号,而AD只能测量正极性电信号,经调整后送入AD转换电器对信号进行采样,采样所得数据送入LCD显示,实现波形的显示按键控制可以通过不同的按键来控制波形的放大和缩小,同时也可以控制程控放大器,选择放大和衰减的倍数。

该示波器软件开发环境为Keil 4,代码采用C语言编写。ARM中软件完成的功能:

(1)输入波形显示和峰峰值测量。

(2)LCD的初始化和显示控制。

(3)按键的检测和控制。

数字手持示波器技术参数

(1) 水平扫描速度可调 (2) 垂直电压灵敏度可调 (3) 被测信号的电压峰峰值在屏幕上显示。 (4) 能测量输入频率为1HZ~50KHZ的信号 (5) 测量幅度范围为-3.3V~3.3V

软件编程与调试

整体设计思路是:经过程控放大衰减和极性转换后的电压作为AD转换的输入电压,然后通过不同的按键来控制波形的放大和缩小,最后在LCD屏上显示出大小适中的波形。

同时测出电压峰峰值,并显示。以下是根据整个系统进行的软件设计。

软件设计总体框图

系统总体框图如图3-1所示:

键盘控制程序

利用4个按键K1,K2,K3,K4来选择波形的放大和缩小,按键采用外部中断方式。其中通过K1和K2来调整波形显示的高度比例,通过K3和K4来改变采样间隔增加或减少一个周期内采样点数,达到控制水平扫描速度,使低频率波形能完整显示。当检测到K1时,

波形幅度系数置为2,当检测到K2时,波形幅度系数置为1/2,否则波形幅度系数为1,以此控制幅度的放大和缩小。当检测到K3、K4时,采样函数中分别加入不同的延时函数来拉长或缩短波形。按键中断程序流程图如下图所示。

峰峰值测量程序设计

通过遍历AD转换结果,取出最大值和最小值求差,结果即为电压峰峰值。

测量函数:

high_vpp=low_vpp=Buff[0];

for(i=0;i<200;i=i+1)

{

if(Buff[i]>high_vpp)

{

high_vpp = Buff[i];//最大值

}

if(Buff[i]{

low_vpp = Buff[i];//最小值

}

}

vpp=(float)(high_vpp-low_vpp)*(6.6/4096);

LCD显示程序设计

本设计所使用的是3.2寸320×240图形点阵LCD,该部分程序主要有LCD初始化,AD转换过来的数据转换成显示数据。用数组连续存储AD转换结果,存满后依次在LCD

上显示,依次循环。显示过程中由于STM32处理器频率较低,导致显示一屏的时间较长,从而使刷屏速度较慢,效果不好。这里采用每次刷一列的的算法,即每次显示下一列点之前将此列初始化为屏幕底色,从而改善视觉效果。 LCD显示主要程序为:

int main()

{

Stm32_Clock_Init(9); //系统时钟设置

delay_init(72); //延时初始化

LCD_Init(); //初始化液晶

KEY_Init(); //按键初始化

Adc_init(); //ADC初始化

LCD_Clear(BLACK); //清屏

POINT_COLOR=RED; //点颜色

BACK_COLOR=BLACK; //背景色

while(1)

{

key=KEY_Scan(); //获取按键返回值

high_vpp=low_vpp=Buff[0];

for(i=0;i<200;i=i+1)

{

Buff[i]=Get_Adc(0);

Choose_Delay(); //改变采样间隔

}

for(i=0;i<200;i=i+1)

{

Clear_Line(i); //清列

first_point=next_point;

temp=Buff[i];

Vpp_Change(); //调整电压显示幅度

next_point=100+temp*100/4096; //得到点坐标

Draw_net(); //画网格

LCD_DrawLine(first_point,i,next_point,i+1);//通过连线画波形 }

LCD_ShowChar(80,220,'V',18,0);

vpp=(float)(high_vpp-low_vpp)*(6.6/4096); //求得峰值

temp=vpp;

//显示峰峰值整数位

vpp-=temp;

temp=vpp*100;

LCD_ShowChar(97,202,'o',18,0); LCD_ShowChar(50,220,'.',18,0); LCD_ShowNum(40,220,temp,1,18,0); LCD_ShowNum(58,220,temp,2,18,0); //显示峰峰值小数

}

}

因篇幅问题不能全部显示,请点此查看更多更全内容