
开源协议
:Public Domain
(未经作者授权,禁止转载)创建时间:2023-08-15 16:03:03更新时间:2023-10-16 11:53:09
描述
一.电路设计
1.电源电路
TP5400 为一款移动电源专用的单节锂离子电池充电器和恒定 5V 升压控制器,充电部分集高精度电压和充电电流调节器、预充、充电状态指示和充电截止等功能于一体, 可以输出最大 1A 充电电流。而升压电路采用CMOS 工艺制造的空载电流极低的 VFM 开关型DC/DC 升压转换器。其具有极低的空载功耗(小于10uA),且升压输出驱动电流能力能达到 1A。无需外部按键,可以即插即用。
该电路是整个设备的供电部分,所以该用电容的地方用电容。实际应用电路中,STDBY引脚未使用,该引脚为充电完成指示引脚,充电的时候亮一个灯(CHRG),表示正在充电;充电完成(STDBY)充电灯不亮,代表已经充满电了。
2.温湿度传感器电路
采用的是AHT21温湿度传感器。AHT21作为新一代温湿度传感器,在尺寸与性能方面建立了新的标准:它嵌入了适于回流焊的双列扁平无引脚SMD封装,底面3x3mm ,高度0 . 8 mm。传感器输出经过标定的数字信号,标准 I2C 格式。

3.气压传感器电路
采用的是数字防水气压传感器 WF183D。WF183D是一颗经济型数字压力温度传感器内部包含一个MEMS压力传感器和一个高分辨率 24位△∑ADC及DSP。WF183D通过UART提供高精度已校准压力和温度数字输出,通讯连接非常简单。

4.气体感器电路
传感器的工作电压在3V,而我们的电压只有5V与3.3V,可以在传感器的VCC引脚处串联一个肖特基二极管。普通二极管的电压压降在0.6V-1.7V之间,而肖特基二极管的电压降通常在0.15V-0.45V之间。气体传感器采用的也是IIC接口,IIC协议是允许多个设备共用一条IIC总线的,只是需要多个设备的设备地址不同。这里的IIC接口,连接的是温湿度传感器的IIC接口,这两者传感器的器件地址并不相同,因此可以直接使用同一个IIC接口。

5.电压采集电路
通过电阻分压的形式测量电池电压。

5.屏幕电路
屏幕采用了SPI通讯的240*280像素的1.69寸IPS高清圆角屏幕。 1.69寸屏幕是一种常见的小尺寸显示屏,它指的是屏幕的对角线尺寸为1.69英寸(约4.29厘米)。尽管它相对较小,但在某些应用领域中仍然具有广泛的用途和功能。该屏幕因为单位像素密度更高(总像素/尺寸),所以显示画质更精细,并且控制IO少,外围电路也相对简单。

6.通信电路
采用的是由安信可科技设计的NF-03无线模块。NF-03 是一款 5mW 功率的无线收发一体的 2.4G 模块,2.4G模块是一种用于无线通信的模块,它能够在2.4GHz频段进行无线数据传输和接收。该模块通常由无线收发器和相关的控制电路组成,为用户提供方便的无线通信解决方案。

7.NBIOT模块
NBIoT(Narrowband Internet of Things)模块是一种专门用于窄带物联网通信的硬件模块,它提供了一种省电、低成本、远距离通信的解决方案,适用于物联网(IoT)设备和应用。

二.关键程序说明
1.屏幕显示驱动
//开始显示 void LCD_Show_Gram(void) { //设置标志位为未显示完成状态 show_over_flag=1; //设置显示范围 LCD_Address_Set(0,0,LCD_W-1,LCD_H-1); LCD_CS_Clr(); //清除全部中断标志位(至少清除通道3的全部中断标志位) DMA_INTC0(DMA1) = 0xfffffff; //设置传输数据大小 DMA_CHCNT(DMA1, DMA_CH3) = 33600; //设置传输地址 DMA_CH3M0ADDR(DMA1) = (uint32_t)Show_Gram; //开始传输 DMA_CHCTL(DMA1, DMA_CH3) |= DMA_CHXCTL_CHEN; } //屏幕数据DMA搬运完成中断 void DMA1_Channel3_IRQHandler(void) { //搬运次数 (必须设置为静态) static uint8_t Show_Number=0; //全屏幕需要搬运4次 if((++Show_Number) < 4) { //清除全部DMA1中断标志位 DMA_INTC0(DMA1) = 0xfffffff; //重新填充要搬运的数据量 DMA_CHCNT(DMA1, DMA_CH3) = 33600; //内存搬运地址 DMA_CH3M0ADDR(DMA1) = (uint32_t)Show_Gram+33600*Show_Number; //开启搬运 DMA_CHCTL(DMA1, DMA_CH3) |= DMA_CHXCTL_CHEN; } else //如果4次全部搬运完成 { //清除DMA搬运完成中断标志位 dma_interrupt_flag_clear(DMA1, DMA_CH3, DMA_INT_FLAG_FTF); //等待SPI发送完毕 while(SPI_STAT(PORT_SPI) & SPI_STAT_TRANS); //SPI片选拉高 LCD_CS_Set(); //搬运次数清零 Show_Number=0; //一帧搬运完成标志位 show_over_flag=0; } }
2.AHT21驱动
/******************************************************************************** * 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz * 版 本 号: V1.0 * 修改作者: LC * 修改日期: 2023年06月12日 * 功能介绍: 增加GD32的DMA/SDRAM/EXMC/TIMER标准库 ****************************************************************************** * 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源 * 开发板官网:www.lckfb.com * 技术支持常驻论坛,任何技术问题欢迎随时交流学习 * 立创论坛:club.szlcsc.com * 其余模块移植手册:【立创·梁山派开发板】模块移植手册 * 关注bilibili账号:【立创开发板】,掌握我们的最新动态! * 不靠卖板赚钱,以培养中国工程师为己任 *********************************************************************************/ #include "gd32f4xx.h" #include "systick.h" #include "bsp_led.h" #include "lcdinit.h" #include "lcdgui.h" #include "bsp_usart.h" #include "stdio.h" #include "string.h" #include "bsp_aht21.h" uint16_t color_buff[7] = {WHITE,BLACK,BLUE,RED,GREEN,YELLOW,GRAY}; /****************************************************************** * 函 数 名 称:main * 函 数 说 明:主函数 * 函 数 形 参:无 * 函 数 返 回:无 * 作 者: LC * 备 注:无 ******************************************************************/ int main(void) { char disp_buf[200] = {0}; nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); // 优先级分组 //滴答定时器初始化 1us systick_config(); //sram初始化 exmc_synchronous_dynamic_ram_init(EXMC_SDRAM_DEVICE0); //AHT21温湿度传感器初始化 aht21_gpio_init(); //串口0初始化(调试) usart_gpio_config( 115200U ); printf("start\r\n"); //lcd初始化 LCD_Init(); //清除全屏为黑色 LCD_Fill(0,0,280,240,BLACK); //开启显示 LCD_Show_Gram(); //等待一帧数据搬运完成 while(get_show_over_flag()); //开启定时器固定刷屏 Lcd_Show_Time_config(); while(1) { //读取温湿度数据 aht21_read_data(); //画矩形 LCD_DrawRectangle(30,30,280-30,240-30,WHITE); //显示温度 sprintf(disp_buf, "TEMP = %.2f C ",get_temperature() ); LCD_ShowString(60, 240/2-16, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //显示湿度 sprintf(disp_buf, "HUMI = %.2f %%RH ",get_humidity() ); LCD_ShowString(60, 240/2+16, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //定时器循环固定刷屏 while(get_show_over_flag()); set_show_update_flag(1); while(get_show_update_flag()); } }
3.AGS10驱动
/******************************************************************************** * 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz * 版 本 号: V1.0 * 修改作者: LC * 修改日期: 2023年06月12日 * 功能介绍: 增加GD32的DMA/SDRAM/EXMC/TIMER标准库 ****************************************************************************** * 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源 * 开发板官网:www.lckfb.com * 技术支持常驻论坛,任何技术问题欢迎随时交流学习 * 立创论坛:club.szlcsc.com * 其余模块移植手册:【立创·梁山派开发板】模块移植手册 * 关注bilibili账号:【立创开发板】,掌握我们的最新动态! * 不靠卖板赚钱,以培养中国工程师为己任 *********************************************************************************/ #include "gd32f4xx.h" #include "systick.h" #include "bsp_led.h" #include "lcdinit.h" #include "lcdgui.h" #include "bsp_usart.h" #include "stdio.h" #include "string.h" #include "bsp_aht21.h" #include "bsp_ags10.h" uint16_t color_buff[7] = {WHITE,BLACK,BLUE,RED,GREEN,YELLOW,GRAY}; /****************************************************************** * 函 数 名 称:main * 函 数 说 明:主函数 * 函 数 形 参:无 * 函 数 返 回:无 * 作 者: LC * 备 注:无 ******************************************************************/ int main(void) { char disp_buf[200] = {0}; int time_value = 0; nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); // 优先级分组 //滴答定时器初始化 1us systick_config(); //sram初始化 exmc_synchronous_dynamic_ram_init(EXMC_SDRAM_DEVICE0); //AHT21温湿度传感器初始化 aht21_gpio_init(); //有害气体传感器初始化 ags10_gpio_init(); //串口0初始化(调试) usart_gpio_config( 115200U ); printf("start\r\n"); //lcd初始化 LCD_Init(); //清除全屏为黑色 LCD_Fill(0,0,280,240,BLACK); //开启显示 LCD_Show_Gram(); //等待一帧数据搬运完成 while(get_show_over_flag()); //开启定时器固定刷屏 Lcd_Show_Time_config(); while(1) { //画矩形 LCD_DrawRectangle(30,30,280-30,240-30,WHITE); //采集温湿度数据 aht21_read_data(); //显示温度 sprintf(disp_buf, "TEMP = %.2f C ",get_temperature() ); LCD_ShowString(60, 240/2-32, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //显示湿度 sprintf(disp_buf, "HUMI = %.2f %%RH ",get_humidity() ); LCD_ShowString(60, 240/2, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //因不可频繁采集数据,需要间隔一定时间 if( ( time_value++ ) >= 10 ) { time_value = 0; //显示有害气体浓度 sprintf(disp_buf, "TVOC = %d ppb ",ags10_read() ); LCD_ShowString(60, 240/2+32, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); } //定时器循环固定刷屏 while(get_show_over_flag()); set_show_update_flag(1); while(get_show_update_flag()); } }
4.WF183D驱动
/******************************************************************************** * 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz * 版 本 号: V1.0 * 修改作者: LC * 修改日期: 2023年06月12日 * 功能介绍: 增加GD32的DMA/SDRAM/EXMC/TIMER标准库 ****************************************************************************** * 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源 * 开发板官网:www.lckfb.com * 技术支持常驻论坛,任何技术问题欢迎随时交流学习 * 立创论坛:club.szlcsc.com * 其余模块移植手册:【立创·梁山派开发板】模块移植手册 * 关注bilibili账号:【立创开发板】,掌握我们的最新动态! * 不靠卖板赚钱,以培养中国工程师为己任 *********************************************************************************/ #include "gd32f4xx.h" #include "systick.h" #include "bsp_led.h" #include "lcdinit.h" #include "lcdgui.h" #include "bsp_usart.h" #include "stdio.h" #include "string.h" #include "bsp_aht21.h" #include "bsp_ags10.h" #include "bsp_wf183d.h" uint16_t color_buff[7] = {WHITE,BLACK,BLUE,RED,GREEN,YELLOW,GRAY}; /****************************************************************** * 函 数 名 称:main * 函 数 说 明:主函数 * 函 数 形 参:无 * 函 数 返 回:无 * 作 者: LC * 备 注:无 ******************************************************************/ int main(void) { char disp_buf[200] = {0}; int time_value = 0; nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); // 优先级分组 //滴答定时器初始化 1us systick_config(); //sram初始化 exmc_synchronous_dynamic_ram_init(EXMC_SDRAM_DEVICE0); //AHT21温湿度传感器初始化 aht21_gpio_init(); //有害气体传感器初始化 ags10_gpio_init(); //气压传感器初始化 wf183d_gpio_config(); //串口0初始化(调试) usart_gpio_config( 115200U ); printf("start\r\n"); //lcd初始化 LCD_Init(); //清除全屏为黑色 LCD_Fill(0,0,280,240,BLACK); //开启显示 LCD_Show_Gram(); //等待一帧数据搬运完成 while(get_show_over_flag()); //开启定时器固定刷屏 Lcd_Show_Time_config(); while(1) { //画矩形 LCD_DrawRectangle(30,30,280-30,240-30,WHITE); //采集温湿度数据 aht21_read_data(); //显示温度 sprintf(disp_buf, "TEMP = %.2f C ",get_temperature() ); LCD_ShowString(60, 240/2-64, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //显示湿度 sprintf(disp_buf, "HUMI = %.2f %%RH ",get_humidity() ); LCD_ShowString(60, 240/2-32, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //因有害气体传感器不可频繁采集数据,需要间隔一定时间 if( ( time_value++ ) >= 10 ) { time_value = 0; //显示有害气体浓度 sprintf(disp_buf, "TVOC = %d ppb ",ags10_read() ); LCD_ShowString(60, 240/2, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); } //显示气压 sprintf(disp_buf, "pressure = %d PA ",GetAirPressureValue() ); LCD_ShowString(60, 240/2+32, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //定时器循环固定刷屏 while(get_show_over_flag()); set_show_update_flag(1); while(get_show_update_flag()); } }
5.测量电量
/******************************************************************************** * 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz * 版 本 号: V1.0 * 修改作者: LC * 修改日期: 2023年08月04日 * 功能介绍: ****************************************************************************** * 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源 * 开发板官网:www.lckfb.com * 技术支持常驻论坛,任何技术问题欢迎随时交流学习 * 立创论坛:club.szlcsc.com * 其余模块移植手册:【立创·梁山派开发板】模块移植手册 * 关注bilibili账号:【立创开发板】,掌握我们的最新动态! * 不靠卖板赚钱,以培养中国工程师为己任 *********************************************************************************/ #include "gd32f4xx.h" #include "systick.h" #include "bsp_led.h" #include "lcdinit.h" #include "lcdgui.h" #include "bsp_usart.h" #include "stdio.h" #include "string.h" #include "bsp_aht21.h" #include "bsp_ags10.h" #include "bsp_wf183d.h" #include "bsp_voltage.h" uint16_t color_buff[7] = {WHITE,BLACK,BLUE,RED,GREEN,YELLOW,GRAY}; /****************************************************************** * 函 数 名 称:main * 函 数 说 明:主函数 * 函 数 形 参:无 * 函 数 返 回:无 * 作 者: LC * 备 注:无 ******************************************************************/ int main(void) { char disp_buf[200] = {0}; int time_value = 0; // 优先级分组 nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); //滴答定时器初始化 1us systick_config(); //sram初始化 exmc_synchronous_dynamic_ram_init(EXMC_SDRAM_DEVICE0); //AHT21温湿度传感器初始化 aht21_gpio_init(); //有害气体传感器初始化 ags10_gpio_init(); //气压传感器初始化 wf183d_gpio_config(); //串口0初始化(调试) usart_gpio_config( 115200U ); printf("start\r\n"); //lcd初始化 LCD_Init(); //清除全屏为黑色 LCD_Fill(0,0,280,240,BLACK); //开启显示 LCD_Show_Gram(); //等待一帧数据搬运完成 while(get_show_over_flag()); //开启定时器固定刷屏 Lcd_Show_Time_config(); while(1) { //画矩形 LCD_DrawRectangle(30,30,280-30,240-30,WHITE); //采集温湿度数据 aht21_read_data(); //显示温度 sprintf(disp_buf, "TEMP = %.2f C ",get_temperature() ); LCD_ShowString(60, 240/2-64, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //显示湿度 sprintf(disp_buf, "HUMI = %.2f %%RH ",get_humidity() ); LCD_ShowString(60, 240/2-32, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //因不可频繁采集数据,需要间隔一定时间 if( ( time_value++ ) >= 10 ) { time_value = 0; //显示有害气体浓度 sprintf(disp_buf, "TVOC = %d ppb ",ags10_read() ); LCD_ShowString(60, 240/2, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); } //显示气压 sprintf(disp_buf, "pressure = %d PA ",GetAirPressureValue() ); LCD_ShowString(60, 240/2+32, (const uint8_t*)disp_buf, WHITE, BLACK, 16, 0); //电量测量初始化(PC3与sram的控制线冲突,因此采用分时复用方法) power_voltage_gpio_config(); //测量电量 get_voltage_value(); //sram重新初始化 exmc_synchronous_dynamic_ram_init(EXMC_SDRAM_DEVICE0); //定时器循环固定刷屏 while(get_show_over_flag()); set_show_update_flag(1); while(get_show_update_flag()); } }
三.PCB
1.天线部分要进行包地处理,抗干扰

2.通信模块2.4G

四.重要材料购买



五.焊接注意事项
1.屏幕焊接时注意不要连锡,尽量一次性完成不要来回拆卸

2.传感器焊盘在底部,尽量用加热台进行铁板烧;若用热风枪一定主义吹的时间且来回晃动

3.USB焊接时注意不要连锡,且四个孔也要焊接保证他牢固

4.焊接时注意顺序安排



设计图

BOM


添加到专辑
0
0
分享
侵权投诉
评论