当前位置:   article > 正文

基于STM32的简易数字电压表仿真设计_基于stm32的数字电压表设计

基于stm32的数字电压表设计

本设计


基于STM32的数字电压表仿真设计(仿真+程序+设计报告+讲解)

仿真图proteus 8.9

程序编译器:keil 5

编程语言:C语言

设计编号:C0080

1.主要功能

结合实际情况,基于STM32F103单片机设计一个数字电压表仿真设计。该设计应满足的功能要求为:

1、以STM32单片机为控制核心设计数字电压表;

2、可以测量0~3.3V输入电压值;

3、液晶屏LCD1602显示电压;

4、最小分辨率为0.1V,测量误差约为±0.1V。

主要硬件设备:STM32F103单片机

以下为本设计资料展示:

2.仿真

整体设计方案

本实验利用STM32单片机的ADC等资源,将软、硬件有机地结合起来,使得系统能够正确地进识别输入电压大小,LCD1602能够正确地显示。

测试如下所示:

仿真运行情况:

通过滑动变阻器改变输入电压,滑动变阻器100%,模拟信号输入理论值为3.3V。3.3V测试如下

img

3. 程序

ADC部分初始化

#include "adc.h"

void ADC1_GPIO_Config(void){
    GPIO_InitTypeDef GPIO_InitStructure;
	  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1, ENABLE);	//使能ADC1,GPIOC时钟
 	  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//配置时钟
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;	//模拟输入
    GPIO_Init(GPIOA, &GPIO_InitStructure); //初始化PC4
}


void ADC_Config(void)
{
	

  ADC_InitTypeDef ADC_InitStructure;//ADC结构体变量//注意在一个语句快内变量的声明要放在可执行语句的前面,否则出错,因此要放在ADC1_GPIO_Config();前面
  ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//ADC1和ADC2工作在独立模式
  ADC_InitStructure.ADC_ScanConvMode =	DISABLE; //使能扫描
  ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;//ADC转换工作在连续模式
  ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//由软件控制转换,不使用外部触发
  ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;//转换数据右对齐
  ADC_InitStructure.ADC_NbrOfChannel = 1;//转换通道为1
  ADC_Init(ADC1, &ADC_InitStructure); //初始化ADC
	
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
  //ADC1选择信道14,音序等级1,采样时间55.5个周期
//  ADC_DMACmd(ADC1, ENABLE);//使能ADC1模块DMA
  ADC_Cmd(ADC1, ENABLE);//使能ADC1
	ADC_ITConfig(ADC1, ADC_IT_EOC, ENABLE);
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);
//  ADC_ResetCalibration(ADC1); //重置.(复位).ADC1校准寄存器
//  while(ADC_GetResetCalibrationStatus(ADC1));//等待ADC1校准重置完成
//  ADC_StartCalibration(ADC1);//开始ADC1校准
//  while(ADC_GetCalibrationStatus(ADC1));//等待ADC1校准完成
//  ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1软件开始转换
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

主函数

#include "stm32f10x.h"
#include "bsp-lcd1602.h"
#include "delay.h"
#include "sys.h"
#include "adc.h"

int main(void)
{
	int a,b,c,d;
	float temp;
	
	delay_init();	    	 //延时函数初始化	  	
	LCD1602_Init();				//LCD1602显示初始化
  ADC1_GPIO_Config();		//ADC引脚初始化
  ADC_Config();  				//ADC使能
	LCD1602_ShowStr(2,0,"adcvalue=0.0V",13);//LCD1602显示
	
	while(1)
	{
	b=ADC_GetConversionValue(ADC1);//得到ADC值
	temp=(float)b*(3.4/4096);
	//实际电压 =  (ADC_DR)/分辨率 *(正参考电压-负参考电压) 
	//正参考电压3.3V才对,但是做仿真需要改3.4V才准
	a=temp/1;
	c=temp*10;
	d=c%10;
	LCD_ShowNum(11,0,a);//显示个位
	LCD_ShowNum(13,0,d);//显示小数点后一位
	}
}




  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

开题报告

基于STM32的简易数字电压表Proteus仿真设计
一、课题背景和目标

在电子工程中,数字电压表是一种常见的测量仪器,用于测量电路中的电压值。本课程大作业的目标是设计一个基于STM32单片机的简易数字电压表,并在Proteus仿真环境中进行验证。设计的主要功能包括:

以STM32单片机为控制核心,实现数字电压表的逻辑控制和数据处理。
测量0~3.3V的输入电压值,并实现电压的精确测量和显示。
使用液晶屏LCD1602显示电压值。
最小分辨率为0.1V,测量误差约为±0.1V。
通过本课程大作业的设计与仿真,旨在加深对STM32单片机应用、数字电压表原理以及Proteus仿真技术的理解和掌握。

二、研究方法

我们将采用理论研究与仿真实验相结合的方法,具体步骤如下:

理论研究:收集相关资料,了解STM32单片机、数字电压表和液晶屏LCD1602的工作原理和技术特点。
电路设计:在Proteus仿真软件中设计数字电压表的电路图,包括STM32单片机、电压输入电路、A/D转换器、液晶屏LCD1602等部分。
程序设计:使用C语言编写STM32单片机的程序,实现电压的测量、处理和显示。
仿真测试:在Proteus中运行程序,输入不同的电压值,观察液晶屏LCD1602的显示结果,验证数字电压表的功能和性能。
三、预期结果

通过上述研究方法,我们期望实现以下预期结果:

在Proteus仿真软件中成功构建数字电压表的电路图,各部分电路元件能够正确连接。
通过STM32单片机的程序实现0~3.3V的电压测量,并能够将测量结果显示在液晶屏LCD1602上。
液晶屏LCD1602能够正确显示电压值,最小分辨率为0.1V。
测量误差在±0.1V范围内,达到设计要求。
四、实验安排

本课程大作业预计需要一个月的时间完成。前两周主要用于理论研究和电路设计,第三周进行编程和调试,第四周进行仿真测试和结果分析。

五、实验材料和方法

实验材料包括:

STM32单片机。
A/D转换器。
液晶屏LCD1602。
Proteus仿真软件。
实验方法包括:

设计电路。
编写程序。
仿真测试。
六、实验步骤和数据记录

实验步骤如下:

在理论研究阶段,收集相关资料,了解STM32单片机、数字电压表和液晶屏LCD1602的工作原理和技术特点。
在Proteus中设计数字电压表的电路图,包括STM32单片机、电压输入电路、A/D转换器、液晶屏LCD1602等部分。
使用C语言编写STM32单片机的程序,实现电压的测量、处理和显示。
在Proteus中运行程序,输入不同的电压值,观察液晶屏LCD1602的显示结果,记录实验数据。
分析实验结果,判断数字电压表的功能和性能是否达到设计要求。
撰写报告,总结实验过程和结果。
数据记录包括:

记录实验过程中遇到的问题和困难。
记录液晶屏LCD1602的显示结果。
记录数字电压表的最小分辨率和测量误差。
七、实验结论与讨论

在实验结束后,我们将根据实验数据和结果进行分析和讨论,得出实验结论。可能的结论包括:

成功实现0~3.3V的电压测量和显示。
液晶屏LCD1602能够正确显示电压值,最小分辨率为0.1V。
测量误差在±0.1V范围内,达到设计要求。
在实验过程中遇到的问题和困难,以及如何解决这些问题和困难的经验和教训。
实验讨论将包括对实验过程中遇到的问题和困难的分析,以及对未来改进的建议和方向。

4. 设计报告

img

报告部分内容

二、主控制器选择

2.1 stm32f103芯片的概述

STM32单片机有很多个系列,其中包括基本型、USB基本型、增强型以及互联型几大系列,这写系列的STM32单片机都是具有性能高、功耗低、成本低等特点。其内部结构图如图 2.2所示:

img

图 2.2 STM32内部结构图

本课题采用的是STM32F103C8T6单片机芯片,这是是一款ARM M3内核的增强型微控制器,这款内核的工作频率是能够达到72MHz的,它拥有着128K字节的闪存和极其丰富的外设,如GPIO口,串口,定时器,中断,数模转换,实时时钟,看门狗,SPI,IIC,CAN总线等部分组成。STM32F103系列单片机的性能在同一个类别的产品中是最高的,它能够在-40°C -85°C温度下正常地进行工作,工作的电压范围为2V-3.6V,具有低功耗的节能工作模式,闪存存储器的容量为64K字节。

资料清单&下载链接

在这里插入图片描述
0、常见使用问题及解决方法–必读!!!!
1、仿真
2、程序
3、功能要求
4、讲解视频
5、设计报告
6、软硬件设计框图
双击打开更多 51 STM32单片机设计.url

网盘下载链接

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/473763
推荐阅读
相关标签
  

闽ICP备14008679号