Ofweek电子工程网
基于 STM32 的多路电压测量设计方案
作者:宋敬,付广春,马献国
本设计提出一种基于 STM32 芯片的多路电压测量设计方案,测量范围在
0-10V 之间。把 STM32 内置 A/D 对多路电压值进行采样,得到相应的数字量。然
后按照数字量和模拟量的比例关系得到对应的模拟电压值,通过 TFTLCD 显示设
备显示出来,同时将多路采集的数据存储到 SD 卡中。
1.引言
近年来,数据采集及其应用受到了人们越来越广泛的关注,数据采集系统也
有了迅速的发展,它可以广泛的应用于各种领域。
数据采集技术是信息科学的重要分支之一,数据采集也是从一个或多个信号
获取对象信息的过程。数据采集是工业控制等系统中的重要环节,通常采用一些
功能相对独立的单片机系统来实现,作为测控系统不可缺少的部分,数据采集的
性能特点直接影响到整个系统。
电压的测量最为普遍性,研究设计并提高电压测量精度的方法及仪器具有十
分重要的意义。在电压测量设计中,单片机作为控制器,是整个设计的核心。除
此之外,设计中还必须有模数转换器(ADC)。ADC 用于直接采集模拟电压并将
模拟信号转换成数字信号,它直接影响着数据采集的精度和速度。
2.系统概述
本设计的微控制器采用 STM32 单片机。
STM32 系列单片机是基于 ARM 公司 Cortex-M3 内核设计的。它的时钟频率达
到 72MHz,是同类产品中性能较高的产品,具有高性能、低成本、低功耗的优点,
是嵌入式应用设计中良好的选择。设计中的 A/D 转换器采用 STM32 内置
ADC.STM32 的 ADC 是一种 12 位逐次逼近型模拟数字转换器。
它有多达 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D
转换可以单次、连续、扫描或间断模式执行。转换结果可以左对齐或右对齐方式
存储在 16 位数据寄存器中。其输入时钟最大可达到 14MHz.
本设计可测量 8 通道电压值,测量范围为 0-10V 的电压,显示误差为
±0.001V.LCD 实时显示电压值和波形图,MicroSD 卡对数据进行同步存储。系统
原理框图如图 1 所示。
Ofweek电子工程网
3.系统硬件设计
本设计的硬件主要包括 STM32 模块,LCD 模块,SD 卡模块和按键模块。STM32
模块不仅作为核心控制器,还包括 ADC 设备,它主要包括 STM32 最小系统电路。
LCD 模块主要包括 LCD 驱动接口电路。SD 卡模块主要是 SD 卡驱动电路。除此之
外,还有用于程序下载调试的 J-Link 接口电路和电源电路等。
3.1 STM32 最小系统
本模块主要介绍 STM32 芯片和设计中用到的外设模块。
STM32 最小系统使用外部高速时钟,外接 8M 晶振。STM32 的两个 BOOT 引脚
都接低电平,以使用户闪存存储器为程序启动区域。芯片采用 J - L i n k 下载
模式,也可以进行硬件调试。STM32 的电源引脚都接了滤波电容以确保单片机电
源的稳定。
STM32F103VET6 拥有 3 个 ADC,这些 ADC 可以独立使用,也可以使用双重模式
(提高采样率)。STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 18
个通道可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、
扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄
存器中。STM32 的 ADC 最大的转换速率为 1Mhz,也就是转换时间为 1us
(ADCCLK=14M,采样周期为 1.5 个 ADC 时钟下得到),不能让 ADC 的时钟超过 14M,
否则将导致结果准确度下降。STM32 将 ADC 的转换分为 2 个通道组:规则通道组
和注入通道组。规则通道相当于运行的程序,而注入通道就相当于中断。在程序
正常执行的时候,中断是可以打断程序正常执行的。同这个类似,注入通道的转
换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才得以继续
转换。
本设计中 ADC 采集的数据使用 DMA 进行传输,以达到高速实时的目的。
3.2 ADC 控制电路
STM32 的数字/模拟转换模块(DAC)是 12 位数字输入,电压输出的数字/模
拟转换器。本设计中使用 DAC 来控制 ADC 匹配电路的增益。
Ofweek电子工程网
在打开 DAC 模块电源和配置好 DAC 所需 GPIO 的基础上,往 DAC 通道的数据
DAC_DHRx 寄存器写入数据,如果没有选中硬件触发,存入寄存器 DAC_DHRx 的数
据会在一个 APB1 时钟周期后自动传至寄存器 DAC_DORx.一旦数据从 DAC_DHRx 寄
存器装入 DAC_DORx 寄存器,在经过一定时间之后,输出即有效,这段时间的长
短依电源电压和模拟输出负载的不同会有所变化。
为了扩大测量范围和测量精度,本设计在 STM32 的 ADC 前加入匹配电路。在
ADC 控制电路中,输入信号先经过射极电压跟随电路,然后经过分压电路,使输
入信号满足 AD603 的输入要求。然后再经过射极电压跟随电路,输入 ADC 输入端。
AD603 的控制输入使用 STM32 的 DAC,可以满足增益的要求。
匹配电路以 AD603 为核心。AD603 为单通道、低噪声、增益变化范围线性连
续可调的可控增益放大器。带宽 90MHz 时,其增益变化范围为-10dB~+30dB;带宽
为 9M 时范围为 10~50dB.
将 V O U T 与 F D B K 短路,即为宽频带模式(90MHz 宽频带),AD603 的
增益设置为-11.07dB~+31.07dB.AD603 的 5、7 脚相连,单片 AD603 的可调范围
为-10dB~30dB.AD603 的增益与控制电压成线性关系,其增益控制端输入电压范
围为±500mv,增益调节范围为 40dB,当步进 5dB 时,控制端电压需增大:
ADC 匹配电路的电路图如图 2 所示。
3.3 LCD 控制电路
Ofweek电子工程网
本设计所使用的 LCD 为 2.4 寸,320×240 分辨率。LCD 模块使用 STM32 的
FSMC 接口控制。
FSMC(Flexible Static Memory Controller)即可变静态存储控制器,是
STM32 系列中内部集成 256KB 以上 Flash,后缀为 xC、xD 和 xE 的高存储密度微控
制器特有的存储控制机制。通过对特殊功能寄存器的设置,FSMC 能够根据不同
的外部存储器类型,发出相应的数据/地址/控制信号类型以匹配信号的速度,从
而使得 STM32 系列微控制器不仅能够应用各种不同类型、不同速度的外部静态存
储器,而且能够在不增加外部器件的情况下同时扩展多种不同类型的静态存储器,
满足系统设计对存储容量、产品体积以及成本的综合要求。
在 STM32 内部,FSMC 的一端通过内部高速总线 AHB 连接到内核 Cortex-M3,
另一端则是面向扩展存储器的外部总线。内核对外部存储器的访问信号发送到
AHB 总线后,经过 FSMC 转换为符合外部存储器通信规约的信号,送到外部存储
器的相应引脚,实现内核与外部存储器之间的数据交互。F S M C 起到桥梁作用,
既能够进行信号类型的转换,又能够进行信号宽度和时序的调整,屏蔽掉不同存
储类型的差异,使之对内核而言没有区别。
FSMC 可以连接 NOR/PSRAM/NAND/PC 卡等设备,并且拥有 FSMC_A[25:0]共 26
条地址总线,FSMC[15:0]共 16 条数据总线。另外,FSMC 扩展的存储空间被分成
8 个块。通过地址线选择操作的块。这样,LCD 将被看作一个拥有一块地址空间
的存储器进行操作。
3.4 SD 卡驱动电路
本设计中使用的 SD 卡为 MicroSD,也称 TF 卡。MicroSD 卡是一种极细小的快
闪存储器卡,主要应用于移动电话,但因它的体积微小和储存容量的不断提升,
现在已经使用于 GPS 设备、便携式音乐播放器、数码相机和一些快闪存储器盘中。
MicroSD 卡引脚图如图 9 所示。
MicroSD 卡与 SD 卡一样,有 SPI 和 SDIO 两种操作时总线。SPI 总线相对于
SDIO 总线接口简单,但速度较慢。我们使用 SDIO 模式。
MicroSD 卡在 SDIO 模式时有 4 条数据线。
其实,MicroSD 在 SDIO 模式时有 1 线模式和 4 线模式,也就是分别使用 1
根或 4 根数据线。当然,4 线模式的速度要快于 1 线模式,但操作却较复杂。本
设计中使用的是 SDIO 的 4 线模式。MicroSD 卡的硬件连接图如图 3 所示。
Ofweek电子工程网
3.5 触摸屏电路
本设计在测量的通道和显示设置上,除了使用按键设置,还使用触摸屏进行
设置。
触摸屏使用芯片 TSC2046 控制,其硬件连接图如图 4 所示。
在图 4 中,TSC2046 可以采集触摸屏的点坐标,从而确定触摸的位置,进行
人机交互。
STM32 单片机通过 SPI 总线与 TSC2046 通信,可以得到触摸信息。本设计使
用触摸屏进行测量通道数的设置和测量速度的设置。
Ofweek电子工程网
4.系统软件设计
4.1 软件流程
系统软件部分使用 C 语言编程,同时使用 STM32 官方提供的固件库,使用的
版本为 3.5 版。STM32 固件库也称固件函数库或标准外设库,是一个固件函数包,
它由程序、数据结构和宏组成,包括了微控制器所有外设的性能特征。该函数库
还包括每一个外设的驱动描述和应用实例,为开发者访问底层硬件提供了一个中
间 API,通过使用固件函数库,无需深入掌握底层硬件细节,开发者就可以轻松
应用每一个外设。因此,使用固态函数库可以大大减少用户的程序编写时间,进
而降低开发成本。每个外设驱动都由一组函数组成,这组函数覆盖了该外设所有
功能。简单的说,使用标准外设库进行开发最大的优势就在于可以使开发者不用
深入了解底层硬件细节就可以灵活规范的使用每一个外设。
软件部分为了方便存储数据的查看和读取,在 MicroSD 卡部分使用了 fatfs
文件系统。
FAFFS 是面向小型嵌入式系统的一种通用的 FAT 文件系统。FATFS 完全是由
AISI C 语言编写并且完全独立于底层的 I/O 介质。因此它可以很容易地不加修
改地移植到其他的处理器当中,如 8051、PIC、AVR、SH、Z80、H8、ARM 等。
FATFS 支持 FAT12、FAT16、FAT32 等格式,所以我们利用前面写好的 SDIO
驱动,把 FATFS 文件系统代码移植到工程之中,就可以利用文件系统的各种函数,
对已格式化的 SD 卡进行读写文件了。
以上是系统软件设计的两个主要部分,其他还有 LCD 驱动程序,ADC 和 DMA
驱动程序,按键中断程序等。
4.2 软件文件结构
文件 main.c 是整个程序的入口文件,也是主要文件。global.c 和 global.h
主要是共用的函数和全局性的宏定义。LCD_Disp.c 和 LCD_Disp.h 是基于 STM32
固件库的对 LCD 的底层驱动函数。Lcdfunc.c 和 lcdfunc.h 是为了主程序更方便
的操作 LCD 而编写的一些常用的复杂的对 LCD 底层函数的封装函数。
sdio_sdcard.c 和 sdio_sdcard.h 是基于 STM32 固件库的对 MicroSD 卡的底层驱
动函数。fat 文件系统在 STM32 上的使用需要针对具体类型的硬件进行配置,所
以它是基于 MicroSD 卡的底层驱动程序的。fatfunc.c 和 fatfunc.h 是对 fat 文
件操作接口的一些封装,是针对本设计中对文件的操作编写的。其余的按键中断
和 ADC 等操作的函数是直接基于 STM32 固件库的,并直接被主程序调用。
5.总结
STM32 在速度、功耗方面性能都更加优越,其丰富的外设也更加方便设计。
另外,STM32 价格较低,在成本上也有优势。STM32 适合于控制电子设备的设计。
设计中使用的 ADC 是 STM32 上的 12 位 ADC,能够满足一定的测量精度,对于较高
Ofweek电子工程网
的测量要求,则需要使用更高精确度的 ADC.但是使用高精度 ADC 和 DSP 芯片,
将很大的增加开发成本。本设计方案完成了多路电压测量的各项功能,但是还需
要在使用中检测其稳定可靠性,以使设计更加完善。