内容介绍
内容介绍
项目介绍
心电图是评估心脏健康的重要指标之一。传统的心电图机往往难以在心脏疾病早期发现异常,因此需要进行长期的心电监测来确保心脏的健康状况。然而,传统心电图机存在一些限制,如电池容量和电子器件体积等问题,这导致了长期心电监测技术的发展受到了一定的制约。
为了克服这些限制,低功耗、便携式心电图仪成为了长期心电监测的关键技术。低功耗的设计可以延长设备的使用寿命,减少对电池的频繁更换,提高便携性和可靠性。便携式的设计使得用户可以随时随地进行心电监测,无需受到时间和空间的限制。
本次我设计了一款基于CC2541的便携式心电贴,具有小体积,低功耗,蓝牙通信等特点。
市场应用介绍
本设计适合家用,提供一定的参考心电图。
项目设计思路
以小巧,便携,易于使用为主要思路,核心芯片选择CC2541,经典的蓝牙芯片,资料很多。
项目方案框图和原理图解释
核心是cc2541,用于数据采集与ble上传。
TP4056为充电芯片,用于给设备进行充电。
U3为心电芯片,用于模拟信号采集与转换。
设计中用到规定厂商的元器件介绍
1.CC2541
- 射频
- 2.4-GHz 符合低能耗规范和私有的 RF 片载系统
- 支持 250-kbps,500-kbps,1-Mbps,2-Mbps 的数据速率
- 出色的链路预算,不使用外部前段而支持长距离应用
- 高达 0 dBm 的可编程输出功率
- 出色的接收器灵敏度 (1 Mbps 时为 –94 dBm),可选择性,和阻挡性能
- 适合于针对符合世界范围内的无线电频率调节系统: ETSI EN 300 328 和 EN 300 440 2 类 (欧洲),FCC CFR47 15 部分(美国),和 ARIB STD-T66 (日本)
- 布局
- 极少的外部组件
- 提供参考设计
- 6-mm × 6-mm 方形扁平无引脚 (QFN)-40 封装
- 与 CC2540 引脚兼容 (当不使用 USB 或者 I2C 时)
- 低功率
- 工作模式 RX 低至: 17.9 mA
- 工作模式 TX (0 dBm): 18.2 mA
- 功率模式 1 (4-µs 唤醒): 270 µA
- 功率模式 2 (睡眠定时器打开): 1 µA
- 功率模式 3 (外部中断): 0.5 µA
- 宽泛的电源电压范围 (2 V–3.6 V)
- 工作模式下 TPS62730 兼容低功率
- RX 低至: 14.7 mA (3-V 电源)
- TX (0 dBm):14.3 mA(3V 电源)
- 微控制器
- 具有代码预取功能的高性能和低功率 8051 微控制器内核
- 系统内可编程闪存,128 或者 256 KB
- 在所有功率模式下具有保持功能的 8-KB RAM
- 支持硬件调试
- 扩展基带自动化,包括自动确认和地址解码
- 所有功率模式中对所有相关寄存器的保持
- 外设
- 功能强大的 5 通道直接内存访问 (DMA)
- 通用定时器 (1 个 16 位,2 个 8 位)
- 红外 (IR) 生成电路
- 具有捕捉功能的 32-kHz 睡眠定时器
- 精确数字接收到的数字信号强度指示器 (RSSI) 支持
- 电池监视器和温度传感器
- 含 8 通道和可配置分辨率的 12 位模数转换器 (ADC)
- 高级加密标准 (AES) 安全协处理器
- 2 个功能强大的支持几个串行协议的通用异步接收发器 (UART)
- 23 个通用 I/O 引脚
(21 × 4 mA,2 × 20 mA) - I2C 接口
- 2 个具有 LED 驱动功能的 I/O 引脚
- 安全装置定时器
- 集成的高性能比较器
- 开发工具
- CC2541 评估模块工具包 (CC2541EMK)
- CC2541 小型开发工具包 (CC2541DK-MINI)
- SmartRF™ 软件
- 提供 IAR 嵌入式 Workbench™
PCB绘制打板介绍及遇到的问题和解决方法
无
关键代码及说明
核心代码
int main(void)
{
/* Initialize hardware */
HAL_BOARD_INIT();
// Initialize board I/O
InitBoard( OB_COLD );
/* Initialze the HAL driver */
HalDriverInit();
/* Initialize NV system */
osal_snv_init();
/* Initialize LL */
/* Initialize the operating system */
osal_init_system();
/* Enable interrupts */
HAL_ENABLE_INTERRUPTS();
// Final board initialization
InitBoard( OB_READY );
#if defined ( POWER_SAVING )
osal_pwrmgr_device( PWRMGR_BATTERY );
#endif
/* Start OSAL */
osal_start_system(); // No Return from here
return 0;
}
接口部分代码
void sbpSerialAppCallback(uint8 port, uint8 event)
{
uint8 pktBuffer[SBP_UART_RX_BUF_SIZE];
// unused input parameter; PC-Lint error 715.
(void)event;
HalLcdWriteString("Data form my UART:", HAL_LCD_LINE_4 );
//���ؿɶ����ֽ�
if ( (numBytes = Hal_UART_RxBufLen(port)) > 0 ){
//��ȡȫ����Ч�����ݣ��������һ��һ����ȡ���Խ����ض�������
(void)HalUARTRead (port, pktBuffer, numBytes);
HalLcdWriteString(pktBuffer, HAL_LCD_LINE_5 );
sbpGattWriteString(pktBuffer,numBytes);
}
}
void sbpSerialAppWrite(uint8 *pBuffer, uint16 length)
{
HalUARTWrite (SBP_UART_PORT, pBuffer, length);
}
BLE初始化
void SimpleBLECentral_Init( uint8 task_id )
{
simpleBLETaskId = task_id;
SerialApp_Init(task_id);
// Setup Central Profile
{
uint8 scanRes = DEFAULT_MAX_SCAN_RES;
GAPCentralRole_SetParameter ( GAPCENTRALROLE_MAX_SCAN_RES, sizeof( uint8 ), &scanRes );
}
// Setup GAP
GAP_SetParamValue( TGAP_GEN_DISC_SCAN, DEFAULT_SCAN_DURATION );
GAP_SetParamValue( TGAP_LIM_DISC_SCAN, DEFAULT_SCAN_DURATION );
GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, (uint8 *) simpleBLEDeviceName );
// Setup the GAP Bond Manager
{
uint32 passkey = DEFAULT_PASSCODE;
uint8 pairMode = DEFAULT_PAIRING_MODE;
uint8 mitm = DEFAULT_MITM_MODE;
uint8 ioCap = DEFAULT_IO_CAPABILITIES;
uint8 bonding = DEFAULT_BONDING_MODE;
GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof( uint32 ), &passkey );
GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof( uint8 ), &pairMode );
GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof( uint8 ), &mitm );
GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof( uint8 ), &ioCap );
GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof( uint8 ), &bonding );
}
// Initialize GATT Client
VOID GATT_InitClient();
// Register to receive incoming ATT Indications/Notifications
GATT_RegisterForInd( simpleBLETaskId );
// Initialize GATT attributes
GGS_AddService( GATT_ALL_SERVICES ); // GAP
GATTServApp_AddService( GATT_ALL_SERVICES ); // GATT attributes
// Register for all key events - This app will handle all key events
RegisterForKeys( simpleBLETaskId );
// makes sure LEDs are off
HalLedSet( (HAL_LED_1 | HAL_LED_2), HAL_LED_MODE_OFF );
// Setup a delayed profile startup
osal_set_event( simpleBLETaskId, START_DEVICE_EVT );
}
功能展示及说明
板卡展示
心电图
对本大赛的心得体会(包括意见或建议),及整个设计过程中遇到的难点和解决方法
借着本次大赛,可以把平时有些想法但却一直懒得动手的东西做出来,确实在过程中学到了很多东西,也体会了不少快乐。希望以后能有更多类似活动。
软硬件
电路图
附件下载
PCB.zip
源码.rar
团队介绍
无
评论
0 / 100
查看更多