Tải bản đầy đủ (.pdf) (107 trang)

Thiết kế phần mềm thiết bị đo và hiển thị dạng sóng lên màn hình máy tính

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.76 MB, 107 trang )

..

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
-----------------------------------------------

NGUYỄN TRƯỜNG THỌ
ĐỀ TÀI:

THIẾT KẾ PHẦN MỀM THIẾT BỊ ĐO VÀ HIỂN THỊ
DẠNG SĨNG LÊN MÀN HÌNH MÁY TÍNH
LUẬN VĂN THẠC SỸ
NGÀNH: ĐIỆN TỬ-VIỄN THÔNG

NGƯỜI HƯỚNG DẪN KHOA HỌC:
PHẠM VĂN BÌNH

HÀ NỘI – 2008


MỤC LỤC
LỜI NÓI ĐẦU ........................... Error!

Bookmark not defined.

CHƯƠNG 1: TỔNG QUAN VỀ OSCILLO VÀ PC OSCILLO .....Error!

Bookmark not defined.
1.1

Giới thiệu chung............................... Error! Bookmark not defined.



1.1.1

Oxilo tương tự......................... Error! Bookmark not defined.

1.1.2

Oxilo điện tử số....................... Error! Bookmark not defined.

1.2 Tổng quan về PC Oscillo ..................... Error! Bookmark not defined.
CHƯƠNG 2 GIỚI THIỆU CHUNG VỀ USB .. Error!

Bookmark not

defined.
2.1 Giới thiệu. ............................................. Error! Bookmark not defined.
2.2 Kiến trúc tổng quan của hệ thống USB.Error! Bookmark not defined.
2.2.1 Host:......................................... Error! Bookmark not defined.
2.2.2 Thiết bị USB: ........................... Error! Bookmark not defined.
2.2.3 Mơ hình Bus vật lý. ................. Error! Bookmark not defined.
2.2.4 Mơ hình Bus logic.................... Error! Bookmark not defined.
2.2.5 Mối quan hệ Client software và function.Error! Bookmark not
defined.
2.2.6 Luồng dữ liệu USB. ................. Error! Bookmark not defined.
2.3

Kiến trúc chi tiết. ............................ Error! Bookmark not defined.

2.3.1 Dây cáp USB. .......................... Error! Bookmark not defined.
2.3.2 USB Connecter. ....................... Error! Bookmark not defined.

2.3.3 Đặc tính điện.............................. Error! Bookmark not defined.


Phụ lục 1: Giao diện phần mềm


Phụ lục 2: Mã nguồn thuật toán smooth
Public Sub smooths(ByRef dsx1() As Long, dsy() As Long, ByVal dem1 As
Long, ByVal color As ColorConstants)
Dim kt As Boolean
Dim dsy1(1000) As Long
Dim i As Long
Dim TG1 As Long
Dim TG2 As Long
Dim ofset As Long
Dim tgtg1, tgtg2 As Long
Dim tgtgt As Long
Dim d As Long
Dim batdongbo As Boolean
Dim moi As Double
Dim moi1 As Double
Dim J As Long
Dim bien As Double
If chuky < 4 And chuky > 0 Then
d = Int(4 / chuky)
bien = 4 - d * chuky
If bien <> 0 Then
bien = chuky / bien
bien = chuky / bien / 4



Else
bien = 1
End If
Else
bien = 1
End If
If redraw = True Then
moi = gain * voltdiv
moi1 = timediv * 4 * bien
tgtgt = 4500
Else
moi = gain * 2 * voltdiv
moi1 = timediv * 8 * bien
tgtgt = 9000
End If
For i = 1 To dem1
dsx1(i) = 120 + (i - 1) * moi1
dsy1(i) = frmMain.sld6.value - moi * dsy(i)
Next
If (Not frmMain.optr.value) And (Not frmMain.optf.value) Then
batdongbo = True
End If
TG1 = 1
TG2 = 2
Do While (TG2 < dem1)


If dsy1(TG1) = dsy1(TG2) Then
kt = True

Else
kt = False
End If
If kt Then
Do While (TG2 < dem1)
If dsy1(TG2) = dsy1(TG2 + 1) Then
TG2 = TG2 + 1
Else
Exit Do
End If
Loop
If TG2 - TG1 < 2 Then
For i = dsx1(TG1) To dsx1(TG2)
If i - ofset < tgtgt And i - ofset > 120 Then
If TG1 > 1 Then
If TG2 < dem1 Then
d = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i)
Else
d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i)
End If
Else
d = fx(dsy1(), dsx1(), TG1, TG2 + 1, i)
End If


If d = triggery And Not batdongbo Then
If TG1 = 1 Then
tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1)
Else

If TG2 < dem1 Then
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i + 1)
Else
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1)
End If
End If

If (frmMain.optr.value And d > tgtg2 And d < tgtg1) Or
(frmMain.optf.value And d < tgtg2 And d > tgtg1) Then
ofset = i - 120
batdongbo = True
End If
End If
If d > 120 And d < tgtgt And batdongbo Then
frmMain.Picture1.PSet (i - ofset, d), color
End If
End If
Next


Else
If Not batdongbo And ((frmMain.optf.value And triggery < dsy1(TG2)
And triggery > dsy1(TG1)) Or (frmMain.optr.value And triggery > dsy1(TG2)
And triggery < dsy1(TG1))) Then
ofset = dsx1(TG1) + (dsy1(TG1) - triggery) * (dsx1(TG2) dsx1(TG1)) / (dsy1(TG1) - dsy1(TG2)) - 120
batdongbo = True
End If
If batdongbo Then

frmMain.Picture1.Line (dsx1(TG1) - ofset, dsy1(TG1))-(dsx1(TG2)
- ofset, dsy1(TG2)), color
End If
End If
'------------------TG1 = TG2
TG2 = TG2 + 1
'----------------------Else
'--------------------------Do While (TG2 - TG1 <= 3)
If dsy1(TG2) <> dsy1(TG2 + 1) And TG2 < dem1 Then
TG2 = TG2 + 1
Else
Exit Do
End If


Loop
If TG2 - TG1 < 2 Then
For i = dsx1(TG1) To dsx1(TG2)
If i - ofset < tgtgt And i - ofset > 120 Then
If TG1 > 1 Then
If TG2 < dem1 Then
d = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i)
Else
d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i)
End If
Else
d = fx(dsy1(), dsx1(), TG1, TG2 + 1, i)
End If
If d = triggery And Not batdongbo Then
If TG1 = 1 Then

tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1)
Else
If TG2 < dem1 Then
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i + 1)
Else
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1)
End If


End If
If (frmMain.optr.value And d > tgtg2 And d < tgtg1) Or
(frmMain.optf.value And d < tgtg2 And d > tgtg1) Then
ofset = i - 120
batdongbo = True
End If
End If
If d > 120 And d < tgtgt And batdongbo Then
frmMain.Picture1.PSet (i - ofset, d), color
End If
End If
Next
Else
For i = dsx1(TG1) To dsx1(TG2)
If i - ofset < tgtgt And i - ofset > 120 Then
If TG1 > 1 Then
If TG2 < dem1 Then
d = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i)

Else
d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i)
End If
Else
d = fx(dsy1(), dsx1(), TG1, TG2 + 1, i)
End If
If d = triggery And Not batdongbo Then


If TG1 = 1 Then
tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1)
Else
If TG2 < dem1 Then
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2 + 1, i + 1)
Else
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1)
End If
End If
If (frmMain.optr.value And d > tgtg2 And d < tgtg1) Or
(frmMain.optf.value And d < tgtg2 And d > tgtg1) Then
ofset = i - 120
batdongbo = True
End If
End If
If d > 120 And d < tgtgt And batdongbo Then
frmMain.Picture1.PSet (i - ofset, d), color
End If

End If
Next
End If
TG1 = TG2


TG2 = TG2 + 1
End If

If TG2 = dem1 Then
If dsy1(TG1) <> dsy1(TG2) Then
For i = dsx1(TG1) To dsx1(TG2)
If i - ofset < tgtgt And i - ofset > 120 Then
d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i)
If d = triggery And Not batdongbo Then
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i - 1)
tgtg2 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1)
If (frmMain.optr.value And d > tgtg2 And d < tgtg1) Or
(frmMain.optf.value And d < tgtg2 And d > tgtg1) Then
ofset = i - 120
batdongbo = True
End If
End If
If d > 120 And d < tgtgt And batdongbo Then
frmMain.Picture1.PSet (i - ofset, d), color
End If
End If
Next
Else



If Not batdongbo And ((frmMain.optf.value And triggery <
dsy1(TG2) And triggery > dsy1(TG1)) Or (frmMain.optr.value And triggery >
dsy1(TG2) And triggery < dsy1(TG1))) Then
ofset = dsx1(TG1) + (dsy1(TG1) - triggery) * (dsx1(TG2) dsx1(TG1)) / (dsy1(TG1) - dsy1(TG2)) - 120
batdongbo = True
End If
If batdongbo Then
frmMain.Picture1.Line (dsx1(TG1) - ofset, dsy1(TG1))-(dsx1(TG2)
- ofset, dsy1(TG2)), color
End If
End If
End If
Loop

For i = 1 To dem1
dsx1(i) = dsx1(i) - ofset
Next
End Sub


Phụ lục 3: Thuật toán Smooth_add
Public Sub smooth_add(ByRef dsx1() As Long, dsy() As Long, ByVal dems As
Long, ByVal dem1 As Long, ByVal color As ColorConstants)
Dim kt As Boolean
Dim dsy1(1000) As Long
Dim i As Long
Dim TG1 As Long
Dim TG2 As Long
Dim ofset As Long

Dim tgtg1, tgtg2 As Long
Dim tgtgt As Long
Dim d As Long
Dim batdongbo As Boolean
Dim calculared As Boolean
Dim ris As Boolean
Dim star As Long
Dim moi As Double
Dim moi1 As Double
Dim J As Long
Dim max, min As Long
max = frmMain.sld6.value - dsy(dems)
min = frmMain.sld6.value - dsy(dems)
If redraw = True Then
moi = gain * voltdiv


moi1 = timediv * 4
tgtgt = 4500
Else
moi = gain * 2 * voltdiv
moi1 = timediv * 8
tgtgt = 9000
End If
For i = dems To dem1
dsx1(i) = dsx1(dems - 1) + (i - dems) * moi1
dsy1(i) = frmMain.sld6.value - moi * dsy(i)
Next
If (dsy(dems - 1) > dsy(dems - 2)) Or (dsy(dems - 1) = dsy(dems - 2) And
dsy(dems - 3) > dsy(dems - 2)) Then

ris = True
Else
ris = False
End If
star = frmMain.sld6.value - moi * dsy(dems - 1)
TG1 = dems
TG2 = dems + 1
Do While (TG2 < dem1)
If dsy1(TG1) = dsy1(TG2) Then
kt = True
Else
kt = False


End If
If kt Then
Do While (TG2 < dem1)
If dsy1(TG2) = dsy1(TG2 + 1) Then
TG2 = TG2 + 1
Else
Exit Do
End If
Loop
If TG2 - TG1 < 2 Then
For i = dsx1(TG1) To dsx1(TG2)
If i - ofset < tgtgt And i - ofset > dsx1(dems - 1) Then
If TG1 > dems Then
d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i)
Else
d = fx(dsy1(), dsx1(), TG1, TG2 + 1, i)

End If
If d > max Then
max = d
End If
If d < min Then
min = d
End If
If d = star Then
If Not batdongbo Then


If TG1 > dems Then
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1)
Else
tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1)
End If
If (ris And tgtg1 < d) Or (Not ris And tgtg1 > d) Then
ofset = i - dsx1(dems - 1)
batdongbo = True
End If
Else
If Not caculared Then
If TG1 > dems Then
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1)
Else
tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1)
End If
If (ris And tgtg1 < d) Or (Not ris And tgtg1 > d) Then
frmMain.txtt.Text = (i - ofset - dsx1(dems - 1)) / timediv
calculared = True

End If
End If
End If
End If
If d > dsx1(dems - 1) And d < tgtgt And batdongbo Then
frmMain.Picture1.PSet (i - ofset, d), color


End If
End If
Next
Else
If Not batdongbo And (star - dsy1(TG2)) * (star - dsy1(TG1)) <= 0 And
((dsy1(TG1) > dsy1(TG2) And ris) Or (dsy1(TG1) < dsy1(TG2) And Not ris))
Then
ofset = dsx1(TG1) + (dsy1(TG1) - star) * (dsx1(TG2) dsx1(TG1)) / (dsy1(TG1) - dsy1(TG2)) - dsx1(dems - 1)
batdongbo = True

End If
If dsy1(TG1) > max Then
max = dsy1(TG1)
End If
If dsy1(TG1) < min Then
min = dsy1(TG1)
End If
If dsy1(TG2) > max Then
max = dsy1(TG2)
End If
If dsy1(TG2) < min Then
min = dsy1(TG2)

End If
If batdongbo Then


frmMain.Picture1.Line (dsx1(TG1) - ofset, dsy1(TG1))-(dsx1(TG2)
- ofset, dsy1(TG2)), color
End If
End If
TG1 = TG2
TG2 = TG2 + 1
Else
Do While (TG2 - TG1 <= 3)
If dsy1(TG2) <> dsy1(TG2 + 1) And TG2 < dem1 Then
TG2 = TG2 + 1
Else
Exit Do
End If
Loop
If TG2 - TG1 < 2 Then
For i = dsx1(TG1) To dsx1(TG2)
If i - ofset < tgtgt And i - ofset > dsx1(dems - 1) Then
If TG1 > dems Then
d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i)
Else
d = fx(dsy1(), dsx1(), TG1, TG2 + 1, i)
End If
If d > max Then
max = d
End If



If d < min Then
min = d
End If
If d = star And Not batdongbo Then
If TG1 > dems Then
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1)
Else
tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1)
End If
If (ris And d > tgtg1) Or (Not ris And d < tgtg1) Then
ofset = i - dsx1(dems - 1)
batdongbo = True
End If
End If
If d > dsx1(dems - 1) And d < tgtgt And batdongbo Then
frmMain.Picture1.PSet (i - ofset, d), color
End If
End If
Next
Else
For i = dsx1(TG1) To dsx1(TG2)
If i - ofset < tgtgt And i - ofset > dsx1(dems - 1) Then
If TG1 > dems Then
d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i)
Else


d = fx(dsy1(), dsx1(), TG1, TG2 + 1, i)
End If

If d > max Then
max = d
End If
If d < min Then
min = d
End If
If d = star And Not batdongbo Then

If TG1 > dems Then
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1)
Else
tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1)
End If
If (ris And d > tgtg1) Or (Not ris And d < tgtg1) Then
ofset = i - dsx1(dems - 1)
batdongbo = True
End If
End If
If d > dsx1(dems - 1) And d < tgtgt And batdongbo Then
frmMain.Picture1.PSet (i - ofset, d), color
End If
End If
Next


End If
TG1 = TG2
TG2 = TG2 + 1
End If
If TG2 = dem1 Then

If dsy1(TG1) <> dsy1(TG2) Then
For i = dsx1(TG1) To dsx1(TG2)
If i - ofset < tgtgt And i - ofset > dsx1(dems - 1) Then
d = fx(dsy1(), dsx1(), TG1 - 1, TG2, i)
If d > max Then
max = d
End If
If d < min Then
min = d
End If
If d = star And Not batdongbo Then
If TG1 > dems Then
tgtg1 = fx(dsy1(), dsx1(), TG1 - 1, TG2, i + 1)
Else
tgtg1 = fx(dsy1(), dsx1(), TG1, TG2 + 1, i + 1)
End If
If (ris And d > tgtg1) Or (Not ris And d < tgtg1) Then
ofset = i - dsx1(dems - 1)
batdongbo = True
End If


End If
If d > dsx1(dems - 1) And d < tgtgt And batdongbo Then
frmMain.Picture1.PSet (i - ofset, d), color
End If
End If
Next
Else
If Not batdongbo And (star - dsy1(TG2)) * (star - dsy1(TG1)) < 0

And ((ris And dsy1(TG1) > dsy1(TG2)) Or (notris And dsy1(TG1) <
dsy1(TG2))) Then
ofset = dsx1(TG1) + (dsy1(TG1) - star) * (dsx1(TG2) dsx1(TG1)) / (dsy1(TG1) - dsy1(TG2)) - dsx1(dems - 1)
batdongbo = True

End If
If dsy1(TG1) > max Then
max = dsy1(TG1)
End If
If dsy1(TG1) < min Then
min = dsy1(TG1)
End If
If dsy1(TG2) > max Then
max = dsy1(TG2)
End If


If dsy1(TG2) < min Then
min = dsy1(TG2)
End If
If batdongbo Then
frmMain.Picture1.Line (dsx1(TG1) - ofset, dsy1(TG1))-(dsx1(TG2)
- ofset, dsy1(TG2)), color
End If
End If
End If
Loop
For i = dems To dem1
dsx1(i) = dsx1(i) - ofset
Next


End Sub


Phụ lục 4 : Thuật toán FFT cơ số 2
Public Function FFT(ByVal dir As Integer, ByVal m As Integer, ByRef y() As
Double) As Boolean
Dim n, i, i1, j, k, i2, l, l1, l2 As Integer
Dim c1, c2, ty, t1, t2, u1, u2, z As Double
'/* Calculate the number of points */
n=1
For i = 0 To m - 1
n *= 2
Next
'/* Do the bit reversal */
i2 = n / 2
j=0
For i = 0 To n - 2
If (i < j) Then
ty = y(i)
y(i) = y(j)
y(j) = ty
End If
k = i2
Do While (k <= j)
j -= k
k=k/2



×