MỤC LỤC
Mở đầu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Chương 1. GIỚI THIỆU TỔNG QUAN VỀ ĐỀTÀI
1.1 Lý do chọn đềtài . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Sơlược vềmáy phân tích đa kênh . . . . . . . . . . . . . . . . . . . . . . . . . 3
Chương 2. TỒNG QUAN VI ĐIỀU KHIỂN PIC18F2455/2550/4455/4550
2.1 Giới thiệu vi điều khiển PIC18F2455/2550/4455/4550. . . . . . . . . . 5
2.2 Giao động xung nhịp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 Bộnhớ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 Khối timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Khối CAPTURE/SO SÁNH/PWM . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.6 Khối CAPTURE/SO SÁNH/PWM nâng . . . . . . . . . . . . . . . . . . . . . . 13
2.7 Khối USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.8 Cổng song song streaming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.9 Khối truyền nối tiếp đồng bộchủMSSP . . . . . . . . . . . . . . . . . . . . . . 16
2.10 Thu phát bất đồng bộ đa năng nâng cao EUSART. . . . . . . . . . . . . . 17
2.11 Khối biến đổi AD 10 bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.12 Khối so sánh điện áp tương tự. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.13 Khối tham chiếu điện áp so sánh . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.14 Khối phát hiện điện áp cao/thấp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.15 Ngắt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.16 Các chi tiết đặc biệt họPIC18F2455/2550/4455/4550 . . . . . . . . . . . . 22
Chương 3. CỔNG USB
3.1 Cổng USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2 Mô hình BUS USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3 Các kiểu truyền USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.4 Giao diện vật lý BUS USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.5 Giao thức truyền . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.6 Các quá trình truyền USB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.7 Điểm danh và gói phần mềm điều khiển . . . . . . . . . . . . . . . . . . . . . . . . 36
3.8 Một sốvi mạch sửdụng trong kết nối USB . . . . . . . . . . . . . . . . . . . . . . 41
3.9 Các mạch chuyển đổi USB sang RS232 . . . . . . . . . . . . . . . . . . . . . . . . . 43
Chương 4. THIẾT KẾVÀ CHẾTẠO CÁC KHỐI CHỨC NĂNG
4.1 Khối cao thế. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.2 Khối khuếch đại phổvà khối phát xung điều khiển ADC . . . . . . . . . 45
4.3 Khối logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.4 Khối nguồn nuôi thếthấp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Chương 5. CÁC GIẢI THUẬT PHẦN MỀM
5.1 Giải thuật đóng – mởvà điều khiển điện áp cao áp, điều khiển hệsốkhuếch
đại khối khuếch đại . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.2 Giải thuật hiển thịphổ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3 Giải thuật làm trơn phổ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.4 Giải thuật lấy tích phân và hiển thịmiền lấy tích phân . . . . . . . . . . . . . 62
5.5 Giải thuật lấy diện tích hình thang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.6 Giải thuật chuẩn hóa năng lượng cho phổ. . . . . . . . . . . . . . . . . . . . . . . 64
5.7 Giải thuật đo thời gian chết phần trăm . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.8 Mã nguồn lưu file, mởfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Chương 6. ĐO CÁC ĐẶC TRƯNG CỦA PHẦN CỨNG
6.1 Độphi tuyến tích phân và độphi tuyến vi phân . . . . . . . . . . . . . . . . . 71
6.2 Độphân giải . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.3 Độtrôi đỉnh phổ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.4 Thời gian chết trên một xung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.5 Độtrôi hệsốkhuếch đại phổ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
6.6 Độtrôi mức zero của khuếch đại phổ. . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.7 Các đặc trưng khối cao áp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.8 Các đặc trưng khối nguồn nuôi điện áp thấp . . . . . . . . . . . . . . . . . . . . . 73
6.9 So sánh các đặc trưng MCA chếtạo và CANBERRA series 30. . . . . . . 73
Chương 7. CÁC KẾT QUẢTHIẾT KẾPHẦN MỀM
7.1 Phần mềm và các kết quả đo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.2 Hiển thịphổ ở3 chế độ: toàn giải, nửa giải cao, nửa giải thấp . . . . . . . 74
7.3 Tính năng tính tích phân và diện tích hình thang giữa 2 vịtrí
con trỏ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.4 Công cụlàm trơn phổ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.5 Công cụchuẩn hóa năng lượng . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
7.6 Tính năng lưu phổ, mởphổ. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
KẾT LUẬN. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
Tài liệu tham khảo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Phụlục . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
146 trang |
Chia sẻ: netpro | Lượt xem: 1698 | Lượt tải: 4
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy vi tính qua cổng USB, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
C=12V
X1 20MHz
RB5
VDD=5V
CTL- HV
U8 PIC18F4550
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
MCLR/Vpp/RE3
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/TOCKI
RA5/SS
RE0/RD
RE1/WR
RE2/CS
VDD
Vss
OSC1/CLKIN
OSC2/CLKOUT
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
VUSB
RD0/PSP0
RD1/PSP1 RD2/PSP2
RD3/PSP3
RC4/D-/VM
RC5/D+/VP
RC6/TX/CK
RC7/RX/DT
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
Vss
VDD
RB0/INT
RB1
RB2
RB3
RB4
RB5
RB6
RB7
U9
+
-
U10B
LM324A
5
6
7
4
11
RD5C23
20pF
RB4 U10
POT10
1
3
2
C24
100nF
-VCC=-12V
VDD=5V
C22
20pF
-VCC=-12V
AN0
R37
4.7K
MCP41010
CS
SCK
SI
Vss
VDD
B
W
A
VDD=5V
VDD=5V
VCC=12V
Hình 4.4 Sơ đồ nguyên lý khối logic.
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 48
Các đặc trưng thiết kế khối logic:
- Cổng USB thiết kế hoạt động ở mode full speed.
4.4 KHỐI NGUỒN NUÔI ĐIỆN ÁP THẤP
C30
C28
C31
0VAC
D15 1N4007
D16 1N4007
OUTPUT 5VR38
T21 5
6
4 8
C27
D17 1N4007
220V
R39
C26
U13
LM7912
1
2
3
VI
G
N
D VO
AC
C32
C33
15VAC
U12
LM7805
1
2
3
VI
G
N
D
VO
OUTPUT 12V
D14 1N4007
T3
1
5
4
8
U11
LM7812
1
2
3
VI
G
N
D
VO
C29
OUTPUT -12V15VAC
Hình 4.5 Sơ đồ nguyên lý khối nguồn nuôi điện áp thấp
Khối nguồn nuôi điện áp thấp được xây dựng trên biến áp hạ áp T2
220VAC/15VAC, 15VAC, 40VA . Các linh kiện R38, R39, T3,C26, C27, C28 tạo thành
bộ lọc điện lưới (line filter). Chỉnh lưu 2 bán kỳ điện áp dương: D14; D15; C29. Ổn áp
12V, 5V nhờ IC U11 và U12. Chỉnh lưu 2 bán kỳ điện áp âm: D16; D17; C30. Ổn áp -12V
nhờ IC U13.
Các đặc trưng thiết kế khối nguồn nuôi điện áp thấp:
- Dòng cực đại lối ra +12V, -12V, +5V là 1A
- Công suất tiêu thụ cực đại khối nguồn nuôi: 30VA
- Điện áp lối vào 220VAC 20%
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 49
CHƯƠNG 5. CÁC GIẢI THUẬT PHẦN MỀM
5.1 Giải thuật đóng – mở và điều khiển điện áp cao áp, điều khiển hệ số khuếch đại
khối khuếch đại
Máy vi tính điều khiển cho vi điều khiển tại máy phân tích bằng cách gửi 2 byte qua
cổng USB, byte thứ nhất tạm gọi là mã lệnh để ra lệnh cho vi điều khiển làm công việc gì,
byte thứ 2 là dữ liệu công việc cần điều khiển. Sau đây là bảng tổng kết quy ước các byte
điều khiển chuyển từ máy tính đến vi điều khiển.
Công việc điều khiển Byte thứ nhất (mã lệnh)
(dạng số thập phân)
Byte thứ hai (dữ liệu)
(dạng số thập phân)
Đóng – mở cao áp 01 0: tắt cao áp
1: mở cao áp
Điều khiển điện áp cao áp 02 0 - 255
Điều khiển hệ số khuếch đại
khối khuếch đại
03 0-255
Bảng 5.1 Bảng tổng kết quy ước các byte điều khiển chuyển từ máy tính đến vi
điều khiển.
Đóng – mở cao áp: Khi vi điều khiển nhận byte thứ nhất số 01, byte thứ hai số 0, vi
điều khiển xuất ra mức cao bit RD5 làm Q5 (mạch cao thế) dẫn, kéo theo Q1, Q2 ngưng
dẫn làm mất điện áp nuôi cho biến áp xung T1 (mạch cao thế) và tắt cao áp. Ngược lại,
byte thứ hai số 1, vi điều khiển xuất ra mức thấp bit RD5 làm Q5 ngưng, kéo theo Q1, Q2
dẫn, có điện áp nuôi cho biến áp xung T1 , có cao áp.
Điều khiển điện áp cao áp: Khi vi điều khiển nhận byte thứ nhất là số 2, byte thứ
là con số 0-255, vi điều khiển lấy dữ liệu ở byte thứ hai điều khiển biến trở số U9-
MCP41010 bằng giao thức SPI (tại mạch logic). MCP41010 là biến trở số 10 . Khi dữ
liệu byte thứ hai là 255, điểm giữa W của biến trở số đi về điểm A và có điện thế bằng 5V,
điện thế lối ra này được đệm bởi U10-LM324 (tại mạch logic) tương ứng với điện thế cao
áp lối ra cực đại là 2 kV. Từ 0V đến 2KV được chia thành 255 bước, mỗi bước ứng với
8V.
KW
Mã nguồn đóng/mở cao áp và điều chỉnh cao áp
Private Sub CmdHVon-off_Click() ‘ nút lệnh on/off cao áp
If Command2.Caption = "OFF" Then
Command2.Caption = "ON"
Command1.Enabled = True
If Not MyDeviceDetected Then
MyDeviceDetected = FindTheHid
End If
If MyDeviceDetected Then
OutputReportData(0) = 2
If HScroll1.Value <= 125 Then
OutputReportData(1) = 2 * HScroll1.Value
Else
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 50
OutputReportData(1) = 250
End If
OutputReportData(2) = 255
OutputReportData(3) = 255
OutputReportData(4) = 255
OutputReportData(5) = 255
OutputReportData(6) = 255
OutputReportData(7) = 255
Call ReadAndWriteToDevice
End If
Label3.Caption = Str(8 * HScroll1.Value) + "V"
Else
Command2.Caption = "OFF"
Command1.Enabled = False
If Not MyDeviceDetected Then
MyDeviceDetected = FindTheHid
End If
If MyDeviceDetected Then
OutputReportData(0) = 2
OutputReportData(1) = 0
OutputReportData(2) = 255
OutputReportData(3) = 255
OutputReportData(4) = 255
OutputReportData(5) = 255
OutputReportData(6) = 255
OutputReportData(7) = 255
Call ReadAndWriteToDevice
End If
Label3.Caption = "0V"
End If
End Sub
Private Sub HScrollHV_Change() ‘thanh cuốn đặt cao áp
'High Voltage
If Not MyDeviceDetected Then
MyDeviceDetected = FindTheHid
End If
If MyDeviceDetected Then
If Label10.Caption = "HV ON" Then
OutputReportData(0) = 2
If HScroll1.Value <= 125 Then
OutputReportData(1) = 2 * HScroll1.Value
Else
OutputReportData(1) = 250
End If
OutputReportData(2) = 255
OutputReportData(3) = 255
OutputReportData(4) = 255
OutputReportData(5) = 255
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 51
OutputReportData(6) = 255
OutputReportData(7) = 255
Call ReadAndWriteToDevice
Else
OutputReportData(1) = 0
OutputReportData(2) = 255
OutputReportData(3) = 255
OutputReportData(4) = 255
OutputReportData(5) = 255
OutputReportData(6) = 255
OutputReportData(7) = 255
Call ReadAndWriteToDevice
End If
End If
Label3.Caption = Str(8 * HScroll1.Value) + "V"
End Sub
Điều khiển hệ số khuếch đại khối khuếch đại: Khi vi điều khiển nhận byte thứ
nhất là số 3, byte dữ liệu thứ hai vi điều khiển dùng để điều khiển biến trở số U5 (tại mạch
khuếch đại). Hệ số khuếch đại của U2 (tại mạch khuếch đại) tính theo công thức sau:
18 WBV
17 WA
R RA 1
R R
+= + +
Mã nguồn điều khiển hệ số khuếch đại khối khuếch đại
Private Sub HScrollAmp_Change() ‘thanh cuốn đặt hệ số khuếch đại
'amplifier gain
If Not MyDeviceDetected Then
MyDeviceDetected = FindTheHid
End If
If MyDeviceDetected Then
OutputReportData(0) = 4
OutputReportData(1) = HScroll2.Value
OutputReportData(2) = 255
OutputReportData(3) = 255
OutputReportData(4) = 255
OutputReportData(5) = 255
OutputReportData(6) = 255
OutputReportData(7) = 255
Call ReadAndWriteToDevice
End If
Label4.Caption = Str(0.063 * HScroll2.Value + 26) + "db"
End Sub
5.2 Giải thuật hiển thị phổ: Một điểm phổ tượng trưng bởi một điểm (Shape1(i)), độ cao
là hàm của số đếm M(i) và giá trị thanh cuốn Vscroll1.
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 52
Hình 5.1 Lưu đồ thuật toán đo và hiển thị phổ.
Các đoạn mã nguồn hiển thị phổ
Private Sub Form_Load() ‘ hiển thị phổ lúc form-load
Dim i As Integer
Line4.Visible = False
For i = 0 To 1023
Shape1(i).Height = 40
Shape1(i).Width = 40
Shape1(i).Left = 400 + i * 15
Shape1(i).Top = 5800
Next
Option1.Value = True
Option4.Value = True
Command1.Caption = "START"
Command1.Enabled = False
Timer1.Enabled = False
Label10.Caption = "HV OFF"
Label10.ForeColor = &H0&
Image1.Left = 300
Image1.Top = 4750
Line2.X1 = 540
Line2.X2 = 540
Line2.Y1 = 5800
Line2.Y2 = 5200
Image2.Left = 800
Image2.Top = 4750
Line1.X1 = 1040
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 53
Line1.X2 = 1040
Line1.Y1 = 5800
Line1.Y2 = 5200
S = 0
Hr = 0
Mn = 0
End Sub
Private Sub VScroll1_Change() ‘ hiển thị phổ lúc kéo thanh cuốn tăng giảm chiều ‘cao phổ
If FlagInt = True Or FlagTra = True Then
Line4.Visible = False
FlagTra = False
For i = 0 To 1023
Line3(i).Visible = False
Next
FlagInt = False
End If
For i = 0 To 1023
Shape1(i).Top = 5800 - VScroll1.Value * M(i)
Next
Image2.Top = Shape1(Vtt2).Top - 1000
Line1.Y1 = Shape1(Vtt2).Top
Line1.Y2 = Shape1(Vtt2).Top - 600
Image1.Top = Shape1(Vtt1).Top - 1000
Line2.Y1 = Shape1(Vtt1).Top
Line2.Y2 = Shape1(Vtt1).Top - 600
End Sub
Private Sub Option1_Click() ‘ tùy chọn full scale
'Full Scale
If FlagInt = True Or FlagTra = True Then
Line4.Visible = False
FlagTra = False
For i = 0 To 1023
Line3(i).Visible = False
Next
FlagInt = False
End If
For i = 0 To 1023
Shape1(i).Left = 400 + i * 15
Shape1(i).Visible = True
Next
End Sub
Private Sub Option2_Click() ‘ tùy chọn low half scale
'Low Half Scale
If FlagInt = True Or FlagTra = True Then
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 54
Line4.Visible = False
FlagTra = False
For i = 0 To 1023
Line3(i).Visible = False
Next
FlagInt = False
End If
For i = 0 To 511
Shape1(i).Left = 400 + i * 30
Shape1(i).Visible = True
Shape1(i + 512).Visible = False
Next
End Sub
Private Sub Option3_Click() ‘tùy chọn high half scale
'High Half Scale
If FlagInt = True Or FlagTra = True Then
Line4.Visible = False
FlagTra = False
For i = 0 To 1023
Line3(i).Visible = False
Next
FlagInt = False
End If
For i = 512 To 1023
Shape1(i).Left = -14960 + i * 30
Shape1(i).Visible = True
Shape1(i - 512).Visible = False
Next
End Sub
Private Sub Timer1_Timer() ‘cập nhật phổ
tempL = ReadBuffer(2) ' byte thap
tempH = ReadBuffer(3) ' byte cao
tempLo = tempL
tempHo = tempH
Ch = tempH * 256 + tempL
If Ch > 30 Then 'cat cac kenh thap
M(Ch) = M(Ch) + 1
Shape1(Ch).Top = 5800 - VScroll1.Value * M(Ch)
End If
End Sub
Đoạn mã nguồn kéo con trỏ 1 và 2
Private Sub Image1_MouseMove(Button As Integer, Shift As Integer, x As Single, y As
Single)
Dim j As Integer
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 55
Dim k, c, Akev, Bkev As Double
Dim tamAkev As String
If Button = 1 Then
If FlagInt = True Or FlagTra = True Then
Line4.Visible = False
FlagTra = False
For i = 0 To 1023
Line3(i).Visible = False
Next
FlagInt = False
End If
If ((Image1.Left >= 200) And (Image1.Left <= 15600)) Then
Image1.Move Image1.Left + x - 180, 5000 'Image2.Top + Y - 100
If Option1.Value = True Then
For j = 0 To 1023
If (Abs(Image1.Left + x - Shape1(j).Left) < 40) Then
Image1.Top = Shape1(j).Top - 1000
Line2.X1 = Shape1(j).Left
Line2.X2 = Shape1(j).Left
Line2.Y1 = Shape1(j).Top
Line2.Y2 = Shape1(j).Top - 600
If Label24.Caption = "Cal" Then
Label9.Caption = Str(M(j)) + "/" + Str(Format(Kev(j), "00.000"))
Else
Label9.Caption = Str(M(j)) + "/" + Str(j)
End If
Vtt1 = j
End If
Next
End If
If Option2.Value = True Then
For j = 0 To 511
If (Abs(Image1.Left + x - Shape1(j).Left) < 40) Then
Image1.Top = Shape1(j).Top - 1000
Line2.X1 = Shape1(j).Left
Line2.X2 = Shape1(j).Left
Line2.Y1 = Shape1(j).Top
Line2.Y2 = Shape1(j).Top - 600
Label9.Caption = Str(M(j)) + "/" + Str(j)
Vtt1 = j
End If
Next
End If
If Option3.Value = True Then
For j = 512 To 1023
If (Abs(Image1.Left + x - Shape1(j).Left) < 40) Then
Image1.Top = Shape1(j).Top - 1000
Line2.X1 = Shape1(j).Left
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 56
Line2.X2 = Shape1(j).Left
Line2.Y1 = Shape1(j).Top
Line2.Y2 = Shape1(j).Top - 600
Label9.Caption = Str(M(j)) + "/" + Str(j)
Vtt1 = j
End If
Next
End If
Else
If Image1.Left < 200 Then
Image1.Left = 220
End If
If Image1.Left > 15600 Then
Image1.Left = 15500
End If
End If
Label17.Caption = ""
Label19.Caption = ""
End If
End Sub
Private Sub Image2_MouseMove(Button As Integer, Shift As Integer, x As Single, y As
Single)
Dim j As Integer
Dim k, c, Akev, Bkev As Double
Dim tamAkev As String
If Button = 1 Then
If FlagInt = True Or FlagTra = True Then
Line4.Visible = False
FlagTra = False
For i = 0 To 1023
Line3(i).Visible = False
Next
FlagInt = False
End If
If ((Image2.Left >= 200) And (Image2.Left <= 15600)) Then
Image2.Move Image2.Left + x - 180, 5000 'Image2.Top + Y - 100
If Option1.Value = True Then
For j = 0 To 1023
If (Abs(Image2.Left + x - Shape1(j).Left) < 40) Then
Image2.Top = Shape1(j).Top - 1000
Line1.X1 = Shape1(j).Left
Line1.X2 = Shape1(j).Left
Line1.Y1 = Shape1(j).Top
Line1.Y2 = Shape1(j).Top - 600
If Label24.Caption = "Cal" Then
Label8.Caption = Str(M(j)) + "/" + Str(Format(Kev(j), "00.000"))
Else
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 57
Label8.Caption = Str(M(j)) + "/" + Str(j)
End If
Vtt2 = j
End If
Next
End If
If Option2.Value = True Then
For j = 0 To 511
If (Abs(Image2.Left + x - Shape1(j).Left) < 40) Then
Image2.Top = Shape1(j).Top - 1000
Line1.X1 = Shape1(j).Left
Line1.X2 = Shape1(j).Left
Line1.Y1 = Shape1(j).Top
Line1.Y2 = Shape1(j).Top - 600
Label8.Caption = Str(M(j)) + "/" + Str(j)
Vtt2 = j
End If
Next
End If
If Option3.Value = True Then
For j = 512 To 1023
If (Abs(Image2.Left + x - Shape1(j).Left) < 40) Then
Image2.Top = Shape1(j).Top - 1000
Line1.X1 = Shape1(j).Left
Line1.X2 = Shape1(j).Left
Line1.Y1 = Shape1(j).Top
Line1.Y2 = Shape1(j).Top - 600
Label8.Caption = Str(M(j)) + "/" + Str(j)
Vtt2 = j
End If
Next
End If
Else
If Image2.Left < 200 Then
Image2.Left = 220
End If
If Image2.Left > 15600 Then
Image2.Left = 15500
End If
End If
Label17.Caption = ""
Label19.Caption = ""
End If
End Sub
5.3 Giải thuật làm trơn phổ: Mỗi đoạn phổ ngắn có thể xem như một đa thức toán học.
Giá trị của đa thức và đạo hàm của nó có thể xem như là hàm của số đếm trong mỗi kênh
của phổ và cho bởi công thức sau [3]:
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 58
=-
= åmn,m k,n,m
k mn,m
1Y (i) C y(i k)
N
+ (5.1)
Với là đạo hàm bậc n của phổ làm trơn tại kênh i n,mY (i)
là số đếm tại kênh thứ (i+k) +y(i k)
và là các hằng số cho trong bảng (3.2) k,n,mC n,mN
m liên hệ với số điểm làm trơn m’ là: m’= 2m+1
Số điểm tối ưu dùng làm trơn phụ thuộc vào dạng cụ thể của vùng phổ đang xét.
r n m’ n,mN k
0 1 2 3 4 5 6 7 k,n,mC
2
3
0 5
7
9
11
13
15
35
21
231
429
143
1105
17
7
59
89
25
167
12
6
54
84
24
162
-3
3
39
69
21
147
-2
14
44
16
122
-21
9
9
87
-36
0
42
-11
-13
-78
k,n,mC
2 1 5
7
9
11
13
15
10
28
60
110
182
280
0
0
0
0
0
0
1
1
1
1
1
1
2
2
2
2
2
2
3
3
3
3
3
4
4
4
4
5
5
5
6
6
7
k,n,mC
3 1 5
7
9
11
13
15
12
252
1188
5148
24024
334152
0
0
0
0
0
0
8
58
126
296
832
7506
-1
67
193
503
1489
13843
-22
142
532
1796
17842
-86
294
1578
18334
-300
660
14150
-1133
4121
-12922
k,n,mC
2
3
2 5
7
9
11
13
15
7
42
462
429
1001
6188
-2
-4
-20
-10
-14
-56
-1
-3
-17
-9
-13
-53
k,n,mC
Bảng 5.2 Các hệ số và n,mN k,n,mC
Với r là bậc của đa thức làm khớp
m’=2m+1
Ví dụ:
Làm trơn cửa sổ 5 điểm, bậc 2: r = 2, n=0, m’ = 5, ta có các hệ số làm trơn
là: -3/35 = -0.09; 12/35 = 0.34; 17/35 = 0.48; 12/35 = 0.34; -3/35 = -0.09
Làm trơn cửa sổ 7 điểm, bậc 3: r = 3, n = 0, m’ = 7, các hệ số làm trơn là:
-2/21 = -0.1; 3/21 = 0.14; 6/21 = 0.29; 7/21 = 0.33; 6/21 = 0.29; 3/21 = 0.14;
-2/21 = -0.1
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 59
Làm trơn cửa sổ 9 điểm, bậc 3: r=3, n=0, m’=9, các hệ số làm trơn là:
-21/231 = -0.09; 14/231 = 0.06; 39/231 = 0.17; 54/231 = 0.23; 59/231 = 0.26
; 54/231 = 0.23; 39/231 = 0.17; 14/231 = 0.06; -21/231 = -0.09
Hình 5.2 Lưu đồ thuật toán làm trơn phổ cửa sổ 5 điểm.
Mã nguồn làm trơn phổ
Private Sub CmdSpline_Click()
Dim Response As Integer
Dim st As String
Response = MsgBox("You should save spectrum before spline", vbYesNo)
If Response = 6 Then 'yes
CommonDialog1.Filter = "DataFile(*.spt)|*.spt|AllData(*.*)|*.*"
CommonDialog1.ShowSave
file1 = CommonDialog1.FileName
st = ""
Open file1 For Output As #30
Close #30
Open file1 For Append As #30
For i = 0 To 1023
st = Str(M(i)) + Chr(9)
Print #30, st
Next
Close #30
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 60
End If
FlagInt = True
If Option1(0).Value = True Then ' lam tron 3 diem
For i = 0 To 1021
SPL(i + 1) = 0.25 * M(i) + 0.5 * M(i + 1) + 0.25 * M(i + 2)
Next
SPL(0) = 0.5 * M(0) + 0.5 * M(1)
SPL(1023) = 0.5 * M(1022) + 0.5 * M(1023)
For i = 0 To 1023
M(i) = SPL(i)
Next
End If
If Option1(1).Value = True Then 'lam tron 5 diem
For i = 0 To 1019
SPL(i + 2) = -0.09 * M(i) + 0.34 * M(i + 1) + 0.48 * M(i + 2) + 0.34 * M(i + 3) - 0.09 *
M(i + 4)
Next
SPL(0) = 0.48 * M(0) + 0.68 * M(1) - 0.18 * M(2)
SPL(1) = 0.34 * M(0) + 0.48 * M(1) + 0.34 * M(2) - 0.18 * M(3)
SPL(1022) = -0.18 * M(1020) + 0.34 * M(1021) + 0.48 * M(1022) + 0.34 * M(1023)
SPL(1023) = -0.18 * M(1021) + 0.68 * M(1022) + 0.48 * M(1023)
For i = 0 To 1023
M(i) = SPL(i)
Next
End If
If Option1(2).Value = True Then 'lam tron 7 diem
For i = 0 To 1017
SPL(i + 3) = -0.1 * M(i) + 0.14 * M(i + 1) + 0.29 * M(i + 2) + 0.33 * M(i + 3) + 0.29 * M(i
+ 4) + 0.14 * M(i + 5) - 0.1 * M(i + 6)
Next
SPL(0) = 0.33 * M(0) + 0.58 * M(1) + 0.28 * M(2) - 0.2 * M(3)
SPL(1) = 0.29 * M(0) + 0.33 * M(1) + 0.29 * M(2) + 0.28 * M(3) - 0.2 * M(4)
SPL(2) = 0.14 * M(0) + 0.29 * M(1) + 0.33 * M(2) + 0.29 * M(3) + 0.14 * M(4) - 0.2 *
M(5)
SPL(1021) = -0.2 * M(1018) + 0.14 * M(1019) + 0.29 * M(1020) + 0.33 * M(1021) + 0.29
* M(1022) + 0.14 * M(1023)
SPL(1022) =- 0.2 * M(1019) + 0.28 * M(1020) + 0.29 * M(1021) + 0.33 * M(1022) + 0.29
* M(1023)
SPL(1023) = -0.2 * M(1020) + 0.28 * M(1021) + 0.58 * M(1022) + 0.33 * M(1023)
For i = 0 To 1023
M(i) = SPL(i)
Next
End If
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 61
If Option1(3).Value = True Then 'lam tron 9 diem
For i = 0 To 1015
SPL(i + 4) = -0.09 * M(i) + 0.06 * M(i + 1) + 0.17 * M(i + 2) + 0.23 * M(i + 3) + 0.26 *
M(i + 4) + 0.23 * M(i + 5) + 0.17 * M(i + 6) + 0.06 * M(i + 7) - 0.09 * M(i + 8)
Next
SPL(0) = 0.26 * M(0) + 0.46 * M(1) + 0.34 * M(2) + 0.12 * M(3) - 0.18 * M(4)
SPL(1) = 0.23 * M(0) + 0.26 * M(1) + 0.23 * M(2) + 0.34 * M(3) + 0.12 * M(4) - 0.09 *
M(5)
SPL(2) = 0.17 * M(0) + 0.23 * M(1) + 0.26 * M(2) + 0.23 * M(3) + 0.17 * M(4) + 0.12 *
M(5) - 0.18 * M(6)
SPL(3) = 0.06 * M(0) + 0.17 * M(1) + 0.23 * M(2) + 0.26 * M(3) + 0.23 * M(4) + 0.17 *
M(5) + 0.06 * M(6) - 0.18 * M(7)
SPL(1020) = -0.18 * M(1016) + 0.06 * M(1017) + 0.17 * M(1018) + 0.23 * M(1019) +
0.26 * M(1020) + 0.23 * M(1021) + 0.17 * M(1022) + 0.06 * M(1023)
SPL(1021) = -0.18 * M(1017) + 0.12 * M(1018) + 0.17 * M(1019) + 0.23 * M(1020) +
0.26 * M(1021) + 0.23 * M(1022) + 0.17 * M(1023)
SPL(1022) = -0.18 * M(1018) + 0.12 * M(1019) + 0.34 * M(1020) + 0.23 * M(1021) +
0.26 * M(1022) + 0.23 * M(1023)
SPL(1023) = -0.18 * M(1018) + 0.12 * M(1020) + 0.34 * M(1021) + 0.46 * M(1022) +
0.26 * M(1023)
For i = 0 To 1023
M(i) = SPL(i)
Next
End If
If frmMain.Option1.Value = True Then
For i = 0 To 1023
frmMain.Shape1(i).Left = 400 + i * 15
frmMain.Shape1(i).Top = 5800 - frmMain.VScroll1.Value * M(i)
frmMain.Shape1(i).Visible = True
Next
End If
If frmMain.Option2.Value = True Then
For i = 0 To 511
frmMain.Shape1(i).Left = 400 + i * 30
frmMain.Shape1(i).Top = 5800 - frmMain.VScroll1.Value * M(i)
frmMain.Shape1(i).Visible = True
frmMain.Shape1(i + 512).Visible = False
Next
End If
If frmMain.Option3.Value = True Then
For i = 512 To 1023
frmMain.Shape1(i).Left = 400 + i * 30
frmMain.Shape1(i).Top = 5800 - frmMain.VScroll1.Value * M(i)
frmMain.Shape1(i).Visible = True
frmMain.Shape1(i - 512).Visible = False
Next
End If
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 62
End Sub
5.4 Giải thuật lấy tích phân giữa 2 vị trí con trỏ và hiển thị miền lấy tích phân: Tích
phân giữa 2 vị trí con trỏ là tổng các số đếm của các kênh giữa 2 vị trí con trỏ, gọi là
INT. Gọi vttt là kênh của con trỏ bên trái và gọi vttp là kênh của con trỏ bên phải,
Hình 5.3 Giải thuật lấy tích phân giữa hai vị trí con trỏ
Mã nguồn lấy tích phân
Private Sub mnuIntegral_Click()
Dim Integral As Long
Integral = 0
FlagInt = True
For i = 0 To 1023
Line3(i).Visible = False
Next
If Vtt1 > Vtt2 Then
For i = Vtt2 To Vtt1
Line3(i).X1 = Shape1(i).Left
Line3(i).X2 = Shape1(i).Left
Line3(i).Y1 = 5800
Line3(i).Y2 = 5800 - VScroll1.Value * M(i)
Line3(i).Visible = True
Integral = Integral + M(i)
Next
Else
For i = Vtt1 To Vtt2
Line3(i).X1 = Shape1(i).Left
Line3(i).X2 = Shape1(i).Left
Line3(i).Y1 = 5800
Line3(i).Y2 = 5800 - VScroll1.Value * M(i)
Line3(i).Visible = True
Integral = Integral + M(i)
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 63
Next
End If
Label17.Caption = Str(Integral)
End Sub
3.5 Giải thuật lấy diện tích hình thang: Diện tích hình thang giữa 2 vị trí con trỏ
M(vtt1) M(vtt2)DTHT (vtt2 vtt1 1)
2
+= - + (5.2)
Hình 5.4 Lưu đồ thuật toán tính diện tích hình thang tại ví trí 2 con trỏ
Mã nguồn tính diện tích hình thang
Private Sub mnuSurface_Click()
Dim Trape As Long
Dim Day As Integer
Day = Abs(Vtt2 - Vtt1) + 1
Trape = (M(Vtt1) + M(Vtt2)) / 2 * Day
Label19.Caption = Str(Trape)
Line4.X1 = Shape1(Vtt1).Left
Line4.X2 = Shape1(Vtt2).Left
Line4.Y1 = Shape1(Vtt1).Top
Line4.Y2 = Shape1(Vtt2).Top
Line4.Visible = True
Line3(Vtt1).X1 = Shape1(Vtt1).Left
Line3(Vtt1).X2 = Shape1(Vtt1).Left
Line3(Vtt1).Y2 = Shape1(Vtt1).Top
Line3(Vtt1).Y1 = 5800
Line3(Vtt1).Visible = True
Line3(Vtt2).X1 = Shape1(Vtt2).Left
Line3(Vtt2).X2 = Shape1(Vtt2).Left
Line3(Vtt2).Y2 = Shape1(Vtt2).Top
Line3(Vtt2).Y1 = 5800
Line3(Vtt2).Visible = True
FlagTra = True
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ nhiệm đề tài: Nguyễn Văn Sơn 64
End Sub
5.6 Giải thuật chuẩn hóa năng lượng cho phổ
Gọi x là vị trí kênh và là năng lượng tại kênh , ta được đường chuẩn năng lượng
bậc n theo công thức sau:
iE ix
(5.3) E --= + + + +n n 1n n 1 1a x a x ... a x a0
1
T
Tại điểm quan sát thứ nhất: 1E --= + + + +n n 1n 1 n 1 2 1 1 0a x a x ... a x a
Tại điểm quan sát thứ hai: 2E --= + + + +n n 1n 2 n 1 2 1 2 0a x a x ... a x a
…
Tại điểm quan sát thứ m: mE --= + + + +n n 1n m n 1 m 1 m 0a x a x ... a x a
Đường chuẩn năng lượng được viết lại dưới dạng ma trận:
(5.4) =E X * A
X là ma trận (m,n+1), m hàng, n+1 cột
A, E là ma trận cột, m cột
Để tìm các hệ số a, ta giải các phương trình đại số (5.4)
=X * A E
Để hệ phương trình đại số là có nghiệm thì ³ +m n
Nhân 2 vế phương trình trên với ( là chuyển vị của X) từ bên trái, ta được: TX TX
(5.5) =TX * X * A X * E
Nhân 2 vế của phương trình (5.5) với ( inv là hàm lấy nghịch đảo ma
trận), ta được:
Tinv(X * X)
= T TA inv(X * X) * X * E (5.6)
Ta dùng phương trình (5.6) để tính các hệ số a của hàm số xấp xỉ bằng đa thức.
Hình 5.5 Lưu đồ thuật toán chuẩn hóa năng lượng
Đề tài cấp bộ: Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy tính qua cổng USB
Chủ
Các file đính kèm theo tài liệu này:
Thiết kế và chế tạo máy phân tích đa kênh (1024 kênh) ghép với máy vi tính qua cổng usb.pdf