1、 课程设计报告学 院(系): 机械电子工程学院专 业 : 测控技术与仪器学 生 姓 名:学 号:课程设计题目 : 简易数字电压表起 迄 日 期 :课程设计地点:指 导 教 师 : 目 录第 1 章 简易数字电压表设计方案论证 .11.1 简易数字电压表的应用意义 11.2 本次课程设计的目的 11.3 简易数字电压表设计的要求及技术指标 11.4 设计方案论证 21.5 总体设计方案框图及分析 2第 2 章 简易数字电压表各单元电路设计 .22.1 A/D 转换及数据处理 .22.2 串口通信 72.3 LCD 显示电路设计 7第 3 章 电路原理图和 PCB 板的设计 .8第 4 章 系统软
2、件程序设计 .9第 5 章 设计总结 .16参考文献 .17摘要本文以ARM系列的STM32芯片为核心设计了一个简易数字电压表。简易数字电压表采用模数转换思想来实现,通过硬件电路和软件程序相结合,可输出自定义测量电压,通过调节模数转换电位器使在一定范围内可任意改变。输出的电压格式和精度的改变通过软件控制,输出电压的大小的改变通过硬件实现。介绍了的生成原理、硬件电路和软件部分的设计原理。该简易数字电压表具有体积小、价格低、性能稳定、功能齐全的优点。关键词:简易数字电压表;STM32F103;AD 转换; 第一章 简易数字电压表设计方案论证1.1 简易数字电压表的应用意义数字电压表简称 DMV,它
3、是采用数字化测量技术设计的电压表。数字电压表的优良特性深受人们的青睐。具体有以下的应用特点:a) 显示清晰直观,读数准确。b) 准确度高。c) 分辨率高。d) 测量范围宽。e) 扩展能力强。f) 测量速度快。g) 输入阻抗高。h) 集成度高、微功耗。h) 抗干扰能力强1.2 本次课程设计的目的1) 了解 STM32f103 内部 A/D 转换性能及编程方法。2) 学会使用 A/D 转换器进行电压信号采集。3) 了解 uCosII 系统工作原理。1.3 简易数字电压表设计的要求及技术指标设计要求:利用 STM32F103 内部 A/D 及 2.8 寸 TFT 液晶屏,设计完成一个数字电压表。要求
4、:数字电压表可测量 0-5V 输入电压,电压值通过液晶屏显示。工作原理及设计思路:简易数字电压表的设计由 A/D 转换.数据处理及显示控制等组成。利用 STM32F103 内部 A/D 转换器将模拟电压转换成数字量,经 STM32F103 计算将数字量转换成对应的电压值,并通过液晶屏输出。1.4.设计方案论证数字电压表的基本组成部分是 A/D 变换器+ 电子计数器。通常,被测直流电压经 A/D 转换器变为与之成正比的闸门时间,在此闸门时间内计数,用数字显示被测电压值。可见 A/D变换器是 DVM 的核心部件。本课设上采用的是单片 A/D 转换器(含模拟电路与数字电路)集成在一片芯片上,配以 L
5、CD 或 LED 数字器件后能显示 A/D 转换结果的集成电路。它们均属于大规模的集成电路,能以最简的方式构成 DVM。在此采用 ICL7106A/D 转换器。但由于 STM32F103 内部集成了 A/D 转换器,所以不需要外围的 A/D 转换器,这就体现了STM32 得集成特性。1.5 总体设计方案框图及分析第二章 简易数字电压表各单元电路设计简易数字电压表的设计由A/D转换. 数据处理及显示控制等组成。由于 STM32F103集成了A/D转换.数据处理部分,所以可以集中在一起研究,所以分成了两部分。2.1 A/D转换及数据处理1)基本型号介绍首先我们先研究STM32系列芯片的基本知识。由
6、图1可知STM32F103ZET6有144个引脚,所以我们来了解他的基本型号与代码之间的关系。RC 滤波器 STM32F103控制逻辑LCD 显示RC 振荡器 分频器PE2/TRACKFSM_31D09456VB-7OIN8UsdGWref+HXLJZ图1STM32系列产品命名规则 示例: STM32 F 103 C 8 T 6 A xxx 产品系列STM32 = 基于ARMs22的32位微控制器产品类型 F = 通用类型产品子系列101 = 基本型102 = USB基本型,USB 2.0全速设备103 = 增强型105或107 = 互联型 引脚数目T = 36脚 C = 48脚 R = 64
7、 脚 V = 100脚 Z = 144脚 闪存存储器容量 4 = 16K字节的闪存存储器 6 = 32K字节的闪存存储器 8 = 64K字节的闪存存储器 B = 128K字节的闪存存储器 C = 256K字节的闪存存储器 D = 384K字节的闪存存储器 E = 512K字节的闪存存储器封装 H = BGAT = LQFPU = VFQFPNY = WLCSP 温度范围 6 = 工业级温度范围,-40C85 C7 = 工业级温度范围, -40C105C内部代码A 或者空 (详见产品数据手册)选项xxx = 已编程的器件代号 (3个数字)TR = 卷带式包装2)STM32 系列的最小系统设计和独
8、立的 A/D 转换器供电和参考电压最小系统主要包括调试接口.震荡电路.引导设置.复位电路和供电系统。电路由稳定的电源 VDD 供电。值得注意的是,如果使用 ADC,VDD 的范围必须在 2.4-3.6V;如果没有使用 ADC,VDD 的范围为 2-3.6V。启动模式选项:由开关 SW(BOOT0)和 SW(BOOT1)配置。如图 2 所示图 2复位电路:复位信号是低有效,复位源包括复位按钮 JP3 和连在连接器上的调试工具。如图 3图 3时钟源:两个时钟源被用于这个微控制器。LSE X1 用于嵌入式 RTC 的 32.768kHz 晶振;HSE X2 用于 STM32F103 微控制器的 8M
9、Hz 晶振。如图 4 所示图 4去耦电容:去耦电容就是起到一个电池的作用,满足驱动电路电流的变化,避免相互间的耦合干扰。 由 11 个 100nf 的陶瓷电容和一个钽电容组成。如图 5 所示图 5独立的 A/D 转换器供电和参考电压: 为了提高转换的精确度,ADC 使用一个独立的电源供电,过滤和屏蔽来自印刷电路板上的毛刺干扰。 ADC 的电源引脚为 VDDA 独立的电源地 VSSA 如果有 VREF-引脚( 根据封装而定),它必须连接到 VSSA。 100 脚和 144 脚封装: 为了确保输入为低压时获得更好精度,用户可以连接一个独立的外部参考电压 ADC 到 VREF+和 VREF-脚上。在
10、 VREF+的电压范围为 2.4VVDDA。 如图 6所示图 63)STM32 系列的内 ADC 转换逻辑12 位 ADC 是一种逐次逼近型模拟数字转换器。它有多达 18 个通道,可测量 16 个外部和2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。 ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 ADC 的输入时钟不得超过 14MHz,它是由PCLK2 经分频产生。ADC 主要特征 12 位分辨率 转换结束、注入转换结束和发生模拟看门狗事件时产生中断 单次和连续转换模式 从通
11、道 0 到通道 n 的自动扫描模式 自校准 带内嵌数据一致性的数据对齐 采样间隔可以按通道分别编程 规则转换和注入转换均有外部触发选项 间断模式 双重模式(带 2 个或以上 ADC 的器件) ADC 转换时间: STM32F103xx 增强型产品:时钟为 56MHz 时为 1s(时钟为 72MHz 为 1.17s) STM32F101xx 基本型产品:时钟为 28MHz 时为 1s(时钟为 36MHz 为 1.55s) STM32F102xxUSB 型产品:时钟为 48MHz 时为 1.2s STM32F105xx 和STM32F107xx 产品:时钟为 56MHz 时为 1s(时钟为 72M
12、Hz 为 1.17s) ADC 供电要求:2.4V 到 3.6V ADC 输入范围: VREF- VIN VREF+ 规则通道转换期间有 DMA请求产生。我们需要打开一个 ADC 输入端口,使外部的模拟量被采集,这样才能通过内部的 ADC 转换器和驱动电路来实现转换成数字量。采集模拟量的电路如图 7 所示图 7 控制逻辑有三个作用:第一,识别积分器的工作状态,适时发出控制信号,使A/D 转换正常进行;第二,判定输入电压极性并控制 LCD 的负极性显示。2.2 串口通信由于微控制器的控制是通过编程语言来控制的,所以需要外设的串口来实现编程语言的读写。 通用异步收发器(UART)是一种串行接口,一
13、般微处理器中都包含这种外设接口。异步串行接口提供了一种简单的途径,使两个器件无需共享同一个时钟信号就能进行通信。如果再加入一个合适的电平转换器 MAX232,串口就能能用在 RS232 和 RS485 等网络中实现通信,或者与计算机的 COM 端口连接。串口只需两根信号线(RX 和 TX)即可实现,而且只要两端器件都采用同样的位格式和波特率,那么它们无需其它任何对方的信息就可以成功传输数据。电路图如图 8 所示图 82.3 LCD 显示电路设计由于 STM32 是一种高集成芯片,所以在显示液晶屏电路上就少了很多附带的驱动电路,我们选用采用自带驱动模块的液晶屏,这样就少了外围驱动电路。LCD 的
14、显示电路如图 9所示图 9第三章 电路原理图与 PCB 板设计我们用电路板绘图软件 protel,绘制电路原理图并生成 PCB 板,在绘制完原理图生成PCB 板的布线与原件的排列方面有很多值得注意的问题,如地线与电源线必须加粗,尽量避免出现绕线的现象,因为这样就增加了信号传输的时间,尽量减少线的使用,相同器件尽量布在一起,这样方便以后电路板的焊接等等规则。根据要求和以上的分析得到的原理图与 PCB 板图如图 10 所示第四章 系统软件程序设计我们采用的是 Kilc-4 编写与烧入软件,在 Kilc-4 中建立项目并建立 c 语言文件,在文件中编写 c 语言程序,编写完毕后在软件中的选项 fla
15、sh 中的 configure flash tools 中设置参数,设置成适合 Cortex-M3 嵌入式处理器 STM32 合适的参数。最后编译检查程序的正确与否,如果可以创建目标文件则可以烧入微控制器中,否则检查是否有错误或是警告,排除错误或是警告,最终实现创建目标,最后烧入火牛开发板,检验程序是否符合设计要求,看液晶显示屏上的检测电压是否随着模拟输入电位器的旋转改变而改变。简易数字电压表的控制程序为:显示程序.c :#include #include “sys.h“#include “usart.h“#include “delay.h“#include “led.h“ #include
16、“lcd.h“ #include “adc.h“int main(void) u16 adcx;float temp;float temperate; Stm32_Clock_Init(9);/系统时钟设置delay_init(72); /延时初始化/ uart_init(72,9600); /串口 1 初始化 LED_Init();LCD_Init(); Adc_Init();POINT_COLOR=RED;/设置字体为红色 LCD_ShowString(60,50,“Fire Bull STM32“);LCD_ShowString(60,70,“1 “);LCD_ShowString(60
17、,110,“2011/12/26“); /显示时间POINT_COLOR=BLUE;/设置字体为蓝色LCD_ShowString(60,130,“TEMP_VAL:“); LCD_ShowString(60,150,“TEMP_VOL:0.000V“);while(1)adcx=Get_Temp();LCD_ShowNum(132,130,adcx,4,16);/显示 ADC 的值temp=(float)adcx*(3.3/4096);temperate=temp;/保存温度传感器的电压值adcx=temp;LCD_ShowNum(132,150,adcx,1,16); /显示电压值整数部分t
18、emp-=(u8)temp; /减掉整数部分 LCD_ShowNum(148,150,temp*1000,3,16);/显示电压小数部分初始化程序.c:#include “sys.h“#include “usart.h“/Mini STM32 开发板/串口 1 初始化 /正点原子ALIENTEK/2010/5/27/V1.3/支持适应不同频率下的串口波特率设置./加入了对 printf 的支持/增加了串口接收命令功能./加入以下代码,支持 printf 函数,而不需要选择 use MicroLIB #if 1#pragma import(_use_no_semihosting) /标准库需要的
19、支持函数 struct _FILE int handle; /* Whatever you require here. If the only file you are using is */ /* standard output using printf() for debugging, no file handling */ /* is required. */ ; /* FILE is typedef d in stdio.h. */ FILE _stdout; /定义_sys_exit()以避免使用半主机模式 _sys_exit(int x) x = x; /重定义 fputc 函数
20、int fputc(int ch, FILE *f) USART1-DR = (u8) ch; while(USART1-SR/循环发送,直到发送完毕 return ch;#endif /end/#ifdef EN_USART1_RX /如果使能了接收/串口 1 中断服务程序/注意,读取 USARTx-SR 能避免莫名其妙的错误 u8 USART_RX_BUF64; /接收缓冲,最大 64 个字节./接收状态/bit7,接收完成标志/bit6,接收到 0x0d/bit50,接收到的有效字节数目u8 USART_RX_STA=0; /接收状态标记 void USART1_IRQHandler(v
21、oid)u8 res; if(USART1-SR if(USART_RX_STA/接收错误,重新开始else USART_RX_STA|=0x80; /接收完成了 else /还没收到 0X0Dif(res=0x0d)USART_RX_STA|=0x40;elseUSART_RX_BUFUSART_RX_STAUSART_RX_STA+;if(USART_RX_STA63)USART_RX_STA=0;/接收数据错误,重新开始接收 #endif /初始化 IO 串口 1/pclk2:PCLK2 时钟频率(Mhz)/bound:波特率/CHECK OK/091209void uart_init(
22、u32 pclk2,u32 bound) float temp;u16 mantissa;u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);/得到 USARTDIVmantissa=temp; /得到整数部分fraction=(temp-mantissa)*16; /得到小数部分 mantissaAPB2ENR|=1APB2ENR|=1CRH=0X444444B4;/IO 状态设置RCC-APB2RSTR|=1APB2RSTR / 波特率设置 USART1-CR1|=0X200C; /1 位停止,无校验位.#ifdef EN_USART1
23、_RX /如果使能了接收/使能接收中断USART1-CR1|=1CR1|=1#include “adc.h“#include “delay.h“/ADC 驱动代码 /初始化 ADC/这里我们仅以规则通道为例/我们默认将开启通道 03void Adc_Init(void) /先初始化 IO 口RCC-APB2ENR|=1CRL/PA0 1 2 3 anolog 输入/通道 10/11 设置 RCC-APB2ENR|=1APB2RSTR|=1APB2RSTR /工作模式清零ADC1-CR1|=0CR1/通道 0,1,2,3 采样时间清空 ADC1-SMPR2|=7SMPR2|=7SMPR2|=7S
24、MPR2|=7SMPR1/规则序列 1 通道 chADC1-SQR3|=ch; ADC1-CR2|=1SR /返回 adc 值/得到 ADC 采样内部温度传感器的值/取 10 次,然后平均u16 Get_Temp(void)u16 temp_val=0;u8 t;for(t=0;t#include “delay.h“/使用 SysTick 的普通计数模式对延迟进行管理/包括 delay_us,delay_ms/2010/5/27/V1.2/修正了中断中调用出现死循环的错误/防止延时不准确,采用 do while 结构!static u8 fac_us=0;/us 延时倍乘数static u16
25、 fac_ms=0;/ms 延时倍乘数/初始化延迟函数/SYSTICK 的时钟固定为 HCLK 时钟的 1/8/SYSCLK:系统时钟void delay_init(u8 SYSCLK)SysTick-CTRL/bit2 清空,选择外部时钟 HCLK/8fac_us=SYSCLK/8; fac_ms=(u16)fac_us*1000; /延时 nms/注意 nms 的范围/SysTick-LOAD 为 24 位寄存器,所以,最大延时为:/nmsLOAD=(u32)nms*fac_ms;/时间加载(SysTick-LOAD 为 24bit)SysTick-VAL =0x00; /清空计数器Sys
26、Tick-CTRL=0x01 ; /开始倒数 dotemp=SysTick-CTRL;while(temp /关闭计数器SysTick-VAL =0X00; /清空计数器 /延时 nus/nus 为要延时的 us 数. void delay_us(u32 nus)u32 temp; SysTick-LOAD=nus*fac_us; /时间加载 SysTick-VAL=0x00; /清空计数器SysTick-CTRL=0x01 ; /开始倒数 dotemp=SysTick-CTRL;while(temp /关闭计数器SysTick-VAL =0X00; /清空计数器 第五章 设计总结大学的课程设
27、计给了我们和实践接触的机会,并且可以把自己这一年所学的理论知识的到合理的运用,因此在此过程中我非常的用心。在图书馆和网上找了不少的资料,也让我学习到了不少书本上没有学到的知识。1. 通过课设,加强了对电子技术电路的理解,学会查寻资料方案比较,以及设计计算等环节,进一步提高分析解决实际问题的能力。让我拥有了一定的独立分析解决问题的能力,开阔了视野,知道了电子在社会实践当中应用的广泛性。也因此让我察觉到我对电子知识的了解很贫乏。它督促我今后一定要学好电子技术基础。2.了解与课程有关的电子电路以及元器件工程技术规范,能按课程设计任务书的技术要求,编写设计说明,能正确反映设计和实验成果,能正确绘制电路图。 。3在课设过程当中熟悉了电路板绘图软件 protel 的运用,为我课设时画电路图节省了不少的时间。4 .在课设的过程当中有不少的我不懂的问题,得到了老师和同学的细心帮助,让我有不少长进,感谢老师的辛苦指导,相信在今后的学习中我会更加努力,弥补自己的不足之处。参考文献1 Cortex-M3 嵌入式处理器原理与应用2 32 位基于 ARM 微控制器 STM32F10xx 固件函数库3 Cortex-M3 技术参考手册4STM32F10x 参考手册_cn5 STM32F10x 微控制器参考手册(2009 年 12 月第 10 版)