找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4047|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

自制心率測(cè)量?jī)x

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71235 發(fā)表于 2014-12-27 21:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
花了整整18個(gè)小時(shí),終于完成了這個(gè)心率測(cè)量?jī)x,看圖:


    因?yàn)閺牟邉澋街谱魍瓿山?jīng)歷了1年半多的時(shí)間,期間方案多次更改,所以很需要記錄一下整個(gè)過(guò)程。

    一、起源:
    靈感還是來(lái)自愛(ài)折騰,看了后當(dāng)時(shí)就想復(fù)制一個(gè)。

    二、準(zhǔn)備工作:
    愛(ài)折騰的這個(gè)制作包括模擬檢測(cè)、放大,單片機(jī)計(jì)數(shù)、顯示兩部分,模擬檢測(cè)通過(guò)紅外發(fā)射接收對(duì)管檢測(cè)指尖血流變化,經(jīng)過(guò)兩級(jí)放大、低通、高通濾波后,形成一個(gè)跟心率同步的脈沖,然后由單片機(jī)檢測(cè)計(jì)數(shù)后,送顯示器顯示。我的方案保留了模擬檢測(cè)部分,單片機(jī)選用了80C2051,脈沖檢測(cè)方式改為測(cè)量脈沖的周期,然后由周期推算出1分鐘的心率值,因而這個(gè)數(shù)值是動(dòng)態(tài)的,省卻了啟動(dòng)按鈕等操作。而原作是才用計(jì)數(shù)15秒內(nèi)的脈沖數(shù),再計(jì)算出1分鐘速率,單片機(jī)也是用PIC?紤]到測(cè)量脈沖周期需要標(biāo)準(zhǔn)的方波,所以我在模擬和單片機(jī)之間加上了一個(gè)555電路做的斯密特觸發(fā)器,對(duì)模擬脈沖進(jìn)行整形。
    方案定下后是先做個(gè)試驗(yàn),確認(rèn)模擬部分是否可行的。試驗(yàn)在面板板上做的;這是2011年7月做的:

     電路中才用MCP602這一點(diǎn)很重要,因?yàn)槠胀ǖ膯坞娫催\(yùn)放電壓輸出幅度只能達(dá)到2/3VCC,剛剛達(dá)到高電平門限,有可能造成后級(jí)單片機(jī)檢測(cè)失誤,試驗(yàn)也證明了這一點(diǎn)。模擬電路通過(guò)后又用另外一塊面包板搭建了一個(gè)80C205電路,用三個(gè)微型的數(shù)碼管作為顯示器,因?yàn)樾穆拭}沖周期常常大于1秒鐘,而單片機(jī)無(wú)法提供如此長(zhǎng)度時(shí)間測(cè)量,所以采用5毫秒的定時(shí)器定時(shí)檢測(cè)脈沖,檢測(cè)到脈沖中斷后開(kāi)始計(jì)數(shù),直到下一次中斷計(jì)數(shù)結(jié)束,然后計(jì)算一個(gè)脈沖周期的計(jì)數(shù)值,再乘以5毫秒,就是一個(gè)完整的心率周期了,而5毫秒的定時(shí)間隔對(duì)于心率這樣很長(zhǎng)的脈沖,精度影響是很小的。單片機(jī)部分也取得了成功,這樣完整的系統(tǒng)就算定下來(lái)了。接下來(lái)是設(shè)計(jì)PCB,由于近年形成的習(xí)慣,做東西前都要選一下外殼,一定要根據(jù)外殼定電路,而且是殼越小越好,結(jié)果造成PCB設(shè)計(jì)很困難,因?yàn)樽约褐荒茏鰡蚊娴,走線很不容易,這是2011年9月未設(shè)計(jì)完成的PCB:

    三、 成為Arduino的擴(kuò)展板
    認(rèn)識(shí)Arduino是在2012年的4月,Arduino這個(gè)平臺(tái)和適合做原型開(kāi)發(fā),于是決定將擱置下來(lái)的心率測(cè)量?jī)x在arduion上實(shí)現(xiàn)一下,6月份做成了這個(gè)擴(kuò)展板:





      實(shí)現(xiàn)了方案的模擬部分,單片機(jī)部分由arduino來(lái)實(shí)現(xiàn),程序原理也是照搬原來(lái)的方案,顯示器沒(méi)有使用數(shù)碼管,而是用了上次做便攜溫濕度氣壓計(jì)用過(guò)的4位液晶顯示器,可以說(shuō)這是對(duì)心率測(cè)量?jī)x等一次最接近實(shí)用的試驗(yàn)。

     四、最終實(shí)現(xiàn)!
     也許最近是閑得慌吧,想要完成這個(gè)制作的念頭一下子冒了出來(lái)。不過(guò)方案又有了新的更新,這次突然想用attiny13來(lái)實(shí)現(xiàn)單片機(jī)部分了,因?yàn)樽罱?~6個(gè)制作都是用attiny13來(lái)實(shí)現(xiàn)的,手頭也有好幾片,冷靜思考了一天后又覺(jué)得不太可行,因?yàn)閍ttiny13一般都是用內(nèi)置的RC振蕩器,據(jù)說(shuō)誤差有10%,也即一分鐘60次心跳會(huì)有6次的誤差,這顯然有點(diǎn)大了,替代方案有兩個(gè),一個(gè)是改用attiny24,可以外接晶振,程序空間也有2K,余地大點(diǎn),二是attiny13接入有源晶振,但是有源晶振不便宜,而且占用占地兒。在確定最終方案前,先用手頭的一個(gè)attiny13開(kāi)發(fā)板+上面的arduino心跳擴(kuò)展板做了一個(gè)測(cè)試,程序還是沿用原來(lái)的原理,簡(jiǎn)單的程序很快就搞定了,build結(jié)果是962字節(jié),剛好沒(méi)溢出,又花了一個(gè)晚上將5毫秒定時(shí)搞精確,先是用對(duì)照實(shí)際心率調(diào)整定時(shí)器top值,后來(lái)是采用空余引腳輸出100HZ方波,用頻率計(jì)測(cè)量這個(gè)頻率,同時(shí)調(diào)整RC振蕩器的9.6m校準(zhǔn)值,最終將定時(shí)搞準(zhǔn)確。測(cè)試過(guò)程中發(fā)現(xiàn)溫度對(duì)頻率的影響只有1.5%,這樣的精度對(duì)心率完全夠用了,100次也就誤差1次而已,根據(jù)測(cè)試,555整形電路其實(shí)也是可以取消的。這樣整個(gè)方案就最終確定了,模擬不變,主控采用attiny13,不再采用整形電路!
      昨天早上開(kāi)始設(shè)計(jì)PCB,從制作水晶發(fā)光底座開(kāi)始(以后再撰文描述),就已經(jīng)開(kāi)始大量實(shí)用貼片元件了,為此還買了個(gè)拆焊臺(tái)。這次PCB設(shè)計(jì)自然也是用貼片元件,由于模擬部分電路比較規(guī)律,單片機(jī)部分又比較靈活(輸入輸出引腳可以隨PCB設(shè)計(jì)需要更改),所以設(shè)計(jì)完成時(shí),沒(méi)有一根跳線,電路中的1uf電容由于沒(méi)有找到替代的無(wú)極性電容,所以還是使用了直插的,紅外發(fā)射接受管也只能用直插的,而且要安裝在top層,除了一個(gè)SIP接口用了插針,LCD接線和電源接線采用直接焊接的方式,這次的機(jī)殼還是用上次便攜溫濕度氣壓計(jì)的外殼(mini數(shù)字磁帶盒),所以PCB為這個(gè)機(jī)殼而優(yōu)化,attiny13從SSU改成了SU,就是為了讓一部分線從芯片下走過(guò)。接著是腐蝕電路,在把電路板放入腐蝕劑不到一分鐘,突然發(fā)現(xiàn)熱轉(zhuǎn)印轉(zhuǎn)反了!趕緊撈出來(lái)重做。到傍晚時(shí)分,PCB制作完成。開(kāi)始焊接元件,MCP602也是早上剛到的,其他的電阻電容也全都有,因此花了點(diǎn)時(shí)間還是完美完成了。


      調(diào)試:晚上開(kāi)始調(diào)試。遇到的第一個(gè)問(wèn)題就是模擬電路貌似不起作用,手劃過(guò)紅外管的時(shí)候,輸出指示燈會(huì)閃一下,手指頭按在紅外管則什么都沒(méi)有,郁悶了好久,找來(lái)那塊擴(kuò)展板,將那塊板的紅外輸出信號(hào)接入新板,發(fā)現(xiàn)新板的電路是好的,看了問(wèn)題出在那個(gè)紅外發(fā)射接收模塊上,在換還是不換上猶豫了好久,最終決定換,換上擴(kuò)展板上的那一個(gè),換好后,手指頭按在紅外管上,指示燈果然能一閃一閃跟著心跳節(jié)律閃動(dòng)了。然后又花了2小時(shí),把主控板、顯示器、鋰電池、鋰電池充電板、開(kāi)關(guān)、充電插座硬塞進(jìn)了一個(gè)名片大小的盒子里了。已經(jīng)12點(diǎn)了,總裝完成了,該實(shí)際測(cè)試了,但是測(cè)試結(jié)果令人失望,顯示器顯示的數(shù)值比真實(shí)值少了20多,問(wèn)題在哪兒呢?首先考慮是因?yàn)闆](méi)有整形電路,造成波形不規(guī)律,影響了測(cè)量的準(zhǔn)確性,用示波器測(cè)量輸出脈沖波形,發(fā)現(xiàn)幅度很小很小,只有1v多點(diǎn),怎么回事呢,難道運(yùn)放是壞的,或者買錯(cuò)了片子?再次郁悶。。。拿起探頭看看,上面的開(kāi)關(guān)打在了10X上!猛然想起,ATTINY13每個(gè)片子的時(shí)鐘都要單獨(dú)校準(zhǔn)的,自從燒完片子后就沒(méi)想過(guò)這個(gè)問(wèn)題,還是沿用老的校準(zhǔn)值,于是開(kāi)動(dòng)IDE和編程器,開(kāi)始調(diào)整參數(shù),也許心太急,也許萬(wàn)用表表筆碰了不該碰的地方,也許校準(zhǔn)值調(diào)的太低,反正是那塊attiny13再也不能編程了,那一刻真想放棄了,可是看到自己花了1年多時(shí)間,都已經(jīng)非常非常接近完成了,難道就因?yàn)閾Q一塊芯片稍微有點(diǎn)麻煩就放棄了?換了后再次校準(zhǔn)、比較,顯示值終于正確了,此時(shí)已經(jīng)快2點(diǎn)了。

     結(jié)語(yǔ):能夠完成一件盡管一點(diǎn)都不偉大,卻時(shí)?M繞在心頭的事情,感覺(jué)真好~~~


評(píng)分

參與人數(shù) 1黑幣 +1 收起 理由
handsomelchcpp + 1 贊一個(gè)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表