使用MSPM0G3507为主控制作温度控制系统及硬件设计的方案,利用KEIL软件编程读取温度传感器接口等多个方面接口工作的的综合性项目。
以下是一个详细的规划方案及系统功能的概述。
一、 硬件
1、 清单
主控:使用的是LP-MSPM0G3507开发板。
扩展板:绘制3507扩展板。
扩展使用的设备:
传感器:温湿度AHT21传感器。
显示屏:串口屏。
按键:屏上四个触摸按键。
指示灯:贴片RGBLED主要功能是显示工作状态。
蜂鸣器:电磁式有源一体有源蜂鸣器。
风机:小风扇,3-5V。
水泵:使用小风扇代替,方便演示
照明:LED灯珠
加热:2.54端口(LED模拟工作状态)
电源:4.5V~28V转5V3A电源,宽电压输入。5V输入 再转3.3V
2、 硬件接口设计介绍:
温湿度AHT21传感器接口:
AHT21是一个数字温湿度传感器,通过I2C接口与MSPM0G3507通信。
在扩展板上设计I2C接口连接,包括SCL(时钟线)和SDA(数据线),以及供电和地线。
串口屏接口:
串口屏通过UART(通用异步收发传输器)接口与MSPM0G3507通信。设计UART接口,包括TX(发送)、RX(接收)、供电和地线,使用的引脚是PB6,PB7.
按键:
设计四个轻触按键,每个按键连接到MSPM0G3507的一个GPIO引脚,但是这次用的是串口屏,用的是屏上的触摸按键。
贴片RGB LED:
RGB LED需要三个GPIO引脚分别控制红、绿、蓝三种颜色的亮度。设计三个GPIO引脚接口,以及LED的共阳极连接。
电磁式有源蜂鸣器:
有源蜂鸣器只需要一个GPIO引脚来控制其开关。设计一个GPIO引脚接口,连接到蜂鸣器的控制端。
风机接口:
风机(小风扇)通过PWM(脉冲宽度调制)或简单的GPIO控制。设计一个PWM或GPIO引脚接口,以及风机的供电和地线。
水泵接口(小风扇替代):
同风机接口设计,预留PWM或GPIO引脚接口。
LED照明灯珠:
设计一个或多个GPIO引脚接口,用于控制LED灯珠的开关。
加热接口(使用电阻模拟加热装置):
使用电阻作为加热元件来模拟加热过程更为实际和可控。电阻加热是一种常见的加热方式,它基于焦耳热效应,即电流通过导体时会产生热量。设计一个PWM或GPIO引脚接口,以及加热元件的供电和地线。
电源管理:
使用4.5V~28V转5V3A电源,确保系统稳定运行。设计5V转3.3V的电路,为需要3.3V供电的元件提供电压。
预留接口:
设计RS485、SPI等接口的预留空间,以便未来扩展。
3、 硬件功能与控制方式:
AHT21(温湿度传感器)
接口连接:AHT21经I2C接口连MSPM0G3507,SCL、SDA分别接PB2、PB3,工作电压3.3V。 功能:与MSPM0G3507通信,处理温湿度数据,经滤波、校准后,由液晶屏实时显示并记录。使用前需初始化AHT21的IIC,包括设置地址、模式等,通过I2C发送读取命令获取数据,再依转换公式得出实际温湿度(℃和%)。
串口屏
显示功能:
串口屏显示文本、图像、图标等多种信息,显示温度湿度,及各个模块的开关情况以及状态的信息。
触控交互:
串口屏配备触摸屏,可以通过触摸操作与系统进行交互,点击按钮、滑动页面等。可以用来设定温度的值,照明开关,水泵开关等一系列操作,及大的实现人机交互的体验感和操作性。
串口连接:
串口屏通过串口UART与主控MSPM0G3507进行连接,实现数据的传输和指令的接收。
串口连接通常使用标准的串口线或串口转接线进行连接,使用的引脚是PA25,PA26.
电源连接:
电源连接使用常规的XH2.54接口使用的是DC 5V,
参数:
7英寸串口屏
芯片: T5L0
尺寸: 7英寸
分辨率: 800*480
视角: 70°/70°/50°/70°(L/R/U/D)
工作温度: -20℃~70℃
存储温度: -30℃~80℃
三防漆工艺: 有
轻触按键:
按键电路:
每个按键通过上拉电阻连接到MSP430G3507的GPIO引脚。当按键未被按下时,GPIO引脚通过上拉电阻被拉至高电平;当按键被按下时,GPIO引脚被拉至低电平。
手动键:当按下手动键时,打开照明和风机,同时启动一个定时器来控制水泵工作3S-5S后自动关闭。
取消报警键:当系统检测到超温等报警条件时,可以通过按下此键来取消报警。
使用的MSP430G3507引脚分别是,PA22,PA8,另外两个按键预留,增加新的功能时,再引用,按键的功能。
使用MSP430G3507对四个轻触按键的软件功能,首先是初始化、中断处理以及按键逻辑,
贴片RGB LED
为了产品在使用过程,出现正常实验时,突然打开相关的操作,或者停止某些操作,所以这个扩展板设计时,就增加了一个贴片RGB LED灯,其中RGB LED采用共阳极连接,并且使用三个GPIO引脚分别控制红、绿、蓝三种颜色的亮和灭,没有设计成呼吸灯的效果,就是为了更好的体验其设计要求,当然在我当时还考虑了确保GPIO引脚能够输出适当的电流来驱动LED的问题点,并且考虑到LED的共阳极配置和控制。
GPIO引脚
GPIO_R:连接到红色LED的阴极,用于控制红色LED的亮灭,引脚为pa8.
GPIO_G:连接到绿色LED的阴极,用于控制绿色LED的亮灭,引脚为pb18.
GPIO_B:连接到蓝色LED的阴极,用于控制蓝色LED的亮灭,引脚为pa18.
软件控制
在软件方面,需要编写代码来控制GPIO引脚的电平,从而控制LED的亮灭。由于GPIO引脚通常只能控制开/关(高/低电平),因此如果想要实现亮度调节,可能需要使用PWM(脉冲宽度调制)来实现亮度的调节,包括呼吸灯。
蜂鸣器
电磁式有源蜂鸣器是一种利用电磁原理产生音频信号的电子器件,蜂鸣器有着广泛的应用,蜂鸣器分为有源和无源蜂器两种,MSP430G3507扩展板上使用的是有源蜂鸣器。
工作原理
电磁式有源蜂鸣器主要由铁芯、线圈和振膜组成。当电流通过线圈时,产生的磁场会使铁芯磁化,进而吸引振膜与之相连。随着电流的变化,磁场也会发生变化,导致铁芯的磁力发生变化,从而使振膜动态地受到吸引和释放。这种振动过程会产生声波,通过空气传播出去,形成我们听到的声音。
技术参数
电磁式有源蜂鸣器的技术参数可能因具体型号而异,但一般包括以下几个方面:
额定电压:如1.5V、3V、5V、9V、12V等。工作电压范围:通常较宽,如1~15V。
额定电流:不同型号的产品额定电流可能不同,如Max30mA、Max40mA等。
操作温度:一般在-20℃至+70℃之间。
重量:通常较轻,便于集成到各种电子产品中。
引脚连接:与MSP430G3507连接的是PB1引脚,PB1引脚还可以输出PWM波,可以很好的更换为无源蜂鸣器,实现PWM驱动无源蜂鸣器的功能。
风机接口:
风机通过PWM(脉冲宽度调制)或简单的GPIO控制。设计一个PWM或GPIO引脚接口,以及风机的供电和地线。
GPIO控制接口
GPIO输出高电平或低电平来控制风机的开关状态(通常不用于调速),是什么意思呢,是当GPIO输出电平为高的时候,就让风机转动起来,如果要关就输出的低电平,道理与工作时的状态相反。
风机特性:
轴承:双微型超细轴承 额定电压:DC5V 工作电压:4.5-5V 电流:0.2A 风量:5 m3/h 转数:13200RPM 噪音:18分贝
水泵接口:
水泵的工作原理与风机的工作原理一样,介绍一下水泵特性:
卧式小潜水泵,支持3V、4.5V、5V、6V等多种电压,便于与不同电源设备匹配。
体积小、重量轻,便于安装和维护。
lfodel型号
JT-DC3W-3,IT-DC3W-4.5
VoltageScope (DC)电压
3V,4. 5V
Current(A)电流
0.12,0.18
Power(W)功率
0.36,0. 91
Jax TaterHead ()扬程
0.35,0. 55
Max FlowRat e (L/H)流量
80,100
LED照明灯珠:
与风机水泵的工作方式和控制方式同理。
LED照明灯珠特性:
发光颜色: 白色(正自光) 正向电流: 60mA 透镜颜色: 黄色透镜 色温: 5500K~6000K 封装: SMD5730 胶体颜色:黄色 半功率视角:120
加热接口:
加热的工作原理与风机的工作原理一样,这里不多介绍。
根据使用需求和电源条件,选择合适的电阻作为加热装置,是一个不错的选择,安全,方便快速。电阻的功率(W)应足够大,以承受加热时产生的热量而不至于过热烧毁。
连接电路:将电阻与电源和MOS管的控制电路(使用MSP430G3507输出PWM控制)。根据温度传感器实现温度控制,目地是将温度传感器根据连接到控制电路中把温度转成相关的数据传感给MSP430G3507,经过MSP430G3507编程分析出相对应的值,从而实现温度的控制。
通过使用电阻作为加热元件,可以更容易地实现加热过程的精确控制,并与温度传感器配合使用,实现闭环的温度控制系统。
电源管理
下图是我选用的电源管理,在这个电源管理电路中,我实现的功能是从宽范围输入电压(4.5V至28V)转换到稳定的5V输出,并把从5V转换到3.3V,是为了满足不同元件的供电需求,方便更好的实现多模块工作的需求。
目地
宽电压的电源输入4.5V~28V转5V 3A电源设计,这个就兼容了5V-12V-24V。
选用这种DC电路的设计,是为了更好的利用对就的资源,合理的使用电源的通用性,这样转换可以有效地将高于输出电压的输入电压转换为稳定的输出电压,并且具有较高的转换效率。
参数选择:
输入电压范围:4.5V至28V
输出电压:5V
输出电流:3A
转换效率:尽可能高(以减少热量产生)
类型:
同步降压转换器:通常比非同步转换器具有更高的效率。
保护特性:
过流保护(OCP)
过热保护(OTP)
输入欠压锁定(UVLO)
选用线性稳压器
从5V转换到3.3V,选择线性稳压器(LDO)。线性稳压器简单且成本低,但效率较低(特别是在输入输出压差较大时)。
参数选择:
输入电压:5V
输出电压:3.3V
输出电流:1A
目地
电流需求不高且对效率要求不是非常严格,所以选择LDO。如果需要高效率且电流需求较高,则选择降压型DC-DC转换器。
型号: TI的TPS54302D(4.5V-28V转5V3A)
安森美的AMS1117-3.3V
整体电路原理图:
PCB图
PCBA组合完整图:
背面:
正面:
使用的开发板:
二、框架
4、 整体框架
硬件框架:
软件框架:
三、软件
5、 软件功能:
1、 使用功能与接口:IIC、urat、gpio、PWM,中断等。
2、 初始化MCU: 配置系统时钟、GPIO端口、中断控制器等。
3、 初始化外设:IIC: 初始化IIC接口,用于连接温湿度传感器AHT21。
4、 UART: 初始化串口,用于调试或连接串口屏。
5、 GPIO: 初始化按键、LED指示灯、蜂鸣器、电机等控制引脚。
6、 定时器/中断: 设置定时器中断,用于实现延时、周期性任务等。
7、 延时100MS-1S时间,稳定初始功能完成。
8、 进入主循环。
9、 等待开机。
10、 通过串口屏显示系统启动信息、当前时间、温度、湿度等初始状态。
数据采集: 通过IIC接口读取AHT21温湿度传感器的数据。
数据处理: 将采集到的数据转换为可读格式,并判断是否超出预设的阈值。
显示更新: 更新串口屏显示的数据,包括当前温度、湿度等。
按键检测与处理:循环检测按键状态,根据按键的不同操作执行相应的功能。
设备控制:根据温度和湿度的设定值与当前值的比较结果,控制风机(小电机)、加热装置等设备的开关。
报警处理:如果检测到温度或湿度超出预设的安全范围,则激活蜂鸣器进行报警,并可能通过串口屏显示警告信息。
6、 软件配置:
定时器
GPIO、按键
IIC
串口:
系统初始:
SYSCONFIG_WEAK void SYSCFG_DL_init(void)
{
SYSCFG_DL_initPower();
SYSCFG_DL_GPIO_init();
/* Module-Specific Initializations*/
SYSCFG_DL_SYSCTL_init();
/*定时器0初始化*/
SYSCFG_DL_TIMER_0_init();
/*串口0初始化*/
SYSCFG_DL_UART_0_init();
/* Ensure backup structures have no valid state */
gUART3Backup.backupRdy = false;
/*spi 存储芯片 初始化*/
SYSCFG_DL_SPI_0_init();
/* Ensure backup structures have no valid state */
gSPI_0Backup.backupRdy = false;
SYSCFG_DL_SYSTICK_init();
}
SYSCONFIG_WEAK void SYSCFG_DL_GPIO_init(void)
{
DL_GPIO_initPeripheralOutputFunction(
GPIO_UART_0_IOMUX_TX, GPIO_UART_0_IOMUX_TX_FUNC);
DL_GPIO_initPeripheralInputFunction(
GPIO_UART_0_IOMUX_RX, GPIO_UART_0_IOMUX_RX_FUNC);
DL_GPIO_initDigitalInput(KEY_PIN_21_IOMUX);
DL_GPIO_initDigitalOutput(RGB_Red_PIN_26_IOMUX);
DL_GPIO_initDigitalOutput(I2C_SCL_IOMUX);
DL_GPIO_initDigitalOutput(I2C_SDA_IOMUX);
DL_GPIO_setPins(I2C_PORT, I2C_SCL_PIN |
I2C_SDA_PIN);
DL_GPIO_enableOutput(I2C_PORT, I2C_SCL_PIN |
I2C_SDA_PIN);
DL_GPIO_clearPins(GPIOB, RGB_Red_PIN_26_PIN);
DL_GPIO_enableOutput(GPIOB, RGB_Red_PIN_26_PIN);
DL_GPIO_setUpperPinsPolarity(GPIOB, DL_GPIO_PIN_21_EDGE_RISE);
/*LED IO口初始化*/
DL_GPIO_initDigitalOutputFeatures(LED1_PIN_14_IOMUX,
DL_GPIO_INVERSION_DISABLE, DL_GPIO_RESISTOR_PULL_DOWN,
DL_GPIO_DRIVE_STRENGTH_LOW, DL_GPIO_HIZ_DISABLE);
DL_GPIO_clearPins(LED1_PORT, LED1_PIN_14_PIN);
DL_GPIO_enableOutput(LED1_PORT, LED1_PIN_14_PIN);
/*串口1 使能IO口初始化*/
DL_GPIO_initPeripheralOutputFunction(
GPIO_UART1_IOMUX_TX, GPIO_UART1_IOMUX_TX_FUNC);
DL_GPIO_initPeripheralInputFunction(
GPIO_UART1_IOMUX_RX, GPIO_UART1_IOMUX_RX_FUNC);
/*存储芯片 AT24C 芯片使能IO口初始化*/
DL_GPIO_initDigitalOutput(GPIO_SCL_IOMUX);
DL_GPIO_initDigitalOutput(GPIO_SDA_IOMUX);
/*存储芯片 AT24C 芯片使能IO口初始化*/
DL_GPIO_initPeripheralOutputFunction(
GPIO_SPI_0_IOMUX_SCLK, GPIO_SPI_0_IOMUX_SCLK_FUNC);
DL_GPIO_initPeripheralOutputFunction(
GPIO_SPI_0_IOMUX_PICO, GPIO_SPI_0_IOMUX_PICO_FUNC);
DL_GPIO_initPeripheralInputFunction(
GPIO_SPI_0_IOMUX_POCI, GPIO_SPI_0_IOMUX_POCI_FUNC);
DL_GPIO_initPeripheralOutputFunction(
GPIO_SPI_0_IOMUX_CS0, GPIO_SPI_0_IOMUX_CS0_FUNC);
}
SYSCONFIG_WEAK void SYSCFG_DL_SYSCTL_init(void)
{
//Low Power Mode is configured to be SLEEP0
DL_SYSCTL_setBORThreshold(DL_SYSCTL_BOR_THRESHOLD_LEVEL_0);
DL_SYSCTL_setSYSOSCFreq(DL_SYSCTL_SYSOSC_FREQ_BASE);
/* Set default configuration */
DL_SYSCTL_disableHFXT();
DL_SYSCTL_disableSYSPLL();
DL_SYSCTL_enableMFCLK();
DL_SYSCTL_setMCLKDivider(DL_SYSCTL_MCLK_DIVIDER_DISABLE);
DL_SYSCTL_setULPCLKDivider(DL_SYSCTL_ULPCLK_DIV_1);
}
SYSCONFIG_WEAK void SYSCFG_DL_TIMER_0_init(void) {
DL_TimerG_setClockConfig(TIMER_0_INST,
(DL_TimerG_ClockConfig *) &gTIMER_0ClockConfig);
DL_TimerG_initTimerMode(TIMER_0_INST,
(DL_TimerG_TimerConfig *) &gTIMER_0TimerConfig);
DL_TimerG_enableInterrupt(TIMER_0_INST , DL_TIMERG_INTERRUPT_ZERO_EVENT);
DL_TimerG_enableClock(TIMER_0_INST);
}
SYSCONFIG_WEAK void SYSCFG_DL_UART_0_init(void)
{
DL_UART_Main_setClockConfig(UART_0_INST, (DL_UART_Main_ClockConfig *) &gUART_0ClockConfig);
DL_UART_Main_init(UART_0_INST, (DL_UART_Main_Config *) &gUART_0Config);
/*
* Configure baud rate by setting oversampling and baud rate divisors.
* Target baud rate: 9600
* Actual baud rate: 9598.08
*/
DL_UART_Main_setOversampling(UART_0_INST, DL_UART_OVERSAMPLING_RATE_16X);
DL_UART_Main_setBaudRateDivisor(UART_0_INST, UART_0_IBRD_4_MHZ_9600_BAUD, UART_0_FBRD_4_MHZ_9600_BAUD);
/* Configure Interrupts */
DL_UART_Main_enableInterrupt(UART_0_INST,
DL_UART_MAIN_INTERRUPT_RX);
DL_UART_Main_enable(UART_0_INST);
}
四、工作画面
开机LOGO画面:
控制系统画面与连接实物图:
五、总结
实现了项目优化空间扩展,在现有项目的基础上,进一步探索和优化可以显著提升系统的功能性和实用性。
实现了模块化扩展接口,设计统一的模块接口标准,通过GPIO、IIC或串口,使得不同类型的从机模块(传感器模块、执行器模块等)能够轻松通信接入系统,增强系统的可扩展性和灵活性。
利用动态模块管理,实现一个模块管理器,能够动态地识别、配置和管理接入的从机模块,包括模块的地址分配、类型识别、参数配置等,从而支持更复杂的系统架构。
基于现有通信接口(IIC),设计并实现一套自定义的通信协议,以提高数据传输效率和数据安全性。
探索使用轻量级机器学习算法对采集到的数据进行实时分析,异常检测、趋势预测等,实现系统的智能化水平。
集成多种传感器,除了温度检测外,还可以增加集成湿度、光照、气压、加速度等多种传感器,实现多维度的环境感知。
传感器数据融合,通过多传感器数据融合技术,提高环境分析的准确性,为决策提供更全面的信息支持。
用户界面与交互,添加显示屏模块,实时显示系统状态和监测数据,提高用户体验。
六、心得体会深化
在回顾项目经历时,除了对技术细节的总结,还可以从以下几个方面深化心得体会:
问题解决能力:分享在调试过程中遇到的难题及解决方法,反思如何更有效地排查和解决问题。
持续学习与创新:鼓励持续学习新技术、新工具,以及如何在项目中勇于创新,尝试新的解决方案。
职业规划与展望:结合项目经验,思考未来在嵌入式系统、物联网等领域的职业规划和发展方向和硬件技术水平的更加深层次的提升与进步。
视频演示: