拿到手STM32F072的板子已經到手很久了,直到今天才來這里寫這個方案分享,是因為這個項目的編程比較復雜,周期也比較長,現在大體上有不少進展,沐紫編輯也很關心方案進度總是在督促我,哈哈好吧。之前沒寫過嘛。申請這個板子主要是想試用F0的單片機,之前一直是在用F1系列的單片機進行項目的開發,但是F1系列的單片機雖然功能強大適用性強但是很多開發用不了這么多的資源,而STM32F0在低功耗和成本上對于可穿戴設備或者電池供電的系統都有很大的優勢。
STM32F0系列的單片機不僅帶來了低廉的價格而且帶來了更新的功耗但是性能卻沒有打多大的折扣,低于得成本和低功耗的設計是十分合適的。我的項目本身是在F1系列上開發,但是考慮到其以后的成本,想在開發后再移植到F0單片機上,所以以下的一些介紹可能跟F1單片機聯系比較多,而F0系列的單片機我是通過了學習掌握了其基本用法,利用MX和MBED進行了一些基本的例程的使用,還沒用將我所有的程序移植到我們的F0單片上,畢竟一個新的產品還是先在自己熟悉的片子上跑比較合適,這樣畫PCB板子的時候會成功率高一些。
我的預想方案是基于F0單片機的無線心率心電監測系統,病人或者老人通過將電極放在身體的測量位置就可以讀取心電圖和心率通過無線的方式將其傳送到網絡中,監護人員可以通過檢測被檢測人員的心率和心電圖可以對他的身體狀況作出判斷,其優勢是便攜,可以有很多結點同時采集,這個可能用到ZIGBEE組網技術這里先不提到了,這是后面的工作了。接下來我從電路和編程兩個方面來分享我的開發方案。
先上一張實物圖。
153740x2zpvarp25sffsz1.jpg (130.36 KB, 下載次數: 86)
下載附件
2016-6-17 18:54 上傳
之所以沒有用開發板板子連接器件的原因我之前已經說過了,在F1上完成設計后只需要移植核心代碼就可以在F0上繼續運行所以不必糾結于是否在開發板上開發,再者我使用的心率檢測芯片是BGA封裝的芯片,我只能為其設計新的電路板才能讓其正常工作。而電路板的反復設計修改測試也花費了不少的時間,只要功能能夠完成,程序的移植是很方便的。
接下來是硬件電路的設計:
這個設計的難點在于采用的心率檢測芯片的電路設計和驅動程序的編寫,之前采用了一款BMD101的心率采集芯片其只有一路心率的檢測也能提供很好的中文支持但是我的設計需求是能有多路的采集,如果用BMD101來完成設計就會讓開發成本變得很高,也就沒有意義,所以經過考慮采用了TI出的ADS1293來采集心率數據。這樣就要自己根據全英文的官方說明書來設計硬件電路和編寫驅動程序了。這樣降低了硬件成本但是大大加大了開發難度。
這個是STM32的基本系統電路圖:
153027muhbur8br1tadezb.png (38.44 KB, 下載次數: 60)
下載附件
2016-6-17 18:54 上傳
SWD下載調試電路:
153027s8v5sa0z8zdmun7d.png (9.23 KB, 下載次數: 71)
下載附件
2016-6-17 18:54 上傳
采用TPS系列3.3V穩壓芯片來獲得工作電壓電源用了簡單的濾波設計,給芯片更穩定的模擬電壓:
152949pb1rdhw44s4krr0f.png (14.39 KB, 下載次數: 74)
下載附件
2016-6-17 18:54 上傳
USB通信電路:
153451vqpufp12xjf9162o.png (24.1 KB, 下載次數: 67)
下載附件
2016-6-17 18:54 上傳
簡易電池充電電路:
153522r1k3lyum0khm8wfm.png (18.56 KB, 下載次數: 78)
下載附件
2016-6-17 18:54 上傳
模擬前端信號采集電路:
153608x2j41iie2455i151.png (47.94 KB, 下載次數: 76)
下載附件
2016-6-17 18:54 上傳
最后是測試用的無線通信模塊:
153934zl6k52kff27ca413.png (13.63 KB, 下載次數: 65)
下載附件
2016-6-17 18:54 上傳
接下上電路板的正面:
154251daz7tijp84pna4qp.jpg (76.79 KB, 下載次數: 70)
下載附件
2016-6-17 18:54 上傳
反面:
154257emp3gzx7m88jmvii.jpg (61.78 KB, 下載次數: 76)
下載附件
2016-6-17 18:54 上傳
接下來介紹這次設計的核心器件ADS1293,他是TI出的一款低成本的心率檢測芯片:
154741n44ez24xm64uzxe3.png (234.85 KB, 下載次數: 61)
下載附件
2016-6-17 18:54 上傳
利用它優異的性能和低廉的價格可以開發出低成本你的應用。
這是他的引腳介紹。
155052aq4njjd41iia5nid.png (85.22 KB, 下載次數: 74)
下載附件
2016-6-17 18:54 上傳
實物連接圖:
161426rxs8de7x8rcf73qv.png (47.29 KB, 下載次數: 71)
下載附件
2016-6-17 18:54 上傳
上位機效果圖:
161521n01yaocg21c40oxc.png (73.11 KB, 下載次數: 63)
下載附件
2016-6-17 18:54 上傳
接下來是程序設計啦:
利用數據書冊中的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)
2016-6-17 17:05 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|