Đồ án Thiết kế và chế tạo máy phát tần số

Việc cố định điện trở đầu vào và chỉ thay đổi điện trở hồi tiếp cho ta các thang có hệ số khuếch đại khác nhau. Trong mạch này cần lưu ý đến một vấn đề là phải lựa chọn được phần tử khuếch đại có độ tuyến tính cao và đặc biệt là phải hoạt động được ở dải tần rộng từ 100Hz đến 20MHz. Những IC khuếch đại thuật toán đáp ứng được nhu cầu này tương đối hiếm ở Việt Nam. Qua quá trình tìm hiểu chúng em đã sử dụng OPA 2677 của hãng TI với các đặc tính nổi bật như sau: OPA 2677 tạo ra một sự liên kết chưa từng có giữa băng thông , tốc độ quay và dòng điện đầu ra. Bộ khuếch đại này có thể trực tiếp đưa tới tụ tải 100pF mà không tạo dao động và tín hiệu 10V vào trong một hệ thống cáp đồng trục 50. Đây là sự cải tiến căn bản trong việc điều khiển đầu ra đối với các bộ khuếch đại tốc độ cao DIP 8 chân, do đó rất lý tưởng đối với các ứng dụng video. OPA 2677 sử dụng hồi tiếp dòng điện để cung cấp băng thông mà không thay đổi đáng kể với hệ số khuếch đại điện áp, 200MHz với G= 4 và 220MHz với G=1. Với tốc độ quay là 1800V/s , thời gian thiết lập là 50ns.

doc92 trang | Chia sẻ: oanh_nt | Lượt xem: 1423 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đồ án Thiết kế và chế tạo máy phát tần số, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ột số lượng điện trở lớn, nếu phải chuyển đổi N bit thì số điện trở phải dùng là 2(N-1). 2.2.3 Chuyển đổi tương tự số bằng phương pháp mã hóa Shanon- Rack Hình 2.10 Sơ đồ nguyên lý bộ chuyển đổi DA theo phương pháp mã hóa Shannon Rack Đây là quá trình chuyển đổi nối tiếp từng bit một. Tín hiệu được đưa lần lượt từ LSB đến MSB đến điều khiển K1. Gọi thời gian chuyển đổi 1bit là T, thì trong khoảng thời gian đầu T/2, K2 mở, K1đóng. Nếu tín hiệu là 1 và mở khi tín hiệu điều khiển là 0. Nếu cần chuyển đổi N bit thì thời gian chuyển đổi là NT. Sau thời gian NT điện áp còn lại trên tụ chính là điện áp tương tự cần tìm. Để có điện áp UC sau mỗi bit ( sau khoảng thời gian T ) tỷ lệ với bit tương ứng , phải chọn thời gian phóng của tụ qua điện trở R theo điều kiện sao cho điện áp trên tụ là U0 thì sau khi phóng, điện áp còn lại là: UC = U0e-t/\RC = U0e-0.7 = 0.496 U0 Ứng dụng trong máy phát tần số: Sử dụng IC tích hợp chuyển đổi DAC là Max505 . IC này bao gồm có 4 đầu ra tương tự , 8 bit số điều khiển DAC được chuyển đổi mạng thang điện trở R-2R, chuyển đổi 8 bit mã số thành điện áp tương tự đầu ra tỷ lệ với điện áp tham chiếu cung cấp. Max 505 có thể sử dụng cả điện áp xoay chiều và điện áp một chiều. Điện áp ở mỗi đầu vào VREF được chia tuyến tính ( full scall ) ở điện áp đầu ra theo số của DAC tương ứng. Trở kháng đầu vào VREF tuỳ thuộc vào mã, gía trị thấp nhất ứng với mã 55 Hex (16KΩ), và giá trị lớn nhất (∞) ứng với mã 00 Hex. Trở kháng đầu ra thấp ( 32 Ω ) đảm bảo cho độ phẳng đầu ra. Điện dung đầu vào VREF cũng thay đổi tuỳ theo mã và giá trị lớn nhất là 15pF. Các đầu vào số tương thích với cả hai chế độ logic TTL và CMOS. Ta có thể ứng dụng những ưu điểm này của MAX505 vào điều khiển điện áp và dòng điện đầu vào MAX038. Từ đó ta có thể thực hiện giao diện với máy phát tần số hoàn toàn bằng số, dễ dàng kết hợp với thiết bị điều khiển số bên ngoài. 2.3 Công nghệ khuếch đại điện áp dải rộng dùng phần tử khuếch đại thuật toán Bộ khuếch đại hoạt động ( Op Amp ) là một trong những thiết bị điện tử được dùng phổ biến và đa dạng nhất cho các ứng dụng tuyến tính. Trong bộ khuếch đại này, mạch phản hồi điều khiển toàn bộ các đặc trưng của nó. Các Op Amp phổ biến bởi vì giá của chúng thấp, dễ sử dụng và khá hấp dẫn khi làm việc với chúng. Cấu tạo các mạch hữu ích không cần phải biết về mạch bên trong vô cùng phức tạp của chúng. Thuật ngữ “ hoạt động” trong bộ khuếch đại hoạt động thay thế cho các phép tính toán học, những phép tính này phù hợp cho các máy tính kỹ thuật số do bởi tốc độ, độ chính xác và tính đa dạng của chúng. 2.3.1 Các khối của OP - AMP Tầng xuất Tầng dịch mức Tầng trung gian Tầng nhập Ngõ vào đảo Ngõ vào không đảo Tín hiệu ra Hình 2.11 Sơ đồ khối của OP- AMP Tầng nhập: bao gồm 2 ngõ vào hoạt động theo kiểu khuếch đại vi sai, ngõ ra cân bằng. Tầng này cung cấp hầu như toàn bộ độ lợi về điện áp và quyết định trở kháng vào của OP-AMP. Tầng trung gian: là một mạch khuếch đại vi sai khác được điều khiển bởi ngõ ra của tầng đầu tiên, có ngõ ra không cân bằng, hai ngõ vào. Do ghép trực tiếp nên ngõ ra của tầng trung gian là một mức DC nào đó. Tầng dịch mức: dời mức DC của tầng trung gian đưa tới gần bằng 0V. Tầng xuất: làm tăng độ dao động của điện áp và khả năng cấp dòng của OP-AMP. 2.3.2 Bộ khuếch đại vi sai Chức năng của bộ khuếch đại vi sai là để khuếch đại hiệu giữa hai tín hiệu lối vào. Bộ khuếch đại này được sử dụng trên một dải tần số tương đối rộng từ tín hiệu không đổi ( DC ) cho đến dải biến đổi ( hàng MHz ). Nó cũng là một tầng cơ sở của bộ khuếch đại thuật toán vi mạch với các lối vào vi sai. Thiết bị hoạt động tuyến tính V1 V2 V0 = Ad (V1 – V2) Hình 2.12 Sơ đồ khối bộ khuếch đại vi sai Hình 2.12 mô tả một thiết bị hoạt động tuyến tính với hai tín hiệu vào v1, v2 và một tín hiệu lối ra v0 ( mỗi cái được đo so với đất ). Đối với bộ khuếch đại lý tưởng thì tín hiệu lối ra v0 phải được biểu diễn bằng: v0 = Ad( v1-v2) Trong đó Ad là hệ số khuếch đại của bộ khuếch đại vi sai. Như vậy có thể thấy rằng bất kỳ một tín hiệu nào tác động chung lên cả hai lối vào sẽ không có mặt ở lối ra. Tuy nhiên, trên thực tế, bộ khuếch đại vi sai không được biểu thị bởi phương trình trên bởi vì tính hiệu lối ra phụ thuộc không chỉ vào hiệu của các tín hiệu vào vd mà còn phụ thuộc vào mức trung bình hay còn gọi là tín hiệu mốt chung vc : vd ≡ v1 và vc ≡ (1/2) (v1 + v2) Chẳng hạn, nếu tín hiệu là +50 uV và tín hiệu thứ hai là -50uV, thì lối ra sẽ không phải hoàn toàn chính xác như v1 = 1050uV và v2 = 950uV, mặc dù vd = 100uV là như nhau trong hai truờng hợp. Đặc trưng cho độ tin cậy của một bộ khuếch đại vi sai, người ta dùng một đại lượng gọi là “ tỷ số thoát mốt - cộng “. Ad hệ số khuếch đại thế đối với tín hiệu vi sai. Ac hệ số khuếch đại thế đối với tín hiệu mốt – công Người ta có thể đi Ad một cách trực tiếp bằng cách cho v1 = - v2 = 0.5V, như vậy vd = 1V và vc bằng 0V. Dưới điều kiện này thế lối ra v0 đo được chính là hệ sô khuếch đại Ad cho tín hiệu vi sai. Tương tự v1 = v2 =1V khi đó vd =0V và vc = Ac. Thế lối ra bây giờ là số đo trực tiếp của hệ số khuếch đại mốt - cộng Ac. Với định nghĩa trên, thế lối ra của bộ khuếch đại vi sai được biểu diễn dưới dạng: Từ biểu thức trên ta thấy đối với bộ khuếch đại vi sai phẩm chất cao thì hệ số thoát mốt cộng phải có giá trị lớn. Chẳng hạn, nếu ρ =1000, vc = 1mV, vd = 1uV, thì số thoát mốt - cộng bằng 1000, hiệu thế = 1 V giữa hai lối vào sẽ cho cùng một thế lối ra như khi một tín hiệu = 1mV tác động vào cả hai lối vào với cùng chiều phân cực. 2.3.3 Bộ khuếch đại vi sai liên kết emitơ Bộ khuếch đại thuật toán hoạt động cả ở tần số bằng không, do vậy các bộ khuếch đại liên kết trực tiếp không thể sử dụng tụ điện được. Hơn nữa trong vi mạch việc thực hiện các tụ điện có điện dung lớn là điều khó khăn. Vì vậy trong bộ khuếch đại liên kết trực tiếp, bất kỳ sự thay đổi nào về giá trị các thông số của mạch, đều dẫn đến sự thay đổi lối ra, thậm chí ngay cả khi thế lối vào được giữ không đổi. Có rất nhiều kỹ thuật để giảm thiểu những sự thay đổi như vậy ở lối ra, trong đó có bộ khuếch đại vi sai liên kết emitơ ở lối vào của các bộ khuếch đại thuật toán có độ trôi dịch ở lối ra rất thấp vì tính chất đối xứng trong cấu trúc của các mạch IC. Ngoài ra bộ khuếch đại này còn cho một điện trở vào có giá trị khá cao và nhiều tính chất khác gần giống với các đặc trưng lý tưởng. Hình 2.13 Bộ khuếch đại vi sai liên kết emitơ đối xứng Trong sơ đồ này điện trở RE có giá trị lớn, do vậy tỉ số thoát mốt - cộng có giá trị cao. Điều này được kiểm chứng bằng cách sau: Nếu Vs1 = Vs2 = Vs, khi đó Vd =Vs1 – Vs2 =0 và V0 = AcVs. Nhưng nếu Rc = ∞ , I0 ≠ 0 và do tính chất đối xứng , ta thu được : Ic1 = Ic2 = 0. Nếu Ib2 << Ic2 thì Ic2 gần bằng Ie2 do đó suy ra rằng V0 = 0. Vì vậy hệ số khuếch đại mốt - cộng Ac sẽ rất nhỏ nên tỉ số thoát mốt - cộng rất lớn đối với các giá trị Re lớn và mach đối xứng tốt. 2.3.4 Dòng và thế sai số offset Do sự không đồng nhất của các tranzito lối vào đã dẫn đến sự không đồng đều dòng phân cực đi qua các đầu vào bộ khuếch đại thuật toán và do vậy đòi hỏi một thế offset lối vào tác động vào hai lối vào để cân bằng lối ra của bộ khuếch đại. Trong phần này, ta đề cập đến các dòng và thế sai số có thể đo được ở lối vào và ở lối ra. Kỹ thuật cân bằng tổng hợp được áp dụng để cân bằng thế offset. Có nghĩa là ta phải tác dụng một thế một chiều (DC) nhỏ ở lối vào để sao cho thế lối ra DC bằng 0. Kỹ thuật thiết kế ở đây không phải liên quan đến các mạch ở bên trong bộ khuếch đại . Hình 2.14 Kỹ thuật cân bằng thế offset tổng hợp Hình a) nạp thế nhỏ nối tiếp với lối vào không đảo, Nạp thế nhỏ nối tiếp với lối vào không đảo trong một vùng ± V [R2/(R2+R3) ] = ±15mV nếu thế nguồn nạp ±15V được sử dụng và R3 = 100 Ω. Mạch này rất hiệu dụng để cân bằng các bộ khuếch đại đảo ngay cả khi yếu tố phản hồi R’ là một tụ điện hoặc là một phần tử phi tuyến. Nếu bộ khuếch đại thuật toán được sử dụng như một bộ khuếch đại không đảo, thì sơ đồ hình b) được sử dụng để cân bằng thế offset. Công nghệ khuếch đại điện áp dải rộng dùng phần tử khuếch đại thuật toán được sử dụng rộng rãi trong công nghệ điện tử hiện nay với ưu điểm có khả năng tích hợp cao. Máy phát tần số mà chúng em chế tạo cũng dựa vào công nghệ này, chọn OPA2677 làm phần tử khuếch đại điện áp đầu ra. CHƯƠNG 3. THIẾT KẾ VÀ CHẾ TẠO MÁY PHÁT TẦN SỐ 3.1 Thiết kế phần cứng cho máy phát tần số Để thuận lợi cho việc thiết kế, chúng em chia thành các modul nhỏ, sau đó ghép lại thành cả khối của máy phát. Với việc sử dụng công nghệ tổ hợp tần số kết hợp được tích hợp sẵn trong IC tạo dạng sóng tần số cao MAX 038, đồng thời với ý tưởng dùng phương pháp điều khiển số và hiển thị số , chúng em quyết định lựa chọn thiết kế và chế tạo máy phát theo các khối sau: - Khối mạch chính - Khối mạch khuếch đại điện áp đầu ra - Khối nguồn 3.1.1 Khối mạch chính 3.1.1.1 Chức năng của khối mạch chính . Đây là khối mạch quan trọng nhất của máy tạo dao động . Nó có các chức năng sau : - Tạo ra các dạng xung:,sin, vuông, tam giác . - Điều khiển tần số của xung phát ra . - Điều khiển độ rộng xung . Để thực hiện được các chức năng trên, sau một thời gian nghiên cứu, tìm hiểu các phương tiện, công cụ để có thể đáp ứng được các yều cầu trên chúng em đã quyết định lựa chọn sử dụng IC Max 038 của hãng MAXIM với các tính năng như sau : * Các đặc điểm cấu tạo và hoạt động của IC Max 038: - Là một IC tạo dao động tần số cao, có khả năng tạo ra các dạng sóng như: tam giác, sin, xung vuông. - Các loại tín hiệu đầu ra được lựa chọn bởi 2 bit Select TTL -Tần số đầu ra trong dải từ: 100Hzà20MHz bằng điện áp tham chiếu 2,5V - Tần số độc lập và có thể điều khiển được độ rộng xung của tín hiệu trong khoảng từ 15%--> 85% -Trở kháng đầu ra thấp = 0,1Ω *Ứng dụng - Tạo dạo động một cách chính xác - Bộ tạo dao động điều khiển bằng điện áp - Ứng dụng điều chế FM (Frequency Modulaytion) - Vòng khóa pha - Đồng bộ tần số - Tạo ra FSK của tín hiệu xung vuông và xung sin *Sơ đồ cấu tạo các chân: Hình 3. 1 Sơ đồ chân MAX 038 Hình 3. 2 Mô tả các chân MAX 038 * Các đặc tính về điện áp và tần số của IC MAX 038 Hình 3. 3 Các đặc tính về điện áp và tần số của IC MAX038 *Phân tích phổ của tín hiệu hình sin ở dải tần thấp và cao như sau: Hình 3. 4 Phổ của tín hiệu hình sin ở dải tần thấp và cao * Sơ đồ nguyên lý Sơ đồ khối bên trong của IC MAX 038 như hình sau: Hình 3. 5 Sơ đồ khối bên trong của IC MAX 038 *Lựa chọn dạng sóng đầu ra: - Max 038 tạo ra các dạng sóng đầu ra nhờ vào 2 chân A0,A1 ở các mức TTL/CMOS * Hoạt động của Max 038 - IC này hoạt động với điện áp = ±5V±5% - Cở sở để tạo ra dao động là dựa vào sự phóng nạp của tụ CF với một dòng điện cố định. - Dòng phóng và dòng nạp được chảy vào chân I_In và được điều chế với điện áp cung cấp cho FADJ và DADJ. Dòng chảy vào chân I_In có thể từ 20A đến 750A. - Cung cấp điện áp ±2,4V đến FADJ để thay đổi tần số một cách bình thườngg (với VFADJ = 0V). -Có thể điều khiển tần số đầu ra bằng cách điều chỉnh tụ CF, giá trị của CF được lựa chọn để tạo ra được tần số trên 20MHz. * Tần số đầu ra Tần số đầu ra được xác định bằng dòng chảy vào chân I_In, tụ ở chân COSC (nối với đất), và điện áp chuẩn FADJ -Khi chân VFADJ=0V, tần số đầu ra F0 được xác định bởi biểu thức: F0(MHz)=IIN(mA) / CF(pF) ( phương trình 3.1) -Thời gian t0 được xác định như sau: t0(ms) = CF(pF) / IIN(mA) ( phuơng trình 3.2) Trong đó: IIN là dòng chảy vào chân I_In ( trong khoảng từ 2mA đến 750mA ) CF tụ nối giữa chân COSC và GND (trong khoảng từ 20pF đến 100mF) Ví dụ: 0.5MHz = 100mA / 200pF 2ms = 200pF / 100mA Tốt hơn hết là điều chỉnh IIN trong khoảng 10mA - 400mA mặc dù khoảng tuyến tính là 2mA đến 750mA, ngoài dải này chúng ta sẽ không đề cập đến. - Với một tần số cố định chúng ta điều chỉnh dòng chảy vào chân IIN vào khoảng 100mA và lựa chọn giá trị cuả tụ cho phù hợp, dòng này sẽ làm giảm nhiệt độ đến mức thấp nhất và tạo ra sự dịch của tần số là ít nhất khi điều chỉnh độ rộng xung - Tụ có thể từ 20pF đến hơn 100mF nhưng tụ này phải nhỏ, có dây nối ngắn, đồng thời xung quanh chân COSC phải phủ đất. Max 038 có thể tạo ra dạo động trên 20 MHz, nhưng dạng sóng có thể bị méo dạng đôi chút tùy thuộc vào từng điều kiện cụ thể. - Ở tần thấp, hệ thống hoạt động tốt nhất với giá trị của tụ là 10mF hoặc là tụ có giá trị lớn hơn nhưng không phân cực. - Với mức điện áp điều chỉnh ±2mV, chân I_In có thể đưa vào điện áp (VIN) hoặc dòng điện (IIN) với chuỗi các điện trở nối tiếp RIN (một điện trở ở giữa REF và I_In là một phương pháp tạo ra dòng điện IIN = VREF / RIN) - Khi sử dụng điện áp đưa vào các chuỗi điện trở, biểu thức tần số được tính như sau: F0(MHz) = VIN()/ [RIN x CF(pF)] ( phương trình 3.3) t0(ms)= CF(pF) x RIN / VIN ( phương trình 3.4) Khi tần số của Max 038 được điều khiển bởi điện áp VIN vào chuỗi các điện trở cố định RIN, tần số đầu ra là một chức năng trực tiếp của Max 038 được đưa ra ở trên. Ví dụ : sử dụng điện trở RIN = 10kΩ, điều khiển VIN từ 20mV đến 7.5V tạo ra sự chênh lệch tần số, lựa chon RIN sao cho dòng IIN trong khoảng từ 2mA đến 750mA, băng thông của các bộ khuếch đại sẽ bị giảm khi ở tần số cao. 3.1.1.2 Nguyên lý hoạt động của khối mạch chính Như đã trình bày trong phần đặc điểm cấu tạo và hoạt động của IC Max 038, tần số xung do IC này phát ra phụ thuộc vào giá trị của tụ điện đưa vào chân số 5, và giá trị dòng điện đưa vào chân số 10 được tính theo công thức: F0(MHz) = IIN(uA) : CF(pF) . Như vậy là muốn thay đổi tần số của xung phát ra ta chỉ việc thay đổi cường độ dòng điện IIN và thay đổi giá trị của tụ CF. Việc thay đổi này được thực hiện như sau: Sử dụng chuyển mạch 5 mức với 5 tụ đầu vào có giá trị khác nhau lần lượt là 104, 103, 102, 3,3nF, 33pF để chia tần số phát ra thành dải: - Dải Hz tương ứng với tụ 104 - Dải Khz tương ứng với tụ 103, 102 - Dải MHz tương ứng với tụ 3,3nF; 33pF Trong mỗi dải tần số như vậy, việc tinh chỉnh tấn số được thực hiện bằng bộ đếm 8 bít nhị phân, với mỗi giá trị của 8 bít này thì Max505 sẽ cho ra một giá trị điện áp tương ứng, các giá trị điện áp này qua mạch điện trở sẽ cho ta các giá trị dòng IIN tương ứng. Việc chỉnh tần số gồm 2 giai đoạn chỉnh thô và chỉnh tinh theo sơ đồ sau: Hình 3. 6 Sơ đồ nguyên lý mạch chỉnh tần số Quá trình chỉnh thô được điều khiển bởi chân ra VoutD thay đổi làm thay đổi dòng I_In, do đó sẽ thay đổi tần số. Quá trình chỉnh tinh khi quá trình chỉnh thô đã thiết lập xong, khi đó ta chỉ thay đổi tần số trong khoảng rất nhỏ của thang tần số đang dùng, quá trình này được điều khiển bởi chân VoutC. Để tần số phát ra có độ rộng xung thay đổi được ta cần chỉnh độ rộng xung bằng mạch chỉnh độ rộng xung. Bình thường xung phát ra có độ rộng xung là 50% khi chân số 7 của MAX 038 được nối với đất, ta thay đổi độ rộng xung theo mạch sau: Hình 3. 7 Sơ đồ nguyên lý mạch điều chỉnh độ rộng xung Bản chất của mạch thay đổi độ rộng xung là một mạch so sánh điện áp cho ra điện áp nằm trong khoảng từ 0V đến 2.5V, muốn có điện áp khác nhau ta chỉ việc vặn biến trở. Như vậy khi vặn biến trở R2_u2 thì độ rộng xung sẽ thay đổi trong khoảng từ 50% đến 85%. 3.1.2 Mạch điều khiển điện áp ra 3.1.2.1 Chức năng của khối mạch điều khiển điện áp ra Khối này có chức năng điều chỉnh điện áp ra từ 2V đến 8V với 4 thang chia tương ứng hệ số khuếch đại là x1, x2, x3, x4. Ngoài chức năng thay đổi điện áp ra, khối này còn có tác dụng phối hợp trở kháng đầu ra. 3.1.2.2 Nguyên lý hoạt động của khối mạch điều khiển điện áp ra Mạch này dùng phần tử khuếch đại thuật toán mắc theo sơ đồ khuếch đại đảo như sau Hình 3. 8 Mạch khuếch đại điện áp đầu ra Điện áp ra được tính theo công thức: Ura= -(Rht/ Rv).Uvao Việc cố định điện trở đầu vào và chỉ thay đổi điện trở hồi tiếp cho ta các thang có hệ số khuếch đại khác nhau. Trong mạch này cần lưu ý đến một vấn đề là phải lựa chọn được phần tử khuếch đại có độ tuyến tính cao và đặc biệt là phải hoạt động được ở dải tần rộng từ 100Hz đến 20MHz. Những IC khuếch đại thuật toán đáp ứng được nhu cầu này tương đối hiếm ở Việt Nam. Qua quá trình tìm hiểu chúng em đã sử dụng OPA 2677 của hãng TI với các đặc tính nổi bật như sau: OPA 2677 tạo ra một sự liên kết chưa từng có giữa băng thông , tốc độ quay và dòng điện đầu ra. Bộ khuếch đại này có thể trực tiếp đưa tới tụ tải 100pF mà không tạo dao động và tín hiệu 10V vào trong một hệ thống cáp đồng trục 50W. Đây là sự cải tiến căn bản trong việc điều khiển đầu ra đối với các bộ khuếch đại tốc độ cao DIP 8 chân, do đó rất lý tưởng đối với các ứng dụng video. OPA 2677 sử dụng hồi tiếp dòng điện để cung cấp băng thông mà không thay đổi đáng kể với hệ số khuếch đại điện áp, 200MHz với G= 4 và 220MHz với G=1. Với tốc độ quay là 1800V/ms , thời gian thiết lập là 50ns. Các đặc điểm của OPA 2677U: - Tốc độ quay slew rate 1800V/ms - Thời gian thiết lập 50ns - Đặc tính dải điện áp cung cấp ±5V và ±6V, điều khiển điện áp nguồn cung cấp một cách linh hoạt - Hệ số khuếch đại vi phân thấp - Băng thông đảm bảo * Các ứng dụng của OPA 2677 - Khuếch đại video - Ứng dụng rộng rãi cho các bộ điều khiển trong đường kết nối ADSL * Sơ đồ chân OPA 2677 : Hình 3. 9 Sơ đồ chân OPA 2677U Các đặc tính kỹ thuật của OPA 2677 được mô tả như hình sau: Hình 3. 10 Các đặc tính kỹ thuật của OPA 2677U 3.1.3 Khối nguồn 3.1.3.1 Mô tả chức năng Một yêu cầu cơ bản nhất của máy phát tần số là nguồn cung cấp cho nó hoạt động cần có độ ổn đinh cao. Qua tìm hiểu chúng em đã thiết kế nguồn riêng cho máy phát dùng IC tích hợp ACT 4065 của hãng SEMICONDUCTOR với các ưu điểm nổi bật như sau: - ACT 4065 là một IC tích hợp với chức năng là bộ chuyển đổi nguồn DC-DC ở tấn số chuyển mạch lên tới 200Khz - Dòng ra có thể đạt được là 2A - Hiệu suất của mạch có thể lên tới 95% - Có chế độ bảo vệ quá dòng - Nguồn cung cấp cho tín hiệu vào có thể lên tới 28V * Ứng dụng của IC 4065: Dùng làm nguồn cho các thiết bị viễn thông như điện thoại, modem, router, các thiết bị đầu cuối… * Mô tả chân linh kiện Hình 3. 11 Sơ đồ chân IC ACT4065 Hình 3. 12 Mô tả các chân linh kiện ACT4065 * Các đặc tính kỹ thuật của linh kiện Hình 3. 13 Các thông số đặc tính của ACT4065 3.1.3.2 Sơ đồ nguyên lý Để thiết kế mạch ta tính toán các thông số cho mạch theo các tiêu chuẩn dựa vào đặc tính của linh kiện Điện trở phản hồi Chọn tỉ lệ điện trở phản hồi RFB1 và RFB2 dựa vào hiệu điện thế đầu ra theo công thức: Với VOUT=5V, ta thường chọn RFB2=10K Chọn lựa cuộn cảm Giá trị của cuộn cảm được tính theo công thức sau: Trong đó: VIN là hiệu điện thế đầu vào VOUT là hiệu điện thế đầu ra fSW là tần số chuyển mạch IOUTMAX là dòng ra tối đa của mạch KRIPPLE là hệ số gợn sóng Thông thường chọn L=33đến 47 Từ những tính toán trên ta có sơ đồ nguyên lý của khối nguồn Hình 3. 14 Sơ đồ nguyên lý khối nguồn Sơ đồ mạch in khối nguồn: Hình 3. 15 Sơ đồ mạch in khối nguồn 3.2 Thiết kế phần mềm cho máy phát tần số 3.2.1 Khối ghép nối vi điều khiển 3.2.1.1 Khối giao tiếp giữa vi điều khiển Pic16F877A với Max505 Max505 Là một IC dựa trên công nghệ CMOS, chuyển đổi số - tương tự( DAC). MAX505 gồm có 4 đầu ra DAC được điều khiển riêng biệt với nhau và mỗi DAC có một điện áp tham chiếu độc lập. Giá trị điện áp ra được thiết lập thông qua số 8 bit đưa vào các chân data. Do đó điện áp tham chiếu được chia nhỏ thành 256 mức khác nhau. Hình 3. 16 Khối điều khiển MAX505 Các tín hiệu A0, A1 kết hợp với chân WR và LDAC dùng để chọn chế độ cho phép và chốt điện áp đầu ra của các cổng DAC: Hình 3. 17 Trạng thái logic của MAX 505 Mạch kết nối: Hình 3. 18 Sơ đồ kết nối MAX 505 và PIC Giao tiếp Max505 : khi tín hiệu được đưa vào, được thực hiện theo thứ tự thời gian sau thì điện áp ra sẽ được chốt trên đầu ra của Max505: Hình 3. 19 Lưu đồ thời gian thực hiện chốt điện áp đầu ra Trong đó chú ý đến khoảng thời gian tối thiểu cần thiết để đáp ứng cho Max505 chốt ở đầu ra : tAS = 5 nS tAH = 5 nS tDS = 45 nS tDH = 0 nS tWR = 40 nS tLC = 40 nS Đối với vi điều khiển Pic dùng thạch anh 20Mhz thì mỗi chu kì lệnh mất khoảng 0.2 uS, nên trong chương trình thời gian trễ sau mỗi lệnh là đã đủ thời gian để đáp ứng trên. Đoạn mã sau minh hoạ cho việc chốt điện áp nên đầu ra C : output_high(WR); output_high(LDAC); output_LOW(Max_A0); output_high(Max_A1); output_low(WR); portb=128; output_high(WR); output_low(LDAC);output_high(LDAC); output_high(WR); output_high(LDAC); Tương tự ta có thể lần lượt chốt điện áp nên đầu ra A, B, D độc lập với nhau. Trong ứng dụng này đối với máy phát tần số, khi muốn thay đổi tần số, ta sử dụng 2 đầu ra C và D để lần lượt chốt điện áp lên các chân FADJ và IIN của Max038. 3.2.1.2 Khối giao tiếp giữa vi điều khiển PIC16F877A với máy tính Giao tiếp với máy tính qua cổng COM: Để đảm bảo sự tương thích giữa các thiết bị truyền dữ liệu nối tiếp do các hãng khác nhau sản xuất, Hiệp Hội Công nghiệp Điện tử EIA đã xây dựng một chuẩn giao diện được gọi là RS232. Ở RS232, mức 1 tương ứng từ -3V đến -25V, còn mức 0 tương ứng từ +3V đến 25V. DO đó, để nối RS232 với máy tính đều phải qua bộ biến đổi điện áp như MAX232 để chuyển mức logicTTL sang mức điện áp RS232 và ngược lại. Hình 3. 20 Sơ đồ cấu tạo MAX232 Mạch giao tiếp Hình 3. 21 Sơ đồ nguyên lý ghép nối PIC16F877A với máy tính Lập trình giao tiếp: Thiết lập chế độ truyền nối tiếp: Tốc độ truyền 9600 bit/giây, 8 bit dữ liệu, 1 bit Stop, không truyền bit chẵn lẻ #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) Truyền dữ liệu: Fputc(var); // Var là một giá trị 8 bit ký tự. Nhận dữ liệu: có tín hiệu truyền từ máy tính xuống, khi nhận được tín hiệu stop, dữ liệu sẽ được nạp từ thanh ghi RSR vào thanh ghi RCREG (nếu thanh ghi này trống), cờ ngắt RCIF ( PIR1) được bật lên. Ta có thể nhận dữ liêu: Data = fgetc(); // Data : là một giá trị 8 bit ký tự. 3.2.1.3 Khối hiển thị Mô tả chân của LCD DM1602 ( 16 cột, 2 hàng) : Hình 3. 22 Sơ đồ chân LCD1602 RS ( Register Select) : dùng để chọn hai thanh ghi bên trong LCD. Nếu RS=0 thì thanh ghi mã lệnh được chọn, cho phép người dùng gửi một lệnh. Nếu RS =1 thì thanh ghi dữ liệu được chọn và cho phép người dùng gửi dữ liệu cần hiển thị lên LCD. R/W ( Read/Write): cho phép người dùng đọc/ghi thông tin từ/lên LCD. R/W = 0 thì đọc, R/W = 1 thì ghi. E ( Enable ) : Chân cho phép E được LCD sử dụng để chốt thông tin hiện có trên chân dữ liệu. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao - xuống - thấp được áp đến chân dữ liệu. Xung này phải rộng tối thiểu là 450nS. D0÷D7 : 8 chân dữ liệu8 bit, được dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD. Mạch kết nối: Hình 3. 23 Sơ đồ nguyên lý kết nối 16F877A với LCD Trong mạch này, giao tiếp với LCD1602 chỉ sử dụng 4 bit dữ liệu ( D4÷D7). Do R/W được nối đất, LCD chỉ cho phép ghi , không cho phép đọc các thanh ghi từ LCD. Giao tiếp với LCD Để viết dữ liệu lên LCD cần thực hiện các bước theo trình tự như sau: + Kéo dây R/W =0 + Đặt RS=0 hay RS=1 tùy mục đích gửi lệnh hay dữ liệu. + Đặt dữ liệu vào bus dữ liệu (RB4-RB7) (Nếu là quá trình viết). + Kéo E lên 1. + Kéo E xuống 0. + Đọc dữ liệu tại Bus dữ liệu (nếu là quá trình đọc) Chế độ sử dụng 4 bit giao tiếp này sẽ tiết kiệm số chân của vi điêu khiển, nhưng tốc độ chậm hơn so với chế độ 8 bit. 3.2.1.4 Giao tiếp PIC 16F877A với Max038 ( Kỹ thuật lập trình đếm tần dùng Pic17F877A) Nguyên lý đếm xung: Trong Pic16F877A có 3 Timer chạy độc lập với nhau. Trong đó ta sử dụng 2 Timer để đếm xung: Timer0 và Timer1. Timer0 sử dụng nguồn đồng hồ bên trong ( dao động nội) , dùng để đo khoảng thời gian thực. Sau mỗi 1S , Timer 0 sẽ xử lí thông tin và hiển thị tần số đo được . Timer1 sử dụng nguồn đồng hồ bên ngoài ( chuỗi xung đưa vào).Bộ đếm bên trong Timer1 sẽ tăng lên 1 mỗi khi có một sườn xung lên cao vào chân RC0 (T1CKL). Số lần mà Timer1 ngắt được đếm trong ngắt Timer1. Tổng số xung đếm đựơc sau mỗi giây được tính trong ngắt Timer0 chính là tần số phát ra của máy. Max038 khi chạy đầu ra Sync out sẽ cho ra xung vuông có tần số bằng với tần số Max038 phát ra. Do đó, ta sẽ nối đầu xung được tạo ra từ chân Sync của Max038 được đưa vào chân RC0( T1CKL) của Pic. Tính toán gần đúng tần số hiển thị: Thời gian ngắt trong Timer1 : t1. Thời gian ngắt trong Timer0: t0. Số lần Timer1 ngắt : x. Số lần Timer0 ngắt : y. Thời gian để Timer0 ngắt: tm0. Hình 3. 24 Thời gian thực hiện TIMER0 và TIMER1 Như vậy thời gian để Timer0 vào xử lý thông tin là: T = N*tm0 + (N-1)*t0 + M*t1 Số xung mà Timer1 đếm được trong khoảng thời gian T là: P = 655336*M + Freq_low Trong khoảng thời gian vào ngắt số xung không được đếm, nên thực tế số xung đưa vào là: Vậy tần số thực của xung đưa vào Timer1 là: Trong lập trình CCS do có làm tròn số trong tính toán và các phép toán trong khi lập trình chỉ dùng 32bit nhị phân để tính toán nên sai số là rất lớn. Nên ở đây, xác định tương đối các giá trị M, tm0 để T đo được xấp xỉ 1s và P đo được chính là tần số. 3.2.2 Lưu đồ thuật toán và mã chương trình 3.2.2.1 Thiết kế mô phỏng Hình 3. 25 Sơ đồ thiết kế mô phỏng Sử dụng phần mền mô phỏng Protues 6.9. Phần mô phỏng bao gồm có các khối: Khối giao tiếp với LCD dùng 2 bit điều khiển và 4 bit dữ liệu. Hai bit điều khiển RS và E của LCD lần lượt được nối tới chân RD0 và RD1 của Pic16F877A Bốn bit dữ liệu D4÷D7 của LCD được nối tới chân RD4 ÷ RD7 của Pic. LCD sẽ hiển thị: Dong 1 hiển thị dạng sóng ( SIN, SQR hay TRI) và chỉnh tinh hay chỉnh thô. Dòng 2 sẽ hiển thị tần số đo được. Khối ghép nối với máy tính. Hai chân truyền, nhận dữ liệu nối tiếp (RX,TX) của Pic sẽ được nối tới hai chân TXD và RXD của thiết bị mô phỏng giao tiếp truyền thông nối tiếp (VIRTUAL TERMINAL). Dữ liệu truyền đi từ Pic sẽ được thiết bị hiển thị trên màn hình giao diện. Nếu ta muốn gửi tín hiệu xuống cho Pic thì ta bấm phím vào màn hình giao diện. Khi đó Pic sẽ nhận và xử lý tín hiệu. Khối nút bấm Hình mô phỏng có 4 nút bấm tương ứng với 4 nút bấm trên mặt máy phát tần số. Mỗi khi nhấn nút được nối với chân RA1 sẽ cho phép ta thay đổi được dạng xung phát ra. Nút bấm nối tới chân RC3: cho phép ta thay đổi chế độ chỉnh tinh hay chỉnh thô. Nút bấm nối tới chân RC4 và RC5 cho phép ta thay đổi ( tăng hay giảm ) tần số. Giá trị tăng hay giảm sẽ được hiển thị lên portB, đây là giá trị đầu vào max505. Khối đếm xung Sử dụng máy phát ( Clock) tạo ra một chuỗi xung được đưa vào chân T1CKL của Pic. Việc thay đổi tần số được thiết lập thông qua việc điều chỉnh giá trị của Clock frequency trong máy phát xung. Khối hiển thị LED Khối này gồm có 5 led dùng để hiển thị các chế độ thực hiện tạo dạng xung của máy. 3 led được kết nối tới PortE sẽ chỉ trạng thái của dạng sóng phát ra (SIN, Vuông hay Tam giác). 2 led được nối với RD2 và RD3 để chỉ trạng thái tinh chỉnh là chỉnh tinh hay chỉnh thô của Pic. Các khối này sẽ được điều khiển bởi vi điều khiển PIC16F877A. Mã nguồn được lập trình trên phần mềm CCS và được chương trình này dịch sang file hex để nạp vào vi điều khiển. 3.2.1.2 Lưu đồ thuật toán và mã chương trình Thuật toán chương trình chính Hình 3. 26 Thuật toán máy phát tần số Chương trình chính được thực hiện theo việc quét sự kiện. Có 5 sự kiện : Nhận tín hiệu từ máy tính: khi có tín hiệu từ máy tính gửi xuống thì chương trình sẽ xử lý tín hiệu sau đó trở về quét dữ liệu. Sự kiện tinh chỉnh: khi có nút bấm chuyển tinh chỉnh thì máy sẽ thực hiện chuyển sang chỉnh tinh hay chỉnh thô Sự kiện tăng tần số: khi nút “Up” được bấm thì giá trị điều khiển dữ liệu đầu vào Max505 sẽ được tăng lên 1, và chốt tín hiệu đầu ra ở Max038. Sự kiện giảm tần số: khi nút “Down” được bấm thì giá trị điều khiển dữ liệu đầu vào Max505 sẽ được giảm xuống 1, và chốt tín hiệu đầu ra ở Max038. Sự kiện thay đổi dạng sóng: khi nút “Fine” được bấm thì dạng sóng sẽ chuyển đổi lần lượt ( Sin,Tam giác, vuông). Mã chương trình chính While { // Giao tiepvoimay tinh // if ( rda_overflow) { rda_overflow = 0; com = fgetc(); giaotiepmt();} // Thietlapchinh tinh hay chinh tho // if ( input(PIN_C3)==0) { delay_ms(10); if (input(PIN_C3)== 0) {While(!input(PIN_C3));++j; chuyendoichot();}} // Cho phep tang tan so // if ( input(PIN_C4)== 0 ) { delay_ms(10); if (input(PIN_C4)== 0) { tangtanso();}} // Cho phep giam tan so // if (input(PIN_C5)== 0) { delay_ms(10); if (input(PIN_C5)== 0) { giamtanso();}} // Cho phep chinh dang xung // if( Input(PIN_A1)==0) { while(!input(PIN_A1)); ++ttxung; dangsong();} } Lưu đồ nhận và xử lý tín hiệu từ máy tính Hình 3. 27 Nhận và xử lý dữ liệu từ máy tính Tín hiệu nhận: Dữ liệu từ máy tính gửi xuống có 6 ký tự lần lượt được vi điều khiển xử lý như sau: Nhận được chữ “U” tăng tần số (tăng giá trị điều khiển Max505 lên 1). Nhận được chữ “D” giảm tần số (giảm giá trị điều khiển Max505 lên 1). Nhận được chữ “F” thay đổi dạng xung ( Sin, Vuông, Tam giác). Nhận được chữ “S” chuyển sang dạng xung Sin. Nhận được chữ “Q” chuyển sang dạng xung vuông. Nhận được chữ “T” chuyển sang dạng xung tam giác. 3.2.3 Chương trình giao diện trên máy tính 3.2.3.1 Giới thiệu phần mềm Phần mềm giao diện trên máy tính được thiết kế trên phần mền Visual Basic6.0. Visual Basic là một ngôn ngữ lập trình theo kiểu định hướng đối tượng. Chúng ta có thể phân mỗi yếu tố trong chương trình thành một đối tượng và viết cách ứng xử riêng cho từng đối tượng đó. Tập hợp của nhiều đối tượng như vậy sẽ trở thành một chương trình hoàn chỉnh. Các đối tượng đó sẽ được chạy trên nền Window, sử dụng chuột với những thao tác để lấy những đối tượng cần dùng. Chương trình giao diện của máy phát tần số được thiết kế để giao tiếp giữa máy tính với vi điều khiển thông qua cổng com (RS232). Khi ta thao tác tới các đối tượng trên hình giao diện thì tín hiệu của đối tượng đó sẽ được gửi xuống vi điều khiển xử lý thông tin và điều khiển tần số. Hình 3. 28 Mô hình ghép nối giữa máy tính và vi điều khiển 3.2.3.2 Thiết kế giao diện Hình 3. 29 Thiết kế giao diện trên Visual Basic 6.0 3.2.3.3 Thuật toán và chương trình Chương trình được lập trình theo sự kiện: Khi có dữ liệu đến: Nếu nhận được ký tự là :”S” xung Sin Nếu nhận được ký tự là :”Q” xung VuôngNếu nhận được ký tự là :”T” xung Tam giác Nếu nhận được ký tự là :”I” cho phép chỉnh thô Nếu nhận được ký tự là :”F” Cho phép chỉnh tinh Nếu nhận được ký tự là : “V” đây là ký tự bắt đầu nhận tần số mà máy phát đo được gửi lên. Khi có sự kiện xảy ra trên các nút thì máy tính sẽ gửi ký tự tương ứng với ký tự gạch chân trên nút bấm đó và thực hiện chức năng ở trên đó. CHƯƠNG 4. GIỚI THIỆU SẢN PHẨM FG ver1.0 là phiên bản đầu tiên của máy phát tần số do nhóm chúng em thiết kế và chế tạo với giao diện dễ sử dụng, được sử dụng rộng rãi trong phòng thí nghiệm với giá thành thấp nhất và tính năng tốt nhất. Hình 4. 1 Giao diện mặt máy máy phát tần số 4.1 Các thông số kỹ thuật của máy phát tần số - Tạo ra các dạng xung : tam giác, sin, vuông. - Có thể tinh chỉnh được tần số và độ rộng xung. - Độ rộng xung có thể thay đổi từ 50% đến 85 %. - Dải tần số : 100 Hz - 15 MHz. - Dải điện áp : 2V - 10 V. - Sai số tần số thiết lập: 1 % - Sai số điện áp thiết lập: 1.5 % - Độ ổn định tần số ra : 10-3. - Độ ổn định điện áp ra : 10-5 . - Trở kháng đầu ra thấp : 0.1 Ω 4.2 Hướng dẫn sử dụng Trên mặt máy có các nút tương ứng với các chức năng như sau: Power: nút nguồn cung cấp điện cho máy Wave form: nút chỉnh dạng sóng Up: nút chỉnh tăng tần số Down: nút giảm tần số Fine: nút tinh chỉnh tần số, sau khi chỉnh thô dùng 2 nút Up và Down thì mới dùng nút này PWM: nút điều chỉnh độ rộng xung Adjust: nút chuyển mạch điện áp đầu ra Amp: nút chỉnh điện áp đầu ra Out: đầu ra của tín hiệu Có 5 thang để chuyển tần số tương ứng với các thang Mhz, KHz và Hz. Thang Mhz: tần số từ 1Mhz đến 15 MHz Thang Khz: tần số từ 10KHz đến 1MHz Thang Hz: tần số từ 100Hz đến 10Khz Có hai chế độ mà người sử dụng có thể thao tác với máy: chế độ bằng tay và chế độ tự động: * Với chế độ điều chỉnh bằng tay, thực hiện không thông qua máy tính.Người sử dụng thực hiện các thao tác trên mặt máy theo các bước sau: Bước 1: nhấn 1 trong 5 nút để lựa chọn thang tần số mong muốn Bước 2: nhấn nút Wave form để lựa chon dạng sóng, nhìn đèn LED sáng để biết dạng sóng đầu ra - led xanh sáng: ứng với xung sin led đỏ sáng: ứng với xung tam giác led vàng sáng: ứng với xung vuông Bước 3: nhấn nút Up hay Down để thay đổi tần số trong khoảng giới hạn của thang tần số đã chọn Bước 4: xoay nút Amp để lựa chọn hệ số khuếch đại để được điện áp ra theo yêu cầu Bước 5: nhấn nút Adjust để đóng chuyển mạch đầu ra, từ đó thiết lập đầu ra Bước 6: nhấn nút Fine để tinh chỉnh tần số Ở đầu ra, cắm que đo để đo tín hiệu do máy phát ra, muốn thay đổi độ rộng xung của tín hiệu nhấn nút PWM, muốn thay đổi tần số chỉ việc nhấn các nút Up, Down, muốn quay trở lại trạng thái ban đầu nhấn nút Reset toàn bộ hệ thống. Lưu ý: trước khi thay đổi hệ số khuếch đại nhấn nút Adjust về trạng thái đóng sau đó chuyển thang hệ số khuếch đại rồi mơí nhấn nút Adjust để đo đầu ra tín hiệu. * Chế độ điều khiển tự động Ở chế độ này, người sử dụng điều chỉnh thông qua bàn phím trên máy tính mà không cần chú ý đến các phím bấm trên mặt máy phát, giao diện máy phát trên máy tính như sau: Hình 4. 2 Giao diện mặt máy Với giao diện như trên, di chuột đến các vị trí tương ứng là SIN, TRI hay SQR để có dạng sóng tương ứng là sin, tam giác hay xung vuông. Sau khi có dạng sóng và để đúng thang tần số trong dải tần mong muốn, ta di chuột đến các vị trí các nút trên màn hình để chỉnh tần số. Sau đó nhấn nút Connect, trên màn hình sẽ hiển thị tần số mà máy phát ra. KẾT LUẬN CHUNG Trong khuôn khổ của một đồ án tốt nghiệp và hạn chế về mặt thời gian cũng như lựa chọn linh kiện trong quá trình thiết kế,chúng em đã cố gắng tìm các phương án tốt nhất cho việc thiết kế và hoàn thiện sản phẩm với những chỉ tiêu ban đầu đề ra thông qua việc tối ưu từng phần, từng modul của hệ thống. Tuy nhiên đây vẫn là một sản phẩm chưa hoàn chỉnh và còn nhiều thiếu sót. Nhưng chắc chắn rằng trong tương lai sản phẩm sẽ được phát triển và trở thành một sản phẩm điện tử thương mại có thể cạnh tranh với các sản phẩm của nước ngoài. Chúng em xin chân thành cám ơn những ý kiến đóng góp rất thiết thực của các thầy cô giáo, các nhà chuyên môn cũng như bạn bè, và đặc biệt là sự giúp đỡ tận tình của TS. Phạm Văn Bình đã giúp chúng em bước đầu hoàn thiện và cải tíến sản phẩm. TÀI LIỆU THAM KHẢO [1]. Phạm Minh Hà, Kỹ thuật mạch điện tử, Nhà xuất bản Khoa học và kỹ thuật, Hà Nội 2000 [2]. Đỗ Thanh Hải, Dương Trọng Tuấn, Phân tích và thiết kế nguồn ổn định chuyển mạch, Nhà xuất bản tổng hợp Thành phố Hồ Chí Minh 1998 [3]. Nguyễn Minh Đức, Bộ khuếch đại hoạt động và mạch tích hợp tuyến tính (OP-AMP & IC), Nhà xuất bản tổng hợp Thành phố Hồ Chí Minh 2000 [4]. Ngô Diên Tập, Kỹ thuật lập trình và ghép nối máy tính, Nhà xuất bản Khoa học và kỹ thuật, Hà nội 1998. [5]. Bộ môn điều khiển tự động trường đại học Bách Khoa Hà Nội, Giáo trình Điện tử tương tự số Các website: www.dientuvietnam.net www.picvietnam.net www.edaboards.com www.ti.com www.maxim-ic.com www.google.com keyword: function generator 20MHz PHỤ LỤC Phần mã chương trình cho PIC 16F877A dùng CCS // ***** Phan khai bao *****// #include #device *=16 adc=10 #FUSES NOWDT //No Watch Dog Timer #FUSES HS //High speed Osc (> 4mhz) #FUSES NOPUT //No Power Up Timer #FUSES NOPROTECT //Code protected from reads #FUSES NODEBUG //No Debug mode for ICD #FUSES NOBROWNOUT //No brownout reset #FUSES NOLVP //No low voltage prgming, B3(PIC16) #FUSES NOCPD //No EE protection #FUSES NOWRT //Program memory not write protected #use delay(clock=20000000) #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) #bit t1_overflow = 0x0C.0 #bit rda_overflow =0x0C.5 #use standard_io ( A ) #use standard_io ( B ) #use standard_io ( C ) #use standard_io ( D ) #use standard_io ( E ) #byte portA = 0x5 #byte portB = 0x6 #byte portC = 0x7 #byte portD = 0x8 #byte portE = 0x9 #define WR PIN_A2 #define LDAC PIN_A3 #define MAX_A1 PIN_A4 #define MAX_A0 PIN_A5 #define A1_038 PIN_C2 #define A0_038 PIN_C1 #define INTS_PER_SECOND0 76 // (20000000/(4*256*256)) #define INTS_PER_SECOND1 19 // (20000000/(4*4*65536)) #define INTS_PER_SECOND2 100 #include "C:\Documents and Settings\pvbinh\Desktop\dk_max505\max505.h" int8 ttxung=0; int8 fine=0; int32 freq=0; int8 char1=0, char2=0, char3=0, char4=0, char5=0, char6=0; // Cac so hien thi tan so int16 freqc_high=0, freqc_low=0; int8 int_count0=76; int8 com1=0,com2=0,com3=0,com4=0; int8 com=0; int8 j=1; int8 freq_f=0,freq_t=0; #include #include #include // Chuyen doi tan so va dua ra hien thi. // ***** Ngat Timer 0 *****// #int_TIMER0 Void TIMER0_isr() { --int_count0; if(int_count0==0) { setup_timer_1(T1_DISABLED); //turn of counter to prevent corruption while grabbing value if (t1_overflow) //check one last time for overflow {++ freqc_high;} freqc_low=get_timer1(); //get timer1 value as the least sign. 16bits of freq counter freq=make32(freqc_high,freqc_low); //use new make32 function to join lsb and msb display_freq(freq); fputc('C'); // Truyen tin hieu nhan dang com1 = make8(freq,0); fputc('1'); com2 = make8(freq,1); fputc(com2); com3 = make8(freq,2); fputc(com3); com4 = make8(freq,3); fputc(com4); t1_overflow = 0; freqc_high = 0; int_count0=INTS_PER_SECOND0; set_timer1(0); set_timer0(0); setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); } } // NgatTimer1 // #int_TIMER1 Void TIMER1_isr() { freqc_high++; } // **** Chuong trinh chinh **** // void main() { // **** Thiet lap cong vao/ra **** // set_tris_A(0b00000011); set_tris_C(0b10111001); set_tris_B(0); set_tris_D(0); set_tris_E(0); //**** Thiet lap Timer ****// enable_interrupts(INT_TIMER0); enable_interrupts(INT_TIMER1); enable_interrupts(GLOBAL); setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256); setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1); set_timer0(0); set_timer1(0); // TODO: USER CODE!! portE=0b11111111; lcd_init(); delay_ms(1); lcd_putcmd(clear_scr); lcd_putcmd(line_1+1); printf(lcd_putchar,"SIN"); output_low(A0_038); output_high(A1_038); // Chot C=0 va D= 0 chotC(0); output_low(PIN_E0);output_high(PIN_E1);output_high(PIN_E2); chotD(0); lcd_putcmd(line_1+8);lcd_putchar("PRM"); output_low(PIN_D2); output_high(PIN_D3); chuyendoiso(0); //****** Main loop ******// while(1) { // Giao tiepvoimay tinh // if ( rda_overflow) { rda_overflow = 0; giaotiepmt();} // Thietlapchinh tinh hay chinh tho // if ( input(PIN_C3)==0) { delay_ms(10); if (input(PIN_C3)== 0) {While(!input(PIN_C3));++j; chuyendoichot();}} // Cho phep tang tan so // if ( input(PIN_C4)== 0 ) { delay_ms(10); if (input(PIN_C4)== 0) { tangtanso();}} // Cho phep giam tan so // if (input(PIN_C5)== 0) { delay_ms(10); if (input(PIN_C5)== 0) { giamtanso();}} // Cho phep chinh dang xung // if( Input(PIN_A1)==0) { while(!input(PIN_A1)); ++ttxung; dangsong();} } } // Ham chuyen doi lay ra ky tu hien thi. #separate Void convert_f(int32 freq) { int32 temp2=0; temp2 = freq; char1= (temp2 / 100000) + 0x30; temp2 = temp2 % 100000; char2 = (temp2 / 10000) + 0x30; temp2 = (temp2 % 10000); char3 = (temp2 / 1000) + 0x30; temp2 = (temp2 % 1000); char4 = (temp2 / 100) + 0x30; temp2 = temp2 % 100; char5= (temp2/10 ) + 0x30; char6 = (temp2 % 10) + 0x30; } // Ham hien thi LCD #separate void display_freq(int32 freq) { int32 temp=0; lcd_putcmd(line_2); printf(lcd_putchar,"f = "); if (freq < 1000 ) // f = 0 - 999 Hz { temp = freq*1000; convert_f(temp); if ( char1==0x30 ) { if ( char2==0x30) { lcd_putcmd(line_2 + 4); lcd_putchar(" ");lcd_putchar(" ");lcd_putchar(" "); lcd_putchar(" ");lcd_putchar(" ");lcd_putchar(" "); lcd_putchar(char3);} else { lcd_putcmd(line_2 + 4); lcd_putchar(" ");lcd_putchar(" ");lcd_putchar(" "); lcd_putchar(" ");lcd_putchar(" "); lcd_putchar(char2);lcd_putchar(char3);}} else { lcd_putcmd(line_2 + 4); lcd_putchar(" ");lcd_putchar(" ");lcd_putchar(" ");lcd_putchar(" "); lcd_putchar(char1); lcd_putchar(char2);lcd_putchar(char3);} lcd_putcmd(line_2+11);printf(lcd_putchar," Hz" ); lcd_putchar(" ");lcd_putchar(" ");lcd_putchar(" "); goto exit; } else { if (freq >= 1000000 ) // f = 1.000.000 - 20.000.000 MHz { temp = freq/1000; convert_f(temp); if ( char1==0x30 ) { if ( char2==0x30) { lcd_putcmd(line_2 + 4); lcd_putchar(" ");lcd_putchar(" "); lcd_putchar(char3);lcd_putchar(".");lcd_putchar(char4); lcd_putchar(char5);lcd_putchar(char6);} else { lcd_putcmd(line_2 + 4);lcd_putchar(" "); lcd_putchar(char2);lcd_putchar(char3); lcd_putchar(".");lcd_putchar(char4); lcd_putchar(char5);lcd_putchar(char6);}} else { lcd_putcmd(line_2 + 4);lcd_putchar(char1);lcd_putchar(char2); lcd_putchar(char3);lcd_putchar(".");lcd_putchar(char4); lcd_putchar(char5);lcd_putchar(char6);} lcd_putcmd(line_2+11);printf(lcd_putchar,"MHz"); lcd_putchar(" ");lcd_putchar(" "); goto exit;} else { temp = freq; // f = 1.000 - 999.999 KHZ convert_f(freq); if ( char1==0x30 ) { if ( char2==0x30) { lcd_putcmd(line_2 + 4);lcd_putchar(" ");lcd_putchar(" "); lcd_putchar(char3);lcd_putchar("."); lcd_putchar(char4);lcd_putchar(char5);lcd_putchar(char6);} else { lcd_putcmd(line_2 + 4);lcd_putchar(" "); lcd_putchar(char2);lcd_putchar(char3); lcd_putchar(".");lcd_putchar(char4);lcd_putchar(char5); lcd_putchar(char6);}} else { lcd_putcmd(line_2 + 4);lcd_putchar(char1);lcd_putchar(char2); lcd_putchar(char3);lcd_putchar(".");lcd_putchar(char4); lcd_putchar(char5);lcd_putchar(char6); } lcd_putcmd(line_2+11);printf(lcd_putchar,"KHz"); lcd_putchar(" ");lcd_putchar(" "); goto exit;}} exit:; } #separate Void chuyendoiso(int8 i) { int16 temp1=0, sodem=0; int8 sodem2=0,sodem3=0,sodem4=0; sodem=i; sodem2 = (i/100) + 0x30; temp1 = i % 100; sodem3 = (temp1/10) + 0x30; sodem4 = (temp1%10) + 0x30; Lcd_putcmd(line_1+13); lcd_putchar(sodem2); lcd_putchar(sodem3); lcd_putchar(sodem4); } #separate void chotD(int8 i) { output_high(WR); output_high(LDAC); // Chi chot D chinh tho truoc. output_high(Max_A0); output_high(Max_A1); output_low(WR); portb=i; output_high(WR); output_low(LDAC);output_high(LDAC); } #separate void chotC(int8 i) { output_high(WR); output_high(LDAC); // Chi chot D chinh tho truoc. output_low(Max_A0); output_high(Max_A1); output_low(WR); portb=i; output_high(WR); output_low(LDAC);output_high(LDAC); } #separate void tangtanso() { if( j==0) { ++freq_t; if ( freq_t==0) { freq_t=255;} chuyendoiso(freq_t); chotD(freq_t);} if( j==1) { ++freq_f; if ( freq_f==0) { freq_f=255;} chuyendoiso(freq_f); chotC(freq_f);} } #separate void giamtanso() { if( j==0) { --freq_t; if ( freq_t==255) { freq_t=0;} chuyendoiso(freq_t);chotD(freq_t);} if( j==1) { --freq_f; if ( freq_f==255) { freq_f=0;} chuyendoiso(freq_f);chotC(freq_f);} } #separate void chuyendoichot() { if( j==1) {lcd_putcmd(line_1+8);lcd_putchar("FINE"); chuyendoiso(freq_f); output_high(PIN_D2); output_low(PIN_D3); fputc('F');} // Chot C if ( j==2) { j=0; freq_f=0; lcd_putcmd(line_1+8);lcd_putchar("PRM"); // Chot D chuyendoiso(freq_t);chotC(0); output_low(PIN_D2); output_high(PIN_D3); fputc('P');} } #separate void dangsong() { if( ttxung==1){output_low(A0_038); output_high(A1_038); lcd_putcmd(line_1+1);printf(lcd_putchar,"SIN"); output_low(PIN_E0);output_high(PIN_E1);output_high(PIN_E2); lcd_putchar(" ");lcd_putchar(" ");lcd_putchar(" "); lcd_putchar(" ");lcd_putchar(" "); fputc('S');} // sin if( ttxung==2){output_low(A0_038); output_low(A1_038); lcd_putcmd(line_1+1);printf(lcd_putchar,"SQR"); output_high(PIN_E0);output_high(PIN_E1);output_low(PIN_E2); lcd_putchar(" ");lcd_putchar(" ");lcd_putchar(" ");lcd_putchar(" "); fputc('Q');} // vuong if( ttxung==3){output_high(A0_038); output_low(A1_038); lcd_putcmd(line_1+1);printf(lcd_putchar,"TRI"); ttxung=0; output_high(PIN_E0);output_low(PIN_E1);output_high(PIN_E2); fputc('T');} // tam giac } #separate void giaotiepmt() { com = fgetc(); if (com == 'U'){ tangtanso();} if (com == 'D'){ giamtanso();} if (com == 'F'){ j=1; chuyendoichot();} if (com == 'P'){ j=2; chuyendoichot();} if (com == 'S'){ ttxung =1; dangsong();} if (com == 'Q'){ ttxung =2; dangsong();} if (com == 'T'){ ttxung =3; dangsong();} } #define LCD_RS PIN_D0 #define LCD_EN PIN_D1 #define LCD_D4 PIN_D4 #define LCD_D5 PIN_D5 #define LCD_D6 PIN_D6 #define LCD_D7 PIN_D7 #define Line_1 0x80 #define Line_2 0xc0 #define Clear_Scr 0x01 // Dinh dang ban dau tiet kiem duoc bo nho // #separate void LCD_Init ( void ); // ham khoi tao LCD #separate void LCD_SetPosition ( unsigned int cX ); //Thiet lap vi tri con tro #separate void LCD_PutChar ( unsigned int cX ); // Ham viet1kitu/1chuoi len LCD #separate void LCD_PutCmd ( unsigned int cX) ; // Ham gui lenh len LCD #separate void LCD_PulseEnable ( void ); // Xung kich hoat #separate void LCD_SetData ( unsigned int cX ); // Dat du lieu len chan Data #separate void LCD_Sendstr( char str); // Gui mot chuoi ky tu //khoi tao LCD********************************************** #separate void LCD_Init ( void ) { LCD_SetData ( 0x00 ); delay_ms(100); /* thoi gian cho khoi tao LCD >> 15ms */ output_low ( LCD_RS ); // che do gui lenh LCD_SetData ( 0x03 ); /* Khoi tao chuan bi cho che do LCD 4bit */ LCD_PulseEnable(); LCD_PulseEnable(); LCD_PulseEnable(); LCD_SetData ( 0x02 ); /* Thiet lap che do Lcd 4 bit */ LCD_PulseEnable(); /* Gui xung kich hoat */ LCD_PutCmd ( 0x2C ); /* Ham thiet lap tat ca cac dong, ki tu 5*7 */ LCD_PutCmd ( 0x0C ); /* Hien thi bat, khung tat, khong nhap nhay */ LCD_PutCmd ( 0x01 ); /* Xoa man hinh */ LCD_PutCmd ( 0x06 ); /* Thiet lap che do dua vao */ } #separate void LCD_SetPosition ( unsigned int cX ) { /* Thiet lap vi tri con tro */ LCD_SetData ( swap ( cX ) | 0x08 ); LCD_PulseEnable(); LCD_SetData ( swap ( cX ) ); LCD_PulseEnable(); } #separate void LCD_PutChar ( unsigned int cX ) { /* Gui mo ki tu len LCD */ output_high ( LCD_RS ); LCD_PutCmd( cX ); output_low ( LCD_RS ); } #separate void LCD_PutCmd ( unsigned int cX ) { /* Gui mot lenh len LCD */ LCD_SetData ( swap ( cX ) ); /* send high nibble */ LCD_PulseEnable(); LCD_SetData ( swap ( cX ) ); /* send low nibble */ LCD_PulseEnable(); } #separate void LCD_PulseEnable ( void ) { // Thiet lap xung de gui du lieu // output_high ( LCD_EN ); delay_us ( 3 ); // was 10 output_low ( LCD_EN ); delay_ms ( 3 ); // was 5 } #separate void LCD_SetData ( unsigned int cX ) { // Dua du lieu ra cac chan LCD // output_bit ( LCD_D4, cX & 0x01 ); output_bit ( LCD_D5, cX & 0x02 ); output_bit ( LCD_D6, cX & 0x04 ); output_bit ( LCD_D7, cX & 0x08 ); } Phần mã chương trình Visual Basic Dim dulieu As Byte Dim com As Integer Dim nhay As Integer Dim cd As Integer Dim bien_nd As Integer Dim freq As Byte Dim i As Byte Dim data(6) As Byte Dim freqc As Byte Dim xyz As Byte Dim dangxung As String Dim tinhchinh As String Dim cpn As Byte Private Sub connect_Click() ready.Visible = False Timer1.Enabled = False connect.Caption = "&Connected" MSComm1.Output = "S" MSComm1.Output = "I" End Sub Private Sub down_Click() MSComm1.Output = "D" End Sub Private Sub exit_Click() End End Sub Private Sub fadj_Click() MSComm1.Output = "F" iin.Value = False fadj.Value = True tinhchinh = "FINE" End Sub Private Sub Form_Activate() MSComm1.Settings = "9600,N,8,1" MSComm1.CommPort = 1 MSComm1.PortOpen = True End Sub Private Sub iin_Click() MSComm1.Output = "I" iin.Value = True fadj.Value = False tinhchinh = "PRM" End Sub Private Sub menugioithieu_Click() MSComm1.PortOpen = False gioithieu.Show End Sub Private Sub menutrogiup_Click() MSComm1.PortOpen = False trogiup.Show End Sub Private Sub MSComm1_OnComm() freqc = Asc(MSComm1.Input) Text1.Text = Text1.Text & freqc If freqc = 86 Then i = 0 cpn = 1 End If If cpn = 1 Then data(i) = freqc - 48 If i = 7 Then cpn = 0 giatri = Char(data(1)) & Char(data(2)) & Char(data(3)) & Char(data(4)) & Char(data(5)) & Char(data(6)) If sin.Value = True Then dangxung = "SIN" End If If sqr.Value = True Then dangxung = "SQR" End If If tri.Value = True Then dangxung = "TRI" End If If iin.Value = True Then tinhchinh = "PRM" End If If fadj.Value = True Then tinhchinh = "FINE" End If frequency.Text = dangxung & " " & tinhchinh & " " & "345" & " Freq = " & tanso & " giatri" End If End If If freqc = Asc("S") Then sin.Value = True dangxung = "SIN" End If If freqc = Asc("Q") Then dangxung = "SQR" sqr.Value = True End If If freqc = Asc("T") Then dangxung = "TRI" tri.Value = True End If If freqc = Asc("I") Then tinhchinh = "PRM" iin.Value = True End If If freqc = Asc("F") Then tinhchinh = "FINE" fadj.Value = True End If End Sub Private Sub sin_Click() MSComm1.Output = "S" dangxung = "SIN" End Sub Private Sub sqr_Click() dangxung = "SQR" MSComm1.Output = "Q" End Sub Private Sub Timer3_Timer() ten.Left = ten.Left + 10 If ten.Left = 9000 Then ten.Left = -3000 End If End Sub Private Sub Timer1_Timer() If nhay = 2 Then ready.Visible = True End If If nhay = 3 Then ready.Visible = False nhay = 1 End If nhay = nhay + 1 End Sub Private Sub tri_Click() MSComm1.Output = "T" dangxung = "TRI" End Sub Private Sub up_Click() MSComm1.Output = "U" End Sub

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

  • docDAN101.doc