c. Thiết lập tín hiệu đặt là đường tròn
4.1.1 Nguồn cung cấp cho robot
Học viên sử dụng nguồn 220VAC dùng làm nguồn cung cấp điện sạc cho bình sạc 12V. Các thiết bị bên trong robot ví dụ như: khối mạch động lực, động cơ đều sử dụng nguồn 12V. Nguồn 5V cấp cho vi điều khiển PIC 16F877A và cảm biến.
4.1.2 Tổng quan về vi điều khiển PIC 16F877A.
ạ Một vài thông số của PIC 16F877Ạ
Hình 4.2 Vi điều khiển PIC 16F877A
PIC là tên viết tắt của Máy tính khả trình thông minh (Programable Intelligent Computer) do hãng General Instrument đặt tên, con vi điều khiển đầu tiên của họ là PIC1650. Hãng Microchip tiếp tục phát triển các dòng sản phẩm nàỵ Cho đến nay, các sản phẩm vi điều khiển PIC của Microchip đã gần 100 loại, từ họ 10Fxxx đến các họ 12Cxxx, 17Cxx, 16Fxx, 16Fxxx, 16FxxxA, 16LFxxxA, 18Fxxx 18LFxxx,
Phân loại PIC theo ký tự:
• Nhóm thứ nhất có ký tự C, họ PIC xxCxxx được đưa vào một nhóm, gọi là OTP (One Time Programable) chỉ có thể lập trình một lần duy nhất.
• Nhóm thứ hai có ký tự F, LF, họ PIC xxFxxx, xxFxxx, gọi là Flash, cho phép ghi/xóa nhiều lần bắng các mạch điện thông thường.
Phân loại PIC theo ký số:
• Loại thứ nhất là dòng PIC cơ bản (Base-Line), gồm các PIC 12Cxxx, có độ dài lệnh là 12 bit.
• Loại thứ hai là các dòng PIC 10F, 12F, và 16F, gọi là dòng phổ thông (Mid- Range), có độ dài lệnh là 14 bit.
PIC là một vi điều khiển với kiến trúc RISC, sử dụng microcode đơn giản đặt trong ROM, chạy một lệnh một chu kỳ máy (4 chu kỳ của bộ dao động). PIC nhờ có EEPROM nên tạo thành 1 bộ điều khiển vào ra khả trình, có rất nhiều dòng PIC với hàng loạt các mô-đun ngoại vi tích hợp sẵn (như USART, PWM, ADC...), với bộ nhớ chương trình từ 512 Word đến 32K Word. PIC16F877A là dòng PIC phổ biến nhất, đủ mạnh về tính năng, 40 chân, bộ nhớ đủ lớn cho hầu hết các ứng dụng thông thuờng.
Cấu trúc tổng quát PIC16F877A:
• 8 K Flash ROM. • 368 bytes RAM. • 256 bytes EEPROM.
• 5 Port I/O (A, B, C, D, E), ngõ vào/ra với tín hiệu điều khiển độc lập. • 2 bộ định thời 8 bit Timer 0 và Timer 2.
• 1 bộ định thời 16 bit Timer 1, có thể hoạt động trong cả chế độ tiết kiệm năng lượng (Sleep Mode) với nguồn xung clock ngoàị
• 2 bộ CCP, Capture/Compare/PWM - tạm gọi là: Bắt giữ / So sánh / Điều biến xung.
• 1 bộ biến đổi tương tự – số (ADC) 10 bit, 8 ngõ vàọ • 2 bộ so sánh tương tự (Comparator).
• 1 bộ định thời giám sát (WDT – Watch Dog Timer).
• 1 cổng song song (Parallel Port) 8 bit với các tín hiệu điều khiển. • 1 cổng nối tiếp (Serial Port).
• 15 nguồn ngắt (Interrupt).
• Chế độ tiết kiệm năng lượng (Sleep Mode).
• Nạp chương trình bằng cổng nối tiếp ICSPTM (In-Circuit Serial Programing). • Nguồn dao động lập trình được tạo bằng công nghệ CMOS.
• 35 tập lệnh có độ dài 14 bit.
Cấu trúc phần cứng PIC16F877A:
PIC là một vi điều khiển với kiến trúc RISC, chạy một lệnh một chu kỳ máy (4 chu kỳ của bộ dao động).
PIC16F877A là họ vi điều khiển có 40 chân, mỗi chân có một chức năng khác nhaụ Trong đó có một số chân đa công dụng (đa hợp), mỗi chân có thể hoạt động như một đường xuất/nhập (I/O) độc lập hoặc là một chức năng đặc biệt dùng để giao tiếp với các thiết bị ngoại vị
b. Chức năng các chân của PIC 16F877A.
Hình 4.4 Sơ đồ chân của PIC.
Chân OSC2/CLKO (14): ngõ ra dao động thạch anh hoặc ngõ ra cấp xung clock.
OSC2: ngõ ra dao động thạch anh. Kết nối đến thạch anh hoặc bộ cộng hưởng.
CLKO: ở chế độ RC, ngõ ra của OSC2, bằng ¼ tần số của OSC1 và chính là tốc độ
của chu lỳ lệnh.
Chân MCLR/VPP (1): có 2 chức năng:
MCLR: là ngõ vào reset tích cực mức thấp.
VPP: khi lập trình cho PIC thì đóng vai trò là điện áp nhận ngõ vào lập trình. Chân RA0/AN0 (2): có 2 chức năng:
RA0: xuất/nhập số.
AN0: ngõ vào tương tự của kênh thứ 0. Chân RA1/AN1 (3):
RA1: xuất/nhập số.
AN1: ngõ vào tương tự của kênh thứ nhất. Chân RA2/AN2/VREF-/CVREF (4): RA2: xuất/nhập số.
AN2: ngõ vào tương tự của kênh thứ 2.
CVREF: điện áp tham chiếu VREF ngõ ra bộ so sánh. Chân RA3/AN3/VREF+ (5):
RA3: xuất/nhập số.
AN3: ngõ vào tương tự của kênh thứ 2.
VREF+: ngõ vào điện áp chuẩn (cao) cả bộ A/D. Chân RA4/TOCKI/C1OUT (6):
RA4: xuất/nhập số - mở khi được cấu tạo là ngõ rạ TOCKI: ngõ vào xung clock bên ngoài cho Timer 0. C1OUT: ngõ ra bộ so sánh 1.
Chân RA5/AN4/SS/C2OUT (7):
RA5: xuất/nhập số.
AN4: ngõ vòa tương tự kênh thứ 4. SS: ngõ vào chọn lựa SPI phụ. C2OUT: ngõ ra bộ so sánh 2. Chân RB0/INT (33):
RB0: xuất/nhập số.
INT: ngõ vào nhận tín hiệu ngắt ngoàị Chân RB1 (34): xuất/nhập số.
Chân RB2 (35): xuất/nhập số. Chân RB3/PGC:
RB3: xuất/nhập số.
Chân cho phép lập trình điện áp thấp ICSP. Chân RB4 (37): xuất/nhập số.
Chân RB5 (38): xuất/nhập số. Chân RB1/PGC (39):
RB6: xuất/nhập số.
PGC: mạch gỡ rối và xung clock lập trình ICSP. Chân RB7/PGD (40):
RB7: xuất/nhập số.
PGD: mạch gỡ rối và dữ liệu lập trình ICSP. Chân RC0/T1OCO/T1CKI (15):
RC0: xuất/nhập số.
T1COC: ngõ vào bộ dao động Timer 1.
T1CKI: ngõ vào xung clock bên ngoài Timer 1. Chân RC1/T1OSI/CCP2 (16):
RC1: xuất/nhập số.
T1OSI: ngõ vào bộ dao động Timer 1.
CCP2: ngõ vào Capture 2, ngõ ra Compare 2, ngõ ra PWM 2
Chân RC2, CCP1 (17): RC2: xuất/nhập số.
CCP1: ngõ vào Capture 1, ngõ ra Compare 1, ngõ ra PWM 1. Chân RC3/SCK/SCL (18):
RC3: xuất/nhập số.
SCK: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ SPỊ
SCL: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ I2C. Chân RC4/SDI/SDA (23):
RC4: xuất/nhập số. SDI: dữ liệu vào SPỊ
SDA: xuất/nhập dữ liệu I2C. Chân RC5/SDO (24): RC5: xuất/nhập số. SDO: dữ liệu ra SPỊ Chân RC6/TX/CK (25): RC6: xuất/nhập số. TX: truyền bất đồng bộ USART. CK: xung đồng bộ USART. Chân RC7/RX/DT (26): RC7: xuất/nhập số. RX: nhận bất đồng bộ USART. DT: dữ liệu đồng bộ USART. Chân RD0/PSP0 (19): RD0: xuất/nhập số.
PSP0: dữ liệu port tớ song song. Chân RD1/PSP1 (20):
RD0: xuất/nhập số.
PSP0: dữ liệu port tớ song song.
Các chân RD2/PSP2 (21), RD3/PSP3 (22), RD4/PSP4 (27), RD5/PSP5 (28), RD6/PSP6 (29), RD7/PSP7 (30) tương tự chân 19,20.
Chân RE0/RD/AN5 (8): RE0: xuất/nhập số.
RD: điều khiển đọc port tớ song song. AN5: ngõ vào tương tự kênh 5.
Chân RE1/WR/AN6 (9):
RE0: xuất/nhập số.
WR: điều khiển ghi port tớ song song. AN5: ngõ vào tương tự kênh 6.
Chân RE2/CS/AN7 (10):
RE2: xuất/nhập số.
CS: chip chọn lựa điều khiển port tớ song song. AN7: ngõ vào tương tự kênh 7.
Chân VĐ (11,32) và VSS (12,31): là các chân nguồn của PIC.
c. Các PORT và thanh ghi TRIS.
Port A và thanh ghi TRISẠ
Bảng 4.1 Các thanh ghi liên quan đến Port Ạ
Ghi chú: x – giá trị không rõ, u – giá trị không thay đổị Các ô tô bóng không được dùng bởi Port Ạ
Port A gồm 6 chân RA0-RA5, việc ghi các giá trị nào vào thanh ghi TRISA sẽ quy định các chân của Port A là Input hay Output, 0 = Output, 1 = Input.
Việc đọc thanh ghi Port A sẽ đọc các trạng thái chân của Port Ạ Việc ghi giá trị vào thanh ghi Port A sẽ thay đổi các trạng thái của các chân của Port Ạ
Riêng chân RA4 được tích hợp thêm chức năng cung cấp xung clock ngoài cho Timer 0 (RA4/T0CLKI).
Các chân khác của Port A được đa hợp với các chân Analog của bộ ADC và chân ngõ vào điện thế so sánh của bộ so sánh Comparator. Hoạt động của các chân này được quy định bằng các bit ADCON1 và CMCON1.
Khi các chân của Port A được sử dụng là ngõ vào thì các bit của thanh ghi TRISA phải luôn bằng 1.
Port B và thanh ghi TRISB.
Bảng 4.2 Các thanh ghi liên quan đến Port B.
Ghi chú: x – giá trị không rõ, u – giá trị không thay đổị Các ô tô bóng không được dùng bởi Port B.
Port B gồm 8 chân RB0-RB7, việc ghi các giá trị nào vào thanh ghi TRISB sẽ quy định các chân của Port B là Input hay Output, 0 = Output, 1 = Input.
Việc đọc thanh ghi Port B sẽ đọc các trạng thái chân của Port B. Việc ghi giá trị vào thanh ghi Port B sẽ thay đổi các trạng thái của các chân của Port B.
Ba chân của Port B được đa hợp với chức năng In-Circuit Debugger và Low Voltage Programing Function là RB3/PGM, RB6/PGC, RB7/PGD. Việc thay đổi chức năng của ba thanh ghi này được đề cập trong phần các thanh ghi chức năng đặc biệt.
Mỗi chân của Port B có một transistor kéo lên nguồn Vđ , chức năng này hoạt động khi bit RBPU OPTION<7> được xóa, chức năng này sẽ tự động tắt khi chân Port B được quy định là Input. Bốn chân RB4-RB7 có chức năng ngắt (interrupt) khi trạng thái chân Port thay đổi (khi chân Port được quy định là output thì chức năng này không hoạt động), giá trị chân Port được so sánh với giá trị được lưu lại trước đó.
Khi có 2 trạng thái sai lệch giữa 2 giá trị này, ngắt sẽ xảy ra với cờ ngắt RBIF INTCON<0> bật lên, ngắt có thể làm cho vi điều khiển thoát khỏi trạng thái Sleep Modẹ
Bất cứ hoạt động truy xuất nào trên Port B sẽ xóa trạng thái sai lệch, kết thúc ngắt và cho phép xóa cờ RBIF.
Port C và thanh ghi TRISC.
Bảng 4.3 Các thanh ghi liên quan đến Port C.
Ghi chú: x – giá trị không rõ, u – giá trị không thay đổị
Port C gồm 8 chân từ RC0-RC7, việc ghi các giá trị nào vào thanh ghi TRISC sẽ quy định các chân của Port C là Input hay Output, 0 = Output, 1 = Input.
Việc đọc thanh ghi Port C sẽ đọc các trạng thái chân của Port C. Việc ghi giá trị vào thanh ghi Port C sẽ thay đổi các trạng thái của các chân của Port C.
Các chân của Port C được đa hợp với các chức năng ngoại vị Khi các hàm chức năng ngoại vi được cho phép, thì cần quan tâm chặt chẽ tới giá trị các bit của thanh ghi TRISC. Một số chức năng ngoại vi sẽ ghi các giá trị 0 đè lên các bit của thanh ghi TRISC và mặc định các chân là ngõ vàọ Do đó cần phải xem xét kỹ các tính năng của các hàm ngoại vi để thiết lập giá trị các bit trong thanh ghi TRISC cho chính xác.
Port D và thanh ghi TRISD
Bảng 4.4: Các thanh ghi liên quan đến Port D.
Ghi chú: x – giá trị không rõ, u – giá trị không thay đổị Các ô tô bóng không được dùng bởi Port D.
Port D gồm 8 chân từ RD0-RD7. Ngoài việc Port D được cấu trúc là một Port xuất nhập, nó còn có thể hoạt động như một cổng song song phụ tá (Parallel Slave
Port) bằng cách đặt bit PSPMODE(TRIS<4>) lên 1, trong chế độ này buffer của ngõ vào là linh kiện TTL.
Port E và thanh ghi TRISẸ
Bảng 4.5 Các thanh ghi liên quan đến Port Ẹ
Ghi chú: x – giá trị không rõ, u – giá trị không thay đổị Các ô tô bóng không được dùng bởi Port Ẹ
Port E có 3 chân RE0/RD/AN5, RE1/WR/AN6, và RE2/CS/AN7 có thể được cấu hình là các chân xuất nhập.
Các chân của Port E có thể trở thành các chân điều khiển cho các cổng của vi xử lý khi bit PSPMODE(TRISE<4>) được đặt lên 1. Trong chế độ này, phải đảm bảo rằng các bit từ 0 đến 2 của thanh ghi TRISE phải được đặt lên 1 để các chân này được cấu hình như là chân ngõ vàọ
Ngoài ra, các chân của Port E còn được cấu hình như các ngõ vào Analog, ở chế độ này khi đọc trạng thái các chân của Port E sẽ cho ta giá trị 0.
Thanh ghi TRISE quy định chức năng xuất nhập của các chân Port E ngay cả khi nó được sử dụng là các ngõ vào Analog, khi đó các chân Port E phải là ngõ vàọ
d. Ngắt và xử lý ngắt PIC 16F877A.
PIC16F877A có đến 15 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi INTCON (bit GIE). Bên cạnh đó mỗi ngắt còn có một bit điều khiển và cờ ngắt riêng. Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuôc vào bit GIE và các bit điều khiển khác. Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho các ngắt ngoại vi PEIẸ Bit điều khiển các
ngắt nằm trong thanh ghi PIE1 và PIE2. Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2.
Trong một thời điểm chỉ có một chương trình ngắt được thực thi, chương trình ngắt được kết thúc bằng lệnh RETFIẸ Khi chương trình ngắt được thực thi, bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h. Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt và quay trở về chương trình chính, đồng thời bit GIE cũng sẽ được set để cho phép các ngắt hoạt động trở lạị Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được thời điểm tiếp theo mà ngắt xảy rạ
Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi trạng thái các pin của PORTB (PORTB Interrupt on change), việc xác định ngắt nào xảy ra cần 3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt.
Cần chú ý là trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình được cất vào trong Stack, trong khi một số thanh ghi quan trọng sẽ không được cất và có thể bị thay đổi giá trị trong quá trình thực thi chương trình ngắt. Điều này nên được xử lí bằng chương trình để tránh hiện tượng trên xảy rạ
Hình 4.5 Sơ đồ logic của tất cả các ngắt trong vi điều khiển PIC16F877.
Ngắt INT.
Ngắt này dựa trên sự thay đổi trạng thái của pin RB0/INT. Cạnh tác động gây ra ngắt có thể là cạnh lên hay cạnh xuống và được điều khiển bởi bit INTEDG (thanh ghi OPTION_REG <6>). Khi có cạnh tác động thích hợp xuất hiện tại pin RB0/INT, cờ ngắt INTF được set bất chấp trạng thái các bit điều khiển GIE và PEIẸ Ngắt này có khả năng đánh thức vi điều khiển từ chế độ sleep nếu bit cho phép ngắt được set trước khi lệnh SLEEP được thực thị
Ngắt do sự thay đổi trạng thái của các PIN trong PORTB.
Các pin PORTB<7:4> được dùng cho ngắt này và được điều khiển bởi bit RBIE (thanh ghi INTCON<4>). Cờ ngắt của ngắt này là bit RBIF (INTCON<0>).
4.1.3 Cảm biến quang E3S-AD12.
Hình 4.6 Cảm biến E3S-AD12.
Hình 4.7 Sơ đồ cấu tạo cảm biến E3S-AD12. Nguồn cấp: 10-30VDC. Loại khuếch tán 0.7m, ngõ ra NPN.
Khoảng cách cảm biến: 0.7m Góc nhìn: 3° ~ 15°
Nguồn sáng: Infrared Led (880nm)
Ngõ ra: Transistor cực thu hở. Tải 100mA max, 30VDC max. Thời gian đáp ứng: 0.5ms max.
Ánh sáng môi trường: Đèn huỳnh quang: 5,000 lx max. Ánh sang mặt trời: 10,000 lx max.
Nhiệt độ môi trường: −25°C to 55°C Tiêu chuẩn bảo vệ: IEC IP67; NEMA: 4X
4.1.4 Khối động lực.
Nhận tín hiệu điều khiển từ bộ điều khiển trung tâm để điều khiển motor trái, phải chạy theo yêu cầu và cách ly bộ điều khiển trung tâm với tảị