Tín hiệu điện tim và hệ thống các chuyển đạo

Vấn đề: Bản đồ án này đã trình bày đầy đủ về cơ sở lý thuyết cũng như thiết kế dụng cụ tựđộng phân tích tín hiệu điện tim trên cơ sở DSP56002. Trong thời gian làm đồ án tôi đã hoàn thành được những công việc sau: ã Tìm hiểu về tín hiệu điện tim, các chuyển đạo và các tín hiệu bệnh phục vụ cho mục đích thiết kế dụng cụ tựđộng phân tích tín hiệu điện tim. ã Tìm hiểu về phương pháp nhận dạng tín hiệu điện tim và các thiết bị ghi điện tim đã được sử dụng trên thị trường ã Thiết kế và chế tạo dụng cụ tựđộng phân tích tín hiệu điện tim trên cơ sở sử dụng bộ vi xử lý tín hiệu số DSP56002 do hãng Motorola sản xuất có sẵn trong bộ môn, thực hiện thu thập tín hiệu bất bình thường khác. ã Thiết kế chế tạo được máy phát mô phỏng tín hiệu điện tim bình thường và một số loại bệnh. Các phần việc cần làm tiếp theo để hoàn thiện thiết bị như: nhận dạng,lập thư viện chuẩn và thử nghiệm trên người bệnh cần một thời gian nghiên cứu và thực nghiệm nhiều hơn. Trong thời gian tới, nếu có điều kiện tôi sẽ nghiên cứu để hoàn thiện và mở rộng một số tính năng của thiết bị. Với các ứng dụng của thiết bị này sẽ là tiền đề cho việc hướng tới chế tạo dụng cụ thực hiện hoàn toàn tựđộng quá trình phân tích và nhận dạng tín hiệu có thể làm việc với các tín hiệu ECG thực thu thập trên cơ sở người bệnh thay thế cho phương pháp Holter đang được sử dụng hiện nay. Các dụng cụ tựđộng này không chỉđược dùng trong lĩnh vực y tế, mà còn có thể mở rộng ứng dụng trong các lĩnh vực đo lường khác. Đồ án dài 81 trang ,chia làm 3 chương

pdf82 trang | Chia sẻ: banmai | Lượt xem: 1997 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Tín hiệu điện tim và hệ thống các chuyển đạo, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
truyền số liệu nối tiếp. Số liệu các bit được dịch ra ngoài có thể là 8, 12, 16, 24 bit. Số liệu được dịch ra theo hướng các bit có trọng số lớn trước nếu như SHFD bằng 0 haycác bit có trọng số nhỏ trước nếu SHFD bằng 1. +) Thanh ghi số liệu truyền của SSI (TX) Tx là một thanh ghi 24 bit chỉ viết. Khi cần truyền số liệu thì người lập trình viết số liệu vào trong thanh ghi này sau đó số liệu tự động truyền tới thanh ghi dịch truyền. DSP bị ngắt bất cứ khi nào thanh ghi TX trống rỗng nếu như ngắt tương ứng được cho phép. 2. Bộ timer và đếm sự kiện của DSP56002 Kể từ Version thứ hai các bộ phận DSP56002 có thêm bộ timer và bộ đếm sự kiện. Bộ timer có thể sử dụng xung nhịp bên trong hay bên ngoài và có thể làm ngắt bộ xử lý sau khi có một số lượng nhất định các sự kiện bên ngoài hay có thể gửi tín hiệu tới một thiết bị bên ngoài sau khi đếm các sự kiện bên trong. Bộ timer nối tới các thiết bị bên ngoài qua hai chân hai chiều do TIO. Khi TIO là một đầu vào thì chức năng đếm các sự kiện bên ngoài được sử dụng. Khi TIO là một đầu ra thì nó có tác dụng đưa tín hiệu ra bên ngoài sau những 35 khoảng thời gian nhất định. Khi không được sử dụng cho bộ timer thì TIO có thể được sử dụng như một chân vào/ra mục đích chung. +) Cấu trúc bộ timer và đếm sự kiện Hình (2-3) là sơ đồ khối của timer và đếm sự kiện. Nó bao gồm một thanh ghi điều khiển/ trạng thái 24 bit có thể đọc/viết (TDSR), một thanh ghi đếm (TCR) 24 bit đọc/viết, một bộ đếm 24 bit và một mạch lôgic cho việc phát sinh ngắt và lựa chọn xung nhịp. +) Thanh ghi đếm (TCR) của timer Thanh ghi TSR chứa giá trị (được xác định bởi chương trình của người sử dụng) được nạp vào bộ đếm khi bộ timer được phép hoạt động (TE=1) hoặc khi bộ đếm vừa giảm đến 0 và một sự kiện mới xuất hiện. Nếu TCR được nạp với giá trị n bộ đếm sẽ được nạp lại sau (n+1) sự kiện. Nếu bộ timer bị cấm hoạt động (TE=0) và chương trình viết lên TCR thì giá trị viết lên TCR vẫn được giữ ở đó nhưng không xuất hiện được nạp vào bộ đệm cho đến khi bộ timer được phép hoạt động. +) Thanh thái (TCSR) của timer. Thanh ghi TCSR dùng để điều khiển bộ timer đồng thời ghi lại trạng thái của nó. Sau đây mô tả từng bit cụ thể của thanh ghi này. 24 Thanh ghi điều khiển/ trạng thái 24 bit (TCSR) Thanh ghi đếm 24 bit (TCSR) Bộ đếm 24 bit Lựa chọn xung nhịp Bộ ngắt thời gian CLK/2 TIO Hình 2-3. Sơ đồ khối bộ Timer và đếm sự kiện 24 24 24 3 36 Bit 0 (TE) của TCSR gọi là bit cho phép timer hoạt động. Khi ta đặt TE=1 thì bộ timer được phép hoạt động và được nạp với giá trị chứa trong thanh ghi. Khi xoá bit TE thì bộ timer không hoạt động. Việc reset phần cứng hay phần mềm sẽ xoá bit TE. Bit 1 (TIE) của TCSR gọi là cho phép ngắt timer. Khi TIE=1 thì các ngắt timer sẽ xuất hiện sau khi bộ đếm giảm xuống tới 0 và một sự kiện mới xuất hiện. Khi TIE =0 thì ngắt timer bị cấm. Việc reset phần cứng hay phần mềm sẽ xoá TIE. 3. Giới thiệu về tập lệnh và các trạng thái của bộ vi xử lý DSP 56002 3.1 Quá trình thực hiện: Quá trình thực hiện thông tin của DSP 56002qua 3 giai đoạn pipeline cho phép thực hiện trong một chu kỳ lệnh. Được thực hiện bằng ngôn ngữ assembler hoặc các ngôn ngữ bậc cao khác nhưng yêu cầu phải có chương trình dịch. Chu kỳ lệnh Hoạt động 1 2 3 4 5 6 7 Tìm lệnh F1 F2 F3 F3e F4 F5 F6 Giải mã D1 D2 D3 D3e D4 D5 Thực hiện E1 E2 E3 E3e E4 Bảng 2 – 4. Quá trình thực hiện của cấu trúc pipeline như bảng trên. Đầu tiên là tìm lệnh sau đó là giải mã lệnh và cuối cùng là thực hiện lệnh. Quá trình thực hiện lần lượt gối đầu lên nhau. Chế độ chương trình chỉ ra ở hình 2 - 4 của bộ VXL DSP 56002 bao gồm 3 khối chức năng hoạt động song song đó là khối số học và logic (ALU), khối phát địa chỉ chương trình (AGU) và khối điều khiển chương trình (CPU). 37 3.2 Cấu trúc hệ lệnh của DSP 560002. Đặc tính của hệ lệnh theo kiểu Mnemonic (Gợi nhớ) như Wait ,Stop vv.. Đơn vị logic và số học (Data ALU) các thanh ghi dữ liệu vào 47 X 0 47 Y 0 X1 X0 Y1 Y0 23 0 23 0 23 0 23 0 các thanh chứa accummulator A B 55 0 55 0 * A2 A1 A0 * B2 B1 B0 23 8 7 0 23 0 23 0 23 8 7 0 23 0 23 Khối phát địa chỉ chương trình (AGU) 23 16 15 0 23 16 15 0 23 16 15 0 * R7 * N7 * M7 * R6 * N6 * M6 * R5 * N5 * M5 * R4 * N4 * M4 * R3 * N3 * M3 * R2 * N2 * M2 * R1 * N1 * M1 Các thanh ghi Các thanh ghi Các thanh ghi địa chỉ con chỏ địa chỉ offset modifer Khối điều khiển chương trình(PCU) Thanh ghi lặp địa chỉ(LA) Thanh ghi đếm lặp(LC) 23 16 15 0 23 16 15 0 * * Đếm ch/trình(PC) T/ghi trạng thái(SR) T/ghi chế độ hoạt động(OMR) 23 16 15 0 23 6 15 8 7 0 23 8 7 6 5 4 3 2 1 0 * * * * * MB MA 32 SSH 16 15 SSL 0 23 16 15 0 0 15 * Stack pointer(SP) Hệ thống stack Hình 2-4. Cấu trúc của chế độ chương trình của DSP 56002 38 - Cú pháp lệnh của DSP được chia thành 4 phần Lệnh phải được thực hiện từ trái sang phải trong cùng một chu kỳ lệnh. Một số đặc điểm của DSP là cho phép thực hiện các dịch chuyển song song nhưng phải theo nguyên tắc dịch chuyển song song là có thể chung nguồn nhưng không chung điểm tới. - Tập lệnh của DSP gồm 62 lệnh chia thành 6 nhóm : + Nhóm lệnh số học: ADD,ABS,ADC.. + Nhóm lệnh dịch chuyển: MOVE,MOVEP,LUA.. + Nhóm lệnh logic :ANDI,EOR,NOT.. + Nhóm lệnh vòng lặp: DO,REPEAT.. + Nhóm tác động đến từng bit :BSET,BCLEAR.. + Nhóm lệnh điều khiển chương trình: DEBUG,JMP.. II. Giới thiệu cấu trúc phần cứng của Card DSP 56002EVM : Cấu trúc phần cứng bao gồm: Card DSP 56002EVM được ghép nối với máy tính thông qua cổng RS232. Tín hiệu tương tự được đưa vào qua hai bộ biến đổi A/D để biến tín hiệu ở dạng số, sau đó đưa vào DSP nhờ cổng truyền tin nối tiếp SSI để xử lý. Sau khi xử lý tín hiệu, bộ vi xử lý DSP56002 sẽ đưa tín hiệu ra cổng SSI đến bộ biến đổi D/A để biến thành tín hiệu tương tự ở đầu ra hệ thống. 2.1. Card DSP 56002EVM Card DSP56002EVM là một hệ thống xử lý tín hiệu hoàn chỉnh.(Hình 2-5) 2.2.1. Cấu tạo gồm: - Một bộ vi xử lý DSP56002. - Một bộ nhớ Ram mở rộng. - Một bộ mã hoá và giải tín hiệu CS4215 (codec) có chứa hai bộ biến đổi tương tự số (D/A) và hai bộ biến đổi tuơng tự (D/A). - Trên card có một vị trí dành cho bộ nhớ EFPROM của người sử dụng. - Việc ghép nối giữa máy tính và card DSP56002EVM được thực hiện thông qua cổng RS232. 39 - Trong đó ta thấy các bus địa chỉ và dữ liệu cổng A của DSP56002 được nối thông qua J2 và J4 để mở rộng bộ nhớ với bộ nhớ RAM bên ngoài (FSRAM 32*8). Tín hiệu để chọn một bộ nhớ hay cả ba là được quyết định bởi tổ hợp tín hiệu WR, RD và DAB15. Ngoài ra trên card cũng có vị trí cho EFPROM của người sử dụng để nạp chương trình từ bộ nhớ EFPROM nếu muốn. - Các chân NMI, IRQA, IRQB của DSP được nối thông qua bộ chuyển mạch 74HC157AD để điều khiển các ngắt từ bên ngoài tác động vào hay thiết lập các quá trình đợi của DSP. - Các bus điều khiển của cổng A được nối thông qua J11 (Bus-control) để đối thoại với các thiết bị bên ngoài. - 15 chân của cổng B được nối thông qua J7 để cho phép thiết bị ngoại vi đối thoại với DSP. - 9 chân của cổng C được nối thông qua J10 (Port C) cho phép sử dụng cho vào ra mục đích chung hoặc giao dịch nối tiếp đồng bộ hay không đồng bộ. Các chân này được sử dụng để đIều khiển thiết bị bên ngoài như Codec, các bộ biến đổi ADC và DAC. Các chân TX, RX của SCI được nối với bộ biến đổi đIện áp MAX232CSE để biến đổi tín hiệu tương tự từ 5V đến 12V cung cấp cho RS232 thông qua J8 (DCE/DTE) tới OnCE và Terminal. - Nguồn cung cấp cho card EVM56002 được lấy từ nguồn điện 220V AC qua J1 (Power connector) tới cuộn biến áp thành 7-9V AC hoặc DC và được đưa qua bộ chỉnh lưu cầu đưa tới bộ biến đổi điện áp MC7805 để biến đổi thành điện áp 5V cung cấp cho DSP56002 và CS4215. 2.2.2. Vi mạch mã hoá và giải mã 4215 CS4215 là một chíp đơn, CMOS có hai kênh biến đổi A/D 16 bit và hai kênh biến đổi D/A 16 bit. CS4215 có các đặc tính sau đây: 40 J2 DÀNH CHO EFPROM J4 32K*8 FSRAM 32K*8 FSRAM 32K*8 FSRAM IN HDPHNE OUT CS4215 J17 DSP 56002 J7 J12 J13 J11 J10 * Reset HOST OnCE MUSIC source HEADPHONES LINE LEVEl Hình 2-5. Sơ đồ cấu trúc card DSP Được nối với cổng nối tiếp của PC 41 - Tần số lấy mẫu từ 4khz đến 50khz –Mã hoá tín hiệu 16 bit hay 8 bit. - Có hệ số khuếch đại cho tín hiệu vào tương tự có thể lập trình được. - Có các bộ tạo xung nhịp ở trên chíp. - Nguồn cung cấp 5V. - Có các bộ lọc trên chíp - Giao diện số nối tiếp. Cổng SSI của DSP 56002 được sử dụng để truyền số liệu từ hai bộ biến đổi A/D tới DSP 56002 và từ DSP 56002 tới hai bộ biến đổi D/A. Hình 1 dưới đây mô tả cách nối CS4215 với cổng C của DSP 56002. 2.2.3. Chế độ điều khiển của CS4215 1. Chế độ điều khiển: Được sử dụng để chọn các chức năng của CS4215 bằng cách nạp vào các thanh ghi điều khiển của CS4215 c ác giá trị thích hợp. Để cho CS4215 làm việc ở chế độ điều khiển ta cần đặt chân D/C ở mức thấp, khi đó thông tin trên các chân SDIN và SDOUT của CS4215 là thông tin dùng để điều khiển CS4215. Có 8 thanh ghi điều khiển trong đó có hai thanh ghi chưa dùng đến ,còn lại 6 thanh ghi là: Thanh ghi trạng thái ,thanh ghi định dạng số liệu ,thanh ghi điều khiển cổng nối tiếp ,thanh ghi kiểm tra ,thanh ghi điều khiển cổng song song và thanh ghi version của CS4215. SRD/PC7 SCI/PC4 STD/PC8 SC2/PC5 SCK/PC6 SCLK/PC2 SDOUT RESET SDIN FSYNC TSIN SCLK D/C Hình 2 - 6. Nối giữa cổng C của DSP 56002 với CS4215 42 Trong phần này em không đi sâu giới thiệu từng bit của từng thanh ghi của CS4215 mà em chỉ muốn giới thiệu về từng thanh ghi và chức năng của chúng. - Thanh ghi trạng thái : Đây là thanh ghi 8 bit có chức năng nắm giữ quyền điều khiển chuyển đổi giữa chế độ điều khiển và chế độ truyền số liệu. Cho phép hoặc không cho phép khuyếch đại và qui định mức tín hiệu đầu ra headphone và speaker. - Thanh ghi định dạng số liệu : Là thanh ghi 8 bit có chức năng lựa chọn dạng số liệu ,tần số lấy mẫu tín hiệu ,cho phép hoặc không cho phép sử dụng bộ lọc thông cao để giảm nhiễu và lựa chọn chế độ mono,stereo. - Thanh ghi điều khiển cổng nối tiếp : Có chức năng cho phép hoặc không đưa ra số liệu nối tiếp ,lựa chọn số bit tương ứng trong một khung số liệu và lựa chọn nguồn xung nhịp ,chế độ master hoặc slave ,cho ta biết trạng thái của SCLK và FSYNC. - Thanh ghi kiểm tra: Quy định chức năng thực hiện quay vòng số – số hoặc quay vòng số – tương tự – số. Cho phép hoặc không kiểm tra vòng quay. Các bít kiểm tra phải được viết bằng 0. - Thanh ghi điều khiển cổng song song: Có chức năng thực hiện điều khiển vào/ra song song. Các bit dự trữ còn lại phải được viết bằng 0. - Thanh ghi version: Quy định chức năng lựa chọn số version của CS4215 là “C”,”D”, hoặc “E”. Ngoài ra còn 2 thanh ghi dự trữ 1 và 2 ; Khi chưa sử dụng thì các bit của các thanh ghi này phải được viết bằng 0. 2. Chế độ truyền số liệu : Chế độ truyền số liệu được sử dụng trong suốt quá trình truyền số liệu giữa CS4215 và DSP56002. Việc điều khiển hệ số khuyếch đại, hệ số suy giảm, việc lựa chọn đầu vào cũng được chứa trong các dòng số liệu. Các bit có trọng số lớn nhất (MSB) được truyền hay nhận trước tiên. Tám thanh ghi số liệu là: 8 bit trọng số lớn nhất của kênh trái, 8 bit trọng số nhỏ nhất của kênh trái, 8 bit có trọng số lớn nhất của kênh phải, 8 bit có trọng số nhỏ nhất của kênh phải, 2 thanh ghi để đặt chế độ cho đầu ra, 2 thanh ghi để đặt chế độ cho đầu vào. - Thanh ghi đặt chế độ cho đầu ra 1: Có chức năng đặt độ suy giảm ở đầu ra kênh trái, cho phép hoặc không cho phép đưa ra tín hiệu tương tự, và đầu ra headphone. 43 - Thanh ghi đặt chế độ đầu ra 2 : Có chức năng đặt độ suy giảm đầu ra kênh phải, cho phép hoặc không cho phép speaker và dữ liệu A/D. - Thanh ghi đặt chế độ đầu vào 1: Có chức năng đặt hệ số khuyếch đại ở đầu ra kênh trái ,lựa chọn đầu vào, thông báo tín hiệu quá mức và lứa chọn vào ra song song. - Thanh ghi đặt chế độ đầu vào 2: Có chức năng đặt hệ số khuyếch đại đầu ra kênh phải, đặt hế số suy giảm tín hiệu đưa ra quan sát. 44 Chương II: THIẾT KẾ TÍNH TOÁN THIẾT BỊ I) Yêu cầu kĩ thuật : - Vì tín hiệu vào nhỏ nên máy phải có hệ số khuếch đại lớn. - Trở kháng vào lớn để phối hợp trở kháng giữa đầu vào mạch khuếch đại với nguồn tín hiệu đảm bảo lấy ra được điện áp đủ lớn mà không bị ảnh hưởng của sự thay đổi bên ngoài như do các bệnh nhân khác nhau, do tiếp xúc của các điện cực... - Độ méo của thiết bị nhỏ, để tín hiệu thu được chính xác phục vụ tốt cho việc chuẩn đoán bệnh - Khả năng chống nhiễu tốt: âm tần của nguồn điện lưới công nghiệp, nhiễu đồng pha. - Có độ ổn định cao và lọc nhiễu tốt để phản ánh được trung thực tín hiệu điện tim - Có độ cách điện tốt để đảm bảo an toàn cho người và máy. II) Sơ đồ khối của thiết bị: Dựa trên chức năng của hệ thống, ứng dụng PC và DSP vào quá trình xử lý tín hiệu, tôi đã đưa ra được mô hình của hệ thống có sơ đồ khối được mô tả trên hình 1 Hình 1: Mô hình cấu trúc thiết bị phát và xử lí tín hiệu điện tim. Tín hiệu điện tim được phát ra từ máy phát tín hiệu dưới dạng tín hiệu tương tự (giá trị điện áp). Giá trị điện áp này được đưa qua CS4215 chuyển thành tín hiệu số và được đưa vào DSP. DSP làm nhiệm vụ thu thập tín hiệu, tính toán giá trị tần số của tín hiệu và truyền số liệu lên PC. Máy phát mô phỏng tín hiệu điện tim Card EVM 56002 CODER A/D DSP PC 45 DSP được quản lý bằng phần mềm EVM thông qua Card EVM56002. PC thu tín hiệu và hiển thị kết quả cuối cùng. 2.1 Trình bày về chức năng của các phần tử trong hệ thống : 2.1.1. Máy phát mô phỏng điện tim và các tín hiệu bệnh. Trong thời gian làm đồ án tôi có tiến hành lắp máy phát mô phỏng tín hiệu điện tim (đồ mạch nguyên lí hình2). Việc phát ra các tín hiệu được làm trên các mạch tích phân logic kinh điển. Mạch gồm 2 vi mạch chính là hai bộ đếm IC4520 và IC4017. IC4520 là một bộ đếm nhị phân đồng bộ, trong có chứa hai bộ đếm chia 16 và có mã đầu ra là BCD 8421 độc lập với nhau. Chỉ đếm lên, không đặt trước (preset) được. Tần số xung nhịp cực đại là 6 MHz khi nguồn cung cấp là 10V và là 2.5 MHz khi nguồn cung cấp 5V. Thời gian sườn xung lên và xuống của các xung CL và EN không được lớn hơn 10μs. IC4017 là một bộ đếm thập phân có 10 đầu ra. Mạch sử dụng IC4520 và vi mạch 4081 để tạo ra một bộ chia 256 cho ra tín hiệu xung vuông ở tần số 16 Hz tại đầu ra chân 14.Tín hiệu này được đưa qua một bộ đếm 4520 nữa để chia ra thành tín hiệu 2Hz hoặc 1Hz lấy ở hai chân đầu ra là chân 5 hoặc 6 của vi mạch 4520 thứ hai. Tín hiệu 16 Hz được đưa vào làm đồng hồ cho IC3, nó là một bộ đếm thập phân có 10 đầu ra. Tín hiệu thứ hai sinh ra từ mạch tích phân C3/R3 được đưa vào từ chân 15 của bộ đếm IC3, xung này được hiểu như là tín hiệu reset cho IC3 Diot D2 có nhiệm vụ chỉ cho phép chiều dương của tín hiệu đi qua. Bộ đếm thập phân dừng lại ở giá trị 9, giá trị nó chuyển qua (có thể thấy ở chân 11 được nối với đầu vào của chân Enable(13)) cho đến khi xung là 0. Vị trí của ngắt không cho qua trong thời gian nghỉ U, nó khoảng 60- 120 xung một phút, mạch tích phân R6/C4 chuyển xung đầu tiên (chân 2) thành phần P. Giá trị của số liệu ở điện trở R6 được tích vào tụ C4 để phóng ra mức điện áp khoảng 1V. Phần sóng T được sinh ra nhờ mạch tích phân thứ hai R7/C4, điện trở R7 có giá trị bằng một nửa điện trở R6 do đó xung ra trên Q6 vào tụ C4 có giá trị lớn gấp 2 lần (2.2 V) giá trị xung ra trên mạch H 2.1.2 1. C Q1 vào nhiệm v phép xu chỉ cho do đó t khi có phân n cộng tấ để nối v phát đư Nguồn c là 6 mA. ình 2: Sơ đ . Card EV S4215: tụ C4. Sa ụ giới hạn ng dương xung dươn a có được đoạn R. C hánh theo t cả các ph ới một EC ợc tín hiệu dạn ung cấp ồ mạch m M56002 i lệch C5/R dòng lớn v đi qua do g đi qua, thành phầ ác tín hiệu các điện t ần của xun G và một có dạng đ g bệnh run cho mạch áy phát tín 46 10 tạo ra à mạch th đó có giá t Sử dụng p n S. Đèn L lấp đầy th rở R11,R1 g và được tín hiệu 1V iện tim đồ g thất, dạn là nguồn hiệu điện thành phầ ẳng cho tụ rị định là 3 hần ngược ED 3 qua eo hai mạ 2 được cộ phân chia đưa ra k bình thư g bệnh th 9V và gi tim n R.Điện t C5, Diot .8 V. Còn không lớn diode D3 ch tích ph ng thêm v thành tín huyếch đạ ờng và ha ấp tim. á trị của rở R8 làm D5 chỉ ch Diode D4 hơn 0.7V phát sáng ân và các ào tụ C7, hiệu 1mV i. Mạch đã i tín bệnh: dòng tron o g 47 CS4215 là một chip đơn, CMOS, có hai kênh biến đổi A/D 16 bit và hai kênh biến đổi D/A 16 bit. CS4215 có đặc tính sau đây: - Tần số lấy mẫu từ 4khz đến 50khz –Mã hoá tín hiệu 16 bit hay 8 bit. - Có hệ số khuếch đại cho tín hiệu vào tương tự có thể lập trình được. - Có các bộ tạo xung nhịp ở trên chíp. - Nguồn cung cấp 5V. - Có các bộ lọc trên chíp - Giao diện số nối tiếp. Cổng SSI của DSP 56002 được sử dụng để truyền số liệu từ hai bộ biến đổi A/D tới DSP 56002 và từ DSP 56002 tới hai bộ biến đổi D/A. Hình3 dưới đây mô tả cách nối CS4215 với cổng C của DSP 56002. Trong sơ đồ trên CS4215 được sử dụng để chuyển tín hiệu từ tương tự sang số, quy định tần số lấy mẫu của tín hiệu và quyết định khung truyền số liệu. Để thực hiện được các công việc trên CS4215 sử dụng các thanh ghi và các bit đã được mô tả ở chương 2. 2. DSP 56002------------------------------------------------------------------------------- Với các bộ nhớ số liệu 24 bit X1, Y1 và X0, Y0, DSP thực hiện các công việc sau : • Thu thập tín hiệu được phát ra từ máy phát tín hiệu. SRD/PC7 SCI/PC4 STD/PC8 SC2/PC5 SCK/PC6 SCLK/PC2 SDOUT RESET SDIN FSYNC TSIN SCLK D/C Hình 3: Nối giữa cổng C của DSP 56002 với CS4215 48 • Tính toán tần số lớn nhất của tín hiệu. • Nhận dạng tín hiệu thu thập và lưu giữ các số liệu tại các vùng nhớ. • So sánh tín hiệu nhận được với thư viện tín hiệu điện tim chuẩn • Lưu giữ các tín hiệu bất bình thường và hiển thị kết quả trên máy tính. Để đảm bảo cho DSP làm việc chính xác cần quan tâm tới các vùng nhớ của DSP được sử dụng, tránh trường hợp bị lẫn số liệu do đặt trùng vùng nhớ. Dưới đây sẽ mô tả cách lưu giữ số liệu và sự phân vùng bộ nhớ của DSP. • Số liệu được lưu giữ trên DSP bao gồm hai vùng nhớ X và Y được phân chia như sau: - Vùng nhớ X được sử dụng để lưu giứ các giá trị biên độ của tín hiệu thu thập được và được sử dụng để phục vụ cho việc hiển thị. Vùng nhớ X được phân chia thành 3 vùng nhớ như sau: + Vùng nhớ bắt đầu từ X: $4000 là vùng nhớ chứa các số liệu thu thập được, với mỗi lần ghi được 1024 điểm. + Vùng nhớ bắt đầu từ X:$2000 là vùng nhớ chứa các số liệu của thư viện tín hiệu chuẩn. + Vùng nhớ bắt đầu từ X:$3000 là vùng nhớ chứa các số liệu của tín hiệu bất bình thường sau khi được so sánh với thư viện tín hiệu chuẩn. - Vùng nhớ Y được sử dụng để lưu giữ các dạng ngôn ngữ hình thức của tín hiệu sau khi đã được nhận dạng với phương pháp lưu giữ như sau: Cửa sổ quan sát được chia thành 40 đoạn. Quá trình nhận dạng tín hiệu điện tim sẽ được thực hiện trên các từ chia thành 40 ký tự bao trùm tất cả chu kỳ nhịp của tín hiệu ECG từ hai đỉnh R – R. Mỗi chu kỳ bao gồm 40 ký tự chiếm 7 ô nhớ trong vùng nhớ dưới dạng như sau : VD: Y: $2000 CCBAAA AABBBB CCCCCC AAAAAA.. Y: $2006 AABB00 ........... Vùng nhớ Y được phân chia thành 3 vùng nhớ như sau : + Vùng nhớ bắt đầu từ Y: $4000 là vùng nhớ chứa dạng ngôn ngữ hình thức của tín hiệu thu thập được. 49 + Vùng nhớ bắt đầu từ Y: $2000 là vùng nhớ chứa dạng ngôn ngữ hình thức của thư viện tín hiệu điện tim chuẩn. + Vùng nhớ bắt đầu từ Y: $3000 là vùng nhớ chứa dạng ngôn ngữ hình thức của tín hiệu bất bình thường sau khi đã được so sánh với thư viện tín hiệu điện tim chuẩn. Số liệu được lưu giữ liên tiếp trên các vùng nhớ của hai vùng nhớ X và Y. Các vùng nhớ X và Y đều có mối liên hệ với nhau để thuận tiện cho việc lưu giữ và hiển thị số liệu. 2.2. Chương trình phần mềm. 2.2.1. Các lưu đồ thuật toán thực hiện chương trình. • Để thực hiện được các nhiệm vụ: Truyền và thu thập số liệu, xác định chu kì (R-R), nhận dạng, so sánh, lưu giữ tín hiệu và hiển thị kết quả trên máy tính. Chương trình phần mềm viết cho DSP có algorithm cho dưới đây: ---- Giải thích lưu đồ: + Bước đầu tiên phải khởi tạo CS4215, chọn chế độ điều khiển để khởi tạo cho CS4215 cụ thể là ta qui định các thông số cho CS4215 như tần số lấy mẫu ( tần số lấy mẫu của CS4215 ở trong khoảng từ 4 KHz- 50KHz ), số bit trong một frame, tốc độ truyền... + Khi ở chế độ truyền số liệu thì CS4215 thực hiện việc thu tín hiệu tương tự chuyển dạng số và gửi đến DSP để xử lí. Nó hoạt động theo chế độ mà ta đặt trước ở chế độ điều khiển còn trong trường hợp CS4215 ở chế độ truyền số liệu, nó sẽ quy định khung truyền số liệu. Như ta đã biết tín hiệu điện tim chuẩn có tần số biến đổi từ (0.5- 100)Hz. Mà theo định lí lấy mẫu thì tần số lấy mẫu phải lớn hoặc bằng 2 lần tần số cắt của tín hiệu điện tim. Về lí thuyết tần số tín hiệu điện tim có thể tính toán theo công thức : max .2 G XT nm γ= Trong đó : :mT tần số lấy mẫu. 50 :γ sai số yêu cầu. :nX giá trị định mức của đại lượng đo. :maxG gia tốc biến thiên cực đại của tín hiệu đo (đạo hàm bậc hai của quá trình biến thiên). Tính toán tần số lấy mẫu: Thực tế việc tính số điểm lấy mẫu trong một chu kì tín hiệu điện tim được tính toán như sau: Như ta đã trình bày ở chương 1 ÷phần 1, thời gian tồn tại của sóng P là 0,05s ÷ 0,11s; chu kỳ tín hiệu điện tim là 0,9s . Vậy với P = 0,05 ta tính: fmax = Hz2005,0 1 = Theo định lý lấy mẫu và kết hợp với thực tế ta chọn tần số lấy mẫu của tín hiệu điên tim được tăng lên 50 lần: 20 Hz x 50 lần = 1000 Hz. Tần số lấy mẫu thực tế của mạch mã hoá giải mã(đầu vào của tín hiệu điện tim). CS4215 là 8 KHz; 9,6 KHz; 16 KHz; 32 KHz; 48 KHz do đó ta chọn nhỏ nhất là 8 KHz . Chu kỳ lấy mẫu Te = KHz8 1 . Vậy số điểm lấy mẫu trong 1 chu kỳ tín hiệu là : 310.8.9,0 8 1 9,0 = KHz s = 7200 điểm . Cửa sổ ta chọn là 40 đoạn cho 1 chu kỳ lấy mẫu. Vậy ứng với mỗi đoạn lấy mẫu có : 180 40 7200 = (Điểm). + Quá trình thu thập số liệu, xác định chu kì (R-R), nhận dạng và so sánh tín hiệu diễn ra khi CS4215 ở chế độ điều khiển. ở đây, số điểm lấy mẫu được chọn là 7200 điểm ( về nguyên tắc số điểm lấy mẫu có thể tăng lên bao 51 nhiêu tuỳ ý). Khi thu thập đủ 7200 điểm thì bắt đầu tính toán tần số tại điểm tín hiệu có biên độ cực đại. Khi số liệu truyền hết CS4215 quay trở về chế độ điều khiển và quá trình thu thập lại được bắt đầu, quá trình tiếp diễn liên tục. Khi muốn dừng chương trình, sử dụng một tác động từ bên ngoài thông qua phần mềm EVM điều khiển dừng DSP. ------------------------------------------ Chương trình thu thập, xử lý và nhận dạng tín hiệu điện tim được viết bằng ngôn ngữ Assembler 56002. Các chương trình viết cho DSP gồm có : + Macro truyền số liệu + Macro thu thập số liệu + Macro tính tần số max + Macro nhận dạng tín hiệu + Macro so sánh tín hiệu thu được với thư viện tín hiểu chuẩn và lưu giữ số liệu Thành lập thư viện chuẩn : - Phát một chu kỳ tín hiệu điện tim chuẩn n lần theo lý thuyết có thể là 20 lần, ở đây để tăng độ tin cậy ta có thể chọn n = 100 Bước 1: Tìm xác xuất xuất hiện của các dẫy chữ trong n lần phát đầu tiên. Ví dụ : aa bb cccaa lần 1 aa bb cccac lần 2 aa bb cccba lần 3 aa bb cccac lần 4 aa bb cccab lần 5 .. .. .. .. aa bb cccba lần n 52 Bắt đầu Khởi tạo CS4215 Thu thập Đủ số liệu Xác định chu kỳ(R-R) Nhận dạng So sánh với thư viện chuẩn Lưu giữ Hiển thị Chạy tiếp ? Kết thúc Sai Đúng Sai Đúng Đúng Lưu đồ của thiết bị tự động phân tích tín hiệu điện tim 53 Bước 2 : Tìm xác xuất xuất hiện của các dẫy chữ trong n lần phát thứ 2( có thể nhiều hơn càng tốt). Cứ tiếp tục như vậy đến bước thứ 5 sau đó ta chọn ra các dẫy chữ giống nhau nhất có xác xuất xuất hiện lớn nhất ta hợp lại thành một thư viện khoảng 7 đến 8 dẫy chữ( đó là 1 tập hợp có xác xuất xuất hiện nhiều nhất) chuẩn có 8 dạng. Bằng phương pháp trên ta có đã có 1 thư viện , thư viện này sẽ được cất trong bộ nhớ khi ta thực hiện việc phát ra các tín hiệu bất kỳ( tín hiệu chuẩn hoặc tín hiệu lệch ) từ máy phát mô Rông tím hoặc điện tím đưa vào thiết bị tự động phân tích tim hoặc điện tim, sau khi thực hiện việc thu thập, xử lý, nhận dạng, tín hiệu sẽ so sánh lần lượt với từng dạng. Trong 8 dạng đó ở thư viện chuẩn. Nếu tín hiệu trùng với 1 trong 8 dạng đó thì bỏ qua, còn nếu khác thì ghi lại vào bộ nhớ . Để người bác sĩ có thể sử dụng nguồn thông tin về tín hiệu đã thu thập được thì phải cần nối ghép thiết bị tự động phân tích tín hiệu điện tim với máy tính thông qua card truyền thông + phần mềm truyền thông, hiển thị phần này sẽ được cung cấp bởi nhà chế tạo thiết bị. Sau khi phân tích đường cong điện tim đồ, tim ra các dấu hiệu bệnh lý, các bác sĩ chuyên khoa về tim mạch đã tập hợp chúng lại thành những hội chứng điện tim đồ, rồi dựa vào đó mà chuẩn đoán bệnh. Có hai loại hội chứng được xét đến là: - Các hội chứng về hình dạng sóng: Cá bệnh lý làm thay đổi hình dạng điện tim đồ chuẩn. - Các hội chứng về rối loạn nhịp: Các bệnh lý làm thay đổi tần số điện tim đồ chuẩn . Đề tài của luận văn mới chỉ xét tới các bệnh lý làm thay đổi hình dáng của điện tim đồ chuẩn và để giải quyết vấn đề này là bài toán về nhận dạng. 54 Tuyến tính hoá bằng phương pháp bình phương tối thiểu Sai Khởi tạo CS 4215 Thu thập Đủ số liệu Nhận dạng Lưu giữ Kết thúc Đúng LƯU ĐỒ 2: THÀNH LẬP THƯ VIỆN CHUẨN Bắt đầu 55 2.3. Thử nghiệm thiết bị - Máy phát mô phỏng tín hiệu điện tim : Cho máy chạy với nguồn một chiều là pin 9V đã cho được các dạng tín hiệu mô phỏng cho tín hiệu điện tim được kết quả như ở hình 4,5 và 6 (dạng ở hình 6 là để tham khảo). Máy chạy ổn định, tín hiệu ra ít bị ảnh hưởng của các loại nhiễu. Đã ghép nối với Card DSP và chạy chương trình thu thập số liệu. Chương trình thu thập số liệu được viết bằng ngôn ngữ assembler 56002 ở phần phụ lục. Hình 4: Dạng tín hiệu điện tim bình thường do máy phát mô phỏng tạo ra 56 Hình 5: Dạng tín hiệu bệnh thấp tim (PQ dài ra) do máy phát mô phỏng tạo ra . Hình 6: Dạng tín hiệu bệnh tim rung thất do máy phát mô phỏng tạo ra (Dạng tín hiệu này để tham khảo) 57 2.4. Đánh giá chung toàn bộ hệ thống. Dụng cụ tự động phân tích tín hiệu điện tim sử dụng phương pháp nhận dạng tín hiệu là một phương pháp vô cùng quan trọng trong việc xử lý các thông tin đa chiều khi các thông tin này không thể biểu diễn được dưới dạng biểu thức đơn giản hoặc không thể được định nghĩa trước. Ngoài ra mô hình thiết bị còn sử dụng Card DSP 56002EVM là một hệ thống xử lý tín hiệu hoàn chỉnh, với bộ vi xử lý tín hiệu số DSP 56002 của hãng Motorola chế tạo theo công nghệ HCMOS, công suất thấp, 24 bit. Cấu trúc chung của DSP 56002 được xây dựng trên một modul xử lý trung tâm chuẩn và các ngoại vi trên chip. Trong vùng mở rộng xung quanh modul xử lý trung tâm, chip có thể cung cấp nhiều cấu hình bộ nhớ và các modul ngoại vi khác nhau tuỳ thuộc vào từng bộ xử lý. Do đó cấu trúc này có thể làm giảm đến mức tối đa sự phức tạp, giá thành và thời gian trong xử lý tín hiệu số. Dụng cụ tự động phân tích và xử lý tín hiệu điện tim được xây dựng trên cơ sở vi xử lý tín hiệu số có khả năng xử lý tín hiệu trong thời gian thực cho phép chúng ta tiết kiệm đáng kể bộ nhớ của thiết bị. Đây chính là tiền đề cho việc hướng tới chế tạo dụng cụ thực hiện hoàn toàn tự động quá trình phân tích và nhận dạng tín hiệu có thể làm việc với các tín hiệu ECG thực thu thập trên cơ thể người bệnh. Các dụng cụ tự động này không chỉ được dùng trong lĩnh vực y tế, mà còn có thể mở rộng ứng dụng trong các lĩnh vực đo lường khác. 58 PHỤ LỤC Ph? ph??c Ch¬ng tr?h ph? m? vi? cho DSP ;=================================================================== ;SUBPROGRAM hangnvi.asm ;file nµy ®?h ngh? ®? ch?thanh ghi ;=================================================================== IPR equ $FFFF ;Interrupt priority register BCR equ $FFFE ;Bus control register PLL equ $FFFD ;PLL control register SSIDR equ $FFEF ;SSI receive\transmit data register SSISR equ $FFEE ;SSI status register CRB equ $FFED ;SSI control register B CRA equ $FFEC ;-------------------- A PCD equ $FFE5 ;Port C - Data register PBD equ $FFE4 ;Port B - Data register (PBD) PCDDR equ $FFE3 ;Port C - Data direction register PBDDR equ $FFE2 ;Port B - Data direction register PCC equ $FFE1 ;Port C - Control register PBC equ $FFE0 ;Port B - Control register SCCR equ $FFF2 ;SCI clock control register STX1 equ $FFF6 ;SCI transmit register STX2 equ $FFF5 ;-------------------- STX3 equ $FFF4 ;------------------- STX equ $FFF4 ;-------------------- SRX1 equ $FFF6 ;SCI receive register SRX2 equ $FFF5 ;------------------ SRX3 equ $FFF4 ;------------------ SRX equ $FFF4 ;----------------- 59 SCR equ $FFF0 ;SCI interface control register SSR equ $FFF1 ;SCI interface status register TCSR equ $FFDE ;Timer control/status register TCR equ $FFDF ;Timer count register ;=============================================================== ;hangsci.asm ;file ®?h ngh? h»ng s?ho c? SCI ;==================================================================== SCI_IPR_0 EQU $0000 SCI_IPR_1 EQU $4000 ;IPR of SCI , level 0 SCI_IPR_2 EQU $8000 ;IPR of SCI , level 1 SCI_IPR_3 EQU $C000 ;IPR of SCI , level 2 FORMAT_WORD_10 EQU $000002 ;10 bits asynchronous SHIFT_DIR_MSB EQU $000008 ;1 =shift MSB fist ;0 =shift LSB fist SEND_BREAK EQU $000100 ;1 =send zero word WAKEUP_MODE EQU $000200 ;1 =select adress bit wakeup mode ;0 =select idle line wakeup mode RX_WAKEUP_EN EQU $000400 ;1 =receiver wakeup enable WIRE_OR_MODE EQU $000800 ;1 =SCI TXS driver is an open output, ;external pull up register is required RX_ENABLE EQU $000100 ;1 =receiver is enabled TX_ENABLE EQU $000200 ;1 =transmitter is enabled IDLE_INT_EN EQU $000400 ;1 =idle interrupt is enabled RX_INT_EN EQU $000800 ;1 =receive interrupt is enabled TX_INT_EN EQU $001000 ;1 =transmit interrupt is enabled SCI_TIMER_INT_EN EQU $002000 ;1 =timer interrupt is enabled 60 SCI_TIMER_INT_RATE EQU $004000 SCI_CLK_POLARITY EQU $008000 SCLK_OUT_16 EQU $001000 ;1 = SCLK output is a 16 x baud clock ;0 = SCLK output is a 1 x baud clock SCI_CLK_PRE EQU $002000 ;1 = SCI clock divided by 8 ;0 = SCI clock divided by 1 RX_EX_CLK EQU $004000 ;0 = select internal clock for the receiver ;1 = select external clock for the receiver TX_EX_CLK EQU $008000 ;0 =select internal clock for the ransmitter ;1= elect external clock for the transmitter SCI_RATE_625 EQU $000000 ;625.0 KB with Bit rate error percent =0 ; if SCI_CLK_PRE =0 SCI_RATE_56 EQU $00000A ;56.0 KB with Bit rate error percent =+1.46 ; if SCI_CLK_PRE =0 SCI_RATE_38 EQU $00000F ;38.4 KB with Bit rate error percent =+1.72 ; if SCI_CLK_PRE =0 SCI_RATE_19 EQU $000020 ;19.2 KB with Bit rate error percent =-1.36 ; if SCI_CLK_PRE =1 SCI_RATE_9 EQU $000040 ;38.4 KB with Bit rate error percent =+0.16 ; if SCI_CLK_PRE =0 SCI_RATE_4 EQU $000081 ;4.8 KB with Bit rate error percent =+0.15 ; if SCI_CLK_PRE =0 SCI_RATE_2 EQU $000020 ;2.4 KB with Bit rate error percent =-1.38 ; if SCI_CLK_PRE =1 SCI_RATE_1 EQU $000040 ;38.4 KB with Bit rate error percent =+0.08 ; if SCI_CLK_PRE =1 SCI_RATE_0_6 EQU $000081 ;0.6 KB with Bit rate error percent =0 ; if SCI_CLK_PRE =1 61 SCI_RATE_0_3 EQU $000103 ;0.3 KB with Bit rate error percent =0 ; if SCI_CLK_PRE =1 RX_SCI_BUFF EQU $10 TX_SCI_BUFF EQU $11 ;=============================================================== ;hangssi.asm ;file ®?h ngh? h»ng s?ho c? SSI ;================================================================= SSI_IPR_0 equ $0000 SSI_IPR_1 equ $1000 ;IPR of SSI , level 0 SSI_IPR_2 equ $2000 ;IPR of SSI , level 1 SSI_IPR_3 equ $3000 ;IPR of SSI , level 2 NO_PREAMP equ $100000 ;0 == enable 20 dB pre-amp LO_OUT_DRV equ $080000 ;0 == 2.8 Vp-p line (1V rms) ;0 == 4.0 Vp-p headphones ;1 == Line and Headphone 2.0Vp-p HI_PASS_FILT equ $008000 ;0 == HPF disabled SAMP_RATE_9 equ $003800 ; 9.6 kHz sample rate SAMP_RATE_48 equ $003000 ;48 kHz sample rate SAMP_RATE_32 equ $001800 ;32 kHz sample rate SAMP_RATE_27 equ $001000 ;27.4 kHz sample rate SAMP_RATE_16 equ $000800 ;16 ??¿??¨???????????¨???????????¨???????????¨???????????¨?? BITS_128 equ $040000 ;128 bits per frame BITS_256 equ $080000 ;256 bits per frame CODEC_MASTER equ $020000 ;1 == codec generates SCLK & FS ;0 == codec receives SCLK & FS CODEC_TX_OFF equ $010000 ;0 == enable codec TX to DSP ;1 == disable (Hi-Z) codec output 62 HEADPHONE_EN equ $800000 ;1 == headphone output enabled, 0 == muted LINEOUT_EN equ $400000 ;1 == line output enabled, 0 == muted LEFT_ATTN equ $010000 ;63 steps * 1.5 dB = -94.5 dB SPEAKER_EN equ $004000 ;1 == speaker output enabled, 0 == muted RIGHT_ATTN equ $000100 ;63 steps * 1.5 dB = -94.5 dB MIC_IN_SELECT equ $100000 ;1 == A/D inputs from MIC pins NOTE: the ; DSP56002EVM uses these pins. The line ; input pins are not used. LEFT_GAIN equ $010000 ;15 steps * 1.5 dB = 22.5 dB MONITOR_ATTN equ $001000 ;15 steps * 6.0 dB = 90.0 dB (mute) RIGHT_GAIN equ $000100 ;15 steps * 1.5 dB = 22.5 dB CTRL_WD_12 equ NO_PREAMP+HI_PASS_FILT+SAMP_RATE_8+STEREO+DATA_16 ;CLB=0 CTRL_WD_34 equ IMMED_3STATE+XTAL2_SELECT+BITS_64+CODEC_MASTER CTRL_WD_56 equ $000000 CTRL_WD_78 equ $000000 OUTPUT_SET equ HEADPHONE_EN+LINEOUT_EN+(LEFT_ATTN*4) INPUT_SET equ MIC_IN_SELECT+(15*MONITOR_ATTN)+(RIGHT_ATTN*4) STACK_CRA equ $7f0 STACK_CRB equ $7f1 STACK_PCC equ $7f2 STACK_SSISR equ $7f3 ;====================================================================== ;hangctr.asm ;file ®?h ngh? h»ng s?ho ch¬ng tr?h ;====================================================================== START equ $40 stack equ $40 sodiem equ 4096 63 thvao equ $2000 novathvao equ $3000 ;dia chi truyen dang song novakqua equ $3000 ;dia chi truyen dang phoor bang equ $800 kqua equ $1000 dungthu equ 12 dungdao equ 13 ccx equ 100 lae equ $10 heso equ 1 hskp equ 1 bodem equ $80 tamthoi equ $e1 txbuff equ $e0 luong equ 8 hex equ $50 tam1a equ $80 tam2b equ $81 tam3c equ $82 tam4d equ $83 tam5e equ $84 tam6f equ $85 llae equ $a0 ratio equ $a2 ratiotam equ $a3 divaddr equ $a4 ;+2 bangabc equ $b0 only4u equ $c0 64 asciibuff equ $c2 truyenbff equ $c4 novalae equ $f0 novallae equ $f4 relled equ 10000 gioihan equ $f00000 suygiamlae equ 16 ;32 kytwktra equ $5A0000 ;"Z":yeu cau truyen ket qua tinh toan ktwdsong equ $590000 ;"Y":yeu cau truyen dang song vao ktwdphor equ $580000 ;"X":yeu cau truyen dang phoor wavlen equ 1024 ;ddooj daif cuar dang song truyen di speclen equ 1024 ;ddooj daif cuar dang phoor truyen di trengoai equ 99 ;cacs hawngf soos taoj treex tretrong equ 31 ;ddeer truyeenf data chinhs xacs ;======================================================================= ;ktaoctr.asm ;file b¾t ®? ch¬ng tr?h ch?h ;====================================================================== movep #$261009,x:PLL movep #$0000,x:BCR ;mowr bus movep #0,x:PBC ;khowir taoj coongr B I/O song song movep #>$ffff,x:PBDDR ;khowir taoj coongr B: output movep #SCI_IPR_2+SSI_IPR_1,x:IPR ;ddawtj mwcs wu tieen movec #0,sp move #0,omr move #stack,r7 move #-1,m7 ;======================================================================= 65 ;com.asm ;subrutine truy? s?i? ra c? COM khi c?ªu c? ;Ch¬ng tr?h ch?h lu«n g?/FONT>subrutine ;=========================================================== com1 nop move #kytwktra,b move x:RX_SCI_BUFF,a move #txbuff,r5 move #-1,m5 cmp a,b ;kiem tra ky tw yeu cau jne sosanhtiep ;truyen ket qua tinh toan clr a bset #12,x:SCR move a,x:RX_SCI_BUFF do #8,laiii move x:(r5)+,x0 move x0,x:TX_SCI_BUFF do #100,otempt ;taoj treex ddeer truyeenf do #30,tempt ;chinhs xacs jclr #7,x:TCSR,vansan movep x:(r3)+,x:PBD bclr #7,x:TCSR vansan nop tempt nop otempt nop laiii jmp bca ;-------truyen dangj songs--------------------------------------------- 66 sosanhtiep move #ktwdsong,b move #novathvao,r4 cmp a,b ;kiem tra ky tw yeu cau jne bca ;continuez ;truyen dang song move #$542053,x0 ;"T S" move x0,x:truyenbff ;kys twj nhan dang song ;-------------------------------------------- bset #12,x:SCR clr a move a,x:RX_SCI_BUFF do #wavlen,khongtruyennua move x:truyenbff,x0 move x0,x:TX_SCI_BUFF do #trengoai,otempt0 ;taoj treex ddeer do #tretrong,tempt0 ;truyeenf chinhs xacs jclr #7,x:TCSR,vansan0 movep x:(r3)+,x:PBD bclr #7,x:TCSR vansan0 nop tempt0 nop otempt0 nop move x:(r4)+,x0 move x0,x:asciibuff asc asciibuff,truyenbff+1 move x:truyenbff+1,x0 ;truyen 3 byte cao move x0,x:TX_SCI_BUFF do #trengoai,otempt1 ;taoj treex ddeer 67 do #tretrong,tempt1 ;truyeenf chinhs xacs jclr #7,x:TCSR,vansan1 movep x:(r3)+,x:PBD bclr #7,x:TCSR vansan1 nop tempt1 nop otempt1 nop move x:truyenbff+2,x0 ;truyen 3 byte thap move x0,x:TX_SCI_BUFF do #trengoai,otempt2 ;taoj treex ddeer do #tretrong,tempt2 ;truyeenf chinhs xacs jclr #7,x:TCSR,vansan2 movep x:(r3)+,x:PBD bclr #7,x:TCSR vansan2 nop tempt2 nop otempt2 nop khongtruyennua bca nop bclr #12,x:SCR rts ;======================================================================== ;ktao4216.asm ;file kh?t¹o ADC codec4215 ;====================================================================== org x:0 RX_BUFF_BASE equ * RX_data_1_2 ds 1 ;data time slot 1/2 for RX ISR 68 RX_data_3_4 ds 1 ;data time slot 3/4 for RX ISR RX_data_5_6 ds 1 ;data time slot 5/6 for RX ISR RX_data_7_8 ds 1 ;data time slot 7/8 for RX ISR TX_BUFF_BASE equ * TX_data_1_2 ds 1 ;data time slot 1/2 for TX ISR TX_data_3_4 ds 1 ;data time slot 3/4 for TX ISR TX_data_5_6 ds 1 ;data time slot 5/6 for TX ISR TX_data_7_8 ds 1 ;data time slot 7/8 for TX ISR RX_PTR ds 1 ; Pointer for rx buffer TX_PTR ds 1 ; Pointer for tx buffer ;******************************************************* *********** org p: codec_init move #RX_BUFF_BASE,x0 move x0,x:RX_PTR ; Initialize the rx pointer move #TX_BUFF_BASE,x0 move x0,x:TX_PTR ; Initialize the tx pointer ;---------------------------------------------------------------------------- movep #$0000,x:PCC ; turn off ssi port movep #$4303,x:CRA ; 40MHz/16 = 2.5MHz SCLK, WL=16 bits, 4W/F movep #$FB30,x:CRB ; RIE,TIE,RE,TE, NTWK, SYN, FSR/RSR->bit movep #$14,x:PCDDR ; setup pc2 and pc4 as outputs movep #$0,x:PCD ; D/C~ and RESET~ = 0 ==> control mode ;----reset delay for codec ---- do #500,_delay_loop rep #2000 ; 100 us delay nop _delay_loop 69 bset #4,x:PCD ; RESET~ = 1 movep #$01E8,x:PCC ; Turn on ssi port ;--- set up the TX buffer with control mode data move #CTRL_WD_12,x0 move x0,x:TX_BUFF_BASE move #CTRL_WD_34,x0 move x0,x:TX_BUFF_BASE+1 move #CTRL_WD_56,x0 move x0,x:TX_BUFF_BASE+2 move #CTRL_WD_78,x0 move x0,x:TX_BUFF_BASE+3 andi #$FC,mr ; enable interrupts ; CLB == 0 in TX Buffer, wait for CLB == 1 in RX Buffer jclr #3,x:SSISR,* ; wait until rx frame bit==1 jset #3,x:SSISR,* ; wait until rx frame bit==0 jclr #3,x:SSISR,* ; wait until rx frame bit==1 jset #18,x:RX_BUFF_BASE,* ; loop until CLB set ; CLB == 1 in RX Buffer, send 4 frames and then disable SSI bset #18,x:TX_BUFF_BASE ;set CLB do #4,_init_loopB ; Delay as 4 full frames to pass jclr #2,x:SSISR,* ; wait until tx frame bit==1 jset #2,x:SSISR,* ; wait until tx frame bit==0 _init_loopB movep #0,x:PCC ;reset SSI port (disable SSI...) ; now CLB should be 1 -- re-program fsync and sclk direction to input movep #$FB00,x:CRB ; rcv,xmt&int ena,netwk,syn,sclk==inp,msb 1st movep #$14,x:PCD ; D/C~ pin = 1 ==> data mode 70 movep #$01EB,x:PCC ; turn on ssi port (enable SSI now...) ;================================================================= ;txrx.asm ;subrutine thu th? s?i? qua c? SSI t??dec 4215 ;====================================================================== ssi_rx_isr move r0,y:(r7)+ move m0,y:(r7)+ move #3,m0 move x:RX_PTR,r0 jclr #3,x:SSISR,next_rx move #RX_BUFF_BASE,r0 nop next_rx movep x:SSIDR,x:(r0)+ move r0,x:RX_PTR move y:-(r7),m0 move y:-(r7),r0 rti ;-------------------------------------------------------------------- ssi_tx_isr move r0,y:(r7)+ move m0,y:(r7)+ move #3,m0 move x:TX_PTR,r0 jclr #2,x:SSISR,next_tx move #TX_BUFF_BASE+1,r0 nop 71 next_tx movep x:(r0)+,x:SSIDR move r0,x:TX_PTR move y:-(r7),m0 move y:-(r7),r0 rti ;====================================================================== ;subrutine nh? vµ ph¸t s?i? b»ng RS232 qua c? SCI ;====================================================================== sci_rx_isr jclr #2,x:SSR,* ;if receive data register full ->wait movep x:SRX1,x:RX_SCI_BUFF ;if- - empty, chuyen data toi dem nhan nop rti ;-------------------------------------------------------------------- sci_tx_isr jclr #1,x:SSR,* ;if transmit data register full ->wait movep x:TX_SCI_BUFF,X:STX1 ;if ------------------- empty chuyen ;data toi thanh ghi truyen jclr #1,x:SSR,* movep x:TX_SCI_BUFF,X:STX2 jclr #1,x:SSR,* movep x:TX_SCI_BUFF,X:STX3 nop rti ;====================================================================== ;thuthap.asm ;macro thu th? s?i? th??P> 72 ;====================================================================== thuthap macro dungthu jset #2,x:SSISR,* jclr #2,x:SSISR,* clr a ;sua move x:RX_BUFF_BASE,a nop asr a asr a clr b move a,x:(r2) move b,y:(r2)+ jsr com1 ;kieemr tra yeeu caauf gwir data qua RS232 move #TONE_OUTPUT,y0 move y0,x:TX_BUFF_BASE+2 move #TONE_INPUT,y0 move y0,x:TX_BUFF_BASE+3 nop jsr com1 jclr #dungthu,r2,tieo ;12 endm ;=============================================================== ;cong3037.asm ;subrutine chuyen doi hex sang ascii ;e.g: A ->$41, 5 ->$35 ;================================================================ cong3037 move n3,y:(r7)+ 73 move a1,n3 jclr #3,n3,cong30 jset #2,n3,cong37 jclr #1,n3,cong30 nop cong37 move #>$37,x0 nop add x0,a jmp hetcong cong30 move #>$30,x0 nop add x0,a hetcong nop move y:-(r7),n3 rts ;====================================================================== ;macro sao cheps tins hieeuj vaof sang mootj vungf ;ddeemj ddeer truyeenf leen RS232 khi cos yeeu caauf ;====================================================================== dgsong macro thvao,novathvao,wavlen ;thvao :ddiaj chir ddaauf cuar tins hieeuj vaof ;novathvao :ddiaj chir ddaauf cuar tins hieeuj copy ;wavlen :ddooj daif mangr tins hieeuj move #thvao,r4 move #-1,m4 move #novathvao,r5 move #-1,m5 do #wavlen,ketthuc 74 move x:(r4)+,x0 move x0,x:(r5)+ nop ketthuc nop endm ;====================================================================== ;MACRO asc.asm ;MACRO chuy? s?i? sang d¹ng ASCII ;bodem soos lieeuj caanf chuyeenr ddooir ;tamthoi k? qu¶ , 3 byte cao = $e1 ;tamthoi+1 k? qu¶ 3 byte th? ;====================================================================== asc macro bodem,tamthoi move sr,n6 move r1,y:(r7)+ ;cat r1 va m1 move m1,y:(r7)+ ori #3,mr ;**a****************************************************************** clr a move #$f00000,x0 move x:bodem,a nop and x0,a rep #20 lsr a nop jsr cong3037 ;subrutine chuyen doi hex ->ascii 75 nop rep #16 lsl a nop move a1,x:tam1a ;tam1a = $80 ;**b******************************************************************* clr a move #>$f0000,x0 move x:bodem,a nop and x0,a rep #16 lsr a nop jsr cong3037 nop rep #8 lsl a nop move a1,x:tam2b ;tam2b = $81 ;**c******************************************************************** clr a move #>$f000,x0 move x:bodem,a nop and x0,a rep #12 lsr a 76 nop jsr cong3037 nop move a1,x:tam3c ;tam3c =$82 ;**d******************************************************************** clr a move #>$f00,x0 move x:bodem,a nop and x0,a rep #8 lsr a nop jsr cong3037 nop rep #16 lsl a nop move a1,x:tam4d ;tam4d = $83 ;**e******************************************************************* clr a move #>$f0,x0 move x:bodem,a nop and x0,a rep #4 lsr a nop 77 jsr cong3037 nop rep #8 lsl a nop move a1,x:tam5e ;tam5e = $84 ;**f******************************************************************** clr a move #>$f,x0 move x:bodem,a nop and x0,a nop jsr cong3037 nop move a1,x:tam6f ;tam6f = $85 ;******************************************************************** clr a move x:tam1a,a move x:tam2b,x0 nop add x0,a move x:tam3c,x0 nop add x0,a nop move a,x:tamthoi clr a 78 move x:tam4d,a move x:tam5e,x0 nop add x0,a move x:tam6f,x0 nop add x0,a nop move a,x:tamthoi+1 move y:-(r7),m1 ;tra lai m1 va r1 move y:-(r7),r1 move n6,sr endm ;====================================================================== ;Ch¬ng tr?h ch?h ;====================================================================== include 'hangnvi.asm' include 'hangssi.asm' include 'hangsci.asm' include 'hangctr.asm' include 'hangtime.asm' ;hang timer include 'thuthap.asm' include 'dgsong.asm' include 'maxm.asm' include 'asc.asm' ;****************************************************************************** org p:0 jmp START 79 org p:$000C jsr ssi_rx_isr jsr ssi_rx_isr jsr ssi_tx_isr jsr ssi_tx_isr jsr sci_rx_isr jsr sci_rx_isr jsr sci_tx_isr nop org p:$003C jsr timer_isr ;ngat timer nop ;****************************************************************************** org p:START movep #0,x:IPR include 'ktaoctr.asm' include 'daucuoi2.asm' include 'ktao4215.asm' movep #relled,x:TCR ;nap gia tri counter bclr #3,x:TCSR ;chuc nang GPIO bclr #4,x:TCSR ;cac bit dieu khien timer bclr #5,x:TCSR ; bset #0,x:TCSR ;timer enable bset #6,x:TCSR ;bit GPIO bset #17,x:IPR bset #16,x:IPR andi #$fc,mr 80 bset #1,x:TCSR ;Interrupts enabled ;****************************************************************** TONE_OUTPUT EQU HEADPHONE_EN+LINEOUT_EN+(4*LEFT_ATTN)+(4*RIGHT_ATTN) ;TONE_INPUT EQU MIC_IN_SELECT+(15*RIGHT_GAIN)+(15*LEFT_GAIN) TONE_INPUT EQU MIC_IN_SELECT+(15*MONITOR_ATTN) SCI_CTRL_WR EQU FORMAT_WORD_10+TX_ENABLE+RX_ENABLE+RX_INT_EN SCI_CLK_WR EQU SCI_RATE_9 movep #>SCI_CTRL_WR,x:SCR movep #SCI_CLK_WR,x:SCCR move #thvao,r2 move #-1,m2 move #8,m3 move #$200,r4 move #$1ff,m4 tiept nop thuthap dungthu ;,thvao dgsong thvao,novathvao,wavlen asc llae,tamthoi asc llae+1,tamthoi+2 move #thvao,r2 move #-1,m2 move #8,m3 tieo nop jmp tiept ;-------------------------------------------------------------------------- include 'cong3037.asm' include 'com.asm' include 'txrx.asm' 81 end KẾT LUẬN Bản đồ án này đã trình bày đầy đủ về cơ sở lý thuyết cũng như thiết kế dụng cụ tự động phân tích tín hiệu điện tim trên cơ sở DSP56002. Trong thời gian làm đồ án tôi đã hoàn thành được những công việc sau: • Tìm hiểu về tín hiệu điện tim, các chuyển đạo và các tín hiệu bệnh phục vụ cho mục đích thiết kế dụng cụ tự động phân tích tín hiệu điện tim. • Tìm hiểu về phương pháp nhận dạng tín hiệu điện tim và các thiết bị ghi điện tim đã được sử dụng trên thị trường • Thiết kế và chế tạo dụng cụ tự động phân tích tín hiệu điện tim trên cơ sở sử dụng bộ vi xử lý tín hiệu số DSP56002 do hãng Motorola sản xuất có sẵn trong bộ môn, thực hiện thu thập tín hiệu bất bình thường khác. • Thiết kế chế tạo được máy phát mô phỏng tín hiệu điện tim bình thường và một số loại bệnh. Các phần việc cần làm tiếp theo để hoàn thiện thiết bị như: nhận dạng,lập thư viện chuẩn và thử nghiệm trên người bệnh cần một thời gian nghiên cứu và thực nghiệm nhiều hơn. Trong thời gian tới, nếu có điều kiện tôi sẽ nghiên cứu để hoàn thiện và mở rộng một số tính năng của thiết bị. Với các ứng dụng của thiết bị này sẽ là tiền đề cho việc hướng tới chế tạo dụng cụ thực hiện hoàn toàn tự động quá trình phân tích và nhận dạng tín hiệu có thể làm việc với các tín hiệu ECG thực thu thập trên cơ sở người bệnh thay thế cho phương pháp Holter đang được sử dụng hiện nay. Các dụng cụ tự động này không chỉ được dùng trong lĩnh vực y tế, mà còn có thể mở rộng ứng dụng trong các lĩnh vực đo lường khác. 82 TÀI LIỆU THAM KHẢO 1, DSP56002 Digital Signal Processor Family Manual , 1993. 2, Mohamed EI-Shakawy : Digital Signal Processor Applications with Motorola’s DSP 56002 Processor. 3, GS. TS.Trần Đỗ Trinh; ThS. Trần Văn Đồng : Hướng dẫn đọc điện tim , 2002. 4, GS. TS.Trần Đỗ Trinh; ThS. Trần Văn Đồng : Điện tâm đồ trong lâm sàng , 1972. 5, TS Phạm Ngọc Yến : Dụng cụ tự động phân tích tín hiệu điện tim . 6, PGS TS Phạm Thượng Hàn : Xử lí tín hiệu số . 7, Berrtil Jacobson , John G.Webster : Medicine and Clinical Engineering , 1979 8, Hoàng Kiếm : Tìm hiểu về nhận dạng , 1977.

Các file đính kèm theo tài liệu này:

  • pdfmay_dien_tim_83_0745.pdf