Một chú ý quan trọng là mạch này sử dụng pin,nên sẽ không có mạch lọc loại bỏ tần số 50Hz từ điện lưới,vì vậy các bạn cần chắc chắn ngắt mọi nguồn nối mạch này với điện lưới(Ví dụ như dây nạp chương trình của MSP430),vì nó sẽ gây nhiễu đến tín hiệu.Đây là lỗi nhiều bạn rất hay gặp khi debug chương trình.
1.Sơ đồ khối
Phần mạch tương tự gồm 3 phần:- Khối led thu tín hiệu từ ngón tay.
- Mạch lọc thông cao Butter worth tần số cắt 160Hz.
- Mạch khuếch đại đảo với hệ số khuếch đại 100 lần.
- Có thể bao gồm thêm mạch lọc thông thấp tần số cắt 40 Hz nếu không dùng mạch số,vì trong mạch số,Vi điều khiển có phần chương trình xử lý số thay thế.
Phần mạch số chủ yếu là chương trình xử lý trên vi điều khiển.Tại đây tín hiệu tương tự sẽ được số hóa,lọc nhiễu,tạo ra tín hiệu dạng nhịp tim,tách đỉnh xung khi tim bắt đầu co bóp để tính nhịp tim.
Dưới đây chúng ta sẽ đi phân tích chi tiết từng phần.
2.Mạch thu tín hiệu
Mạch thu tín hiệu có dạng như hình.Nguyên lý của mạch này là dựa vào mức độ che sáng khác nhau của mạch máu trên ngón tay khi tim co bóp.Khi co bóp,tiết diện và áp suất trong máu thay đổi,dẫn đến mức độ che sáng đi qua thay đổi.Chúng ta phát ánh sáng thường qua ngón tay bằng led siêu sáng.Cần chú ý cấp nguồn ổn định cho led này để tránh nhiễu cao tần.Ánh sáng được thu lại bằng quang trở.Để lấy tín hiệu đầu ra cần phân áp cho quang trở theo mạch sau.Để tín hiệu ra tốt nhất,cần lấy giá trị của R bằng căn bậc 2 ( R(LDR)max nhân với R(LDR)min).
Tín hiệu thu được có dạng như hình bên dưới là ổn.Các bạn chú ý là các hình Oxilo trong bài này đều đã được xử lý số lọc nhiễu cao tần,nên nếu bạn dùng Oxilo để đo có thể thấy nhiều xung răng cưa thì cũng là bình thường.
3.Mạch lọc thông cao và mạch khuếch đại
Nhiệm vụ của phần mạch này là tách được phần sóng đi xuống của tín hiệu vừa thu ở trên (Là lúc tim bắt đầu co bóp).Thực chất tín hiệu sẽ được đi qua bộ lọc thông cao Butterworth (bản chất là mạch vi phân) và mạch khuếch đại đảo,dùng Opam.Tín hiệu thu được là tín hiệu đã được loại bỏ thành phần 1 chiều và khuếch đại lên.Nó giúp vi điều khiển dễ dàng sử lý tín hiệu hơn.Nếu không có bộ lọc thông cao thì tín hiệu sẽ vẫn có dạng trên nhưng bị trôi(do thành phần 1 chiều) nên rất khó hiển thị dạng sóng.Ngoài ra vì sau khi lọc,ta sẽ chỉ lấy sóng xung tạo ra mỗi lần tim bắt đầu co bóp nên rất dễ dàng khi tính nhịp tim.
Dưới đây là sơ đồ nguyên lý của mạch:
Nguồn VCC+ và VCC- nên để trị tuyệt đối giống nhau và nên để trên 3.7V là tốt nhất,bắt buộc là nguồn pin(Lithium hoặc pin 9V).Phần mạch lọc thông cao là phần trước tụ C7,phần còn lại là mạch khueehcs đại đảo.Tụ C7 và C8 chỉ dùng để ổn định tín hiệu,có thể bỏ qua.Thực tế khi triển khai,mình để ý thấy Opam nên dùng loại LM741 thay vì 324 hay 358 vì nhiễu ít hơn.Bộ lọc Butterworth là bộ lọc thông cao có tần số cắt là 160Hz,được tính theo công thức:
Hệ số khuếch đại của mạch lọc thông cao là: K1= 1+ R5/R67 = 2.
Các bạn có thể để cao hơn nhưng tốt nhất không nên để cao quá,mạch sẽ không ổn định.
Phần thứ 2 là mạch khuếch đại đảo,rất đơn giản,hệ số khuếch đại là K2=R2/R3
Tín hiệu sau khi qua mạch này có dạng sau:
Đến đây về cơ bản thì quá trình xử lý tín hiệu tương tự đã hoàn tất.Mạch lọc thông thấp tần số 40 Hz có thể thêm vào,tuy nhiên không quan trọng lắm.
4.Tính nhịp tim
Từ tín hiệu sóng co bóp tim được tách ra từ phần 3,có nhiều cách để tính nhịp tim,tuy nhiên đều dựa và việc bắt một trong 2 xung sườn lên hoặc xuống của tín hiệu.Ở đây mình sử dụng cách bắt xung sườn lên của tín hiệu.Cụ thể là tín hiệu sau khi được chuyển đổi ADC sẽ được qua một bộ vi phân.Bộ này triển khai rất đơn giản,chỉ cần lấy mẫu ADC với tần số cố định,lấy giá trị ADC lần đo cuối trừ đi giá trị lần trước đó,Kết quả thu được tương đương với tín hiệu được đi qua 1 bộ vi phân.Tần số lấy mẫu ADC càng cao thì tín hiệu càng chi tiết.Ở đây mình lấy mẫu ở tần số 40Hz,nếu nhỏ hơn có thể bắt trượt xung sườn lên.
Do chỉ quan tâm đến xung sườn lên,ta bỏ qua các giá trị vi phân nhỏ hơn 0.Nhìn hình có thể thấy tín hiệu thu được rất sạch,gốc là 0,Sau đó chỉ cần một vòng quét,mỗi lần tín hiệu vi phân vượt qua 1 giá trị ngưỡng nào đó thì là 1 lần tim đập.Tính thời gian giữa 2 lần co bóp tim và tính ra nhịp tim tức thời
Phần mạch hiển thị số khá phức tạp vì có nhiều lệnh xử lý LCD Graphic,mình sẽ hướng dẫn chi tiết trong một bài khác.
Chúc các bạn thành công!
theo như mình được biết thì về việc lọc, thay vì lọc bằng phần cứng mình có thể lọc bằng phần mềm ? bạn đã tìm hiểu về cái này chưa ? có thể giới thiệu cho mình được không ? tks.
ReplyDeleteTrong bài này mình có dùng lọc bằng phần mềm đó bạn,có một bộ lọc thông thấp trong chương trình hiển thị như trong sơ đồ khối.Còn các bộ lọc thông cao,thông dải,dải chắn thì mình chưa thử bằng phần mềm,nhưng chắc chắn là có,chỉ có điều chưa so sánh hiệu quả giữa phần cứng và phần mềm thôi.
Deletebạn có thể cho mình xin code và mạch nguyên lí dc k. nếu được bạn gửi vào mail : tungcoly@gmail.com
Deletetks
Ví dụ như đây là code bộ lọc thông thấp dùng phương pháp cửa sổ lọc Blackman-Harris ,đầu vào là ADC[0],đầu ra là ADC_Filter[0].Bạn có thể đọc thêm tại đây http://www.mikroe.com/chapters/view/72/
DeleteTemp_0[8] = Temp_0[7];
Temp_0[7] = Temp_0[6];
Temp_0[6] = Temp_0[5];
Temp_0[5] = Temp_0[4];
Temp_0[4] = Temp_0[3];
Temp_0[3] = Temp_0[2];
Temp_0[2] = Temp_0[1];
Temp_0[1] = Temp_0[0];
Temp_0[0] = ADC[0];
ADC_Filter[0]= (Temp_0[3]+Temp_0[5])*59/250 + Temp_0[4]*53/100-(Temp_0[1]+Temp_0[7])/400;
ok. tks. còn phần sử lí ocsillo bạn làm phần đấy đi :v
DeleteỜ bạn chờ vài hôm,mấy hôm nay đang nhiều việc lằng nhằng quá :3
Deletebạn có thể gửi cho mình code với mạch nguyên lí được k, mình tìm tài liệu mà k có với lại có thì những tài liệu đó cũng k giúp ích được nhiểu lắm.
DeleteBạn chờ vài hôm để mình viết nốt bài tutorial nữa,vì code giờ có gửi thì cũng khó hiểu lắm.Mình viết trên MSP430F5419 bằng kit tự thiết kế,nó là 2 module khá lằng nhằng.Mà chương trình đấy được viết cho Kit nên còn nhiều code của các chương trình khác nữa.
Deletecho em xin sơ đồ nguyên lý cảm biến nhịp tim vs
ReplyDelete