Bản đồ án đã thiết kế hoàn chỉnh hệ thống ghép nối máy tính đo lường nhiều kênh. Hệ thống đã chạy tốt trên phần mềm mô phỏng Proteus. Bản đồ án đã thiết kế hoàn chỉnh hệ thống ghép nối máy tính đo lường nhiều kênh. Hệ thống đã chạy tốt trên phần mềm mô phỏng Proteus. luận văn tốt nghiệp thạc sĩ
MỤC LỤC LỜI MỞ ĐẦU CHƢƠNG TÌM HIỂU VỀ VI ĐIỀU KHIỂN AVR ATMEGA32 1.1 ĐẶT VẤN ĐỀ 1.2 CẤU TRÚC VI ĐIỀU KHIỂN ATMEGA32 1.2.1 Cấu trúc tổng quát ATMEGA32 1.2.2 Một số đặc trƣng 1.3 TỔNG QUAN AVR 1.3.1 ALU – Arithmetic Logic Unit 1.3.2 Thanh ghi trạng thái – Status Register 1.3.3 Tập ghi làm việc đa 1.3.4 Con trỏ ngăn xếp – Stack Pointer (SP) 10 1.3.5 Xử lý reset ngắt – Reset and Interrupt Handling 11 1.4 TỔ CHỨC BỒ NHỚ TRONG ATMEGA32 – AVR ATMEGA32 13 1.4.1 Hệ thống nhớ lập trình lại Flash 13 1.4.2 Bộ nhớ liệu SRAM 13 1.4.3 Bộ nhớ liệu EEPROM 14 1.5 MÔ TẢ THANH GHI - THANH GHI ĐIỀU KHIỂN NGẮT THÔNG THƢỜNG 14 1.6 I/O PORT 15 1.6.1 Port với chức IO thông thƣờng 15 1.6.2 Mô tả ghi I/O Port 16 1.7 NGẮT NGOÀI - EXTERNAL INTERRUPTS 17 1.7.1 Thiết lập kiểu ngắt – Interrupt Sense Control 17 1.7.2 Cho phép ngắt – Interrupt Request Enable 18 1.7.3 Cờ ngắt – Interrupt Flag 18 1.8 BỘ ĐỊNH THỜI 8BIT TIMER/COUNTER 18 1.8.1 Hoạt động Timer/Couter 19 1.8.2 Đơn vị đếm 21 1.8.3 Đơn vị so sánh ngõ 21 1.9 BỒ ĐỊNH THỜI/ĐẾM TIMER/COUNTER 16-BIT 22 1.9.1 Sơ đồ khối số đặc điểm 22 1.9.2 Một số định nghĩa 23 1.10 SPI (SERIAL PERIPHERAL INTERFACE) 23 1.10.1 Sơ đồ định nghĩa 23 1.11 BỘ SO SÁNH TƢƠNG TỰ (ALALOG COMPARATOR) 25 1.12 HỆ THỐNNG XUNG CLOCK 27 1.13 BỘ BIẾN ĐỔI A/D 28 CHƢƠNG GIAO TIẾP QUA CỔNG COM 31 2.1 GIỚI THIỆU 31 2.2 ƢU ĐIỂM CỦA GIAO DIỆN NỐI TIẾP RS232 32 2.3 NHỮNG ĐẶC ĐIỂM CẦN LƢU Ý TRONG CHUẨN RS232 32 2.4 CÁC MỨC ĐIỆN ÁP ĐƢỜNG TRUYỀN 32 2.5 CỔNG RS232 TRÊN PC 33 2.6 QUÁ TRÌNH DỮ LIỆU 34 CHƢƠNG THIẾT KẾ HỆ THỐNG GHÉP NỐI MÁY TÍNH ĐO LƢỜNG NHIỀU KÊNH 36 3.1 THIẾT KẾ HỆ THỐNG 36 3.2 XÂY DỰNG CHƢƠNG TRÌNH PHẦN MỀM 47 3.2.1 Chƣơng trình cho PC 47 3.2.2 Chƣơng trình viết cho vi điều khiển 52 KẾT LUẬN 56 TÀI LIỆU THAM KHẢO 57 LỜI MỞ ĐẦU Ngành công nghệ điện tử phát triển nhanh ngày nhiều sản phẩm xuất đời sống, sản xuất hay thị trƣờng nhằm giúp cho ngƣời cải thiện chất lƣợng sống Trong q trình cơng nghiệp hóa đại hóa ngày nay, vấn đề cần thiết phải áp dụng cơng nghệ tự động vào q trình sản xuất nhƣ quản lý nhằm nâng cao suất làm việc cơng nhân Trên tình thần em chọn đề tài “Thiết kế hệ thống ghép nối máy tính đo lường nhiều kênh” làm đồ án tốt nghiệp Trong trình nhận đề tài với nỗ lực thân giúp đỡ tận tình thầy Nguyễn Văn Dƣơng, em hồn tất xong đồ án Tuy nhiên thời gian nhƣ kinh nghiệm thân có hạn nên đồ án khơng tránh đƣợc sai sót, em mong đƣợc đóng góp ý kiến bảo thầy cô bạn Cuối em xin chân thành cảm ơn thầy cô giáo khoa Điện Điện tử trƣờng Đại Học Dân Lập Hải Phòng tạo điều kiện giúp đỡ để em hoàn thành đồ án Đặc biệt em xin chân thành cảm ơn Nguyễn Văn Dƣơng giảng viên hƣớng dẫn tận tình hƣớng dẫn bảo em suốt trình học trƣờng nhƣ thời gian làm đồ án vừa qua Sinh Viên Vũ Duy Đồn CHƢƠNG TÌM HIỂU VỀ VI ĐIỀU KHIỂN AVR ATMEGA32 1.1 Đặt vấn đề Trên thị trƣờng có hàng trăm loại vi xử lý vi điều khiển việc lựa chọn loại cụ thể phù hợp với ứng dụng ta trở thành cơng việc khó khăn Thơng thƣờng việc lựa chọn phụ thuộc vào số yếu tố nhƣ: tính cơng việc, giá thành, thị trƣờng, khả thiết kế, Nếu xét phƣơng diện giá thành họ vi điều khiển AVR có giá thành cao gấp nhiều lần so với vi điều khiển loại cũ nhƣ 89C51, nhƣng xét phƣơng diện chức ứng dụng giá thành AVR lại rẻ nhiều Để có chức nhƣ AVR 89C51 cần nhiều mạch hỗ trợ bên ngoài, giá thành mạch bên làm tăng giá thành chung kích cỡ mạch, cơng suất tiêu thụ tăng lên nhiều Ngƣợc lại, với AVR đƣợc tích hợp nhiều thành phần ngoại vi vỏ chip nên kết cấu mạch nhỏ gọn nhiều theo giá thành cơng suất tiêu thụ giảm Ngày ứng dụng điện tử điều khiển đòi hỏi phải thật nhỏ gọn có trình độ cơng nghệ cao Ngƣời làm kĩ thuật ln ln tìm tịi, khám phá thành tựu cơng nghệ Vì lý trên, em định chọn họ vi điều khiển AVR mà cụ thể vi điều khiển ATMEGA32 làm dối tƣợng nghiên cứu phục vụ cho đề tài 1.2 Cấu trúc vi điều khiển ATMEGA32 1.2.1 Cấu trúc tổng quát ATMEGA32 ATMEGA32 loại vi điều khiển CMOS, nguồn thấp, bit, xây dựng tảng cấu trúc tập lệnh thu gọn tiên tiến cho AVR RISC – Reduced Instruction Set Computer CISC – Complex Instruction Set Computer Khả thực thi 1MIPS (Mega Instruction Per Second) 1MHz Bao gồm 32 ghi làm việc (General Purpose Working Register) liên kết trực tiếp với xử lý số học ALU (Arithmetic Logic Unit) Hình 1.1 Sơ đồ khối vi điều khiển ATMEGA32 Atmega32 có tính sau: 32K byte Flash có khả lập trinh đƣợc tƣơng thích hoạt động Read-While-Write 1024 byte EEPROM 2K byte SRAM 32 cổng xuất nhập đa dụng Tính On-chip debug Ngõ JTAG Timer/Counter Internal External Interrupt USART TWI kênh ADC 10-bit Watch_dog timer với dao động on_chip riêng biệt SPI Tính ISP thơng qua cổng SPI Boot Loader Hình 1.2 Sơ đồ chân Atmega32 + VCC: Điện áp nguồn nuôi + GND: Nối mass + PortA (PA7…PA0): PortA nhận vào tín hiệu tƣơng tự (Analog) chuyển đổi thành tín hiệu số (Digital) Ngồi PortA đƣợc tách làm vào/ra hƣớng bits chuyển đổi A/D không đƣợc sử dụng Khi chân PA0 đến PA7 lối vào đƣợc đặt xuống chế độ thấp từ bên ngồi, chúng nguồn dịng điện trở nối lên nguồn dƣơng đƣợc kích hoạt Các chân PortA vào trạng thái có điện trở cao tín hiệu Reset chế độ tích cực khơng có tín hiệu xung đồng hồ Port A cung cấp đƣờng địa chỉ/dữ liệu vào/ra hoạt động theo kiểu đa hợp kênh dùng nhớ SRAM bên + PortB, D: tƣơng tự nhƣ PortA + PortC (PC7…PC0): tƣơng tự nhƣ PortA Nhƣng cho phép giao diện JTAG, chân PC5, PC3, PC2 hoạt động reset lại tín hiệu + Reset: Lối vào đặt lại Bộ vi điều khiển đƣợc đặt lại chân chế độ thấp 50ns, xung ngắn khơng tạo tín hiệu đặt lại + XTAL1: Lối vào khuếch đại đảo lối vào mạch tạo xung nhịp bên + XTAL2: Lối khuếch đại đảo: XTAL1 XTAL2 lần lƣợt lối vào lối khuếch đại đảo Bộ khuếch đại đƣợc bố trí để làm tạo dao động chip Một tinh thể thạch anh cộng hƣởng gốm đƣợc sử dụng Để điều khiển vi điều khiển từ nguồn xung nhịp bên ngoài, chân XTAL2 để trống, chân XTAL1 đƣợc nối với dao động bên ngồi + AREF: Là chân chuyển đổi tín hiệu analog cho chuyển đổi A/D + AVCC: Là chân nguồn cho PortA cho chuyển đổi A/D Nó tự kết nối với nguồn ADC không đƣợc sử dụng 1.2.2 Một số đặc trƣng Hoạt động: Các lệnh đƣợc chứa nhớ chƣơng trình Flash Memory dƣới dạng ghi 16 bit Bộ nhớ chƣơng trình đƣợc truy cập chu kỳ xung Clock lệnh chứa Program memory đƣợc nạp vào ghi lệnh (instruction Register), ghi lệnh tác động nhƣ lựa chọn tệp ghi nhƣ RAM cho ALU thực thi Trong thực thi chƣơng trình, địa dịng lệnh thực thi đƣợc định đếm chƣơng trình – PC (Program Counter) AVR có ƣu điểm hầu hết lệnh đƣợc thực thi chu kỳ xung nhịp, mà số trƣờng hợp dù nguồn clock AVR nhỏ số loại vi điều khiển khác (nhƣ PIC) nhƣng thời gian thực thi nhanh Hình 1.3 Cấu trúc bên AVR 1.3 Tổng quan AVR Lõi AVR sử dụng kiến trúc Harvard – với bus riêng biệt cho chƣơng trình liệu Lệnh từ nhớ chƣơng trình thực thi thơng qua ống đơn cấp Khi lênh thực thi, lệnh đƣợc nhốt (pre-fetch) từ nhớ chƣơng trình, cho phép lệnh đƣợc thực thi chu kì clock Các 32 ghi (8-bit) làm việc cho phép truy xuất nhanh chu kỳ clock Trong hoạt động thơng thƣờng ALU, tốn hạng xuất từ ghi làm việc, lệnh thực thi, kết lƣu ngƣợc lại ghi làm việc chu kì clock số 32 ghi đƣợc dùng nhƣ trỏ địa gián tiếp 16bit sử dụng cho địa không gian liệu ghi địa dùng nhƣ trỏ địa look-up table nhớ Flash Bộ ALU hỗ trợ hoạt động tính tốn số học logic ghi với nhau, hay ghi với số Các hoạt động ghi đơn đƣợc thực ALU Sau tính tốn, ghi trạng thái (Status Register) cập nhật thông tin liên quan đến kết tính tốn Dịng chƣơng trình (Program Flow) đƣợc cung cấp lệnh nhảy có điều kiện khơng điều kiện, định địa chì trực tiếp đến tồn khơng gian địa Hầu hết lệnh AVR dạng 16-bit Mỗi địa nhớ chƣơng trình chứa lệnh 16 32-bit Bộ nhớ chƣơng trình chia làm phần: Boot Loader vùng ứng dụng Cả sử dụng lockbit để bảo vệ đọc/ghi Lệnh SPM thực thi việc ghi liệu vào vùng flash ứng dụng phải đƣợc đặt vùng Boot Loader Trong trình ngắt hay hàm/chƣơng trình đƣợc gọi, địa trả đếm chƣơng trình lƣu ngăn xếp (stack) Stack đƣợc phân bồ hiệu phần nhớ SRAM, vậy, độ lớn stack phụ thuộc vào SRAM việc sử dụng SRAM Chƣơng trình ngƣời dùng cần phải khởi tạo giá trị cho SP – Con trỏ ngăn xếp (Stack Pointer) chƣơng trình sau reset trƣớc thực việc gọi hàm hay chƣơng trình ngắt đƣợc thực thi Module ngắt linh hoạt có ghi điều khiển riêng khơng gian IO có bit cho phép ngắt toàn cục ghi trạng thái (Status Register) Tất ngắt có vector ngắt riêng bảng vector ngắt Các ngắt có ƣu tiên ngắt theo vị trí ngắt Địa ngắt thấp độ ƣu tiên ngắt cao 1.3.1 ALU – Arithmetic Logic Unit Bộ ALU hiệu suất cao AVR hoạt động liên kết trực tiếp với 32 ghi làm việc Trong chu kì clock, hoạt động tính tốn số học ghi ghi với liệu trực tiếp đƣợc thực thi Hoạt động ALU đƣợc chia làm phần chính: xử lý số học, phép tốn logic phép toán với bit Một số bổ sung kiến trúc cho phép sử dụng nhân tử hiệu quả, cho khơng dấu/có dấu định dạng phân số 1.3.2 Thanh ghi trạng thái – Status Register Thanh ghi chứa kết liên quan đến lệnh xử lý số học gần Kết chứa ghi đƣợc sử dụng để thực hoạt động có điều kiện Thanh ghi trạng thái không tự động lƣu lại nhảy vào interrupt không tự động phục hồi (restore) quay về, cần thực điều phần mềm Bit 7-I : cho phép ngắt tồn cục Khơng cho phép ngƣời sử dụng tự ý xóa Chỉ bị xóa có ngắt xuất đƣợc dẫn RETI cho ngắt Có thể đƣợc đặt đƣợc xóa SEI CLI Bit 6-T : bit lƣu trữ Có thể chép từ BST sang BLD ngƣợc lại Hình 3.5 Giao diện SPI Mỗi chip Master hay Slave có ghi liệu bits Cứ xung nhịp Master tạo đƣờng giữ nhịp SCK, bit ghi liệu Master đƣợc truyền qua Slave đƣờng MOSI, đồng thời bit ghi liệu chip Slave đƣợc truyền qua Master đƣờng MISO Do gói liệu chip đƣợc gởi qua lại đồng thời nên trình truyền liệu đƣợc gọi “song cơng” Hình 3.6 mơ tả q trình truyền gói liệu thực module SPI AVR, bên trái chip Master bên phải Slave Hình 3.6 Truyền liệu SPI Cực xung giữ nhịp, phase chế độ hoạt động: cực xung giữ nhịp (Clock Polarity) đƣợc gọi tắt CPOL khái niệm dùng trạng thái 43 chân SCK trạng thái nghỉ Ở trạng thái nghỉ (Idle), chân SCK đƣợc giữ mức cao (CPOL=1) thấp (CPOL=0) Phase (CPHA) dùng để cách mà liệu đƣợc lấy mẫu (sample) theo xung giữ nhịp Dữ liệu đƣợc lấy mẫu cạnh lên SCK (CPHA=0) cạnh xuống (CPHA=1) Sự kết hợp SPOL CPHA làm nên chế độ hoạt động SPI Nhìn chung việc chọn chế độ không ảnh hƣởng đến chất lƣợng truyền thông mà cốt cho có tƣơng thích Master Slave Các gói SPI cho chuyển đổi ADC MCP3204 đƣợc tạo thành từ 3byte: Byte Trong byte này, Master ghi chuỗi bit: '0' '0' '0' '0' '0' '1' 'S' 'D2' Byte Trong byte này, Master ghi theo trình tự: 'D1' 'D0' 'X' 'X' 'X' 'X' 'X 'X' Trong D2, D1, D0 lựa chon kênh tín tiệu tƣơng tự vào D2 D1 D0 Channel 0 0 Channel 0 Channel Channel 1 Và Slaver trả theo trình tự: '?' '?' '?' 'N' 'B11' 'B10' 'B9' 'B8' Trong ? bit khơng xác định 'N' bit rỗng “0” 44 Byte Trong byte này, Master ghi byte không vào slave Trong thời gian, Slaver trả giá trị chuyển đổi bit B0 tới B7 * Khối Vi điều khiển Thực giao tiếp với ADC MCP3204 theo chuẩn SPI để nhận giá trị đo lƣờng giao tiếp với máy tính theo chuẩn RS232 để nhận tín hiệu điều khiển từ máy tính truyền liệu Ở em sử dụng vi điều khiển AVR Atmega32 * Khối giao tiếp cổng COM Có nhiều mạch giao chuẩn RS232 máy tính thiết bị khác Ở em dùng mạch chuẩn giao tiếp RS232 với IC Max232 Max232 IC chuyên dùng cho giao tiếp RS232 thiết bị ngoại vi Max232 IC hãng Maxim Đây IC chay ổn định đƣợc sử dụng phổ biến mạch giao tiếp chuẩn RS232 Giá thành Max232 phù hợp tích hợp hai kênh truyền cho chuẩn RS232 Dịng tín hiệu đƣợc thiết kế cho chuẩn RS232 Mỗi đầu truyền cổng nhận tín hiệu đƣợc bảo vệ chống lại phóng tĩnh điện Ngồi Max232 cịn đƣợc thiết kế với nguồn +5V cung cấp nguồn công suất nhỏ Mạch giao tiếp nhƣ hình 3.7 Hình 3.7 Sơ đồ giao tiếp RS 232 dùng MAX 232 45 - Vi maïch MAX 232 có nhiệm vụ chuyển đổi mức TTL lối vào thành mức +3…+15V -3…-15V thành mức TTL phía nhận hay mức +10V –10V phía truyền - Vi mạch MAX 232 có hai đệm hai nhận Đường dẫn điều khiển lối vào CTS, điều khiển việc xuất liệu cổng nối tiếp cần thiết, nối với chân vi mạch MAX 232 Còn chân RST (chân 10 vi mạch MAX ) nối với đường dẫn bắt tay để điều khiển trình nhận Thường đường dẫn bắt tay nối với cổng nối tiếp qua cầu nối, để không dùng đến hở mạch cầu Cách truyền liệu đơn giản dùng ba đường dẫn TxD, RxD GND (mass) * Mạch ngun lý Hình 3.8 Mạch nguyên lý giao tiếp máy tính vi điều khiển 46 3.2 Xây dựng chƣơng trình phần mềm 3.2.1 Chƣơng trình cho PC Chƣơng trình đƣợc viết Visual Basic, có giao diện nhƣ hình 3.9 Hình 3.9 Giao diện chƣơng trình đo lƣờng nhiều kênh * Lƣu đồ thuật toán Begin Đặt chế độ đo lƣờng Đọc liệu từ thiết bị - Tính tốn, hiển thị - Lƣu liệu vào file Tiếp tục? False Begin 47 True * Mã chƣơng trình Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long) Dim Inputuart As String Private Sub Check1_Click() End Sub Private Sub Command1_Click() End End Sub Private Sub Command2_Click() Timer1.Enabled = True End Sub Private Sub Command3_Click() Timer1.Enabled = False End Sub Private Sub Command4_Click() Me.MSComm1.Output = Chr(0) End Sub Private Sub Command5_Click() Me.MSComm1.Output = Chr(1) End Sub Private Sub Command6_Click() 48 Me.MSComm1.Output = Chr(2) End Sub Private Sub Command7_Click() Me.MSComm1.Output = Chr(3) End Sub Private Sub Form_Load() MSComm1.CommPort = MSComm1.Settings = "9600,N,8,1" Me.MSComm1.RThreshold = MSComm1.InputLen = MSComm1.PortOpen = True Check1.Value = Check2.Value = Check3.Value = Check4.Value = End Sub Private Sub MSComm1_OnComm() Dim InputText As String If Me.MSComm1.CommEvent = comEvReceive Then InputText = MSComm1.Input txtOutput.Text = txtOutput.Text + InputText 49 txtOutput.SelStart = Len(txtOutput.Text) Sleep (50) End If End Sub Private Sub Text1_Change() End Sub Private Sub Text5_Change() End Sub Private Sub txtInput_Change() End Sub Private Sub txtInput_KeyPress(KeyAscii As Integer) Me.MSComm1.Output = Chr(Key) End Sub Private Sub txtOutput1_Change() End Sub Private Sub Timer1_Timer() If Check1.Value = Then Me.MSComm1.Output = Chr(0) End If If Check2.Value = Then 50 Me.MSComm1.Output = Chr(1) End If If Check3.Value = Then Me.MSComm1.Output = Chr(2) End If If Check4.Value = Then Me.MSComm1.Output = Chr(3) End If If (Check1.Value = 0) And (Check2.Value = 0) And (Check3.Value = 0) And (Check4.Value = 0) Then txtOutput.Text = "Ban hay chon mot kenh!" End If End Sub Dim FileNum As Integer RecordLen = Len(dataArray(1)) FileNum = FreeFile Open "Data.Dat" For Random As FileNum Len = RecordLen For i = To sampleSize - dataArray(i) = 10 * Sin(10 * 3.1415 * i / sampleSize) Put #FileNum, i, dataArray(i) Next i End Sub 51 3.2.2 Chƣơng trình viết cho vi điều khiển * Lƣu đồ gải thuật cho vi điều khiển Start Khởi động Timer0, Timer1 Đặt giá trị ban đầu Cờ truyền Flag=0 Cho phép VĐK truyền Y - Nhận liệu đo xử lý phù hợp - Truyền liệu Flag=1 Y Flag=0? Y N VĐK truyền? N N Time out Cho phép PC truyền N Time out PC truyền? Y Y Nhận data, điều khiển chọn kênh đo Flag=0 N 52 * Mã chƣơng trình #include #include #include #include #include "adc_ex.h" void uart_char_tx(unsigned char chr) { if (chr == '\n') uart_char_tx('\r'); while (bit_is_clear(UCSRA,UDRE)) { //cho den bit UDRE=1 } UDR=chr; } static FILE uartstd= FDEV_SETUP_STREAM(uart_char_tx, NULL,_FDEV_SETUP_WRITE); uint16_t result; unsigned char u_Data; 53 int main(void) { //Initialize External ADC Module InitADCEx(); //Khoi dong Module Uart //set baud, 57.6k ung voi f=8Mhz, xem bang 70 trang 165, Atmega32 datasheet UBRRH=0; UBRRL=103; //set khung truyen va kich hoat bo nhan du lieu UCSRA=0x00; UCSRC=(1