信盈达智能手环实验报告.docx
- 文档编号:6573406
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:23
- 大小:999.28KB
信盈达智能手环实验报告.docx
《信盈达智能手环实验报告.docx》由会员分享,可在线阅读,更多相关《信盈达智能手环实验报告.docx(23页珍藏版)》请在冰豆网上搜索。
信盈达智能手环实验报告
《电子设计策划与创新实践》报告
---基于STM32的智能手环设计
专业:
电子信息工程
班级:
电子1821
姓名:
檀厚泽
学号:
**********
******
2021年7月
1.实训目的
1.1巩固和加深对单片机原理和接口技术知识的理解;
1.2培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;
1.3学会方案论证的比较方法,拓宽知识,初步掌握工程设计的基本方法;
1.4掌握常用仪器、仪表的正确使用方法,学会软、硬件的设计和调试方法;
1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能用计算机绘制电路图和流程图。
2.实训要求
2.1熟练使用C语言编程
2.2能看懂电路图、数电时序图
2.3能看懂CPU数据手册和传感器数据手册
2.4能够熟练使用ST系列CPU开发
2.5熟练掌握CPU下常见外设:
IO、中断、定时
2.6熟练掌握常见的通信协议:
I2C、SPI、串口
2.7具备常见的硬件排错能力和软件调试能力
2.8熟悉嵌入式产品的开发流程
3.硬件设计
3.1硬件实物图介绍
1)主控芯片:
STM32F411(Cortex-M4)
2)LED(2个):
GPIO输出
3)KEY(1个):
GPIO输入ADC五向按键
4)OLED屏:
SPI通信,编程实现自由显示字符+图片
5)直流电机:
PWM调速(TIM)
6)SHT20(温湿度传感器):
单总线,有特定的驱动方法
7)MPU6050:
计步算法
8)HP-6:
心率、血压
9)W25Q64:
存储芯片,对数据(温湿度、步数、心率、血压)的存储
3.2主要元器件介绍
(1)主控cpu:
内核:
ARMCORTEX-M4
片上/片内外设:
CPU里面---CPU数据手册中描述的
片外外设:
外接的传感器
IO口:
熟悉开发环境、下载方式、CPU手册查看方式
中断:
解放CPU,提高CPU执行效率---代码优化
定时:
CPU内部自带时基单元
通信:
CPU和外界传感器数据交流的协议规范
显示:
界面交流
(2)SHT20温湿度传感器
SHT20是瑞士Sensirion(盛思锐)进口温湿度传感器,
1.通讯接口为IIC接口。
2.测量范围:
湿度:
0~100%,温度-40~+25°C。
3.湿度误差为:
正负3%,温度误差为:
正负0.3°C。
4.供电范围:
2.1v~3.6v。
最大功耗为300uA,不测时自动进入低功耗模式。
(3)OLED显示设备
项目板OLED屏特性
1.屏幕自带LCD驱动芯片:
型号SH1106
2.分辨率/像素点:
132*64(理解成XY坐标)
3.OLED支持4种通信通信,具体采用哪种,和硬件连接有关
驱动原理
CPU----->把要显示的数据传递给LCD显示控制器(驱动芯片)
LCD显示控制器---->要显示的内容内部处理后--->送到屏幕上
(4)HP6心率血压传感器
HP6是深圳市维亿魄科技公司的心率血压传感器。
内部自带心率血压算法,心率准确度为90%,血压准确度为70%。
通讯接口为IIC接口。
支持读取脉搏波形数据进行算法研究,硬件上对脉搏信号进行动态滤波和放大。
HP6模块的血压、心率测量是通过光电脉搏波获得的,它对光学设计有严格的要求。
HP6适用于IIC接口通讯,7bite硬件地址:
0x66;IIC通讯速率为100K。
3.3功能电路介绍
(1)CPU原理图:
在STM32中选用IO模式
浮空输入:
可以做KEY识别,RX1
上拉输入:
IO内部上拉电阻输入
下拉输入:
IO内部下拉电阻输入
模拟输入:
应用ADC模拟输入,或者低功耗下省电
开漏输出:
IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能
实现输出高电平。
当输出为1时,IO口的状态由上拉电阻拉高电平,但由于
是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。
可以读IO输入电平变化,实现C51的IO双向功能。
推挽输出:
IO输出0-接GND,IO输出1-接VCC,读输入值是未知的
复用功能的推挽输出:
片内外设功能(例如I2C的SCL,SDA)
复用功能的开漏输出:
片内外设功能(例如I2C的SCL,SDA)
(2)SHT20温湿度传感原理图:
当传感器在执行测量任务时,SCL线仍然保持开放状态,可进行其他通讯。
非主机模式允许传感器进行测量时在总线上处理其他I2C总线通讯任务。
(3)OLED原理图:
SPI控制器的初始化步骤有以下几步:
1.使能SPI复用功能所映射的GPIO口时钟。
2.SPI控制器时钟使能。
3.配置GPIO为复用功能。
(MOSI/MISO/CLK)
4.GPIO复用功能为第几复用功能(AFx)。
5.配置GPIO输出速率为50MHz。
6.配置SPIx->CR1寄存器。
(4)HP6心率血压传感器
HP6的测试原理是绿色发光二极管发光,照射到皮肤,再反射到光电二极管,随着脉搏的跳动,光电二极管产生强弱变化的电流,电流经过电阻就能产生强弱变化的电压,强弱变化的电压经过放大,再经过AD采样,就可以获得脉搏波数字信号,数字信号输入到算法函数,即可得到计算结果。
上面的原理流程都是在HP6内部完成。
我们使用HP6时,只需要发指令打
开测量,发指令读取测量状态以及结果,测量完成后,发送指令去关闭测量。
注意:
HP6绝对不允许绿色发光二极管的光直接照射到光电二极管!
4.软件设计
4.1主要功能
1、通过OLED屏显示时间日期、温湿度和各工作界面
2、通过按键进行开机唤醒和各功能之间的切换
3、采用SHT20温湿度芯片显示当前的温湿度
4、采用MPU6050并结合计步算法进行计步操作
5、采用HP-6进行心率/血压的测量
6、采用蓝牙HC-06和手机app端相连,实现手机端控制
7、采用ucos_ii系统处理各模块任务之间的流畅运行
4.2核心传感器主要功能代码介绍
(1)LED原理图:
点亮LED灯的程序代码:
#include"stm32f4xx.h"
voiddelay(void)
{
u32i;
for(i=10000000;i>0;i--);
}
intmain()
{
RCC->AHB1ENR|=1<<0;//PA端口时钟使能。
第六章
GPIOA->MODER&=~(3<<14);//32bit,清零
GPIOA->MODER|=1<<14;//配置PA7IO口,为通用输出功能
GPIOA->OTYPER&=~(1<<7);//配置PA7为推挽输出
GPIOA->OSPEEDR&=~(3<<14);
GPIOA->OSPEEDR|=2<<14;//配置PA7的输出速度50MHZ
while
(1)
{
GPIOA->ODR&=~(1<<7);//PA7输出低电平
delay();
GPIOA->ODR|=1<<7;//PA7输出高电平
delay();
}
}
(2)KEY原理图
按键初始化,并检测按键是否按下:
#include"key.h"
#defineKEY((GPIOA->IDR&1<<0)&&1)//PA0高有效
voiddelay(u32t)
{
while(t)
{
t--;
}
}
voidkey_init()
{
RCC->AHB1ENR|=1<<0;//PA时钟使能
GPIOA->MODER&=~(3<<0);//PA0通用输入GPIOA->PUPDR&=~(3<<0);//PA0无上下拉
}
u8key_scan()
{
staticu8key_sta=1;
if(key_sta&&(KEY==1))//按键按下,且状态锁处于解锁状态
{
key_sta=0;//锁上按键状态锁delay(60000);//去抖动
if(KEY==1)//去抖动后,按键的输入电平为高电平,则按键按下
{
return1;//按键按下,返回1
}
}
elseif(KEY==0)
{
key_sta=1;
}
return0;
}
(3)SPI1控制器驱动OLED屏初始化代码:
voidSpi1_init(void)
{
RCC->AHB1ENR|=1<<1;//PB时钟使能
RCC->APB2ENR|=1<<12;//SPI1控制器时钟使能
GPIOB->MODER&=~(0X3F<<6);//配置PB3/4/5的GPIO功能为复用功能
GPIOB->MODER|=0X2A<<6;
GPIOB->AFR[0]&=~(0XFFF<<12);//PB3/4/5AF5功能
GPIOB->AFR[0]|=0X555<<12;
GPIOB->OSPEEDR&=~(0X3F<<6);//io输出速度50MHZ
GPIOB->OSPEEDR|=0X2A<<6;
/*SPI1配置,大部分位使用默认值*/SPI1->CR1=0;
SPI1->CR1|=3<<8;//SSMSSISPI1->CR1|=1<<2;//主模式
//SPI1->CR1|=4<<3;//速度100/64MHZ
SPI1->CR1|=1<<6;//使能SPI1
}
(4)读取SHT20温湿度的驱动代码
#defineREAD_TEMP_COMD0xf3//读取温度命令#defineREAD_HUMI_COMD0xf5//读取湿度命令#defineSHT20ADDR0x80//SHT20地址
floatSHT20_readTemOrHum(u8commod)
{
floattemp;//温度
u8ack=1;
u8MSB,LSB;//温度、相对湿度的寄存器数据
floatHumidity,Temperature;//温湿度的转换结果
SHT20_setResolution();//设置帧率8bit,9bit,10bit,11bit,12bit,13bit,14bit
IIC_start();//iic开始信号
ack=SHT20_writeOneByte(SHT20ADDR&0xfe);
if(ack==ACK)//写地址,并等待ACK
{
if(SHT20_writeOneByte(commod)==ACK)//写命令
{
do
{
delay_ms(6);//延时
IIC_start();//发送开始信号
}while(SHT20_writeOneByte(SHT20ADDR|0x01)==NACK);//无应答则整形,还在测量中,如果有应答,则结束当前循环
MSB=SHT20_readOneByte(ACK);//读Data(MSB),给应答ACK
LSB=SHT20_readOneByte(ACK);//读Data(LSB),给应答ACK
SHT20_readOneByte(NACK);//读Checksum,不给应答NACK
IIC_stop();//StopI2C
LSB&=0xfc;//Data(LSB)的后两位在进行物理计算前前须置‘0’
temp=MSB*256+LSB;//十六进制转成十进制
if(commod==((u8)READ_HUMI_COMD))//命令为读取湿度的命令
{
/*--calculaterelativehumidity[%RH]--*/
Humidity=(temp*125)/65536-6;//公式:
RH%=-6+125*SRH/2^16returnHumidity;//返回值:
humidity
}
elseif(commod==((u8)READ_TEMP_COMD))//命令为读取温度的命令
{
/*--calculatetemperature[°C]--*/
Temperature=(temp*175.72f)/65536-46.85f;//公式:
T=-46.85+175.72*ST/2^16returnTemperature;//返回值:
temperature
}
}
}
returnFAIL;
}
(5)HP-6心率、血压ADC获取代码
staticuint8_ttx_buf[24]={0};staticuint8_trx_buf[24]={0};uint8_t*ad_buf;
tx_buf[4]=0x91;timeout_cnt=0;
//1血压大包ADC数据分32次读取
for(i=0;i<32;)
{
tx_buf[5]=i;//包号
tx_buf[6]=id;//需要按协议有求填写
crc=Crc16(&tx_buf[4],18);//数据校验
*(uint16_t*)(&tx_buf[22])=crc;I2cWrite(tx_buf,24);//发送命令到血压模块delay_ms(5);//读写间隔延时I2cRead(rx_buf,24);//读取返回值
crc=*(uint16*)(&rx_buf[22]);//校验确定都回来的是否为有效数据check_sum=Crc16(&rx_buf[4],18);
if(check_sum==crc)//如果读取上来的数据是正确的
{
//这里需要判断返回的包续是否为0xFF,具体见协议内容for(j=0;j<16;j++)
{
ad_buf[j+(i*16)]=rx_buf[6+j];//提取ADC数据保存的ad_buf
}
i++;
timeout_cnt=0;
}
else
{
timeout_cnt++;
}
if(timeout_cnt>10)
{
break;
}
delay_ms(5);//延时
}
5.调试运行
5.1LED灯调试现象
烧入程序后,按下复位键,LED灯开始以较快频率闪烁
5.2KEY调试现象
烧入程序后,按住功能键,LED亮,松开后灭。
5.3滴答定时器调试现象
按下复位键,LED开始以2s的频率闪烁
5.4按键消抖调试现象
按下一次复位键,LED灯快速闪烁(亮灭)一次
5.5OLED屏显示现象
5.6温湿度测试现象
按下复位键,显示当前温度和湿度,当温度超过21摄氏度且湿度超过60%RH时,下方出现图片提示。
5.7心率、血压测量现象
(1)显示提示,随后把传感器放在手腕,实时显示心率。
(2)显示提示,遵照提示操作,一分钟后显示血压值。
(3)当血压、心率过高或过低时,均会显示提示。
6.实训心得体会
本次项目从开始到完成共用时一个多星期,时间紧,任务重。
我相信大家的项目感受和我的差不多,每个人为了这第一项目都付出了不少的努力。
但当我们看到自己的胜利果实时,心中的喜悦无法用语言形容。
临近项目接收阶段,回头看看自己度过的这些天,虽然有些辛苦但也是值得付出的。
从项目初期的无所适从到项目中期的重拾信心再到项目收官阶段的欣喜激动。
其中的苦与乐也有不小,虽然瑕疵很多但毕竟是自己亲手做的项目,但每当看到自己做的项目都会感到很欣慰。
最后感谢老师与同学们的无私帮助,正因为如此我们才可以在规定的时间内完成任务。
参考书目:
[1]阎石,《数字电子技术基础》,北京,高等教育出版社,2004年
[2]周立功,《ARM嵌入式系统基础教程》,北京,北京航空航天大学出版社,2008年
[3]邱祎、朱天龙,《嵌入式实时操作系统》,北京,机械工业出版社,2019年
[4]肖金球、黄伟军,《单片机原理与应用技术》,北京,清华大学出版社,2019年
实训课程设计成绩评定表
学生姓名:
檀厚泽学号:
1830106105年级/班:
电子1821
所属学院:
智能制造学院所在专业:
电子信息工程
项目
分值
优秀
(100≥x≥90)
良好
(90>x≥80)
中等
(80>x≥70)
及格
(70>x≥60)
不及格
(x<60)
得分
学习态度
15
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
学习态度尚可,能遵守组织纪律,能按期完成任务
学习马虎、纪律涣散,工作作风不严谨,不能保证时间和进度
技术水平与实际能力
25
电路设计合理、程序设计思路清晰、逻辑性强,注释合理;仿真界面布局合理、美观;仿真效果很好;文献查阅能力强、引用合理、可信。
独立工作能力强。
电路设计合理、程序设计思路清晰、逻辑性较强,注释合理;仿真界面布局合理,效果好;文献引用、调查调研比较合理。
独立进行工作较强。
电路设计合理、程序设计有逻辑性,注解较合理;仿真界面布局基本合理;仿真效果较好;主要文献引用较合理。
能独立进行工作。
电路设计基本合理,程序可以运行,能进行仿真,能参考有关文献。
设计不合理;程序无法运行,无法仿真;文献引用、调查调研有较大的问题。
创新
10
有重大改进或独特见解,有一定实用价值
添加了许多新功能,实用性好
添加了一定的功能
有一定见解
观念陈旧
说明书撰写质量、图纸质量
25
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整;图纸工整、清晰、布局合理、正确
结构合理,符合逻辑,文章层次分明,语言准确,符合规范化要求,书写工整;图纸工整、清晰、无错误
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰、基本无错误
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸无原则错误。
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸错误多。
对说明书的理解
25
对说明书内容能全面理解,对老师的问题回答正确,并能适当发挥。
对说明书内容理解好,对老师的问题回答正确。
对说明书内容能理解,个别地方理解有问题、对老师的问题回答基本正确。
对说明书内容基本理解,对老师的问题经提示回答基本正确。
对说明书内容不清楚,不能正确回答老师的问题。
总成绩评定:
指导教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信盈达 智能 实验 报告