拿到手STM32F072的板子已經(jīng)到手很久了,直到今天才來這里寫這個方案分享,是因為這個項目的編程比較復雜,周期也比較長,現(xiàn)在大體上有不少進展,沐紫編輯也很關(guān)心方案進度總是在督促我,哈哈好吧。之前沒寫過嘛。申請這個板子主要是想試用F0的單片機,之前一直是在用F1系列的單片機進行項目的開發(fā),但是F1系列的單片機雖然功能強大適用性強但是很多開發(fā)用不了這么多的資源,而STM32F0在低功耗和成本上對于可穿戴設(shè)備或者電池供電的系統(tǒng)都有很大的優(yōu)勢。
STM32F0系列的單片機不僅帶來了低廉的價格而且?guī)砹烁碌墓牡切阅軈s沒有打多大的折扣,低于得成本和低功耗的設(shè)計是十分合適的。我的項目本身是在F1系列上開發(fā),但是考慮到其以后的成本,想在開發(fā)后再移植到F0單片機上,所以以下的一些介紹可能跟F1單片機聯(lián)系比較多,而F0系列的單片機我是通過了學習掌握了其基本用法,利用MX和MBED進行了一些基本的例程的使用,還沒用將我所有的程序移植到我們的F0單片上,畢竟一個新的產(chǎn)品還是先在自己熟悉的片子上跑比較合適,這樣畫PCB板子的時候會成功率高一些。
我的預(yù)想方案是基于F0單片機的無線心率心電監(jiān)測系統(tǒng),病人或者老人通過將電極放在身體的測量位置就可以讀取心電圖和心率通過無線的方式將其傳送到網(wǎng)絡(luò)中,監(jiān)護人員可以通過檢測被檢測人員的心率和心電圖可以對他的身體狀況作出判斷,其優(yōu)勢是便攜,可以有很多結(jié)點同時采集,這個可能用到ZIGBEE組網(wǎng)技術(shù)這里先不提到了,這是后面的工作了。接下來我從電路和編程兩個方面來分享我的開發(fā)方案。
先上一張實物圖。
之所以沒有用開發(fā)板板子連接器件的原因我之前已經(jīng)說過了,在F1上完成設(shè)計后只需要移植核心代碼就可以在F0上繼續(xù)運行所以不必糾結(jié)于是否在開發(fā)板上開發(fā),再者我使用的心率檢測芯片是BGA封裝的芯片,我只能為其設(shè)計新的電路板才能讓其正常工作。而電路板的反復設(shè)計修改測試也花費了不少的時間,只要功能能夠完成,程序的移植是很方便的。
接下來是硬件電路的設(shè)計:
這個設(shè)計的難點在于采用的心率檢測芯片的電路設(shè)計和驅(qū)動程序的編寫,之前采用了一款BMD101的心率采集芯片其只有一路心率的檢測也能提供很好的中文支持但是我的設(shè)計需求是能有多路的采集,如果用BMD101來完成設(shè)計就會讓開發(fā)成本變得很高,也就沒有意義,所以經(jīng)過考慮采用了TI出的ADS1293來采集心率數(shù)據(jù)。這樣就要自己根據(jù)全英文的官方說明書來設(shè)計硬件電路和編寫驅(qū)動程序了。這樣降低了硬件成本但是大大加大了開發(fā)難度。
這個是STM32的基本系統(tǒng)電路圖:
SWD下載調(diào)試電路:
采用TPS系列3.3V穩(wěn)壓芯片來獲得工作電壓電源用了簡單的濾波設(shè)計,給芯片更穩(wěn)定的模擬電壓:
USB通信電路:
簡易電池充電電路:
模擬前端信號采集電路:
最后是測試用的無線通信模塊:
接下上電路板的正面:
反面:
接下來介紹這次設(shè)計的核心器件ADS1293,他是TI出的一款低成本的心率檢測芯片:
利用它優(yōu)異的性能和低廉的價格可以開發(fā)出低成本你的應(yīng)用。
這是他的引腳介紹。
實物連接圖:
上位機效果圖:
接下來是程序設(shè)計啦:
利用數(shù)據(jù)書冊中的SPI時序模擬通信寫出基本的讀取程序之后的開發(fā)將建立在這樣的基礎(chǔ)上。
下面是STM32的附件程序,使用MDK5.1編寫。實現(xiàn)了基本的數(shù)據(jù)讀寫和采集,之后項目將轉(zhuǎn)向ZIGBEE組網(wǎng)開發(fā),將獲取的數(shù)據(jù)經(jīng)過網(wǎng)絡(luò)再傳輸?shù)娇偡⻊?wù)器上。希望對大家有所幫助。
- #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}; //發(fā)送緩沖
- 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);
-
-
- }
-
-
- }
復制代碼
項目開發(fā)程序.rar
(1.64 MB, 下載次數(shù): 89)
2016-6-17 17:05 上傳
點擊文件名下載附件
|