ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:602.20KB ,
资源ID:11267578      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11267578.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于STM32的简易数字电压表.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

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

1、基于STM32的简易数字电压表 课程设计报告学 院(系):机械电子工程学院专 业:测控技术与仪器学 生 姓 名:学 号:课程设计题目: 简易数字电压表起 迄 日 期:课程设计地点:指 导 教 师: 第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章 系统软件程序设计 9第5章

2、 设计总结 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液晶屏,设计完成一个数字电压表。要求:数字电压表可测量0-5V输入电压,电压值通过液晶屏显示。工作原理及设计思

4、路:简易数字电压表得设计由A/D转换、数据处理及显示控制等组成。利用STM32F103内部A/D转换器将模拟电压转换成数字量,经STM32F103计算将数字量转换成对应得电压值,并通过液晶屏输出。 1、4、设计方案论证数字电压表得基本组成部分就是A/D变换器+电子计数器。通常,被测直流电压经A/D转换器变为与之成正比得闸门时间,在此闸门时间内计数,用数字显示被测电压值。可见A/D变换器就是DVM得核心部件。本课设上采用得就是单片A/D转换器(含模拟电路与数字电路)集成在一片芯片上,配以LCD或LED数字器件后能显示A/D转换结果得集成电路。它们均属于大规模得集成电路,能以最简得方式构成DVM。

5、在此采用ICL7106A/D转换器。但由于STM32F103内部集成了A/D转换器,所以不需要外围得A/D转换器,这就体现了STM32得集成特性。 1、5总体设计方案框图及分析第二章 简易数字电压表各单元电路设计简易数字电压表得设计由A/D转换、数据处理及显示控制等组成。由于STM32F103集成了A/D转换、数据处理部分,所以可以集中在一起研究,所以分成了两部分。2、1 A/D转换及数据处理1)基本型号介绍首先我们先研究STM32系列芯片得基本知识。由图1可知STM32F103ZET6有144个引脚,所以我们来了解她得基本型号与代码之间得关系。 图1STM32系列产品命名规则 示例: STM

6、32 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 脚 V = 100脚 Z = 144脚 闪存存储器容量 4 = 16K字节得闪存存储器 6 = 32K字节得闪存存储器 8 = 64K字节得闪存存储器 B = 128K字节得闪存存储器 C = 256K字节得闪存存储器 D = 384K字节得闪存存储器 E = 512K字节得闪存存储器封装 H =

7、 BGAT = LQFPU = VFQFPNY = WLCSP 温度范围 6 = 工业级温度范围,-40C85 C7 = 工业级温度范围, -40C105C内部代码A 或者空 (详见产品数据手册)选项xxx = 已编程得器件代号(3个数字)TR = 卷带式包装2)STM32系列得最小系统设计与独立得A/D转换器供电与参考电压 最小系统主要包括调试接口、震荡电路、引导设置、复位电路与供电系统。电路由稳定得电源VDD供电。值得注意得就是,如果使用ADC,VDD得范围必须在2、4-3、6V;如果没有使用ADC,VDD得范围为2-3、6V。启动模式选项:由开关SW(BOOT0)与SW(BOOT1)配置

8、。如图2所示 图2复位电路:复位信号就是低有效,复位源包括复位按钮JP3与连在连接器上得调试工具。如图3 图3时钟源:两个时钟源被用于这个微控制器。LSE X1用于嵌入式RTC得32、768kHz晶振;HSE X2用于STM32F103微控制器得8MHz晶振。如图4所示 图4去耦电容:去耦电容就就是起到一个电池得作用,满足驱动电路电流得变化,避免相互间得耦合干扰。 由11个100nf得陶瓷电容与一个钽电容组成。如图5所示 图5独立得A/D转换器供电与参考电压:为了提高转换得精确度,ADC使用一个独立得电源供电,过滤与屏蔽来自印刷电路板上得毛刺干扰。 ADC得电源引脚为VDDA 独立得电源地VS

9、SA 如果有VREF-引脚(根据封装而定),它必须连接到VSSA。 100脚与144脚封装: 为了确保输入为低压时获得更好精度,用户可以连接一个独立得外部参考电压ADC到VREF+与VREF-脚上。在VREF+得电压范围为2、4VVDDA。 如图6所示 图63)STM32系列得内ADC转换逻辑12位ADC就是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部与2个内部信号源。各通道得A/D转换可以单次、连续、扫描或间断模式执行。ADC得结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟瞧门狗特性允许应用程序检测输入电压就是否超出用户定义得高/低阀值。 ADC得输入时钟不

10、得超过14MHz,它就是由PCLK2经分频产生。ADC主要特征 12位分辨率 转换结束、注入转换结束与发生模拟瞧门狗事件时产生中断 单次与连续转换模式 从通道0到通道n得自动扫描模式 自校准 带内嵌数据一致性得数据对齐 采样间隔可以按通道分别编程 规则转换与注入转换均有外部触发选项 间断模式 双重模式(带2个或以上ADC得器件) ADC转换时间: STM32F103xx增强型产品:时钟为56MHz时为1s(时钟为72MHz为1、17s) STM32F101xx基本型产品:时钟为28MHz时为1s(时钟为36MHz为1、55s) STM32F102xxUSB型产品:时钟为48MHz时为1、2s

11、STM32F105xx与STM32F107xx产品:时钟为56MHz时为1s(时钟为72MHz为1、17s) ADC供电要求:2、4V到3、6V ADC输入范围:VREF- VIN VREF+ 规则通道转换期间有DMA请求产生。我们需要打开一个ADC输入端口,使外部得模拟量被采集,这样才能通过内部得ADC转换器与驱动电路来实现转换成数字量。采集模拟量得电路如图7所示 图7 控制逻辑有三个作用:第一,识别积分器得工作状态,适时发出控制信号,使A/D 转换正常进行;第二,判定输入电压极性并控制LCD得负极性显示。2、2 串口通信由于微控制器得控制就是通过编程语言来控制得,所以需要外设得串口来实现编

12、程语言得读写。 通用异步收发器(UART)就是一种串行接口,一般微处理器中都包含这种外设接口。异步串行接口提供了一种简单得途径,使两个器件无需共享同一个时钟信号就能进行通信。如果再加入一个合适得电平转换器MAX232,串口就能能用在RS232与RS485等网络中实现通信,或者与计算机得端口连接。串口只需两根信号线(RX与TX)即可实现,而且只要两端器件都采用同样得位格式与波特率,那么它们无需其它任何对方得信息就可以成功传输数据。电路图如图8所示 图82、3 LCD显示电路设计由于STM32就是一种高集成芯片,所以在显示液晶屏电路上就少了很多附带得驱动电路,我们选用采用自带驱动模块得液晶屏,这样

13、就少了外围驱动电路。LCD得显示电路如图9所示 图9 第三章 电路原理图与PCB板设计我们用电路板绘图软件protel,绘制电路原理图并生成PCB板,在绘制完原理图生成PCB板得布线与原件得排列方面有很多值得注意得问题,如地线与电源线必须加粗,尽量避免出现绕线得现象,因为这样就增加了信号传输得时间,尽量减少线得使用,相同器件尽量布在一起,这样方便以后电路板得焊接等等规则。根据要求与以上得分析得到得原理图与PCB板图如图10所示 第四章 系统软件程序设计我们采用得就是Kilc-4编写与烧入软件,在Kilc-4中建立项目并建立c语言文件,在文件中编写c语言程序,编写完毕后在软件中得选项flash中

14、得configure flash tools中设置参数,设置成适合Cortex-M3嵌入式处理器STM32合适得参数。最后编译检查程序得正确与否,如果可以创建目标文件则可以烧入微控制器中,否则检查就是否有错误或就是警告,排除错误或就是警告,最终实现创建目标,最后烧入火牛开发板,检验程序就是否符合设计要求,瞧液晶显示屏上得检测电压就是否随着模拟输入电位器得旋转改变而改变。简易数字电压表得控制程序为:显示程序、c :#include #include sys、h#include usart、h #include delay、h #include led、h #include lcd、h #incl

15、ude adc、hint 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,110,2011/12/2

16、6); /显示时间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;

17、 /减掉整数部分 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) /标准库需要得支持函数 struct _FILE int han

18、dle; /* Whatever you require here、 If the only are using is */ /* standard output using printf() for debugging, no */ /* is required、 */ ; /* typedef d in stdio、h、 */ ; /定义_sys_exit()以避免使用半主机模式 _sys_exit(int x) x = x; /重定义fputc函数 int fputc(int ch, FILE *f) USART1-DR = (u8) ch; while(USART1-SR&0X40)=

19、0);/循环发送,直到发送完毕 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(void) u8 res; if(USART1-SR&(1DR; if(USART_RX_STA&0x80)=0)/接收未完成 if(U

20、SART_RX_STA&0x40)/接收到了0x0d if(res!=0x0a)USART_RX_STA=0;/接收错误,重新开始 else USART_RX_STA|=0x80; /接收完成了 else /还没收到0X0D if(res=0x0d)USART_RX_STA|=0x40; else USART_RX_BUFUSART_RX_STA&0X3F=res; USART_RX_STA+; if(USART_RX_STA63)USART_RX_STA=0;/接收数据错误,重新开始接收 #endif /初始化IO 串口1/pclk2:PCLK2时钟频率(Mhz)/bound:波特率/CHE

21、CK OK/091209void uart_init(u32 pclk2,u32 bound) float temp; u16 mantissa; u16 fraction; temp=(float)(pclk2*1000000)/(bound*16);/得到USARTDIV mantissa=temp; /得到整数部分 fraction=(temp-mantissa)*16; /得到小数部分 mantissaAPB2ENR|=1APB2ENR|=1CRH=0X444444B4;/IO状态设置 RCC-APB2RSTR|=1APB2RSTR&=(1BRR=mantissa; / 波特率设置 U

22、SART1-CR1|=0X200C; /1位停止,无校验位、#ifdef EN_USART1_RX /如果使能了接收 /使能接收中断 USART1-CR1|=1CR1|=15; /接收缓冲区非空中断使能 MY_NVIC_Init(3,3,USART1_IRQChannel,2);/组2,最低优先级 #endifADC驱动、c: #include #include adc、h#include delay、h/ADC 驱动代码 /初始化ADC/这里我们仅以规则通道为例/我们默认将开启通道03 void Adc_Init(void) /先初始化IO口 RCC-APB2ENR|=1CRL&=0XFFF

23、F0000;/PA0 1 2 3 anolog输入 /通道10/11设置 RCC-APB2ENR|=1APB2RSTR|=1APB2RSTR&=(1CFGR&=(3CFGR|=2CR1&=0XF0FFFF; /工作模式清零 ADC1-CR1|=0CR1&=(1CR2&=(1CR2&=(7CR2|=7CR2|=1CR2&=(1CR2|=1SQR1&=(0XFSQR1&=0SMPR2&=0XFFFFF000;/通道0,1,2,3采样时间清空 ADC1-SMPR2|=7SMPR2|=7SMPR2|=7SMPR2|=7SMPR1&=(7SMPR1|=7CR2|=1CR2|=1CR2&1CR2|=1CR

24、2&1SQR3&=0XFFFFFFE0;/规则序列1 通道ch ADC1-SQR3|=ch; ADC1-CR2|=1SR&1DR; /返回adc值 /得到ADC采样内部温度传感器得值/取10次,然后平均u16 Get_Temp(void) u16 temp_val=0; u8 t; for(t=0;t10;t+) temp_val+=Get_Adc(TEMP_CH); delay_ms(5); return temp_val/10;延时程序、c:#include #include delay、h/使用SysTick得普通计数模式对延迟进行管理/包括delay_us,delay_ms/2010/5/27/V1、2/修正了中断中调用出现死循环得错误/防止延时不准确,采用do while结构!static u8 fac_us=0;/us延时倍乘数static u16 fac_ms=0;/ms延时倍乘数/初始化延迟函数/SYSTICK得时钟固定为HCLK时钟得1/8/SYSCLK:系统时钟void delay_init(u8 SYSCLK) SysTick-CTRL&=0xfffffffb;/bit2清空,选择外部时钟 HCLK/8 fac_us=SYSCLK/8; fac_ms=(u16)fac_us*1000; /延时nms/注意nms得

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

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