1. 项目功能介绍
设计一个环境监测系统,利用热敏电阻和光传感器监测温度和光照强度。使用彩色LCD显示实时数据,并结合LED和RGB LED以不同颜色表示不同的环境条件。通过按键选择监测模式,电位计调整LED亮度和颜色变化速率。
2. 设计思路
大体分为两个模块,一个是对环境的监测并体现,一个是控制电位器使RGB LED产生亮度变化和颜色速率变化。
2.1环境监测
通过主板的两个按键,分别实现对光照和对温度的功能控制。通过不同按键的切换,来切换adc的监测通道。将拓展板上的lcd与主板连接起来,通过配置和软件程序,将adc值转化为具体的光强或者温度值。在上述程序部分将keil的程序移植到ccs当中进行使用。此外利用led的变化可以更直观的看到当前环境的状态。主板上有一个led和一个rgb led,用led的亮暗反映光强,用rgb led的三个颜色反映冷、适中、热,三种不同的温度状态。
2.2电位计
摇杆主要有两个方向,一个方向控制led灯的亮度,一个控制led灯的颜色切换速率。通过一个定时器,捕获到PWM的占空比和频率。根据频率设置3个定时器,来切换3个灯的颜色。根据占空比来控制灯的亮度。
3.软件流程图
4. 简单的硬件介绍、实现的功能及图片展示
4.1硬件介绍
主板:LP-MSPM0L1306 LaunchPad™ 开发套件是基于 MSPM0L1306 的易用型评估模块 (EVM),包含在 MSPM0L1306 M0+ MCU 平台上开始开发所需要的全部资源,包括用于编程、调试和能量测量的板载调试探针。
拓展板:搭配数字系统的输入、输出扩展板专为微控制器、FPGA等数字系统设计的扩展模块,有按键输入、编码器输入、电位计控制的模拟信号输入、LED显示、128*128 LCD显示、姿态传感器、温度传感器、加热等功能,用于控制类的项目练习。
4.2实现的功能及图片展示
按下第一个按键,屏幕显示监测光功能,显示屏显示中文提示以及光照数值。只要没有检测到下一次按键中断,便会一直处于监测光功能状态。此时可以看到光照很暗,led亮起。
经过照光后,可以观察到led灭了。
此时光强很强为17。
按下第二个按键,屏幕显示当前温度。当前温度为18度显示蓝色(为方便测试,分别用21度以下作为第一档,21度到22度作为第二档,22度以上作为第三档)。
此时温度21度,led亮绿色。
此时温度22度以上亮红色。
按下按键切换模式。
操控遥感,向右颜色切换快,向左颜色切换慢,向上灯变暗,向下灯变亮(具体变化在视频中显示更直观)。
4. 主要代码片段及说明
通过中断计数方波的上升沿,计满30个作为一个周期,计到30的速度快慢和频率有关。
调节占空比函数。
通过按键切换模式,并显示到lcd上。
通过数据手册和插值函数,将adc值转换成具体温度值。
5. 遇到的主要难题及解决方法
难点1:目标变量无法通过expression查看实时数值
我们发现在调试过程中如果想要查看某个函数之中的一个局部变量的实时变化数值时,即使已经expression一列中添加后,在程序正常运行时会弹出无法寻找到该变量的提示。
解决方案:如上图所示,我们把所需查看的变量uint16_t adcResult 放到函数外, 设定为全局变量。
难点2:管脚配置
使用光传感器时需要启用主板内自带的运放放大器功能。在system configuration中添加OPA,根据手册以及电路原理图得到opa0为端口输出(opa0是channel12),其管脚为PA22。
根据手册寻找到管脚PA22的端口类型以及ADC通道进行配置。
注意调好图中in0+、in0-、以及使能opa output注意打开。
对比第三步,由原理图可知opa不需要配置,直接接入channel即可。输出信号是pa15,找到管脚信息。
配置到channel9。
难点3:串口输出只能输出一位数
考虑到温度需要保留小数位,而程序中DL_UART_Main_transmitData函数只能够输出8位数据(即两个数字),而且在用串口调试时只输出一个数字时,程序优化默认为有过多冗余项,在运行时会自动跳过输出其他数字的程序。
解决方法:我们采用逐位输出的方法显示出超两位数的数字,经条件语句分类输出。由于程序优化过高导致的输出不完整,所以在关掉优化后便可以正常显示。
难点4:显示屏显示
拓展板使用源程序时,将lcd的keil程序移植到ccs当中,移植过程中注意ccs内部程序的格式。显示汉字时ccs内编码格式设为utf-8,utf-8占三个字节,源程序的s+=2需要改为3。
同时,比对字符需要多比对一次,确保每三个字符对应出的那个汉字。
字库中的数组大小也要改变。
函数中的uint8_t*改写为char*,减少警告。
难点5:拓展版按键没有反应
经过检查后我们发现拓展板按键被屏蔽掉一个,且和电位计共用了一个输出,不容易实现,故使用主板的按键。
难点6:上、下拉电阻的设定
sw2无法正常使用,将sw2接上上拉电阻,使它一直保持高电平,按下按键时为低电平。根据原理图所以配置上拉电阻,一直保持高电平按下为低电平。若配置下拉电阻的话,一直保持低电平,按下还为低电平,则无效。
6. 未来的计划或建议
该项目已经成功实现了简易的环境监测的功能,并达到了预期指标。但还有许多可以提升与扩展的地方:
程序比较冗长,未来将做进一步精简,此外有一些功能还没有使用,可以进行拓展训练,例程有些还未使用,未来计划调试并学习。