目录

  • 1 课程简介
    • 1.1 课程简介
    • 1.2 课程标准
    • 1.3 职业证书对接
    • 1.4 课程分工
  • 2 数据采集
    • 2.1 数据采集之数字量传感数据采集
    • 2.2 数据采集之模拟量传感数据采集
    • 2.3 数据采集之模拟量转换为数字量
    • 2.4 数据采集之开关量传感数据采集
  • 3 STM32微控制器基本外设应用开发
    • 3.1 STM32基础知识
    • 3.2 任务1 开发环境搭建和工程建立
    • 3.3 任务2 LED流水灯应用开发
    • 3.4 任务3 按键控制LED灯亮灭
    • 3.5 任务4 串行通信控制LED流水灯应用开发
    • 3.6 任务5 电池电量检测应用开发
  • 4 RS-485总线通信应用
    • 4.1 RS-485基本知识
    • 4.2 RS-485通信协议及网关通信协议
    • 4.3 Modbus通信协议
    • 4.4 任务1 案例分析及工程代码编写
    • 4.5 任务2 系统搭建及云平台项目创建
  • 5 CAN总线通信应用
    • 5.1 CAN总线基本知识
    • 5.2 CAN通信帧
    • 5.3 CAN控制器和收发器
    • 5.4 任务1 案例分析及工程代码编写
    • 5.5 任务2 系统搭建及云平台项目创建
    • 5.6 任务3 CAN通信数据抓包与解析
  • 6 BasicRF的无线通信应用
    • 6.1 BasicRF基础知识
    • 6.2 任务1创建工程项目
    • 6.3 任务2 温湿度节点数据采集
    • 6.4 任务3 火焰节点数据采集
    • 6.5 任务4 传感器节点组网
    • 6.6 任务5 传感数据汇聚
  • 7 WiFi数据通信
    • 7.1 WI-FI基础知识
    • 7.2 使用AT指令配置WI-FI工作模式
    • 7.3 WI-FI接入云平台
  • 8 NB-IoT联网通信
    • 8.1 NB-IoT技术简介
    • 8.2 利尔达NB-IoT模组介绍
    • 8.3 任务1 “智慧路灯”AT指令代码编写
    • 8.4 任务2.烧写智能路灯
    • 8.5 任务3NB-IoT接入云平台
  • 9 LoRa 通信技术
    • 9.1 基础知识
    • 9.2 项目分析与LoRa驱动移植
    • 9.3 任务2 LoRa温湿度传感器节点应用程序开发
    • 9.4 任务3 LoRa光照传感器节点数据采集
    • 9.5 任务4 LoRa网关节点汇聚传感器数据
    • 9.6 讨论
任务5 电池电量检测应用开发
  • 1 知识介绍
  • 2 PPT
  • 3 学习视频
  • 4 拓展内容
  • 5 国家脊梁

任务要求

设计一个可对电池电压进行监测的应用程序,要求每隔1秒钟对电池电压进行采集,采集到的电压值通过串行通信的方式发送至上位机显示。

案例分析

通过对“电池电量监测电路原理图”图 2-59分析可知,供电电池的电压为3.3V,通过“PIN”端接入。电池电压经过分压后,通过“VM_ADC”与微控制器的 PA1 引脚相连,作为 ADC 采集输入。

图片1


2-59电池电量监测电路原理图


知识储备

ADC(Analog-to-Digital Converter,模数转换器)是一种可将连续变化的模拟信号转换为离散的数字信号的器件,其可将温度、压力、声音或者图像等转换成更易存储、处理和发射的数字信号。

STM32F103VET6微控制器有3个ADC,可工作在独立、双重或三重模式下,以适应多种不同的应用需求。每个ADC都具有18个复用通道,可测量16个外部信号源、2个内部信号源。

ADC功能分析——输入电压范围(图 2-60

图片2

2-60输入电压范围


ADC功能分析——输入通道

单个ADC的输入通道多达18个,其中包括16个外部通道,这16个外部通道分别连接着不同的GPIO口,如图 2-61所示。

图片3

2-61输入通道


ADC功能分析——转换顺序

图 2-62标号③处所示,STM32F1将ADC转换分为两个通道:规则通道和注入通道。规则通道相当于正常运行的程序,注入通道相当于中断。正如中断可以打断正常运行的程序,注入通道的 ADC 转换可以打断规则通道的转换,只有等注入通道转换完成后,规则通道的转换才能继续运行。规则通道的转换顺序由规则序列寄存器 SQR3、SQR2 和 SQR1 控制,注入通道的转换顺序由注入序列寄存器 JSQR 控制。

图片4


2-62ADC转换通道


ADC功能分析——输入时钟与采样周期

图 2-62标号④处所示,STM32F1的ADC输入时钟ADCCLK由PCLK2经过ADC预分频器产生。

ADC功能分析——触发方式

图 2-63标号⑤处所示,ADC支持多种外部事件触发方式,包括定时器触发和外部GPIO中断等。

图片5


2-63ADC触发方式


ADC功能分析——数据寄存器

ADC 转换完毕后,结果数据存放在相应的数据寄存器中。ADC 的数据寄存器有两种:规则数据寄存器 ADC_DR 和注入数据寄存器 ADC_JDRx。上述两种数据寄存器用于独立转换模式的结果存放,双重和三重转换模式的结果则存放于通用规则数据寄存器 ADC_CDR 中。

ADC功能分析——中断控制

图 2-64标号⑦处所示,ADC转换结束后,支持产生四种中断:DMA溢出中断、规则转换结束中断、注入转换结束中断和模拟看门狗事件中断。

图片6


2-64中断控制


注:转换结束后,除可通过产生中断方式处理转换结果外,还可产生DMA请求,把转换好的数据直接转存至内存中。(图 2-65

图片7


2-65ADC中断的事件标志和使能控制位


任务实施

(一)建立STM32CubeMX工程并生成初始C代码

建立STM32CubeMX工程主要包括建立工程存放的文件夹,选择MCU型号,配置调试端口,配置MCU时钟树、ADC外设工作参数和USART外设工作参数。其中在配置USART外设参数时,要注意中标号参数的设置:

图片8


2-66STM32CubeMX工程配置


③:USART1的模式配置为“Asynchronous”。

④:点击“Parameter Settings”标签。

⑤:配置USART1的“Baud Rate”为115200 Bits/s。

⑥:配置“Data Direction”为“Receive and Transmit”。

⑦:已配置好功能的引脚显示。

参数配置完毕,将工程保存到合适的位置,最后点击“GENERATE CODE(生成代码)”按钮,便可生成电池电量监测系统的初始C代码工程。

(二)完善代码

在main.c文件中定义变量,用于存放ADC转换结果。

/* USER CODE BEGIN PV */
uint16_t adc_value = 0;
//定义ADC转换值存放
float voltage = 0.0;
char voltString[50] = {0};//电压值结果显示
/* USER CODE END PV */

在 while(1)主循环中输入电压采集与显示的代码。

while (1)
{
  HAL_ADC_Start(&hadc1);
  HAL-ADC_PollForConversion(&hadc1,100);
  adc_value = HAL_ADC_GetValue(&hadc1);
  voltage = (float)adc_value / 4096 * 3.3;
  sprintf(voltString,"采集到的电压值为:%.2f V",voltage);
  printf("%s\r\n",voltstring);
  HAL_Delay(1000);
}

在USART.c中添加fputc()函数相关的代码。

int fputc(int ch,FILE *f)
{
  HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xFFFF);
  return ch;
}

在USART.h中添加代码:#include <stdio.h>

(三)硬件环境搭建与实验现象观察

1.将 PC 机与“M3 主控模块”通过 USART1 相连,打开串口助手;

2.将“M3 主控模块”开发板的“PA1”引脚通过杜邦线与实验平台上的电源“3.3V”接线端相连(图 2-67),即可在串口助手中查看采集到的电压值为3.3V左右;

3.将“M3 主控模块”开发板的“PA1”引脚通过杜邦线与实验平台上的接地端“GND”相连,即可在串口助手中查看采集到的电压值为 0V。


图片9


2-67接线图