Với sự phát triển của kỹ thuật công nghệ ngày càng cao, và việc ứng dụng kỹ thuật vi điều khiển vào đo lường, giám sát ngày càng nhiều. Và “hệ thống đo đồ thị phụ tải” chính là một trong những đề tài ứng dụng kỹ thuật trên.
Với nhiều đáp ứng hơn so với các thiết bị đo lường điện tử trước đây là có khả năng tính toán số liệu bằng phần mềm, giao tiếp được với máy tính và hiển thị sự thay đổi số liệu dưới dạng đồ thị. Điều này tạo điều kiện thuận lợi cho việc sử dụng, giám sát và điều khiển.
Khâu cơ bản của đề tài là đo lường các đại lượng điện bằng các phương pháp đo truyền thống. Nhưng phía sau là các bộ phận xử lý ADC và điều khiển, nên ta cần xử lý lại tín hiệu sao cho phù hợp.
Trong đề tài này em sử dung họ vi điều khiển PIC 16F877a, vì PIC là họ vi điều khiển mà hiện nay được sử dụng khá phổ biến, do những tính năng hữu dụng và nhất là PIC đã được tích hợp ADC, mà đó là phần quan trọng trong đề tài để em đọc điện áp và dòng điện.
Khi đã có các đại lượng điện được đo đạc cụ thể thì phần công việc còn lại là do lập trình sao cho vi điều khiển thu thập được các số liệu và tính toán để hiển thị ra các đại lượng mong muốn.
18 trang |
Chia sẻ: ngtr9097 | Lượt xem: 2107 | Lượt tải: 3
Bạn đang xem nội dung tài liệu Đồ án Thiết kế và thi công hệ thống đo đồ thị phụ tải công suất 3KVA, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Chöông2:
GIỚI THIỆU HỌ VI ĐIỀU KHIỂN PIC 16F877/16F877A
IC 16F877A là một vi điều khiển được chế tạo theo công nghệ RISC của hãng Microchip, có 40 pin.
Hình 2.1: Sơ đồ chân PIC 16F877
2.1 Các thông số chính của Pic 16F877A:
Tập lệnh: gồm 35 lệnh đơn, gần như các lệnh được thực hiện trong một chu kỳ lệnh (một chu kỳ lệnh bằng 4 lần chu kỳ xung clock) ngoại trừ các lệnh rẽ nhánh thực hiên trong 2 chu kỳ lệnh.
Tần số hoạt động: 0 Mhz đến 20 Mhz, chu kỳ lệnh ở tần số 20 Mhz là 200ns.
Bộ nhớ chương trình (FLASH ROM): 8Kx14bit.
Bộ nhớ dữ liệu: 368 byte RAM và 256 byte EEFROM.
Điện áp làm việc: từ 2V đến 5VDC.
Dòng điện điều khiển: 25mA cho cả mức High và Low.
Số nguồn ngắt: 14.
Chức năng WATCHDOG hoạt động với bộ dao động RC bên trong vi điều khiển.
Có 8 kênh chuyển đổi tương tự số (ADC) 10 bit. Có 2 bộ PWM với độ phân giải 10 bit. Có khả năng giao tiêp nối tiếp và giao tiếp song song.
Hình 2.2:Sơ đồ khối của PIC 16F877
2.2 Cấu trúc các cổng vào/ra:
PIC 16F877 có 5 port có cấu trúc và chức năng khác nhau
2.2.1 PORT A:
Gồm 6 chân điều khiển vào/ra được đa hợp với 5 kênh ADC (AN0 đến AN4). Khi được cấu hình như các kênh ADC các tín hiệu này chỉ là ngõ vào điện áp analog, trạng thái ngõ vào khi đọc luôn ở mức 0. Xem hình 2.3, 2.4. Khi không sử dụng như các kênh ADC thì các tín hiệu này được cấu hình như các ngõ ra hoặc ngõ vào tuỳ thuộc vào bít điều khiển hướng TRISA, nếu bit TRISA = 1: tín hiệu tương ứng là ngõ ra (vì lúc này hai MOSFET N và P đều ngưng dẫn), nếu bit TRISA = 0: tín hiệu tương ứng là ngõ ra, trạng thái logic ở ngõ ra phụ thuộc vào bit dữ lêu là 1, thông qua data FF và TRIS latch, ngõ ra cổng OR ở mức 0, MOSFET P dẫn và cung cấp Vdd ngõ ra, trong khi ngõ ra cổng AND là 0 nên MOSFET N ngưng dẫn, ta được ngõ ra ở mức 1. Ngược lại, nếu bit data là 0 thì MOSFET P ngưng dẫn, trong khi đó MOSFET N dẫn, kéo ngõ ra về mức logic 0. Tín hiệu RA4 trong PORT A được đa hợp giữa nguồn cung cấp xung từ bên ngoàicho bộ Timer 0. Khi được cấu hình như một I/O, RA4 sẽ được điều khiển bởi tín hiệu TRISA tương ứng, nếu TRISA = 1: ngõ ra cổng AND là mức 0, nên MOSFET N ngưng dẫn, RA4 là ngõ vào, ngược lai: RA4 là ngõ ra cực thu để hở (open collector) và mức logic phụ thuộc vào data bit, nếu data bit là 1 thì MOSFET N ngưng dẫn, do đó ngõ ra gần như cách ly nên thực tế thì thương dùng điện trở ngoài kéo lên (pull up resistor), giá trị điện trở phụ thuộc vào dòng mức cao cần điều khiển, tuy nhiên không vượt quá 25mA.
Hình 2.3: Cấu trúc của các chân RA0 đến RA3 và RA5
Hình 2.4 Cấu trúc chân RA4
2.2.2 PORT B:
Gồm 8 chân điều khiển vào/ra.
Hình 2.5: Cấu trúc của RB0 đến RB3
Có thể định cấu hình các tín hiệu này như là ngõ ra hoặc ngõ vào phụ thuộc vào bit TRISB tương ứng. Nếu là ngõ ra thì MOSFET P luôn ngưng dẫn, tín hiệu ra phụ thuộc vào ngõ ra của bộ đệm, nếu là ngõ vào và nếu bit RBPU là 0 thì MOSFET P dẫn tương đương một điện trở vài kiolohm kéo ngõ vào lên nguồn để tăng dòng HIGH input.
Cấu trúc các chân này tương tự như RB0-RB3 tuy nhiên khi đựơc cấu hình như ngõ vàothì sự thay đổi trạng thái logic tại bất kỳ một trong bốn chân này cũng sẽ tạo ra sự kiện ngắt (interrupt on_change RB)
Hình 2.6: Cấu trúc RB4 đến RB7
2.2.3 PORT C:
Cấu trúc của RC0-RC2 và RC5-RC7, trong các tín hiệu này đáng quan tâm nhất là RC6 và RC7 do đa hợp với các đường USART là TxD và RxD dùng trong trao đổi dữ liệu (h ình 2.7):
Hình 2.7: Cấu trúc của RC0-RC2 và RC5-RC7
Hình 2.8:Cấu trúc của RC3 và RC4
2.2.4 PORT D:
Gồm 8 bit điều khiển vào/ra có thể định cáu hình là ngõ vào hoặc ngõ ra phụ thuộc vào các bit TRISD tương ứng. Khi là ngõ ra thì tín hiệu là ngõ ra của một bộ đệm.
Hình 2.9: Cấu trúc PORT D
2.2.5 PORT E:
RE được đa hợp với 3 kênh ADC, khi sử dụng như các bộ ADC thì trạng thái đọc luôn là logic 0. Xem hình 2.10.
Hình 2.10: Cấu trúc PORT E
2.3 Bản đồ địa chỉ thanh ghi và bộ nhớ RAM:
Các thanh ghi và bộ nhớ trong PIC được ghi nhớ trong 3 bank địa chỉ, khi muốn truy xuất đến thanh ghi hoặc ô nhớ nào phải thực hiện việc chuyển đến bank thanh ghi đó ngoại trừ các thanh ghi STATUS, FSR, PCL, PCLATH, INTCON và các ô nhớ có địa chỉ từ 70H đến7FH. Việc định bank cho thanh ghi được điều chỉnh bởi 2 bit thấp RP0 và RP1 trong thanh ghi STATUS:
Bảng 2.1: Bảng định trang
Hình 2.11: Bản đồ địa chỉ thanh ghi
2.4 Bản đồ bộ nhớ chương trình :
Bộ nhớ chương trình chia làm 4 trang, mỗi trang có kich thước 2Kx14bit , nếu dung lượng mã lệnh dưới 2K thì không cần quan tâm đến lưu ý này, ngược lại, khi muốn chuyển đến các đoạn chương trình nằm ở trang nào dùng các lệnh gọi chương trình con (CALL) hoặc lệnh nhảy không điều kiện (GOTO) phải thực hiện chuyển trang bộ nhớ. Hai bit 3 và 4 của PCLATH cho phép chọn trang (xem bảng 2.2).
Hình 2.12: Bản đồ bộ nhớ chương trình
PC_LATH
PC_LATH
TRANG
0
0
0 (DEFAULT)
0
1
1
1
0
2
1
1
3
Bảng 2.2: Cho phép chọn trang
2.5 Tập lệnh PIC:
ADDLW (Add literal and W):
Cú pháp: ADDLW K
Trong đó: K là một giá trị một byte (0->255)
Thực hiện lệnh: W<- W +
Thời gian:1 chu kì
Cờ ảnh hưởng:C;Z
Ví dụ: W = 0x 10
ADDLW 0x21
Sau khi thực hiện lệnh, nội dung thanh ghi W = 0x31
ADDWF (Add W and file):
Cú pháp: ADDWF F,d
Trong đó: F là một ô nhớ RAM (có địa chỉ từ 0 đến 127) hoặc là một thanh ghi
d: hướng di chuyển dữ liệu ; d= 0 : kết quả lưu vào W; d=1: két quả lưu vào thanh ghi F
Thực hiện lệnh: thanh ghi kết quả <-W+F
Thời gian:1 chu kì
Cờ ảnh hưởng:C,Z
ANDLW (And literal with W):
Cú pháp: ANDLW K
Trong đó: K là một giá trị một byte (0->255)
Thực hiện lệnh: W<- W and K
Thời gian:1 chu kì
Cú pháp: ANDWF F,d
Trong đó: F là một ô nhớ RAM (9 có địa chỉ từ 0 đến 127)hoặc là một thanh ghi
d: hướng di chuyển dữ liệu; d=0: kết quả lưu vào W ; d= 1 : keets quả lưu vào thanh ghi F .
Thực hiện lệnh: thanh ghi kết quả <-W and K
Thời gian:1 chu kì
Cờ ảnh hưởng:Z
BCF (Bit clear F):
Cú pháp: BFS F,b
Trong đó: F là một thanh ghi.
b là vị trí bit trongg thanh ghi (b =[0,7] )
Thực hiện lệnh: bit thứ b trong F<- 1
Thời gian:1 chu kì
Cờ ảnh hưởng: không
BTFSC (Bit test, skip if clear):
Cú pháp: BTFSC F,b
Trong đó: F là một thanh ghi; b là vị trí bit trong thanh ghi (b=[0,7])
Thực hiện lệnh:nếu bit của thanh ghi F là 0 thì bỏqua lệnh kế tiếp ( thay thế lệnh kế tiếp bằng một lệnh NOP), ngược lại sẽ thự hiện lệnh kế tiếp.
Thời gian: 1 hoặc 2 chu kì ( nếu bit b trong F là 0 thì mất 2 chu kì để thực hiện lệnh)
Cờ ảnh hưởng:không
BTFSS (Bit test, skip if set):
Cú pháp: BTFSS F,b
Trong đó: F là một thanh ghi.
b là vị trí bit trong thanh ghi (b=[0,7])
Thực hiện lệnh: Nếu bit b của thanh ghi Flà 1 thì bỏ qua lệnh kế tiếp (thay thế lệnh kế tiếp bằng một lệnh NOP), ngược lại sẽ thực hiện lênh kế tiếp.
Thời gian: 1 hoăc 2 chu kì (nếu bit b trong F là 1 thì mất 2 chu kì đẻ thực hiện lệnh)
Cờ ảnh hưởng: không
CALL (Call subroutine):
Cú pháp: CALL
Đây là lệnh gọi thực hiện 1 chương trình con
Thời gian: 2 chu kì
Cờ ảnh hưởng: không
CLRF (Clear F):
Cú pháp: CLLRF F
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127) hộăc là một thanh ghi
Thực hiện lệnh: F<- 0x00
Thời gian:1 chu kì
Cờ ảnh hưởng: Z=1
CLRW (Clear W):
Cú pháp: CLRW
Thực hiện lệnh: W<- 0
Thời gian: 1 chu kì
Cờ ảnh hưởng: Z=1
CLRWDT (Clear watchdog timer):
Cú pháp: CLRWDT
Thực hiện lệnh: WDT<-0
WDT prescaler <-0
Bit TO <- 1
Bit PD <- 1
Thời gian thực hiện:1 chu kì
Cờ ảnh hưởng: TO,PD
COMF (Complement F):
Cú pháp: COMF F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127) hoặc là một thanh ghi
d: hướng di chuyển dữ liệu ;d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F
Thực hiện: thannh ghi đích <- not (F)
Thời gian:1 chu kì
Cờ ảnh hưởng:Z
DECF (decrement F):
Cú pháp: DECF F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127) hoặc là một thanh ghi
d: hướng di chuyển dữ liệu ; d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F
Thực hiện: thannh ghi đích <- F-1
Thời gian:1 chu kì
Cờ ảnh hưởng:Z
.DECFSZ (Decrement F, skip if zero):
Cú pháp: DECFSZ F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127) hoặc là một thanh ghi
d: hướng di chuyển dữ liệu ;d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F
Thực hiện: thannh ghi đích <- F-1, nếu kết quả là 0 thì lệnh kế tiếp bị bỏ qua (thay thế lệnh kế tiếp bằng lệnh NOP), ngược lại sẽ thực hiện lệnh kế tiếp.
Thời gian: 1 hoặc 2 chu kì (nếu kết quả là zero thì mất 2 chu kì )
Cờ ảnh hưởng: không.
GOTO (unconditional branch):
Cú pháp: GOTO
Thực hiện: chuyển đến thực hiện lênh tại vị trí được chỉ ra bởi .
Thời gian: 2 chu kì
Cờ ảnh hưởng: không
INCF (Increment F):
Cú pháp: INCF F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127)hoặc là một thanh ghi
d: hướng di chuyển dữ liệu ;d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F
Thực hiện: thannh ghi đích <- F+1
Thời gian:1 chu kì
Cờ ảnh hưởng:Z
INCFSZ (Increment F, skip if zero):
Cú pháp: INCFSZ F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127)hoặc là một thanh ghi
d: hướng di chuyển dữ liệu ; d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F
Thực hiện: thannh ghi đích <- F+1, nếu kết quả là 0 thì lệnh kế tiếp bị bỏ qua (thay thế lệnh kế tiếp bằng lệnh NOP), ngược lại sẽ thực hiện lệnh kế tiếp
Thời gian:1 hoặc 2 chu kì(nếu kết quả là zero thì mất 2 chu kì )
Cờ ảnh hưởng: khônng
ORLW (Inclusive OR literal with F):
Cú pháp: IORLW k
Trong đó: k là một gía trị 1 byte
Thực hiện: W <- W OR k
Thời gian: 1 chu kì
Cờ ảnh hưởng: Z
IORWF (Inclusive OR W with F):
Cú pháp: IORWF F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127) hoặc là một thanh ghi
d: hướng di chuyển dữ liệu ;d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F
Thực hiện: thannh ghi đích <- W OR F
Thời gian:1 chu kì
Cờ ảnh hưởng:Z
MOVLW (Move literal to W):
Cú pháp MOVLW k
Trong đó: k là một gía trị 1 byte
Thực hiện: W <- k
Thời gian: 1 chu kì
Cờ ảnh hưởng: không
MOVF (Move f):
Cú pháp MOVF F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127) hoặc là một thanh ghi
d: hướng di chuyển dữ liệu; d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F
Thực hiện: thanh ghi đích <- F
Thời gian:1 chu kì
Cờ ảnh hưởng:Z
MOVWF (Move W to F):
Cú pháp MOVWF F
F một ô nhớ RAM (có địa chỉ từ 0 đến127) hoặc là một thanh ghi
Thực hiện lệnh:F<- w
Thời gian: 1 chu kì
Có ảnh hưởng: không
NOP (No operation):
Cú pháp: NOP
Thực hiện: không làm gì cả
thời gian: 1 chu kì
Có ảnh hưởng: không
RETFIE (Return from interrupt):
Cú pháp: RETFIE
Thực hiện: lệnh kết thúc chương trình con phục vụ ngắt.
Thời gian: một chu kỳ.
Cờ ảnh hưởng: không.
RETLW (Retu with literal in W):
Cú pháp RETLW k
K là một giá trị của một byte
Thực hiện lệnh: W<-k
PC <- địa chỉ quay về chương trình chính trong stack
Thời gian: 1 chu kỳ
Cờ ảnh hưởng: không
RETURN (return from subrountine ):
Thực hiện: lệnh kết thúc trong một chương trình con
Thời gian: 1 chu kỳ
Cờ ảnh hưởng: không
RLF (Rotation left F through carry flag ):
Cú pháp RLF F,d
F là một ô nhớ RAM (có địa chỉ ttừ 0 đến 127 )hoặc là một thanh ghi
d: hướng di chuyển dữ liệu; d =0: kết quả lưu vào W; d =1: kết quả lưu vào thanh F
Thời gian: 1 chu kì
Cờ ảnh hưởng : carry
RRF (Rotation right F through carry flag):
Cú pháp: RRF F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127 ) hoặc là một thanh ghi
d: hướng di chuyển dữ liệu; d =0: kết quả lưu vào W; d =1: kết quả lưu vào thanh F
Thời gian: 1 chu kì
Cờ ảnh hưởng: carry
SLEEP:
Cú pháp SLEEP
Thực hiện: WDT <- 0x00
WDT prescaler <-0
Bit TO<-1
Bit PD<-0
OSC ngừng hoạt động , vi điều khiển đi vào trang thái SLEEP
Thời gian: chu kì
SUBLW (Subtract W from literal):
Cú pháp: SUBLW k ,k là giá trị một byte
Thực hiện lệnh: W <-W-k
Thời gian: 1 chu kì
Cờ ảnh hưởng: C, Z
SUBWF (Subtract W from F):
Cú pháp: SUBWF F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127)hoặc là một thanh ghi
d: hướng di chuyển dữ liệu; d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F
Thực hiện: thanh ghi đich <-W-F
Thời gian:1 chu kì
Cờ ảnh hưởng:C,Z
SWAPF (Swap nibble in F):
Cú pháp: SWAPF F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127) hoặc là một thanh ghi
d: hướng di chuyển dữ liệu ;d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F
Thực hiện: High nibble low nibble
Thời gian:1 chu kì
Cờ ảnh hưởng: không
XORLW (Exclusive OR literal with W):
Cú pháp: XORLW k
k là giá trị một byte
Thực hiện: W<-W XOR k
Thời gian: 1 chu kì
Cờ ảnh hưởng: Z
XORWF (Exclusive OR W with F ):
Cú pháp: XORWF F,d
F là một ô nhớ RAM (có địa chỉ từ 0 đến 127)hoặc là một thanh ghi
d: hướng di chuyển dữ liệu; d=0: kết quả lưu vào W; d=1 kết quả lưu vào thanh ghi F.
Thực hiện: thanh ghi đích <- W XOR F
Thời gian:1 chu kì.
Cờ ảnh hưởng: Z.