5.3.1 Phương pháp ñiều chếñộ rộng xung PWM:
Phương pháp ñiều chếñộ rộng xung PWM (Pulse Width Modulation) là phương pháp thay ñổi ñiện áp ra trung bình nhờ vào thay ñổi thời gian ñóng ngắt của các khóa cấp
ñiện cho ngõ ra.
Phương pháp PWM ñược sử dụng rất phổ biến trong ñiều khiển ñộng cơ vì các ưu
ñiểm:
• Mạch công suất thiết kếñơn giản. • Vận tốc ñộng cơ thay ñổi êm. • Tổn hao công suất nhỏ.
Xét mạch ñiện sau:
Hình 5.10 – Mạch ñơn giản
Khóa S ñược ñóng ngắt theo chu kỳ không ñổi, bằng cách thay ñổi thời gian ñóng (Ton) và ngắt của khóa S trong chu kỳ (T), ta thay ñổi ñược ñiện áp trung bình trên tải. Khoảng thay ñổi từ 0 ñến U. Hình 5.11 – Xung PWM Ta có công thức: . on average T V U T =
Như vậy ta thay ñổi ñược ñiện áp trung bình cấp cho ñộng cơ, việc này làm thay
ñổi vận tốc ñộng cơ.
Xung PWM ñược tạo rất dễ dàng bằng các mạch vi ñiểu khiển. Khóa ñóng ngắt S trong thực tế thường sử dụng Mosfet hoặc IGBT.
5.3.2 Mạch cầu H:
Mạch cầu H ñược sử dụng rộng rãi ñểñiều khiển ñảo chiều ñộng cơ. Xét mạch:
Hình 5.12 – Mạch cầu H
Giả sử khi có dòng ñiện chạy theo chiều + - thì ñộng cơ quay thuận, chiều ngược lại sẽ làm ñộng cơ quay nghịch.
- Cho khóa S1 và S4 ñóng, khóa S2 và S3 hở mạch, khi ñó dòng ñiện qua ñộng cơ có chiều: S1 M S4, ñộng cơ quay thuận.
- Muốn ñảo chiều quay của ñộng cơ, ta ngắt S1 và S4, ñóng S2 và S3, khi ñó dòng ñiện qua S3 M S2, ñộng cơ sẽ quay theo chiều ngược lại.
Trong ñề tài này, kết hợp mạch cầu H và phương pháp PWM, ta sẽ ñiều khiển vận tốc và chiều quay của ñộng cơ như sau:
- Quay thuận: ngắt khóa S2 và S3, ñóng khóa S4 và cấp xung PWM cho S1.
- Quay ngược: ngắt khóa S1 và S4, ñóng khóa S2 và cấp xung PWM cho S3.
5.3.3 IC công suất L298N
L298N là IC công suất tích hợp 2 mạch cầu H bên trong, chuyên dụng cho ñiều khiển các ñộng cơ công suất thấp.
Hình 5.13 – IC L298N
Các thông số kỹ thuật ñáng chú ý:
o ðiện áp hoạt ñộng lên ñến 46V.
o Có 2 mạch cầu H hoạt ñộng ñộc lập, với dòng tối ña 2A cho mỗi cầu.
Chương 5: Các linh kiện sử dụng trong khối phần cứng
Hình 5.14 – Sơñồ chân L298N
Chân Tên Chức năng
1; 15 Sense A Sense B
Nối chân này qua ñiện trở cảm ứng dòng xuống GND
ñểñiều khiển dòng tải 2; 3 Out 1
Out 2
Ngõ ra của cầu A. Dòng của tải mắc giữa 2 chân này
ñược quy ñịnh bởi chân 1.
4 VS
Chân cấp nguồn cho tầng công suất, cần có một tụ ñiện cảm kháng 100nF nối giữa chân này và chân GND
5; 7 Input 1
Input 2 Chân ngõ vào của cầu A, tương thích chân TTL
6; 11 Enable A Enable B
Chân ngõ vào Enable tương thích chuẩn TTL. Mức thấp của chân này sẽ cấm ngõ ra cầu A, ñối với enable A; hoặc ngõ ra cầu B ñối với enable B;
8 GND Chân mass
9 VSS Chân cấp nguồn cho khối logic. Cần có tụ ñiện 100nF giữa chân này với chân GND
10; 12 Input 3
Input 4 Các chân logic ngõ vào của B 13; 14 Output 3
Output 4
Ngõ ra của cầu B, dòng của tải mắc giữa 2 chân này
ñược quy ñịnh bởi chân 15.
Hình 5.15 – Sơñồ nguyên lý của L298N
Từ sơñồ nguyên lý, dễ thấy mỗi ngõ ra (OUT1, OUT2, OUT3, OUT4) ñược ñiều khiển bởi 1 ngõ vào (IN1, IN2, IN3, IN4) ñộc lập. Khi ngõ vào ở mực logic thấp, ngõ ra tương ứng sẽñược kéo xuống GND qua RS mắc ở chân SENSE. Khi ngõ vào ở mức logic cao, ngõ ra tương ứng sẽñược kéo lên +VS.
EnA và EnB ñể cho phép hoặc cấm 2 cầu A và B.
SENSE A và SENSE B mắc với ñiện trở Sunt RSA và RSBñể lấy ñiện áp hồi tiếp về
mạch ñiều khiển nếu cần thiết. Khi không cần lấy ñiện áp hồi tiếp, có thể bỏ RSA và RSB, mắc trực tiếp SENSE A và SENSE B xuống GND.
VS là nguồn công suất cho ñộng cơ.
VSS là nguồn +5VDC cung cấp cho khối logic của L298.
Hoạt ñộng:
Ta có thể thay ñổi trạng thái của một ñộng cơ dựa vào (Input 1; Input 2), ởñây ta luôn ñể mức ra ở chân cho phép (Enable) là mức cao.
• ðểñộng cơ quay thuận, ta cấp mức logic 0 cho ngõ vào Input2, và cấp xung PWM cho Input1.
• Ngược lại, ñểñộng cơ quay nghịch, ta cấp mức logic 0 cho Input1, và cấp xung PWM cho Input2.
Vì vậy, ñểñiều khiển ñộng cơ chỉ cần ñiều khiển giá trị xuất ra từ cổng của PIC16F877A ở các chân nối với Input1, Input2, Input3 và Input4.
Chương 6: Thiết kế mạch phần cứng
CHƯƠNG 6
Thiết kế mạch phần cứng
6.1 Khối nguồn:
Hình 6.1 – Sơ đồ khối nguồn
Khối nguồn có chức năng lấy điện áp 9V từ pin, điện áp này được đưa qua IC78L05 để chuyển đổi thành điện áp 5V cung cấp nguồn cho PIC16F877A và L298N.
6.2 Khối điều khiển trung tâm:
Khối điều khiển trung tâm là khối có chức năng điều khiển chính trong khối phần cứng bao gồm điều khiển động cơ và giao tiếp RS232. PIC16F877A được lựa chọn sử
dụng trong luận văn đảm nhận chức năng khối điều khiển này.
Trong khối phần cứng dùng PIC16F877A để điều khiển động cơ. Cờ ngắt dùng trong việc truyền nhận dữ liệu giữa Laptop và PIC16F877A.
6.3 Khối điều khiển động cơ:
Hình 6.3 – Sơ đồ khối điều khiển động cơ
Khối này có thành phần chính là một mạch cầu L298N có chức năng điều khiển hoạt động của các động cơ robot. Nguyên tắc hoạt động của L298N như đã trình bày ở
Chương 6: Thiết kế mạch phần cứng
6.4 Khối truyền thông RS232:
Hình 6.4– Sơ đồ khối truyền thông RS232
Khối này có nhiệm vụ nhận tín hiệu điều khiển từ cổng RS232 của laptop truyền xuống cho PIC16F877A điều khiển hoạt động của robot.
6.5 Mạch phần cứng hoàn chỉnh:
Mạch được thiết kế bằng phần mềm Proteus 7 Professional. Sau khi thiết kế mạch in, ta hoàn thiện các mạch phần cứng như sau:
Mạch điều khiển gồm khối nguồn, khối điều khiển trung tâm sử dụng PIC16F877A và khối truyền thông RS232.
Hình 6.5– Mạch điều khiển
Chương 6: Thiết kế mạch phần cứng
Hình 6.7– Mạch công suất
CHƯƠNG 7
Xây dựng phần mềm điều khiển 7.1 Sơ đồ tổng quát của robot:
7.2 Robot di động bám đối tượng:
Mục tiêu của luận văn là điều khiển robot bám theo một đối tượng sử dụng xử lý ảnh trong Matlab. Nó phải duy trì được khoảng cách nhất định giữa robot và đối tương, khi đối tượng di chuyển robot phải di chuyển theo dựa vào hình ảnh thu được từ
webcam để xác định đối tượng đi thẳng, đi lùi, rẽ trái, rẽ phải. Nghĩa là chúng ta phải
điều khiển cả tốc độ và hướng của robot tuy nhiên trong luận án này tôi chỉ điều khiển hướng, tốc độ của đối tượng có thể xem là không đổi. Để làm được việc này, chúng ta phải nhận dạng được đối tượng và xác định được hướng di chuyển của nó. Thứ hai phải xây dựng thuật toán bám đối tượng. Thứ ba là phải xây dựng được phần cứng để
kiểm định thuật toán
Có rất nhiều cách để dò tìm đối tượng ví dụ dựa trên hình dáng, âm thanh v..v. những thuật toán này thực sự rất phức tạp. Để giảm độ khó của thuật toán theo dõi chúng ta đặt phía sau đối tượng một vật có những thuộc tính về màu sắc đặc biệt ví dụ
màu đỏ, màu vàng, màu xanh v..v. Như vậy, lúc tiến hành theo dõi sẽ giảm được rất nhiều về việc xử lý nhiễu do nền và các đối tượng không mong muốn gây ra, giảm đáng kể sự nhầm lẫn đối tượng theo dõi. Chương trình xử lý ảnh để tiến hành theo dõi căn cứ
vào màu sắc đối tượng. Khoảng cách giữa robot và đối tượng chúng ta đặt là cốđịnh, Webcam Laptop Matlab xử lý ảnh Mạch điều khiển Frame RS232 PIC16F877A RS232 Mạch công suất L298N Động cơ DC
Chương 7: Xây dựng phần mềm điều khiển
dựa vào tâm của đối tượng tìm được chúng ta biết được vị trí của đối tượng tham chiếu trên mặt phẳng ảnh. Các thuộc tính nhận được sẽ truyền qua cổng giao tiếp RS232 xuống vi điều khiển PIC16F877A đểđiều khiển động cơ một chiều (DC) thông qua mạch cầu điều khiển động cơ L298N.
7.3 Xây dựng phần mềm điều khiển robot:
7.3.1 Nhận dạng và tính toán vị trí, kích thước của đối tượng màu đỏ:
Áp dụng các hàm xử lý ảnh của Matlab để tìm đối tượng màu đỏ, sau đó tính toán toạ độ và kích thước của đối tượng trên mặt phẳng ảnh.
Dùng hàm Imread để đọc file ảnh và lưu lại dưới dạng ma trận trong Matlab. RGB=imread (‘redball.jpg’) ;
Hình 7.1 – Ảnh gốc cần xử lý
Ảnh gốc là một ảnh RGB. Ảnh này được biểu diễn bởi một ma trận ba chiều kích
thước m x n x 3, với m x n là kích thước ảnh theo pixels. Ma trận này định nghĩa các
thành phần màu red, green, blue cho mỗi điểm ảnh. Các mặt phẳng màu riêng rẽ của ảnh gốc:
R = RGB ( ; ; 1 )
G = RGB ( ; ; 2 )
B = RGB ( ; ; 3 )
Vì đối tượng ta quan tâm có màu sắc là đỏ nên ta lấy ra mặt phẳng ảnh màu đỏ từ ảnh gốc.
Hình 7.2– Ảnh của ma trận đỏ
Tạo một ảnh grayscale từảnh gốc dùng hàm rgb2gray.
Chương 7: Xây dựng phần mềm điều khiển
Dùng hàm imsubtract để trừảnh grayscale từảnh của ma trận màu đỏ để lọc lấy màu đỏ.
Hình 7.4 – Ảnh thu được khi lấy màu đỏ
Dùng hàm medfilt2 để giảm nhiễu cho ảnh
Chuyển sang ảnh nhị phân dùng hàm im2bw
Hình 7.6 – Ảnh nhị phân
Dùng hàm bwareaopen để loại bỏ những đối tượng nhỏ
Chương 7: Xây dựng phần mềm điều khiển
Cuối cùng dùng các thuộc tính Centroid, Boundingbox, Area của hàm regionprops để xác
định tâm và vẽ hình chữ nhật xung quanh đối tượng màu đỏ.
Hình 7.8 – Xác định tâm và vẽ hình chữ nhật xung quanh
7.3.2 Các bước thu thập ảnh bằng webcam
Bước 1: Gắn thiết bị thu hình vào máy tính và cài đặt driver điều khiển + Gắn thiết bị thu hình vào máy tính.
+ Cài đặt driver (trình điều khiển) cho thiết bị (được cho bởi nhà sản xuất).
+ Xem thử hình ảnh video hiện trên máy tính thông qua phần mềm của nhà sản xuất. + Khởi động Matlab.
Bước 2: Chỉ định thông tin phần cứng:
Cần chỉ định cho Matlab biết phần cứng nào dùng để lấy dữ liệu (vì có thể có nhiều camera kết nối tới PC)
Gõ lệnh imaqhwinfo để biết tên các loại thiết bị có thể dùng.
>> imaqhwinfo
ans =
InstalledAdaptors: {'coreco' 'winvideo'} MATLABVersion: '7.5 (R2007b)'
ToolboxVersion: '3.0 (R2007b)'
Tên Loại thiết bị
'coreco' Thiết bị của công ty coreco
‘DCAM’ Các thiết bị dùng chuẩn IEEE 1394
‘dt’ Các thiết bị của Data Translation
‘Matrox’ Các thiết bị của hãng Matrox
‘winvideo’ Các thiết bị dùng chuẩn Windows Driver Model (WDM) hoặc Video for indows (VFW). Bao gồm các loại USB WEBCAM và camera IEEE 1394
Bảng 7.1 – Các loại thiết bị Webcam
Chỉ định thiết bị: Tùy vào loại thiết bị (adaptor name), mỗi thiết bị cùng loại gắn vào PC được đánh số ID, thiết bị thứ nhất có deviceID=1, thiết bị thứ 2 có deviceID=2,…
Để liệt kê xem loại winvideo có bao nhiêu thiết bị gắn vào máy, ta cũng dùng lệnh imaqhwinfo với đối số là winvideo. >> imaqhwinfo('winvideo') ans = AdaptorDllName: [1x81 char] AdaptorDllVersion: '3.0 (R2007b)' AdaptorName: 'winvideo' DeviceIDs: {[1]} DeviceInfo: [1x1 struct]
=> Có một thiết bị với DeviceID là 1. Ta có thể tìm hiểu thêm thông tin về thiết bị này:
>> imaqhwinfo('winvideo',1)
ans =
DefaultFormat: 'YUY2_160x120' DeviceFileSupported: 0
DeviceName: 'USB Video Device' DeviceID: 1
ObjectConstructor: 'videoinput('winvideo', 1)' SupportedFormats: {1x5 cell}
Chương 7: Xây dựng phần mềm điều khiển
Bước 3: Tạo đối tượng đại diện cho luồng dữ liệu video
Để tạo luồng dữ liệu video,dùng lệnh videoinput. Ví dụ
>> vid=videoinput(‘winvideo’,1)
Bước 4: Hiển thị luồng video trên màn hình để xem thử
Sau khi tạo biến tham chiếu luồng video (Matlab gọi là tạo đối tượng video ngõ vào), Ta có thể dùng Matlab để lấy dữ liệu từ thiết bị thu hình (thuật ngữ là “thu thập dữ liệu”). Tuy nhiên, trước khi làm việc này, bạn có thể xem trước luồng video để
chắc rằng thiết bị hoạt động tốt.
Để xem trước luồng dữ liệu video, dùng lệnh preview. Ví dụ: preview(vid)
Để kết thúc xem, dùng lệnh stoppreview. Hoặc để đóng cửa sổ preview, dùng lệnh closepreview(vid)
Bước 5: Cấu hình cho hoạt động trích hình ảnh
Một số thông số hoạt động của biến video mà t a c ó thể thay đổi như
FramesPerTrigger, ReturnedColorspace, FrameGrabInterval, FramesAcquired,…
Bước 6: Lấy dữ liệu hình ảnh
Ta tiến hành theo các bước sau để lấy dữ liệu:
+ Gọi hàm start để bắt đầu. (ví dụ : Start(vid)) . Một số thông số của biến video sẽ bị
khóa thành dạng chỉ đọc.
+ Lấy dữ liệu (hay còn gọi là thu thập dữ liệu): Tùy vào thông số TriggerType, ta có nhiều cách lấy dữ liệu.
+ Trích một ảnh từ luồng video thông qua lệnh getsnapshot.
Bước 7: Xử lý frame ảnh vừa thu được
Ta thực hiện các hàm xử lý ảnh ở trên để nhận dạng và tính toán vị trí cũng như kích thước của đối tượng màu đỏ.
Bước 8: Làm sạch bộ nhớ
Sau khi lấy dữ liệu video, ta có thể giải phóng bớt bộ nhớ bằng các lệnh sau: stop(vid)
flushdata(vid) clear vid
7.3.3 Mặt phẳng ảnh:
Cấu trúc của hệ bám mục tiêu di động gồm hai phần chính. Phần thứ nhất là phần xử
lý ảnh dựa vào chuỗi hình ảnh thu được từ webcam để nhận dạng và tính toán vị trí của
đối tượng quan tâm.
Phần thứ hai là phần điều khiển, dựa vào thông tin vị trí đối tượng nhận được trong mặt phẳng ảnh, tính toán tín hiệu điều khiển robot sao cho đối tượng di chuyển
được duy trì ở một vị trí nhất định trên mặt phẳng ảnh và ở một khoảng cách nhất
định.
Mặt phẳng ảnh là mặt phẳng có gốc nằm phía trên bên trái, trục x là trục nằm ngang, trục y là trục thẳng đứng như hình vẽ.
Hình 7.9 – Mặt phẳng ảnh
Căn cứ vào vị trí dịch chuyển của đối tượng trên mặt phẳng ảnh so với gốc toạđộ
mà ta tính toán các khả năng di chuyển của robot sao cho đối tượng nằm ở một vị trí bất kỳ trên mặt phẳng ảnh.
Chương 7: Xây dựng phần mềm điều khiển
Dựa vào toạ độ x, y của tâm đối tượng nằm trên mặt phẳng ảnh, ta sẽ biết đối
tượng đang ở bên trái hay bên phải của robot, từ đó điều khiển robot quay về phía đối
tượng.
Dựa vào số lượng pixel hay kích thước của đối tượng, ta ước chừng được khoảng cách giữa robot và đối tượng, từ đó điều khiển robot di chuyển tới hay lùi.
Hình vẽ sau mô tả các vị trí tương ứng của đối tượng trên mặt phẳng ảnh tương ứng với điều kiện di chuyển:
Hình 7.10 – Biểu diễn đối tượng di chuyển trên mặt phẳng ảnh
7.3.4 Tập lệnh điều khiển robot:
Dựa vào các kết quả nhận được, ta sẽ gửi tín hiệu điều khiển qua cổng kết nối RS232 để điều khiển robot di động bám đối tượng.
Lệnh Động cơ 1 Động cơ 2 Robot
f Tiến Tiến Đi thẳng
b Lùi Lùi Đi lùi
s Dừng Dừng Dừng lại r Tiến Lùi Rẽ phải l Lùi Tiến Rẽ trái