基于STM32的数字电压表仿真设计详解

本设计

STM32的数字电压表仿真设计

  • 1.主要功能
  • 2.仿真
  • 3. 程序
  • 开题报告
  • 4. 设计报告
  • 资料清单&下载链接
  • 基于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软件开始转换
    }
    
    
    

    主函数

    #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);//显示小数点后一位
    	}
    }
    
    
    
    
    

    开题报告

    基于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

    网盘下载链接

    物联沃分享整理
    物联沃-IOTWORD物联网 » 基于STM32的数字电压表仿真设计详解

    发表评论