找回密码
 注册
关于网站域名变更的通知
查看: 180|回复: 1
打印 上一主题 下一主题

STM32单片机LCD1602温度 电压 电流

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-5-25 09:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
2. 总体方案设计/ U6 a5 J/ L3 @4 j' l* V
2.1方案选择            
8 }" B2 T6 W" m在本设计中主体主要分为单片机系统、采集系统、报警系统以及温度测量系统,设计中需要对每个系统模块的硬件进行选型,经过对设计原理的简化可以得出整体主要分为处理模块,采集模块和报警模块,需要对系统的组成进行确定,针对这样的功能可以考虑采用数字电路或者单片机系统,其中采用数字电路,具有原理简单,成本低的优点,但是由于数字电路结构复杂,后期如有损坏需要逐步的检查损坏点,不便于维修,数字电路虽然成本较低,但是采用的微控芯片较多,不便于后期设计的扩展和推广。采用单片机电路,虽然需要较为复杂的编程,但是由于单片机系统是比较完善的开发系统,当出现损坏时,只需要替换损坏的元件即可完成维修。所以在本设计中主要采用单片机作为主控电路,温度传感器采用18B20作为测温传感器,采集部分主要分为电压和电流检,其中电压部分经过分压电路后采用单片机自带的AD进行采集,电流部分主要通过伏安特性原理,经过采样电阻的采样后通过比例运放电路测量。由于电池电压和电流的变化是取决于负载以及自身的寿命,为了便于测量本设计测量方案主要分为两种,其中一种是测量电池实际的电压和电流,另外一种通过电位器来模拟电池的变化。单片机采用STM32F103作为主控芯片,显示屏采用LCD1602,报警器采用三极管驱动的蜂鸣器,温度传感器采用18B20,电流采样使用lm358作为运放。% K2 K! i! Y  |5 l, e2 X
图2-1 系统框图* G" [6 [- m7 z" a) i
2.2单片机电路设计      
& f. ^) i. i& y* h经过主控方案的对比,决定采用单片机系统作为设计的主控芯片,由于设计需要采集模拟量,结合自身能力考虑,最终采用STM32F103作为主控芯片,该芯片是一款基于ARM内核的32位处理芯片,支持传统的指令集,内部通过PLL方式使得系统频率最高能达到72MHZ,该芯片的硬件资源也比较丰富,存在9个通讯接口、两个USB转TTL接口、支持多种下载方式,内部含有RC振荡器,也可通过外接8MHZ至晶振实现程序的精准运行。! p5 ~0 G, G  s. `1 u( d
图2-2 系统的核心板电路图3 ~7 F$ R$ X7 d. c$ Y, U% u$ ?; e
主控芯片是整个系统的核心部分,由于设计需要采集模拟量,对精度有所要求,所以制作和设计一个完整的核心板电路是设计的关键,图2-2所示是系统的核心板电路图,主控芯片的型号是STM32F103C8T6,设计采用8兆赫兹的无源外部晶振,经过PLL方式将系统的工作频率稳定在72兆赫兹,由于无源晶振启动要求需要有匹配电容,所以在设计中采用C9、C10两颗22pF的起振电容,BOOT0和BOOT1是单片机启动方式的选择模式开关,将两个接口均通过R10、R14下拉电阻和GND连接,使得系统的启动方式为闪存启动模式, R 1、C2、S1为系统的复位电路,当系统存在死机或者程序紊乱的情况下,按下S1可以使得系统发生复位,重新开始运行,在常见的控制系统中,一般采用的电源均为5V,而STM32的供电电压为3.3V为了匹配常见的电路,所以在芯片核心板上增加了稳压芯片,能够将5V的直流电转化为STM32能够正常运行的3.3V。
& N: W2 R6 W* E) j2 }1 z% J5 U/ _, q2.3 LCD显示设计        * {. G+ |6 d" I" ?
2.3.1 显示屏选型# }; I9 a6 c$ G7 M
在本设计中为了能够显示电压电流的数据,使得用户能够直观的查看,所以在设计中增加了显示屏电路,显示部分主要分为数码管、oled和LCD三类显示方式,数码管电路具有结构简单成本低的优点,但是数码管的驱动电路占用的硬件资源较多,尤其在本设计中需要显示电压电流和温度等多个数据,需要采用多个数码管进行显示,由于数码管驱动是动态显示,当数码管的段数越多,最终显示出的数字就会发生频闪,使得系统的数据显示不够稳定。oled显示屏具有分辨率高,能够显示出高分辨率的图片,并且能够实现多种颜色文字的显示,其功耗也较低,但是成本较为高,不利于设计的推广。LCD显示屏是一款自带背光的显示屏幕,其功耗较大并且无法显示出图片和颜色,经过对比本设计主要侧重的是数据显示对系统的功耗要求不大,为了便于后期的推广和降低整体成本,最终采用了LCD显示屏。
5 r2 j% C8 ~$ f0 V2 @2.3.2 LCD1602电路设计6 J2 T& K0 J/ S, s7 o6 f
LCD1602液晶显示屏是一种字符型液晶显示电路,能够显示字符数字以及标点符号的点阵型液晶屏幕,1602内部存储器存储了160多个不同类型的字符和图形,包含了数字字母以及常用的标点符号。其中每个字符都有对应的编码,单片机控制时,只需要将对应的编码存入对应的地址,就能够显示出相应的字符,例如显示‘A’字符,只需要在对应的地址存入01000001B,就能显示出‘A’,由于1602是能够识别ASCII码,所以通过单片机编程直接将对应的ASCII码进行赋值就能够显示出对应的数据,例如如需显示‘A’直接通过单片机对变量进行赋值 LCD_Write_String(4,0,"C");图2-3为 LCD显示电路,其中电源管脚和外部输入电源直接连接, D0-D7端口和单片机的PA端口连接, Rt2是电位器,主要目的是可以调节显示屏的背光亮度,使得系统能够适应更广泛的应用场合。% [5 J. U7 P) [2 a& f, a4 O
图2-3 LCD显示电路* ?6 Q- H- L9 y1 P9 [0 Z; i
2.4  电池电压电流检测设计     
8 g, F5 n) c! O' U% g' I7 q: p+ l2.4.1电压检测电路设计( y* P6 P7 W! q+ N- z
电压检测电路需要涉及到模拟量的检测,在本设计中可以采用STM32的内部adc电路进行采集,STM32的adc是12位逐次逼近型模拟转数字电路,逐次逼近型电路也叫逐次渐进型,其转换的思路是将采集到的模拟量,从高位到低位进行逐次的比较,如果最高位相等,则保持该状态,如果不相等,则对该寄存器进行清零,循环整个过程直到将所有位的数据都比较完毕,最终得出数字量的输出, STM32是能够实现12位的精度,即能够将采集到的电压分成4096份,如果输入量是0~5V,那么精度就是5/4096=0.0012V;
  u" D$ S; V( f# E5 l) K在STM32中AD转换的部分主要有4个: AD转换器、模拟量输入、引脚、数字量输出;其中模拟量的输入一般是电压、光照等自然量,其特性是随时间连续变化,像这种的自然量和单片机的管脚进行连接,可以将模拟量输入给AD转换器, AD转换器有外部的基准电压可以通过改变基准电压,进而改变自然量的变化幅值,最终可以将模拟量转换成数字量输送至对应的寄存器中。图2-4 为ADC转换电路,框图1是AD转换器的核心部分,将数据进行处理,框图2是外部基准电压,通过外部电源调节adc的转换精度,框图3是adc的输入管脚,STM32主要分为10个外部AD,分别是PA0-PA8以及PB0、PB1;在本设计中,由于LCD1602占用了PA端口,所以电压电流输入量主要是通过PB端口进行转换。
- s9 d9 i' `( t) }) |& I$ i图2-4 ADC转换电路
1 m8 ?# P; m! t/ A  s& o2 ], v2.4.2电流检测电路设计
! n$ I7 w" w5 h8 {( {1 P- h/ b图2-5 电流转换电路5 `- v8 @. f1 k4 ^
电流检测电路主要目的是将电流转换成电压,再通过2.4.1章节的电压采样进行采集,主要原理是通过伏安特性将电流进行转换,伏安特性是指在对应的元器件的两端施加电压,由于对应元器件的参数已知,可通过施加的电压得到通路的电流,基于这个原理可以在被测的通路上施加一个电阻,通过测量该电阻两端的电压和阻值进行比值即可得到电流,由于需要保证采集的电压不会过大并且不能对待测的通路产生过大的内阻,所以采样电阻的组织应当尽可能的小,在本设计中采用0.05欧的采样电阻,以采样的电压范围0-5V为例,该电路所能测的电流范围为0-100A,由于绝大多数情况下电流所产生的电压数值较小,所以在设计中需要采用放大电路对所采得的电压进行放大,关系式为Vo=(1+R3/R2)Vi;. O6 \- L# e2 W5 v5 J
2.5  电池温度检测设计     
* y: a( ?3 G& D6 x, p采集物体表面温度的方式有很多,绝大多数的蓄电池温度是通过热电耦进行采集,其优点是测量范围广,但是由于热电偶采集电路较为复杂并且成本较高,在本设计中需要测量的为普通锂电池,其工作时所产生的温度范围较低,为了便于测量以及系统的稳定,所以采用DS18B20作为温度采集电路,该电路能够测量的范围是-50度到正130度。
: R0 {4 j$ c9 h7 n+ Y' V8 WDS 18B20是一款单总线温度传感器,其整体除了电源线之外,只有一根数据线,实现数据的采集和控制,温度的数据分为高位和低位,分别存储在TH、TL两个寄存器当中。测温原理2-6所示,通过两个温度系数的振荡器产生的不同频率分别给不同的计数器进行计数,其中低温度系数振荡器,受温度的影响较低,所以当温度发生变化时,高温度系数振荡器输出的频率会发生明显变化,计数器通过检测振荡器频率的变化,即可得到当前温度变化的范围,$ K' t( Q" ^/ ?1 R6 z
图2-6 温度采集电路
0 [  o+ u2 K) v7 g6 ?2.6  电源电路设计
! X3 K+ [6 m: I$ Z9 h由于设计需要驱动显示屏显示以及单片机的工作,所以需要采用外部电源,考虑到使用便捷,可以采用外部USB线供电的方式。其中由于输入的电压过高,而单片机需要使用5伏进行供电,所以设计中需要额外增加稳压电路,将较高的电压通过稳压电路进行转换为5伏给单片机和显示屏等系统进行供电。图2-7为电源模块电路图。' Y+ g, m1 \0 H* }
图2-7 电源模块电路图7 W! S+ S" ]# h. z+ K
2.7  报警电路设计
; y. z" C8 O4 r! e. P由于蜂鸣器内部含有线圈,所需要的驱动电流较大,而单片机的输出电流不足以驱动蜂鸣器发声鸣叫,所以需要对单片机的输出进行扩流,扩流的常见方法,就是通过三极管进行控制为了避免蜂鸣器在系统开机的瞬间发生鸣叫,所以在本系统中采用PNP的三极管,是由于PNP三极管的基极,需要低电平进行控制,所以单片机上电瞬间即便输出了高电平对蜂鸣器没有影响,可以有效的解决蜂鸣器鸣叫的问题。系统中蜂鸣器采用单片机的管脚进行驱动,当检测到电压、电流、温度超过限定值时,单片机的管脚会由高电平改为低电平输出。报警模块的硬件原理图如图2-8所示。
* x, O" I6 ]- i4 d% Y2 [7 ?  A$ b1 v图2-8 报警电路
& O& @1 g* U  K
# w2 e5 C1 S7 f2 I# O3. 软件系统设计  : I+ p/ Q- Z/ q# O. I; ~4 s/ A6 @
         ; ^' y3 I# P+ C' @3 b1 q
3.1系统环境简介         
* I* h8 \, {* @8 q9 X系统软件设计采用C语言编程,编译环境为keil。keil 是美国Keil Software 公司出品的ARM 系列兼容单片机C 语言软件开发系统和汇编相比,C 在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil软件提供丰富的库函数和功能强大的集成开发调试工具,在开发大型软件时更能体现高级语言的优势。& l2 g4 M1 _8 K3 a3 @
         4 R  O' [$ O4 r! z2 ?2 V, t
3.2  单片机程序设计     4 s: f- @; a2 Z3 v  c$ ?9 s7 u: T7 h
   系统主要是由单片机采集程序,显示屏驱动程序、蜂鸣器报警程序、温度采集程序、以及电压电流检测程序,主体流程是通过电压电流电路检测对应的参数,并采集当前的电池温度,单片机将对应的参数通过显示屏显示出来,并与存储的报警阈值进行比对,如果测量的数据大于所存储的阈值,则驱动蜂鸣器发声报警提醒用户进行修改,主程序流程图如图3-1所示。, `2 H' l9 H+ o; B2 b3 J
图3-1 主程序流程图
* M7 w1 t1 ^7 j1 a6 ~; C: \( F8 R3.3  LCD显示程序设计      
: X5 f2 W3 a: V& G; W1 h0 p首先设置显示模式,设置第(x,y)个字符的DDRAM的地址,为15×2显示,因为液晶显示为15列,所以x位置的范围是0到15,同理,因为显示2行,所以y位置的范围是0到1。显示子程序流程图3-2。% k, {' r! d! `7 P+ P
图3-2 显示子程序流程图
, \. o; y* R  `6 P显示部分的原理主要是通过修改显示区域的地址,通过改变对应地址的寄存器中的数据来实现数据的显示,例如当D/I=1时,在下降沿作用下,图形显示数据写入DR,或在E信号高电平作用下由DR读到DB7-DB0数据总线。DR和DDRAM之间的数据传输是模块内部自动执行的,例如 write_string(1,5,"ab cd ef;")主要的意义就是在显示屏的第1行,第5列显示“abcdef”6个数据。
0 ?' S  t" O! g9 I4 x0 ^4 a4 L# S  & @2 z( {4 s' Q* r
3.4  电压电流检测程序设计  0 B- C7 y: Y. a. P2 S$ }4 q. _
图3-3为电压电流采集程序流程图,由于电流检测通过硬件已经将电流转换为电压,所以设计主要是电压检测程序设计,系统上电后进行初始化并打开中断检测,PB0、PB1管角检测电压数值是否变化,如果发生变化,则启动中断开始进行adc转换, Adc测量的范围是基准电压的范围VREF-≤VIN≤VREF+,将基准电压0与3.3V进行连接,所测得的外部电压范围就为0-3.3V,如果adc的转换通道不同,则需要不同的中断函数进行处理,在本设计中,两路adc均为PB通道,所以无需SQR1、SQR2、SQR3寄存器来修改中断处理函数。 adc的开始采集是需要通过起始信号进行触发,通过配置CR2的寄存器,ADON位就可以控制adc的启停,置1时开始进行adc转换,置0时停止转换,此外还可以通过内部定时器进行触发以及外部电压进行触发,在本设计中,由于电池电压和电流的数据会时刻改变,所以设计主要通过定时器进行定时采集,图3-4 为ADC控制寄存器。 adc转换的一个重要指标为转换时间,转换时间代表着每次进行完整转换流程所需的时间,这个时间主要取决于输入的晶振频率以及时钟周期,也决定了采样数据的精度和稳定性, ST M32的adc是挂载在APB2中,所以对应的adc转换频率是通过PCLK2将时钟频率进行分频,采样的周期可以通过adc的寄存器ADC_SMPR1 和 ADC_SMPR2 来进行配置,配置的最小周期是1.5个时钟周期,由于时钟频率为72MHz,所以1.5个时钟,周期所得出的转换时间最短为1.17微秒。
% r1 U( x+ n: [* z) h) U由于转换后的数字量是12位的二进制数据,而显示屏所需要显示的是十进制数据,所以需要将该二进制数据进行转换,例如待测的电压是0~3.3V,经过adc采样后所得出的数据是0~4096,经过比例公式可以得出实际数据为adcx2  = 3300000/4096*adcx2/1000;
9 s1 Y% J# ?' _( n5 h! i# d! p图3-3  电压电流采集程序流程图  N. ~; y0 Y2 b4 b
图3-4  ADC控制寄存器
4 u5 w) ~1 ~, E3.5  温度检测程序设计      $ E: }4 s' g% s* n/ [, m
读取温度数据是读RAM中的字节,数据的尾端是有CRC校验码,当校验码发生错误时,单片机会自动舍弃该段数据,不对以往的数据进行修改,避免将错误的信息录入显示屏当中。读取温度主要分为三个时序:初始化时序、读时序、写时序。初始化程序是将数据线拉低500毫秒随后释放,DS18B20接收到下拉信号后,会将数据线拉低60毫秒,单片机通过检测这个电平信号即可判断传感器连接是否正常,随后传感器会将采集到的数据再通过总线进行返回,而返回的数据是二进制单片机还需要将二进制码转换成十进制码。图3-5为温度子程序流程图。
5 Q0 }7 U. S2 b' ^, t, P图3-5  温度子程序流程图
! j+ z: E% _; s3.6  报警电路程序设计) Z2 A1 m3 A' G5 R, Q5 `% `6 P
报警电路主要是通过三极管进行控制,单片机只需要控制三极管的通断即可使得蜂鸣器发声报警,在本设计中采用的是PNP三极管,对应的基极与单片机的PB12管脚进行连接,正常情况下需要将PB12管脚电平置为高电平,使得三极管截止,当数据超限时,可以将PB12管脚电平置为低电平,此时三极管导通,使得蜂鸣器与电源连接发生报警。
$ v9 M% i6 m% n: `, b) m

该用户从未签到

2#
发表于 2022-5-25 15:26 | 只看该作者
学习学习。(~ ̄▽ ̄)~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 23:02 , Processed in 0.125000 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表