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
82 trang |
Chia sẻ: banmai | Lượt xem: 1997 | Lượt tải: 1
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:
- may_dien_tim_83_0745.pdf