嵌入式技术及应用(STM32CubeMX版)课件 任务15 制作电压监测器_第1页
嵌入式技术及应用(STM32CubeMX版)课件 任务15 制作电压监测器_第2页
嵌入式技术及应用(STM32CubeMX版)课件 任务15 制作电压监测器_第3页
嵌入式技术及应用(STM32CubeMX版)课件 任务15 制作电压监测器_第4页
嵌入式技术及应用(STM32CubeMX版)课件 任务15 制作电压监测器_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

任务15制作电压监测器任务要求STM32的PA0引脚作模拟输入口,对该引脚上输入的电压进行采集,串口1作异步通信口使用,用来输出当前电压值,输出格式为“当前电压:X.XX伏”,其中,串口的波特率BR=115200bps,数据位8位,停止位1位。知识储备

1.A/D转换的基础知识(1)常用的技术指标A/D转换器简称为ADC,功能是将连续的模拟信号转换成数字信号。分辨率:表示输出数字量增减1所需要的输入模拟量的变化值,它反映了ADC能够分辨最小的量化信号的能力。设ADC的位数为n,转换的满量程电压为U,则其分辨率为U/(2n-1)。例如,满量程电压为5V,用10位ADC转换器,分辨率约为5mV。用12位ADC转换器时,分辨率约为1mV。ADC的位数越多,分辨率越高。

1.A/D转换的基础知识转换时间:启动ADC进行AD转换开始到转换结束并得到稳定的数字量输出为止所需要的时间。转换时间的快慢将会影响ADC与CPU交换数据的方式。(2)A/D转换值与输入电压的关系

Ux:输入电压UREF:满量程电压n:A/D转换的位数adval:A/D转换值

2.STM32中ADC的结构STM32片内集成有1~3个12位逐次逼近型ADC,依次为ADC1~ADC3ADC主要由ADC的电源电压与参考电压输入、ADC模拟信号输入、模拟到数字转换器、模拟看门狗、ADC中断电路和ADC控制等几部分组成。

(1)ADC的电源电压与参考电压输入由VDDA、VSSA、VREF+、VREF-4个引脚组成。VDDA:ADC的正电源输入脚,VSSA为ADC的接地脚,ADC的供电电压为2.4V~3.6V。VREF+为ADC的参考电压的正电压输入脚,VREF-为ADC参考电压的负电压输入脚,其中,2.4V≤VREF+≤VDDA,VREF-=VSSA。2.STM32中ADC的结构

(2)ADC输入共18个通道外部通道16个,编号为通道0~通道15,记作ADCx_IN0~ADCx_IN15(x=1、2、3),每个外部通道都与一个外部引脚相接,用来测量外部输入的模拟信号。内部通道有2个,只有ADC1有内部通道,编号为通道16、通道17。通道16连接至内部温度传感器,用来测量芯片的内部温度通道17连接到内部参考电压VREFIN,其电压值为1.2V。2.STM32中ADC的结构

通道号ADC1ADC2ADC3通道号ADC1ADC2ADC3外部通道0PA0PA0PA0外部通道9PB1PB1PF3外部通道1PA1PA1PA1外部通道10PC0PC0PC0外部通道2PA2PA2PA2外部通道11PC1PC1PC1外部通道3PA3PA3PA3外部通道12PC2PC2PC2外部通道4PA4PA4PF6外部通道13PC3PC3PC3外部通道5PA5PA5PF7外部通道14PC4PC4PF4外部通道6PA6PA6PF8外部通道15PC5PC5PF5外部通道7PA7PA7PF9通道16(内部)内部温度传感器内部Vss内部Vss外部通道8PB0PB0PF10通道17(内部)内部参考电压VREFINT内部Vss内部VssSTM32F103中ADC各通道的引脚分布2.STM32中ADC的结构(3)模拟至数字转换器也叫A/D转换器,为12位的逐次逼近型A/D转换器。输入信号有18个通道,分为规则通道组和注入通道组2个组,其中,规则通道组最多16个通道,注入通道组最多4个通道。(4)模拟看门狗用来监测输入的模拟电压,当A/D转换结果高于设定的阀值高限值或者低于阀值低限值就产生模拟看门狗中断。(5)ADC中断有转换结束中断、注入转换结束中断和模拟看门中断等3种。2.STM32中ADC的结构(5)ADC中断特点:每个中断都有一个中断标志位,用来记录对应的中断事件是否发生,当中断事件发生,硬件电路就自动地将对应的中断标志位置1。每个中断都有一个中断使能控制位,用来使能或禁止对应的中断。每个中断只有在中断使能控制位为1的条件下,中断事件发生后才能ADC中断。2.STM32中ADC的结构ADC转换结束后的中断中断事件事件标志(状态寄存器ADC_SR)使能控制位(控制寄存器1ADC_CR1)转换结束EOCEOCIE注入转换结束JEOCJEOCIE模拟看门狗事件AWDAWDIE2.STM32中ADC的结构分注入组和规则组2个组

(1)ADC的通道组3.ADC的应用特性规则通道组是常用的通道组,注入通道组是一种插入通道组。它们的关系如图所示,类似于单片机程序中的main()函数与中断服务函数之间的关系。规则通道相当于main()函数,注入通道相当于中断服务函数。函数的用法说明

(1)HAL_ADC_Start()函数4.HAL库中有关ADC的常用函数和宏原型HAL_StatusTypeDefHAL_ADC_Start(ADC_HandleTypeDef*hadc);功能使能ADC,并以查询方式启动规则通道组的AD转换。参数hadc:ADC句柄,取值为hadcx,x为ADC的编号,取值为1~3。返回值HAL的状态。例如,启动ADC1的规则通道的AD转换程序如下:HAL_ADC_Start(&hadc1);函数的用法说明

(2)HAL_ADC_Start_DMA()函数原型HAL_StatusTypeDefHAL_ADC_Start_DMA(ADC_HandleTypeDef*hadc,uint32_t*pData,uint32_tLength);功能使能ADC、启动规则通道中的AD转换并以DMA方式将AD转换结果传输到数据缓冲区中。参数1hadc:ADC句柄,取值为hadcx,x为ADC的编号,取值为1~3。参数2pData:DMA传输时目的缓冲区的首地址。4.HAL库中有关ADC的常用函数和宏

(2)HAL_ADC_Start_DMA()函数原型HAL_StatusTypeDefHAL_ADC_Start_DMA(ADC_HandleTypeDef*hadc,uint32_t*pData,uint32_tLength);参数3Length:DMA传输的数据个数。返回值HAL的状态。说明:进行DMA传输时需要将DMA的传输大小配置成半字长度。例如,启动ADC1,并用DMA方式将AD转换结果传输到数据buf[]中,数据传输个数为50个,其程序如下:HAL_ADC_Start_DMA(&hadc1,buf,50);4.HAL库中有关ADC的常用函数和宏函数的用法说明

(3)HAL_ADC_Stop()函数原型HAL_StatusTypeDefHAL_ADC_Stop(ADC_HandleTypeDef*hadc);功能停止规则通道的AD转换,并禁止ADC。参数hadc:ADC句柄,取值为hadcx,x为ADC的编号,取值为1~3。返回值HAL的状态。例如,停止ADC1的AD转换,其程序如下:HAL_ADC_Stop(&hadc1);4.HAL库中有关ADC的常用函数和宏函数的用法说明

(4)HAL_ADCEx_Calibration_Start()函数原型HAL_StatusTypeDefHAL_ADCEx_Calibration_Start(ADC_HandleTypeDef*hadc);功能启动ADC自动校正。参数hadc:ADC句柄,取值为hadcx,x为ADC的编号,取值为1~3。返回值HAL的状态。例如,校正ADC1的程序代码如下:HAL_ADCEx_Calibration_Start(&hadc1);4.HAL库中有关ADC的常用函数和宏函数的用法说明

(5)HAL_ADC_PollForConversion()函数原型HAL_StatusTypeDefHAL_ADC_PollForConversion(ADC_HandleTypeDef*hadc,uint32_tTimeout);功能查询并等待AD转换结束。参数1hadc:ADC句柄,取值为hadcx,x为ADC的编号,取值为1~3。参数2Timeout:查询等待的最长时间,单位为ms。返回值HAL的状态。4.HAL库中有关ADC的常用函数和宏函数的用法说明

(6)HAL_ADC_GetValue()函数原型uint32_tHAL_ADC_GetValue(ADC_HandleTypeDef*hadc);功能获取AD转换的结果。参数hadc:ADC句柄,取值为hadcx,x为ADC的编号,取值为1~3。返回值AD转换的结果。例如,获取ADC1的转换结果并存入变量adval中的程序如下:adval=HAL_ADC_GetValue(&hadc1);4.HAL库中有关ADC的常用函数和宏函数的用法说明如下表所示:

(7)HAL_ADC_GetState()函数原型uint32_tHAL_ADC_GetState(ADC_HandleTypeDef*hadc);功能获取ADC状态寄存器的值,即ADC当前的状态。参数hadc:ADC句柄,取值为hadcx,x为ADC的编号,取值为1~3。返回值ADC状态寄存器的值。例如,下列语句用来检测ADC1当前状态:HAL_ADC_GetState(&hadc1);4.HAL库中有关ADC的常用函数和宏宏的用法说明

(8)HAL_IS_BIT_SET(REG,BIT)宏宏HAL_IS_BIT_SET(REG,BIT)功能检查寄存器的位是否被置位。参数1REG:所要检测的寄存器。参数2BIT:所要检测的位所对应的屏蔽值。返回值若寄存器的指定的位被置位,则宏的值为真,否则为假。4.HAL库中有关ADC的常用函数和宏举例:检测ADC1的AD转换是否结束。若已结束,则读取AD转换结果,并换算成电压值,然后用串口输出当前的电压值。(8)HAL_IS_BIT_SET(REG,BIT)宏4.HAL库中有关ADC的常用函数和宏if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC)){ADC_Value=HAL_ADC_GetValue(&hadc1);printf("当前的电压为%.2f伏\r\n",ADC_Value*3.3/4095);}实现方法与步骤任务15的硬件电路:

1.搭建电路

(3)将串口1配置成异步通信口,波特率为115200bps,8位数据位,1位停止位。2.生成ADC的初始化代码步骤(1)启动STM32CubeMX,然后新建STM32CubeMX工程、配置SYS、RCC,其中,Debug模式选择SerialWire,HSE选择外部晶振。(2)配置时钟

第2步:选择模拟通道0(4)配置ADC1第1步:显示ADC的配置窗口第3步:设置ADC参数(5)配置工程工程名设为Task11,并设置其他相关选项(6)保存工程,然后生成Keil工程代码。2.生成ADC的初始化代码

3.编写电压监测器的程序步骤(1)将任务10中位于“D:\ex\Task10”文件夹中的User子文件夹复制至“D:\ex\Task15”文件夹中。(2)打开任务15的Keil工程,并在Keil工程中新建User组,然后将“D:\ex\Task15\User”文件夹中的Serial.c文件添加至User组中。(3)在Keil工程的include路径中添加“D:\ex\Task15\User”文件夹,该文件夹是Serial.h头文件所在的文件夹。

(4)在main.c文件中编写用户应用程序,程序代码如下:…#include "stdio.h"…intmain(void){uint16_tADC_Value; //存放当前AD值

…while(1){ HAL_ADC_Start(&hadc1); // HAL_ADC_PollForConversion(&hadc1,50);

if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))3.编写电压

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论