拿到手STM32F072的板子已经到手很久了,直到今天才来这里写这个方案分享,是因为这个项目的编程比较复杂,周期也比较长,现在大体上有不少进展,沐紫编辑也很关心方案进度总是在督促我,哈哈好吧。之前没写过嘛。申请这个板子主要是想试用F0的单片机,之前一直是在用F1系列的单片机进行项目的开发,但是F1系列的单片机虽然功能强大适用性强但是很多开发用不了这么多的资源,而STM32F0在低功耗和成本上对于可穿戴设备或者电池供电的系统都有很大的优势。
STM32F0系列的单片机不仅带来了低廉的价格而且带来了更新的功耗但是性能却没有打多大的折扣,低于得成本和低功耗的设计是十分合适的。我的项目本身是在F1系列上开发,但是考虑到其以后的成本,想在开发后再移植到F0单片机上,所以以下的一些介绍可能跟F1单片机联系比较多,而F0系列的单片机我是通过了学习掌握了其基本用法,利用MX和MBED进行了一些基本的例程的使用,还没用将我所有的程序移植到我们的F0单片上,毕竟一个新的产品还是先在自己熟悉的片子上跑比较合适,这样画PCB板子的时候会成功率高一些。
我的预想方案是基于F0单片机的无线心率心电监测系统,病人或者老人通过将电极放在身体的测量位置就可以读取心电图和心率通过无线的方式将其传送到网络中,监护人员可以通过检测被检测人员的心率和心电图可以对他的身体状况作出判断,其优势是便携,可以有很多结点同时采集,这个可能用到ZIGBEE组网技术这里先不提到了,这是后面的工作了。接下来我从电路和编程两个方面来分享我的开发方案。
先上一张实物图。
之所以没有用开发板板子连接器件的原因我之前已经说过了,在F1上完成设计后只需要移植核心代码就可以在F0上继续运行所以不必纠结于是否在开发板上开发,再者我使用的心率检测芯片是BGA封装的芯片,我只能为其设计新的电路板才能让其正常工作。而电路板的反复设计修改测试也花费了不少的时间,只要功能能够完成,程序的移植是很方便的。
接下来是硬件电路的设计:
这个设计的难点在于采用的心率检测芯片的电路设计和驱动程序的编写,之前采用了一款BMD101的心率采集芯片其只有一路心率的检测也能提供很好的中文支持但是我的设计需求是能有多路的采集,如果用BMD101来完成设计就会让开发成本变得很高,也就没有意义,所以经过考虑采用了TI出的ADS1293来采集心率数据。这样就要自己根据全英文的官方说明书来设计硬件电路和编写驱动程序了。这样降低了硬件成本但是大大加大了开发难度。
这个是STM32的基本系统电路图:
SWD下载调试电路:
采用TPS系列3.3V稳压芯片来获得工作电压电源用了简单的滤波设计,给芯片更稳定的模拟电压:
USB通信电路:
简易电池充电电路:
模拟前端信号采集电路:
最后是测试用的无线通信模块:
接下上电路板的正面:
反面:
接下来介绍这次设计的核心器件ADS1293,他是TI出的一款低成本的心率检测芯片:
利用它优异的性能和低廉的价格可以开发出低成本你的应用。
这是他的引脚介绍。
实物连接图:
上位机效果图:
接下来是程序设计啦:
利用数据书册中的SPI时序模拟通信写出基本的读取程序之后的开发将建立在这样的基础上。
下面是STM32的附件程序,使用MDK5.1编写。实现了基本的数据读写和采集,之后项目将转向ZIGBEE组网开发,将获取的数据经过网络再传输到总服务器上。希望对大家有所帮助。
- #include "stm32f10x.h"
- #include "SPI_NRF.h"
- #include "usart1.h"
- #include "delay.h"
- #include "misc.h"
- #include "Stm32_Ads1293_spi.h"
- #include "TI_ADS1293.h"
- u8 txbuf[32]= {6,0x88,0xA1,0x02,0x00,0x00,0x00}; //发送缓冲
- u8 rxbuf[32];
- u8 crc;
- int main(void)
- {
- u8 i,j;
- uint8_t reg_write_data, reg_read_data, reg_read_default;
- SPI_NRF_Init();
- // USART1_Config();
- TI_ADS1293_SPISetup();
-
- reg_read_default = TI_ADS1293_SPIReadReg(TI_ADS1293_CONFIG_REG); // Read default config register value
- reg_write_data = 0x02; // new value to write
- TI_ADS1293_SPIWriteReg(0x01, reg_write_data); // Write to register
- reg_read_data = TI_ADS1293_SPIReadReg(0x11); // Read back the value written
-
- //
- // if (reg_write_data == reg_read_data)
- // {
- // TI_ADS1293_SPIWriteReg(TI_ADS1293_CONFIG_REG, reg_read_default); // Write to CONFIG register default value
- // while (1) // no error: blink LED continuously
- // {
- // __delay_cycles(250000);
- // __delay_cycles(250000);
- // TI_ADS1293_LED_PxOUT ^= TI_ADS1293_LED_PIN;
- // }
- // } else
- // {
- // TI_ADS1293_LED_PxOUT &= ~TI_ADS1293_LED_PIN; // error: Set LED OFF
- // }
- txbuf[4] = reg_read_default;
- txbuf[5] = reg_read_data;
- while(1)
- {
- crc=0;
- crc=0x88+0xA1+0x02+txbuf[4]+txbuf[5];
- txbuf[6]=crc;
-
- NRF_TX_Mode();
- NRF_Tx_Dat(txbuf);
- Delay(5000000);
-
-
- }
-
-
- }
复制代码
项目开发程序.rar
(1.64 MB, 下载次数: 89)
|