基于STM32的简易数字电压表.docx

上传人:b****3 文档编号:11267578 上传时间:2023-05-30 格式:DOCX 页数:24 大小:602.20KB
下载 相关 举报
基于STM32的简易数字电压表.docx_第1页
第1页 / 共24页
基于STM32的简易数字电压表.docx_第2页
第2页 / 共24页
基于STM32的简易数字电压表.docx_第3页
第3页 / 共24页
基于STM32的简易数字电压表.docx_第4页
第4页 / 共24页
基于STM32的简易数字电压表.docx_第5页
第5页 / 共24页
基于STM32的简易数字电压表.docx_第6页
第6页 / 共24页
基于STM32的简易数字电压表.docx_第7页
第7页 / 共24页
基于STM32的简易数字电压表.docx_第8页
第8页 / 共24页
基于STM32的简易数字电压表.docx_第9页
第9页 / 共24页
基于STM32的简易数字电压表.docx_第10页
第10页 / 共24页
基于STM32的简易数字电压表.docx_第11页
第11页 / 共24页
基于STM32的简易数字电压表.docx_第12页
第12页 / 共24页
基于STM32的简易数字电压表.docx_第13页
第13页 / 共24页
基于STM32的简易数字电压表.docx_第14页
第14页 / 共24页
基于STM32的简易数字电压表.docx_第15页
第15页 / 共24页
基于STM32的简易数字电压表.docx_第16页
第16页 / 共24页
基于STM32的简易数字电压表.docx_第17页
第17页 / 共24页
基于STM32的简易数字电压表.docx_第18页
第18页 / 共24页
基于STM32的简易数字电压表.docx_第19页
第19页 / 共24页
基于STM32的简易数字电压表.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于STM32的简易数字电压表.docx

《基于STM32的简易数字电压表.docx》由会员分享,可在线阅读,更多相关《基于STM32的简易数字电压表.docx(24页珍藏版)》请在冰点文库上搜索。

基于STM32的简易数字电压表.docx

基于STM32的简易数字电压表

课程设计报告

学院(系):

机械电子工程学院

专业:

测控技术与仪器

学生姓名:

学号:

课程设计题目:

简易数字电压表

起迄日期:

课程设计地点:

指导教师:

第1章简易数字电压表设计方案论证1

1、1简易数字电压表得应用意义1

1、2本次课程设计得目得1

1、3简易数字电压表设计得要求及技术指标1

1、4设计方案论证2

1、5总体设计方案框图及分析2

第2章简易数字电压表各单元电路设计2

2、1A/D转换及数据处理2

2、2串口通信7

2、3LCD显示电路设计7

第3章电路原理图与PCB板得设计8

第4章系统软件程序设计9

第5章设计总结16

参考文献17

摘要

本文以ARM系列得STM32芯片为核心设计了一个简易数字电压表。

简易数字电压表采用模数转换思想来实现,通过硬件电路与软件程序相结合,可输出自定义测量电压,通过调节模数转换电位器使在一定范围内可任意改变。

输出得电压格式与精度得改变通过软件控制,输出电压得大小得改变通过硬件实现。

介绍了得生成原理、硬件电路与软件部分得设计原理。

该简易数字电压表具有体积小、价格低、性能稳定、功能齐全得优点。

关键词:

简易数字电压表;STM32F103;AD转换;

第一章简易数字电压表设计方案论证

1、1简易数字电压表得应用意义

数字电压表简称DMV,它就是采用数字化测量技术设计得电压表。

数字电压表得优良特性深受人们得青睐。

具体有以下得应用特点:

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液晶屏,设计完成一个数字电压表。

要求:

数字电压表可测量0-5V输入电压,电压值通过液晶屏显示。

工作原理及设计思路:

简易数字电压表得设计由A/D转换、数据处理及显示控制等组成。

利用STM32F103内部A/D转换器将模拟电压转换成数字量,经STM32F103计算将数字量转换成对应得电压值,并通过液晶屏输出。

1、4、设计方案论证

数字电压表得基本组成部分就是A/D变换器+电子计数器。

通常,被测直流电压经A/D转换器变为与之成正比得闸门时间,在此闸门时间内计数,用数字显示被测电压值。

可见A/D变换器就是DVM得核心部件。

本课设上采用得就是单片A/D转换器(含模拟电路与数字电路)集成在一片芯片上,配以LCD或LED数字器件后能显示A/D转换结果得集成电路。

它们均属于大规模得集成电路,能以最简得方式构成DVM。

在此采用ICL7106A/D转换器。

但由于STM32F103内部集成了A/D转换器,所以不需要外围得A/D转换器,这就体现了STM32得集成特性。

1、5总体设计方案框图及分析

第二章简易数字电压表各单元电路设计

简易数字电压表得设计由A/D转换、数据处理及显示控制等组成。

由于STM32F103集成了A/D转换、数据处理部分,所以可以集中在一起研究,所以分成了两部分。

2、1A/D转换及数据处理

1)基本型号介绍

首先我们先研究STM32系列芯片得基本知识。

由图1可知STM32F103ZET6有144个引脚,所以我们来了解她得基本型号与代码之间得关系。

图1

STM32系列产品命名规则示例:

STM32F103C8T6Axxx

产品系列STM32=基于ARM®s22得32位微控制器产品类型

F=通用类型产品子系列

101=基本型

102=USB基本型,USB2、0全速设备

103=增强型

105或107=互联型引脚数目

T=36脚C=48脚R=64脚V=100脚Z=144脚

闪存存储器容量4=16K字节得闪存存储器6=32K字节得闪存存储器8=64K字节得闪存存储器B=128K字节得闪存存储器C=256K字节得闪存存储器D=384K字节得闪存存储器E=512K字节得闪存存储器

封装H=BGAT=LQFPU=VFQFPNY=WLCSP

温度范围6=工业级温度范围,-40°C~85°C7=工业级温度范围,-40°C~105°C内部代码A或者空(详见产品数据手册)

选项xxx=已编程得器件代号(3个数字)TR=卷带式包装

2)STM32系列得最小系统设计与独立得A/D转换器供电与参考电压

最小系统主要包括调试接口、震荡电路、引导设置、复位电路与供电系统。

电路由稳定得电源VDD供电。

值得注意得就是,如果使用ADC,VDD得范围必须在2、4-3、6V;如果没有使用ADC,VDD得范围为2-3、6V。

启动模式选项:

由开关SW(BOOT0)与SW(BOOT1)配置。

如图2所示

图2

复位电路:

复位信号就是低有效,复位源包括复位按钮JP3与连在连接器上得调试工具。

如图3

图3

时钟源:

两个时钟源被用于这个微控制器。

LSEX1用于嵌入式RTC得32、768kHz晶振;

HSEX2用于STM32F103微控制器得8MHz晶振。

如图4所示

图4

去耦电容:

去耦电容就就是起到一个电池得作用,满足驱动电路电流得变化,避免相互间得耦合干扰。

由11个100nf得陶瓷电容与一个钽电容组成。

如图5所示

图5

独立得A/D转换器供电与参考电压:

为了提高转换得精确度,ADC使用一个独立得电源供电,过滤与屏蔽来自印刷电路板上得毛刺干扰。

●ADC得电源引脚为VDDA

●独立得电源地VSSA如果有VREF-引脚(根据封装而定),它必须连接到VSSA。

100脚与144脚封装:

为了确保输入为低压时获得更好精度,用户可以连接一个独立得外部参考电压ADC到VREF+与VREF-脚上。

在VREF+得电压范围为2、4V~VDDA。

如图6所示

图6

3)STM32系列得内ADC转换逻辑

12位ADC就是一种逐次逼近型模拟数字转换器。

它有多达18个通道,可测量16个外部与2个内部信号源。

各通道得A/D转换可以单次、连续、扫描或间断模式执行。

ADC得结果可以左对齐或右对齐方式存储在16位数据寄存器中。

模拟瞧门狗特性允许应用程序检测输入电压就是否超出用户定义得高/低阀值。

ADC得输入时钟不得超过14MHz,它就是由PCLK2经分频产生。

ADC主要特征●12位分辨率●转换结束、注入转换结束与发生模拟瞧门狗事件时产生中断●单次与连续转换模式●从通道0到通道n得自动扫描模式●自校准●带内嵌数据一致性得数据对齐●采样间隔可以按通道分别编程●规则转换与注入转换均有外部触发选项●间断模式●双重模式(带2个或以上ADC得器件)●ADC转换时间:

─STM32F103xx增强型产品:

时钟为56MHz时为1μs(时钟为72MHz为1、17μs)─STM32F101xx基本型产品:

时钟为28MHz时为1μs(时钟为36MHz为1、55μs)─STM32F102xxUSB型产品:

时钟为48MHz时为1、2μs─STM32F105xx与STM32F107xx产品:

时钟为56MHz时为1μs(时钟为72MHz为1、17μs)●ADC供电要求:

2、4V到3、6V●ADC输入范围:

VREF-≤VIN≤VREF+●规则通道转换期间有DMA请求产生。

我们需要打开一个ADC输入端口,使外部得模拟量被采集,这样才能通过内部得ADC转换器与驱动电路来实现转换成数字量。

采集模拟量得电路如图7所示

图7

控制逻辑有三个作用:

第一,识别积分器得工作状态,适时发出控制信号,使A/D转换正常进行;第二,判定输入电压极性并控制LCD得负极性显示。

2、2串口通信

由于微控制器得控制就是通过编程语言来控制得,所以需要外设得串口来实现编程语言得读写。

通用异步收发器(UART)就是一种串行接口,一般微处理器中都包含这种外设接口。

异步串行接口提供了一种简单得途径,使两个器件无需共享同一个时钟信号就能进行通信。

如果再加入一个合适得电平转换器MAX232,串口就能能用在RS232与RS485等网络中实现通信,或者与计算机得端口连接。

串口只需两根信号线(RX与TX)即可实现,而且只要两端器件都采用同样得位格式与波特率,那么它们无需其它任何对方得信息就可以成功传输数据。

电路图如图8所示

图8

2、3LCD显示电路设计

由于STM32就是一种高集成芯片,所以在显示液晶屏电路上就少了很多附带得驱动电路,我们选用采用自带驱动模块得液晶屏,这样就少了外围驱动电路。

LCD得显示电路如图9所示

图9

第三章电路原理图与PCB板设计

我们用电路板绘图软件protel,绘制电路原理图并生成PCB板,在绘制完原理图生成PCB板得布线与原件得排列方面有很多值得注意得问题,如地线与电源线必须加粗,尽量避免出现绕线得现象,因为这样就增加了信号传输得时间,尽量减少线得使用,相同器件尽量布在一起,这样方便以后电路板得焊接等等规则。

根据要求与以上得分析得到得原理图与PCB板图如图10所示

第四章系统软件程序设计

我们采用得就是Kilc-4编写与烧入软件,在Kilc-4中建立项目并建立c语言文件,在文件中编写c语言程序,编写完毕后在软件中得选项flash中得configureflashtools中设置参数,设置成适合Cortex-M3嵌入式处理器STM32合适得参数。

最后编译检查程序得正确与否,如果可以创建目标文件则可以烧入微控制器中,否则检查就是否有错误或就是警告,排除错误或就是警告,最终实现创建目标,最后烧入火牛开发板,检验程序就是否符合设计要求,瞧液晶显示屏上得检测电压就是否随着模拟输入电位器得旋转改变而改变。

简易数字电压表得控制程序为:

显示程序、c:

#include

#include"sys、h"

#include"usart、h"

#include"delay、h"

#include"led、h"

#include"lcd、h"

#include"adc、h"

intmain(void)

{

u16adcx;

floattemp;

floattemperate;

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,"FireBullSTM32");

LCD_ShowString(60,70,"1");

LCD_ShowString(60,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);//显示电压值整数部分

temp-=(u8)temp;//减掉整数部分

LCD_ShowNum(148,150,temp*1000,3,16);//显示电压小数部分

}

}

初始化程序、c:

#include"sys、h"

#include"usart、h"

//MiniSTM32开发板

//串口1初始化

//正点原子ALIENTEK

//2010/5/27

//V1、3

//支持适应不同频率下得串口波特率设置、

//加入了对printf得支持

//增加了串口接收命令功能、

//////////////////////////////////////////////////////////////////

//加入以下代码,支持printf函数,而不需要选择useMicroLIB

#if1

#pragmaimport(__use_no_semihosting)

//标准库需要得支持函数

struct__FILE

{

inthandle;

/*Whateveryourequirehere、Iftheonlyareusingis*/

/*standardoutputusingprintf()fordebugging,no*/

/*isrequired、*/

};

/*typedef’dinstdio、h、*/

;

//定义_sys_exit()以避免使用半主机模式

_sys_exit(intx)

{

x=x;

}

//重定义fputc函数

intfputc(intch,FILE*f)

{

USART1->DR=(u8)ch;

while((USART1->SR&0X40)==0);//循环发送,直到发送完毕

returnch;

}

#endif

//end

//////////////////////////////////////////////////////////////////

#ifdefEN_USART1_RX//如果使能了接收

//串口1中断服务程序

//注意,读取USARTx->SR能避免莫名其妙得错误

u8USART_RX_BUF[64];//接收缓冲,最大64个字节、

//接收状态

//bit7,接收完成标志

//bit6,接收到0x0d

//bit5~0,接收到得有效字节数目

u8USART_RX_STA=0;//接收状态标记

voidUSART1_IRQHandler(void)

{

u8res;

if(USART1->SR&(1<<5))//接收到数据

{

res=USART1->DR;

if((USART_RX_STA&0x80)==0)//接收未完成

{

if(USART_RX_STA&0x40)//接收到了0x0d

{

if(res!

=0x0a)USART_RX_STA=0;//接收错误,重新开始

elseUSART_RX_STA|=0x80;//接收完成了

}else//还没收到0X0D

{

if(res==0x0d)USART_RX_STA|=0x40;

else

{

USART_RX_BUF[USART_RX_STA&0X3F]=res;

USART_RX_STA++;

if(USART_RX_STA>63)USART_RX_STA=0;//接收数据错误,重新开始接收

}

}

}

}

}

#endif

//初始化IO串口1

//pclk2:

PCLK2时钟频率(Mhz)

//bound:

波特率

//CHECKOK

//091209

voiduart_init(u32pclk2,u32bound)

{

floattemp;

u16mantissa;

u16fraction;

temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV

mantissa=temp;//得到整数部分

fraction=(temp-mantissa)*16;//得到小数部分

mantissa<<=4;

mantissa+=fraction;

RCC->APB2ENR|=1<<2;//使能PORTA口时钟

RCC->APB2ENR|=1<<14;//使能串口时钟

GPIOA->CRH=0X444444B4;//IO状态设置

RCC->APB2RSTR|=1<<14;//复位串口1

RCC->APB2RSTR&=~(1<<14);//停止复位

//波特率设置

USART1->BRR=mantissa;//波特率设置

USART1->CR1|=0X200C;//1位停止,无校验位、

#ifdefEN_USART1_RX//如果使能了接收

//使能接收中断

USART1->CR1|=1<<8;//PE中断使能

USART1->CR1|=1<<5;//接收缓冲区非空中断使能

MY_NVIC_Init(3,3,USART1_IRQChannel,2);//组2,最低优先级

#endif

}

ADC驱动、c:

#include

#include"adc、h"

#include"delay、h"

//ADC驱动代码

//初始化ADC

//这里我们仅以规则通道为例

//我们默认将开启通道0~3

voidAdc_Init(void)

{

//先初始化IO口

RCC->APB2ENR|=1<<2;//使能PORTA口时钟

GPIOA->CRL&=0XFFFF0000;//PA0123anolog输入

//通道10/11设置

RCC->APB2ENR|=1<<9;//ADC1时钟使能

RCC->APB2RSTR|=1<<9;//ADC1复位

RCC->APB2RSTR&=~(1<<9);//复位结束

RCC->CFGR&=~(3<<14);//分频因子清零

//SYSCLK/DIV2=12MADC时钟设置为12M,ADC最大时钟不能超过14M!

//否则将导致ADC准确度下降!

RCC->CFGR|=2<<14;

ADC1->CR1&=0XF0FFFF;//工作模式清零

ADC1->CR1|=0<<16;//独立工作模式

ADC1->CR1&=~(1<<8);//非扫描模式

ADC1->CR2&=~(1<<1);//单次转换模式

ADC1->CR2&=~(7<<17);

ADC1->CR2|=7<<17;//软件控制转换

ADC1->CR2|=1<<20;//使用用外部触发(SWSTART)!

!

!

必须使用一个事件来触发

ADC1->CR2&=~(1<<11);//右对齐

ADC1->CR2|=1<<23;//使能温度传感器

ADC1->SQR1&=~(0XF<<20);

ADC1->SQR1&=0<<20;//1个转换在规则序列中也就就是只转换规则序列1

//设置通道0~3得采样时间

ADC1->SMPR2&=0XFFFFF000;//通道0,1,2,3采样时间清空

ADC1->SMPR2|=7<<9;//通道3239、5周期,提高采样时间可以提高精确度

ADC1->SMPR2|=7<<6;//通道2239、5周期,提高采样时间可以提高精确度

ADC1->SMPR2|=7<<3;//通道1239、5周期,提高采样时间可以提高精确度

ADC1->SMPR2|=7<<0;//通道0239、5周期,提高采样时间可以提高精确度

ADC1->SMPR1&=~(7<<18);//清除通道16原来得设置

ADC1->SMPR1|=7<<18;//通道16239、5周期,提高采样时间可以提高精确度

ADC1->CR2|=1<<0;//开启AD转换器

ADC1->CR2|=1<<3;//使能复位校准

while(ADC1->CR2&1<<3);//等待校准结束

//该位由软件设置并由硬件清除。

在校准寄存器被初始化后该位将被清除。

ADC1->CR2|=1<<2;//开启AD校准

while(ADC1->CR2&1<<2);//等待校准结束

//该位由软件设置以开始校准,并在校准结束时由硬件清除

}

//获得ADC值

//ch:

通道值0~3

u16Get_Adc(u8ch)

{

//设置转换序列

ADC1->SQR3&=0XFFFFFFE0;//规则序列1通道ch

ADC1->SQR3|=ch;

ADC1->CR2|=1<<22;//启动规则转换通道

while(!

(ADC1->SR&1<<1));//等待转换结束

returnADC1->DR;//返回adc值

}

//得到ADC采样内部温度传感器得值

//取10次,然后平均

u16Get_Temp(void)

{

u16temp_val=0;

u8t;

for(t=0;t<10;t++)

{

temp_val+=Get_Adc(TEMP_CH);

delay_ms(5);

}

returntemp_val/10;

}

延时程序、c:

#include

#include"delay、h"

//使用SysTick得普通计数模式对延迟进行管理

//包括delay_us,delay_ms

//2010/5/27

//V1、2

//修正了中断中调用出现死循环得错误

//防止延时不准确,采用dowhile结构!

staticu8fac_us=0;//us延时倍乘数

staticu16fac_ms=0;//ms延时倍乘数

//初始化延迟函数

//SYSTICK得时钟固定为HCLK时钟得1/8

//SYSCLK:

系统时钟

voiddelay_init(u8SYSCLK)

{

SysTick->CTRL&=0xfffffffb;//bit2清空,选择外部时钟HCLK/8

fac_us=SYSCLK/8;

fac_ms=(u16)fac_us*1000;

}

//延时nms

//注意nms得

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2