Professional Documents
Culture Documents
Hà Nội - 2017
MỤC LỤC
DANH MỤC CÁC HÌNH VẼ................................................................................. iii
DANH MỤC CÁC BẢNG ........................................................................................ v
DANH MỤC CÁC TỪ VIẾT TẮT ......................................................................... vi
LỜI CAM ĐOAN .................................................................................................. viii
MỞ ĐẦU .................................................................................................................... 1
CHƯƠNG I: TỔNG QUAN HỆ THỐNG .............................................................. 3
1.1. Giới thiệu về Robot .......................................................................................... 3
1.1.1. Giới thiệu về công nghệ Robot hiện nay .......................................................... 3
1.1.2. Các loại động cơ được sử dụng trong công nghệ Robot .................................. 5
1.1.3. Các loại module điều khiển động cơ .............................................................. 11
1.1.4. Nền tảng FPGA/DSP trong điều khiển Robot................................................ 22
1.2. Các giải pháp và xác định bài toán ................................................................. 33
1.2.1. Phân tích và lựa chọn giải pháp ..................................................................... 33
1.2.2. Kết luận chương ............................................................................................. 34
CHƯƠNG II: THIẾT KẾ HỆ THỐNG ................................................................ 35
2.1. Sơ đồ khối tổng thể của hệ thống ................................................................... 35
2.2. Sơ đồ đặc tả hệ thống ..................................................................................... 35
2.3. Sơ đồ nguyên lý và các module của hệ thống ................................................ 37
2.3.1. Sơ đồ nguyên lý tổng thê ................................................................................ 37
2.3.2. Module điều khiển động cơ ............................................................................ 37
2.3.3. Module điều khiển hệ thống ........................................................................... 38
2.3.4. Module dò đường ........................................................................................... 41
2.4. Lựa chọn cấu hình hệ thống ........................................................................... 42
2.4.1. Khối điều khiển hệ thống ............................................................................... 43
2.4.2. Khối điền khiển động cơ ................................................................................ 44
2.4.3. Khối dò đường ................................................................................................ 45
CHƯƠNG III: XÂY DỰNG HỆ THỐNG ............................................................ 46
3.1. Xây dựng phần cứng ...................................................................................... 46
3.1.1. Dự án Quartus cơ bản ..................................................................................... 46
i
3.1.2. Phát triển trên nền tảng dự án cơ bản ............................................................. 47
3.1.3. Biên dịch và chạy chương trình ..................................................................... 53
3.2. Xây dựng phần mềm ...................................................................................... 66
3.2.1. Giải thuật điều khiển vi tích phân tỉ lệ (PID) ................................................. 66
3.2.2. Ứng dụng giải thuật PID vào điều khiển robot .............................................. 67
3.2.3. Biên dịch và chạy chương trình ..................................................................... 71
3.3. Kết quả mô phỏng và kiểm thử ...................................................................... 73
3.3.1. Kết quả mô phỏng .......................................................................................... 73
3.3.2. Kết quả kiểm thử ............................................................................................ 73
KẾT LUẬN .............................................................................................................. 77
TÀI LIỆU THAM KHẢO………………………………………………………..78
ii
DANH MỤC CÁC HÌNH VẼ:
iii
Hình 2. 8 Khối điều khiển Kit DE0 Nano ................................................................. 43
Hình 2. 9 Khối điều khiển động cơ L298 .................................................................. 44
Hình 2. 10 Khối dò đường ........................................................................................ 45
Hình 3. 1 Thành phần HPS hps_0 trong hệ thống Qsys ........................................... 46
Hình 3. 2 Cổng AXI Master của thành phần HPS .................................................... 47
Hình 3. 3 Tìm và thêm thành phần PIO .................................................................... 48
Hình 3. 4 Cấu hình thành phần PIO .......................................................................... 49
Hình 3. 5 Tạo kết nối giữa HPS và thành phần PIO ................................................. 50
Hình 3. 6 giao diện pio_led của hệ thống ................................................................. 51
Hình 3. 7 ban đầu hóa .pio_led_external_connection_export trong u0 soc_system . 51
Hình 3. 8 các thành phần cơ bản trong Qys của hệ thống ......................................... 52
Hình 3. 9 Các thành phần trong Qys của hệ thống ................................................... 52
Hình 3. 10 Thêm vào một thành phần trong Qys ...................................................... 53
Hình 3. 11 file TCL cho SDRAM DDR3 của HPS .................................................. 66
Hình 3. 12 Sơ đồ khối giải thuật PID ........................................................................ 67
Hình 3. 13 Sơ đồ khối ứng dụng giải thuật PID vào robot dò đường ....................... 68
Hình 3. 14 Lưu đồ thuật toán hiệu chỉnh PID ........................................................... 70
Hình 3. 15 Biên dịch và copy file vào thẻ nhớ trên Sockit ....................................... 72
Hình 3. 16 Thực thi chương trình trên Putty ............................................................. 72
Hình 3. 17 Kết quả đầu ra mô phỏng qua SignalTap ................................................ 73
Hình 3. 18 Vận tốc của robot khi hiệu chỉnh Kp (với: Kd=0; Ki=0) ........................ 75
Hình 3. 19 Vận tốc của robot khi hiệu chỉnh Kd (với: Kp=30; Ki=0) ...................... 76
Hình 3. 20 Vận tốc của robot khi hiệu chỉnh Ki (với: Kp=30; Kd=5) ...................... 76
iv
DANH MỤC CÁC BẢNG
Bảng 3. 1 Kết quả thực nghiệm hiệu chỉnh PID ...... ………………………………75
v
DANH MỤC CÁC TỪ VIẾT TẮT
PID Proportional Integral Derivative Cơ chế phản hồi vòng điều khiển
SRAM Static Random Access Memory Bộ nhớ truy cập ngẫu nhiên tĩnh
Complex Programmable Logic
CPLD vi mạch có thể lập trình được
Device
PLA Programmable Logic Array mảng logic lập trình được
vi
LỜI NÓI ĐẦU
Hiện nay, công nghệ phát triển robot đã vô cùng mạnh mẽ và được ứng dụng
rất nhiều trong thực tế, ứng dụng robot trong sản xuất công nghiệp, các cánh tay lắp
ráp, vận tải hàng hóa theo vạch đường đi có sẵn. Ứng dụng robot trong y tế, các
cánh tay thao tác phẫu thuật cho người bệnh…. Ứng dụng robot trong an ninh quốc
phòng, robot chiến đầu, xe tăng tự vận hành, thiết bị bay tự động…. Ứng dụng
trong ngành vũ trụ …. Ngoài ra, công nghệ robot còn được dùng trong các ứng
dụng xử lý các tình huống trong các môi trường đặc biệt và rất nhiều các hướng
phát triển khác đã được phát triển.
Trên cở sở đã được học tôi đã thiết kế và thử nghiệm một robot công nghiệp
di chuyển theo vạch đường định trước trên nền tảng công nghiệp FPGA/DSP. Sử
dụng phương pháp tạo độ rộng xung PWM để điều khiển động cơ và thuật toán PID
để thay đổi hướng đi theo kết quả trả về từ bộ dò đường.
Do kiến thức còn hạn hẹp và thời gian thực hiện không nhiều nên đề tài của
tôi còn nhiều hạn chế. Mặc dù đã phần nào thiết kế và tính toán chi tiết các mạch và
thiết kế phần cứng trên nền tảng FPGA, lập trình phần mềm trên công nghệ SoC,
các thông số nhưng đôi khi còn mang tính lý thuyết và thiên về lập trình, chưa có
tính ứng dụng cao. Tôi mong sự đóng góp và sửa chữa để đề tài này mang tính khả
thi hơn.
Tôi xin chân thành cảm ơn thầy PGS.TS Đỗ Trọng Tuấn đã hướng dẫn
chúng tôi hoàn thành luận văn này.
vii
LỜI CAM ĐOAN
Tôi xin cam đoan các kết quả nghiên cứu trong luận văn là của riêng tôi và
chưa được công bố trong bất kì công trình nghiên cứu nào.
Học viên
viii
MỞ ĐẦU
Trong ứng dụng công nghiệp, robot đã tự động vận hành thực hiện rất nhiều
công việc nặng nhọc mà con người cần mất rất nhiều thời gian và công sức để thực
hiện.
Từ suy nghĩ đó, tôi quyết định nghiên cứu xây dựng mô hình phát triển robot
mang tính thực tiễn cao. Mô hình robot này sử dụng nền tảng FPGA/DSP và công
nghệ SoC đó là nhưng công nghệ mới và đang được phát triển rất thịnh hành ngày
nay. Do vậy tôi chọn nghiên cứu và thực hiện đề tài: “Nghiên cứu thực thi bộ điều
khiển Robot công nghiệp trên nền tảng FPGA”, và đối tượng được sử dụng trong
nghiên cứu để xác định độ chính xác của các tính toán đã đặt ra.
- Thực thi bộ điều khiển chuyển động sử dụng Kit SoC ứng dụng nền tảng FPGA
của Altera để xây dựng mô hình xe robot.
- Kiểm thử và đánh giá kết quả thực thi bộ điều khiển trên đối tượng mô hình giả
lập
1
4. Phương pháp nghiên cứu
- Thu thập và phân tích các tài liệu và thông tin liên quan đến đề tài
- Phân tích và lựa chọn hệ thống chương trình ứng dụng.
- Triển khai xây dựng chương trình ứng dụng.
- Kiểm tra, thử nghiệm và đánh giá kết quả.
5. Bố cục đề tài
Bố cục luận văn được kết cấu thành 3 chương:
Trong chương 1ss, giới thiệu về nguyên tắc hoạt động chung của động cơ,
mạch, công nghệ FPGA và đưa ra được cấu trúc của hệ thiết bị sẽ được xử dụng.
Trong chương 2, giới thiệu về hệ thống và các module chính của hệ thống. Còn
trong chương 3, đây là chương trọng tâm nêu ra giải pháp và quá trình xây dựng mô
hình xe robot dựa vào các lý thuyết đã nghiên cứu trong hai chương đầu. Và đưa ra
kết qua thực nghiệm thu được và kết luận.
2
CHƯƠNG I: TỔNG QUAN HỆ THỐNG
1.1. Giới thiệu về Robot
1.1.1. Giới thiệu về công nghệ Robot hiện nay
Thuật ngữ robot được sinh ra từ trên sân khấu, không phải trong phân xưởng
sản xuất. Những robot xuất hiện lần đầu tiên trên ở trên NewYork vào ngày
9/10/1922 trong vở “Rossum’s Universal Robot” của nhà soạn kịch người Tiệp
Karen Kapek viết năm 1921, còn từ robot là cách gọi tắt của từ robota - theo tiếng
Tiệp có nghĩa là công việc lao dịch.
Robot hay người máy là một loại máy có thể thực hiện những công việc một
cách tự động bằng sự điều khiển của máy tính. Robot là một tác nhân cơ khí, nhân
tạo, thường là một hệ thống cơ khí-điện tử.
Với sự xuất hiện và chuyển động của mình, robot gây cho người ta cảm giác
rằng nó giác quan giống như con người. Từ "robot" (người máy) thường được hiểu
với hai nghĩa: rô bốt cơ khí và phần mềm tự hoạt động. Về lĩnh vực người máy,
Nhật Bản là nước đi đầu thế giới về lĩnh vực này.
Ngày nay robot đang là tâm điểm của một cuộc cách mạng lớn sau Internet.
Robot ngày càng được sử dụng rộng rãi trong lĩnh vực công nghiệp, y tế, giáo dục
đào tạo, giải trí, an ninh quốc phòng, thám hiểm không gian. Robot là sản phẩm
công nghệ có độ phức tạp cao, chứa hàm lượng tri thức vô cùng phong phú về tất cả
các lĩnh vực của khoa học và công nghệ.
Theo dự đoán trong vòng 20 năm nữa mỗi người sẽ có nhu cầu sử dụng một
robot cá nhân như nhu cầu một máy tính PC hiện nay và robot sẽ là tâm điểm của
một cuộc cách mạng lớn sau Internet. Với xu hướng này, cùng các ứng dụng truyền
thống khác của robot trong công nghiệp, y tế, giáo dục đào tạo, giải trí và đặc biệt là
trong an ninh quốc phòng thì thị trường robot sẽ vô cùng to lớn. Robot đã có những
bước tiến đáng kể trong hơn nửa thế kỷ qua. Robot đầu tiên được ứng dụng trong
công nghiệp vào những năm 60 để thay thế con người làm những công việc nặng
nhọc, nguy hiểm trong môi trường độc hại. Do nhu cầu sử dụng ngày càng nhiều
trong quá trình sản xuất phức tạp nên robot công nghiệp cần có những khả năng
thích ứng linh hoạt và thông minh hơn. Ngày càng nhiều các phát minh tiên tiên cho
3
ngành công nghiệp phát triển cánh tay robot cũng như robot tự hành vận chuyển
hàng hóa trong các khu công nghiệp. Hình 1.1 minh họa một số hình ảnh về robot
công nghiệp ngày nay [Nguồn sản xuất oto của toyota]
4
Có thể kể đến những loại robot được quan tâm nhiều trong thời gian qua là:
tay máy robot (Robot Manipulators), robot di động (Mobile Robots), robot phỏng
sinh học (Bio Inspired Robots) và robot cá nhân (Personal Robots). Robot di động
được nghiên cứu nhiều như xe tự hành trên mặt đất AGV (Autonomous Guided
Vehicles), robot tự hành dưới nước AUV (Autonomous Underwater Vehicles), robot
tự hành trên không UAV (Unmanned Arial Vehicles) và robot vũ trụ (Space robots).
Với robot phỏng sinh học, các nghiên cứu trong thời gian qua tập trung vào hai loại
chính là robot đi bộ (Walking robot) và robot dáng người (Humanoid robot). Bên
cạnh đó các loại robot phỏng sinh học như cá dưới nước, các cấu trúc chuyển động
phỏng theo sinh vật biển cũng được nhiều nhóm nghiên cứu, phát triển.
1.1.2. Các loại động cơ được sử dụng trong công nghệ Robot
a) Động cơ một chiều DC
Khi chúng ta cung cấp năng lượng, động cơ DC sẽ bắt đầu quay, chuyển điện
năng thành cơ năng. Hầu hết các động cơ DC sẽ quay với cường độ RPM rất cao (
số vòng quay/ phút), và các động cơ DC đều được ứng dụng để làm quạt làm mát
máy tính, hoặc kiểm soát tốc độ quay của bánh xe..
5
Để điều khiển tốc độ quay của động cơ DC, người ta dùng điều biến độ rộng
xung (kí hiệu là PWM), đây là kỹ thuật điều khiển tốc độ vận hành bằng việc bật và
tắt các xung điện. Tỷ lệ phần trăm vận tốc với thời gian của thiết bị được điều khiển
bằng cơ chế bật tắt một mức độ cơ số vòng quay xác định của động cơ.
Ví dụ, một động cơ có nguồn điện xoay chiều ở mức 50% ( tức 50% tắt và
50% bật), thì mô tơ sẽ quay một nửa số vòng quay ở mức 100% (tổng số). Mục đích
là để khi các xung nối tiếp nhau với tốc độ rất nhanh thì động cơ vẫn có thể quay
liên tục với tần số cao mà không bị vấp lỗi.
b) Động cơ servo
6
Một động cơ servo (Servo Motors) là một tổ hợp chung cơ bản của bốn bộ
phận: một động cơ điều khiển tốc độ DC, một bánh răng, một vi điều khiển và một
cảm biến.
Khả năng định vị của động cơ servo thường được tính toán để kiểm soát
được chính xác hơn so với những động cơ DC thông thường khác. Động cơ servo
thường cấu tạo gồm 3 dây: dây nguồn, dây tiếp đất và dây điều khiển. Không giống
như động cơ DC hoạt động trên cơ chế xoay chiều bật tắt nguồn, năng lượng (nguồn
điện) của động cơ servo được nạp vào liên tục. Động cơ servo hoạt động bằng việc
kiểm soát dòng điện, giúp động cơ định hướng chính xác hướng hoạt động của
mình.
Động cơ servo được thiết kế để dừng tại một vị trí cụ thể. Các vị trí này cần
được tính toán chính xác để khiến máy móc hoạt động được đúng với mục tiêu đề ra
theo ý đồ của người thiết kế. Ví dụ như kiểm soát các bánh lái trên một chiếc
thuyền hoặc cần khiến một cánh tay robot hay chân robot di chuyển trong một phạm
vi nhất định.
Động cơ servo sẽ không quay như động cơ DC thông thường vốn hoạt động
xoay qua lại với góc quay đạt tới mốc 360 độ (hoặc hơn). Trong khi đó, động cơ
servo sẽ hoạt động bằng việc nhận một tín hiệu lệnh quyết định góc vị trí ở đầu ra
và sử dụng sức mạnh (cơ năng) của một động cơ DC cấu tạo bên trong sẽ quay trục
quay đến đúng vị trí. Vị trí này được xác định bởi các vi cảm biến.
7
PWM được sử dụng cho các tín hiệu lệnh của động cơ servo. Tuy nhiên,
không giống như động cơ DC được PWM điều khiển bằng biến độ rộng xung để
kiểm soát tốc độ quay, động cơ servo dùng điều biến độ rộng xung đó để xác định
vị trí của trục động cơ, chứ không chỉ đơn thuần là tốc độ.
Trung bình một đơn vị xung được tính dựa trên vị trí trục (thường là khoảng
1,5ms), mục đích làm sao để giữ trục luôn ở đúng vị trí. Mỗi khi giá trị xung tăng
lên, sẽ khiến cho trục motor lần lượt chuyển động theo chiều kim đồng hồ, và luôn
sẽ có một xung ngắn hơn để đảo trục ngược lại chiều kim đồng hồ. Xung điều khiển
serco thường được lặp đi lặp lại khoảng 20 mm/s. Có thể nói đơn giản, trục servo di
chuyển đến đâu rồi cũng quay về lại vị trí ban đầu.
Khi động cơ được lệnh di chuyển, nó sẽ điều khiển trục di chuyển đến vị trí
cần đến và giữ nguyên ở vị trí đó, cho dù ngay cả khi có ngoại lực tác động lực đẩy
lên nó, các trục động cơ sẽ từ chối di chuyển khỏi vị trí đã thiết lập bởi bộ điều
khiển.
c) Động cơ bước
Động cơ bước (hay còn có tên là động cơ bước từ tính, động cơ hỗ trợ việc
bước), thực chất là một động cơ tăng lực sử dụng một phương pháp khác trong việc
lái hướng chuyển động. Cụ thể, động cơ bước vận hành bằng việc sử dụng một
8
động cơ quay liên tục DC, tích hợp cùng mạch điều khiển cùng một động cơ bước
hoạt động bằng nam châm từ tính có nhiều răng được sắp xung quanh một bánh
răng trung tâm để xác định vị trí.
Động cơ bước đòi hỏi phải có một mạch điều khiển bên ngoài hoặc một bộ vi
điều khiển (ví dụ như Raspberry Pi or Ardunio) để tiếp thêm năng lượng cho từng
nam châm điện và khiến các trục động cơ lần lượt xoay. Khi nam châm từ tính ‘A’
được cung cấp nguồn điện, nó sẽ tác động lực từ tính lên các bánh răng và căn chỉnh
chúng hơi xô lệch đến nam châm điện tiếp theo ‘B’. Khi ‘A’ tắt, và ‘B’ bật, các
bánh răng theo lực từ tính sẽ hơi lệch một chút so với ‘B’, và thế là các răng xếp
quây lại thành vòng tròn quanh bánh răng nguồn và ngắt mạch để quay về chỗ ngoặt
ban đầu nhằm tạo dựng một vòng xoay. Mỗi vòng xoay tính từ một nam châm điện
tiếp theo được gọi là “bước”, và thế là, động cơ có thể được quay bằng góc bước;
góc bước được xác định chính xác từ trước thông qua một vòng xoay hoàn chỉnh
với 360 độ.
Động cơ bước phổ biến với hai loại: động cơ đơn cực và động cơ lưỡng cực.
Động cơ lưỡng cực là loại mạnh nhất của động cơ bước và thường có 4 hoặc 8
chuỗi dây dẫn. Chúng có hai bộ cuộn dây điện từ cấu tạo bên trong, và bước vận
hành bằng việc thay đổi hướng của các bánh rang với các dây dẫn bên trong.
Động cơ bước đơn cực, được nhận dạng bởi cấu tạo gồm tới 5,6 hoặc 8
đường dây dẫn. Mặc dù chỉ có 2 cuộn cảm biến, nhưng mỗi cuộn lại là một tập hợp
trung tâm phức tạp. Động cơ bước đơn cực có thể bước mà không cần phải đảo
ngược chiều hiện tại trong các cuộn dây. Tuy nhiên, do cuộn trung tâm lại được sử
dụng như để tiếp thêm một nửa lực từ cho mỗi cuộn dây tại một thời điểm xác định,
nên chúng thường có ít mô-men xoắn hơn loại động cơ lưỡng cực.
Các thiết kế của một động cơ bước thường cung cấp một mô-men xoắn giữ
liên tục mà không cần động cơ để được hỗ trợ, đồng thời cũng cung ứng luôn một
động cơ khác có chức năng nhất định phù hợp với cấu tạo của nó. Dĩ nhiên, tuy
phức tạp như vậy nhưng lỗi định vị lại không xảy ra miễn chỉ cần động cơ bước có
tụ cơ năng được xác lập từ trước.
9
d) Kết luận
Sau đây là cái nhìn tổng kết chung về những đặc trưng cơ bản của một lĩnh
vực động cơ khá phức tạp, vốn luôn gây tranh cãi nhất là khi luận về những ưu điểm
và khuyết điểm của động cơ bước và động cơ tăng lực. Nhưng dù sao đi nữa, cũng
mong rằng với những nhận định sau sẽ giúp chúng ta lựa chọn được đúng loại động
cơ phù hợp để biến thiết kế thêm hoàn thiện.
-Được sử dụng cho các thiết kế cần phải có một thiết bị quay với tốc độ RPM, ví dụ
như trục bánh xe ô tô, cánh quạt máy,vv...
Động cơ servo
- Tốc độ nhanh, mô-đen xoắn cao, luân chuyển chính xác trong một góc giới hạn.
- Nói chung, đây là một động cơ có hiệu suất cao để thay thế cho động cơ bước,
nhưng có thiết lập phức tạp hơn với PWM điều khiển. Động cơ này thích hợp để
ứng dụng cho các cánh tay/ chân robot hoặc ứng dụng để điều khiển các loại bánh
lái,vv...
Động cơ bước
-Tốc độ chậm nhưng xác định chính xác hướng khi xoay, dễ dàng thiết lập và kiểm
soát.
- Ưu điểm vượt trội của động cơ bước là ở khả năng kiểm soát vị trí chính xác.
Trong trường hợp động cơ trợ lực yêu cầu cần có một cơ chế xoay chiều và mạch
dẫn trong việc xác lập định vị vị trí, hướng hoạt động của động cơ, một động cơ
bước hoàn hảo có thể kiểm soát và giải quyết các yêu cầu này thông qua tính chất
đặc trưng của mình khi quay bởi các “bước” ngắt mạch thiết kế bên trong.
- Động cơ bước được ứng dụng rộng rãi cho các máy in 3D và các thiết bị in ấn
tương tự, hoặc các máy móc khác hoạt động bằng việc cần xác định cơ bản vị trí
đầu ra…
10
1.1.3. Các loại module điều khiển động cơ
Trong khuân khổ đề tài này chúng tôi chỉ tập trung đề cấp đến nguyên lý
điều khiển các loại động cơ bằng phương pháp điều xung PWM (Pulse Width
Modulation). PWM là phương pháp điều chỉnh điện áp ra tải, hay nói cách khác, là
phương pháp điều chế dựa trên sự thay đổi độ rộng của chuỗi xung vuông, dẫn đến
sự thay đổi điện áp ra.
Các PWM khi biến đổi thì có cùng 1 tần số và khác nhau về độ rộng của
sườn dương hay sườn âm.
Ngoài lĩnh vực điều khiển hay ổn định tải thì PWM còn tham gia và điều chế
các mạch nguồn như : boot, buck, nghịch lưu 1 pha và 3 pha...
PWM còn gặp nhiều trong thực tế ở các mạch điện điều khiển. Điều đặc biệt là
PWM chuyên dùng để điều khiển các phần tử điện tử công suất có đường đặc tính là
tuyến tính khi có sẵn 1 nguồn 1 chiều cố định .
Như vậy PWM được ứng dụng rất nhiều trong các thiết bị điện- điện tử.
PWM cũng chính là nhân tố mà các đội Robocon sử dụng để điều khiển động cơ
hay ổn định tốc độ động cơ.
11
Hình 1.8 là đồ thị dạng xung khi điều khiển bằng PWM. Với độ rộng xung
đầu ra tương ứng và được tính bằng %. Tùy thích do chúng ta điều khiển.
12
Hình 1. 10 Sơ đồ xung PWM
Giản đồ xung của chân điều khiển và dạng điện áp đầu ra khi dùng PWM
Nguyên lý : Trong khoảng thời gian 0 - t0, ta cho van G mở, toàn bộ điện áp nguồn
Ud được đưa ra tải. Còn trong khoảng thời gian t0 - T, cho van G khóa, cắt nguồn
cung cấp cho tải. Vì vậy với t0 thay đổi từ 0 cho đến T, ta sẽ cung cấp toàn bộ , một
phần hay khóa hoàn toàn điện áp cung cấp cho tải.
Công thức tính giá trị trung bình của điện áp ra tải :
Gọi t1 là thời gian xung ở sườn dương (khóa mở ) còn T là thời gian của cả sườn
âm và dương, Umax là điện áp nguồn cung cấp cho tải. Ta có:
Như vậy ta nhìn trên hình đồ thị dạng điều chế xung thì ta có : Điện áp trung bình
trên tải sẽ là :
13
Các cách để tạo ra được PWM để điều khiển
Để tạo được ra PWM thì hiện nay có hai cách thông dụng : Bằng phần cứng và
bằng phần mềm.
Trong phần cứng có thể tạo bằng phương pháp so sánh hay là từ trực tiếp từ các IC
dao động tạo xung vuông như : 555, LM556...
Trong phần mền được tạo bằng các chip có thể lập trình được. Tạo bằng phần mền
thì độ chính xác cao hơn là tạo bằng phần cứng. Nên người ta hay sử dụng phần
mền để tạo PWM.
Ở đây chúng ta tham khảo 2 cách điều chế PWM phổ biến: bằng phương pháp so
sánh và tạo xung vuông bằng phần mềm.
+ Tín hiệu tựa (Ref) là tín hiệu xác định mức công suất điều chế (Tín hiệu DC).
Xét sơ đồ mạch sau :
14
Với tần số xác định được là f = 1/(ln.C1.(R1+2R2) nên chỉ cần điều chỉnh R2 là có
thể thay đổi độ rộng xung dễ dàng. Ngoài 555 ra còn rất nhiều các IC tạo xung
vuông khác.
Đây là cách tối ưu trong các cách để tạo được xung vuông. Việc tạo bằng phần mền
cho độ chính xác cao về tần số và PWM. Và mạch đơn giản hơn rất nhiều. Xung
này được tạo dựa trên xung của CPU.
Mạch Công Suất Điều Khiển Động Cơ Sử Dung Ir2184, Mạch cầu H (điển hình là
DRV8833).
Còn với động cơ có dòng lớn nhất là 2A thì nên dùng l298 để điều khiển.
15
Mạch như sau:
- Hai chân ENA và ENB dùng để điều khiển các mạch cầu H trong L298. Nếu ở
mức logic “1” (nối với nguồn 5V) thì cho phép mạch cầu H hoạt động, nếu ở mức
logic “0” thì mạch cầu H không hoạt động.
-Khi ENA = 1:
16
+ INT1 = 1; INT2 = 0: động cơ quay thuân.
Hoặc còn 1 loại nữa vẫn thường hay sử dụng với robocon là mạch kết hợp
fet+relay. Trong đó FET có ưu điểm đóng mở với tần số cao dùng để khuếch đại tín
hiệu điều khiển tốc độ. Còn relay có tác dụng đảo chiều.
17
Hình 1. 14 Sơ đồ mạch FET+relay
Trong 2 loại mạch FET+relay và cầu H thì FET+relay dễ làm hơn nhưng mà
không có tác dụng hãm tốt như mạch cầu H. Mạch cầu H thì có ưu điểm về hãm,
nếu thiết kế tốt thì bền hơn và có thể đảo chiều được liên tục, tuy nhiên việc thiết kế
phải đảm bảo chống dòng ngược và trùng dẫn.
18
Servo RC di chuyển chính xác đến cùng vị trí khi chúng nhận được một xung 1,5
ms mỗi 6 ms (một chu kỳ làm việc là 25%) như khi chúng nhận được một xung 1,5
ms mỗi 25 ms (chu kỳ làm việc là 6%) - trong cả hai trường hợp, chúng chuyển
sang vị trí trung tâm (vị trí trung tính). Với nhiều servo RC, miễn là tốc độ làm mới
(số lần mỗi giây mà xung được gửi đi, tức là tốc độ lặp lại xung) nằm trong khoảng
40 Hz đến 200 Hz, giá trị chính xác của tốc độ làm mới là không cần thiết.
19
-Nhìn chung cách giao tiếp với các module Driver này tương đối giống nhau.
Chúng đều có 3 port cơ bản là DIR ( để điểu khiển hướng quay động cơ), EN ( để
điều khiển bật tắt động cơ), CLK ( xuất xung để dịch chuyển từng step). Một số loại
module như tb6560 tb6600 hoặc MA860H thì mỗi port đều có 2 pin. Ví dụ như
EN+ EN- CW+ CW- CLK+ CLK-. vì thế người dùng có thể tùy chọn điều khiển
theo mức 0 hoặc mức 1. Mình thường kéo 3 chân xuống thấp và điều khiển bằng 3
chân còn lại
-Điều quan trọng nhất là các module này là chúng có thể điều khiển được vi
bước như 1/16 step, 1/8 step, 1/2 step và full step. nếu full step thì bạn cần 200 step
để quay hết 1 vòng đối với loại 1.8 độ 1step. Còn nếu dùng chế độ vi bước 1/16 step
thì một xung động cơ chỉ dịch chuyển 1,8/16 độ. Tức là bạn phải cần 200*16=3200
xung để quay hết một vòng. điều này làm tăng độ phân giải và tăng độ chính xác
cho step
-Cách kết nối: với động cơ 4 dây thì bạn tìm các dây xem dây nào là kênh A-
A+ B- B+ và nối vào driver. với động cơ 5 dây 6 dây hoặc 8 dây thì bạn cắt bỏ hết
những dây chung đi và chỉ sử dụng 4 dây ở 2 đầu cuộn dây để điều khiển
Hầu hết các máy in 3d đều dùng IC A4988 điều khiển vì máy in 3d tải trọng
nhỏ.
20
Tính năng:
- Có 5 chế độ: full bước, 1/2 bước, 1/4 bước, 1/8 bước, 1/16 bước
- Điểu chỉnh dòng ra bằng triết áp (bé xíu) nằm bên trên Current Limit =
VREF × 2.5
Sơ đồ kết nối
Lựa chọn chế độ full hay 1/2 hay 1/4.. sẽ được thông qua 3 pin MS1 MS2
MS3. Thông thường nối thẳng 3 pin này với công tắc bit 3p để dễ thiết lập từ trên
phần cứng. Lưu ý là nếu thả nổi 3 pin này tức là mode full step.
21
Bảng 1. 1 Bảng chân điều khiển động cơ bước
Bật tắt động cơ thì thông qua pin ENABLE, mức LOW là bật module, mức
HIGH là tắt module
Điều khiển chiều quay của động cơ thông qua pin DIR
Điều khiển bước của động cơ thông qua pin STEP, mỗi xung là tương ứng
với 1 bước ( hoặc vi bước)
22
đọc thông tin từ RAM để lập trình lại các kết nối và chức năng logic trong IC. Có
thể so sánh cơ chế đó làm việc giống như phần mềm máy tính cũng được lưu trữ
trong RAM và khi thực thi sẽ được nạp lần lượt vi xử lý, nói cách khác việc lập
trình lại cho FPGA cũng dễ dàng như lập trình lại phần mềm trên máy tính. Như
vậy về mặt nguyên tắc thì quá trình khởi động của FPGA không diễn ra tức thì mà
cấu hình từ SRAM phải được đọc trước sau đó mới diễn ra quá trình tái cấu trúc
theo nội dung thông tin chứa trong SRAM. Dữ liệu chứa trong bộ nhớ RAM phụ
thuộc vào nguồn cấp, chính vì vậy để lưu giữ cấu hình cho FPGA thường phải dùng
thêm một ROM ngoại vi. Đến những dòng sản phẩm FPGA gần đây thì FPGA được
thiết kế để có thể giao tiếp với rất nhiều dạng ROM khác nhau hoặc FPGA thường
được thiết kế kèm CPLD để nạp những thành phần cố định, việc tích hợp này làm
FPGA nạp cấu hình nhanh hơn nhưng cơ chế nạp và lưu trữ cấu hình vẫn không
thay đổi. Ngoài khả năng đó điểm thứ hai làm FPGA khác biệt với các PLD thế hệ
trước là FPGA có khả năng tích hợp logic với mật độ cao với số cổng logic tương
đương lên tới hàng trăm nghìn, hàng triệu cổng. Khả năng đó có được nhờ sự đột
phá trong kiến trúc của FPGA. Nếu hướng mở rộng của CPLD tích hợp nhiều mảng
PAL, PLA lên một chip đơn, trong khi bản thân các mảng này có kích thước lớn và
cấu trúc không đơn giản nên số lượng mảng tích hợp nhanh chóng bị hạn chế, dung
lượng của CPLD nhiều nhất cũng chỉ đạt được con số trăm nghìn cổng tương
đương. Đối với FPGA thì phần tử logic cơ bản không còn là mảng PAL, PLA mà
thường là các khối logic lập trình được cho 4-6 bit đầu vào và 1 đầu ra ( thường
được gọi là LUT). Việc chia nhỏ đơn vị logic cho phép tạo một cấu trúc khả trình
linh hoạt hơn và tích hợp được nhiều hơn số lượng cổng logic trên một khối bán
dẫn. Bên cạnh đó hiệu quả làm việc và tốc độ làm việc của FPGA cũng vượt trội so
với các IC khả trình trước đó. Vì có mật độ tích hợp lớn và tốc độ làm việc cao nên
FPGA có thể được ứng dụng cho lớp những bài toán xử lý số phức tạp đòi hỏi hiệu
suất làm việc lớn mà các công nghệ trước đó không đáp ứng được. Thiết kế trên
FPGA thường được thực hiện bởi các ngôn ngữ HDL và hầu hết các dòng FPGA
hiện tại hỗ trợ thiết kế theo hai ngôn ngữ chính là Verilog và VHDL, tất cả những
thiết kế ở những chương trước đều có thể hiện thực hóa trên FPGA bằng một quy
23
trình đơn giản. Ngoài HDL, thiết kế trên FPGA còn có thể được thực hiện thông
qua hệ nhúng nghĩa là bằng ngôn ngữ phần mềm (thường là C/C++). Một phương
pháp nữa thường dùng trong các bài toán xử lý số tín hiệu là sử dụng System
Generator một chương trình kết hợp của Matlab với phần mềm thiết kế FPGA của
Xilinx.
Sự đột phá mạnh mẽ trong công nghệ bán dẫn và nhu cầu cao về ứng dụng
đa phương tiện trên mạng không dây đã thúc đẩy việc nghiên cứu và phát triển các
phép toán xử lý tín hiệu mạnh cho hệ thống viễn thông trên FPGA cũng như trên
các mạch tích hợp chuyên dụng (ASIC).
Những bước tiến này cũng dẫn đến một loạt các giải pháp mới cho vấn đề về
xử lý tín hiệu, mở ra thị trường cơ hội và xu hướng mới. Thông thường thì các ứng
dụng đặc trưng cho xử lý tín hiệu có sẵn trong các bộ xử lý tin hiệu số (DSP). Song
song đó, các giải thuật dùng trên những bộ xử lý có tập lệnh phức tạp (VLIW) khá
khô khan và thường không mang lại một giải pháp tối ưu. Và thêm vào đó là những
đột phá gần đây về tốc độ, mật độ, và giá thành của các bộ xử lý FPGA dẫn đến có
thêm một lựa chọn rất hấp dẫn cho việc xử lý tín hiệu tốc độ cao. So sánh trong
nhiều thiết kế, sự kết hợp DSP vào FPGA cho kết quả vượt trội so với các bộ xử lý
với tập lệnh phức tạp.
Chúng ta dễ dàng bắt gặp một hệ thống có sử dụng DSP ở hầu hết các thiết bị
công nghệ bây giờ, PC hoặc điện thoại di động chẳng hạn. DSP được sử dụng khá
rộng rãi trong nhiều lĩnh vực đời sống cũng như khoa học kỹ thuật. Ta có thể tự rút
ra tầm quan trọng của DSP trong các hệ thống ứng dụng. Khó mà tưởng tượng được
24
nếu thế giới không tồn tại DSP, công nghệ sẽ không thể phát triển được như hiện
tại, cũng như sự không tồn tại của khá nhiều tiện ích cuộc sống vì không có gì hỗ
trợ để tạo nên các ứng dụng khá quen thuộc với chúng ta. Bảng tóm lược dưới đây
sẽ cho chúng ta cái nhìn tổng quan về các ứng dụng của DSP.
Điều khiển Server, đĩa, máy in, động cơ, điều khiển
Điều khiển định hướng, điều khiển dao động, điều khiển hệ
thống công suất, robot.
ống dẫn chùm, máy quan sát sóng, phân tích điện áp,
Thiết bị đo
phân tích trạng thái bền vững, hệ thống định vị.
25
Hình 1. 18 Sơ đồ thực thi hệ thống DSP
Hình 1.18 trình bày một ứng dụng đặc trưng của hệ thống DSP dùng để thực
thi một ứng dụng tương tự. tín hiệu vào tương tự đi qua bộ tiền lọc khử nhiễu cho
tín hiệu thô ban đầu, ta có được tín hiệu tương tự trơn tru, với tần số lấy mẫu fs ta
thu được các mẫu tín hiệu rời rạc, tín hiệu đã được lấy mẫu qua bộ biến đổi tín hiệu
tương tự sang số (ADC - Analog to Digital Converter) để thu được tín hiệu số. Lúc
này, tín hiệu sẽ qua hệ thống DSP và tín hiệu ra có thể ở dạng số hoặc qua bộ biến
đổi số sang tương tự (DAC - Digital to Analog Converter) để có được tín hiệu ra
tương tự.
26
Hình 1. 19 Kiến trúc bên trong FPGA
Hình 1.19 mô tả kiến trúc bên trong một FPGA thông thường, ta có thể thấy
gồm có 3 thành phần: I/O Cell (I/O pads), Logic Block, và Wire Segments (Routing
Channels). Routing Channels có thể được xem như độ rộng, số đường dây. Các lối
vào I/O khớp với chiều cao của một dòng hoặc độ rộng của một cột trong mảng, có
nhiệm vụ kết nối theo ý muốn bất kỳ một đường dây nào với kênh bên cạnh. Cấu
trúc một Logic Block được xem xét ở hình 1.20.
27
1.3.4.3. Kết hợp giữa FPGA và DSP
Các phần trên chúng ta đã thấy được sự nổi trội của 2 công nghệ , tuy nhiên
chúng vẫn có những hạn chế riêng. Vì vậy mà chúng ta vẫn cần kết hợp chúng lại,
sẽ tạo nên một công nghệ vượt trội hơn, khắc phục được các khuyết điểm khi chúng
nằm riêng lẻ.
Một bộ DSP thực chất là một Chip hoặc cả một mạch được thiết kế sẳn. Khi
kết hợp chúng vào trong một hệ thống, vấn đề về kết nối là một trở ngại, vì một bộ
DSP không hổ trợ toàn bộ các giao tiếp mà thông thường chỉ có một số giao tiếp mà
thôi. Thí dụ, hôm nay bạn kết nối một bộ DSP vào một Vi Xử Lý sử dụng giao tiếp
RS232, ngày mai vì một lý do nào đó, bạn bắt buộc phải kết nối theo giao tiếp USB,
mà nếu Vi Xử Lý hoặc DSP không hổ trợ thì vấn đề này trở nên nan giải. Với một
FPGA kết hợp thêm, bạn có thể dùng FPGA để thực hiện một giao tiếp bất kỳ bằng
cách thay đổi đoạn mã chương trình của FPGA. Sự kết hợp DSP với FPGA loại bỏ
rào cản về giao tiếp, chỉ cần board có các cổng, việc giao tiếp có thể không cần
được hổ trợ, chỉ cần người lập trình nắm rõ được cách thức truyền dữ liệu là có thể
thực hiện được.
Ví dự với nhiều DSP trên hệ thống khi chúng ta thiết kế một hệ thống điều
khiển sử dụng tất cả DSP đó điều này sẽ tốn kém rất thời gian và tiền bạc nếu như
chúng ta muốn thêm một DSP nữa vào hệ thống này, và do đó sẽ phải chọn lại Vi
Xử Lý khác hoặc sẽ thiết kế lại hệ thống cho phù hợp. Nếu dùng kết hợp FPGA,
công việc này chỉ đơn thuần là cấu hình lại từ đoạn mã khác do chính chúng ta viết,
không cần phải thay đổi các kết nối phần cứng.
DSP rất quan trọng nhưng cứng về mặt thiết kế truyền thống, với một hệ
thống DSP FPGA, ta được một sự kết hợp hiệu quả, mềm mại trong thiết kế với khả
năng cấu hình lại mà không cần thay đổi phần cứng. Các hệ thống SOPC (System
on progammablechip) trước đã có các Vi Xử Lý, Vi Điều Khiển bên trong hệ thống,
với sự kết hợp thêm DSP đã mở rộng và đẩy mạnh phát triển hơn nữa. Như đã tìm
hiểu về phạm vi của DSP ở phần đầu,việc kết hợp này cũng tạo nên một bước ngoặt
quan trọng trong thiết kế, ứng dụng DSP.
28
Chính vì những lý do trên mà làm cho việc kết hợp DSP-FPGA trở nên khá
hấp dẫn với nhiều người, là một hướng nghiên cứu nhận được nhiều sự quan tâm,
và là đề tài được nêu lên khá nhiều trong các diễn đàn kỹ thuật.
Chúng ta có hai cách tiếp cận với DSP-FPGA, đó là dùng các khối DSP đã
được tích hợp sẵn trên FPGA (tạm gọi là tích hợp cứng) hoặc tạo một nhân DSP
bằng cách lập trình trên FPGA (tạm gọi là tích hợp mềm).
DSP tích hợp cứng trên FPGA nghĩa là một chip DSP được tích hợp lên hệ
thống FPGA.
Hình 1.21 cho thấy một cách trực quan hệ thống gồm 2 thành phần FPGA và
DSP, DSP được tích hợp lên FPGA như một ngoại vi của FPGA. Tất nhiên trong hệ
thống ứng dụng không chỉ có 2 thành phần này thôi.
Việc tích hợp cứng DSP trên hệ thống FPGA cho một hiệu quả làm việc tốt.
Tốc độ xử lý, tính toán sẽ tăng hơn nhiều lần so với một hệ thống không có DSP.
Nhược điểm của việc tích hợp cứng là DSP bị đốt chết trong hệ thống nên khó có
khả năng cập nhật, hệ thống xử lý phụ thuộc nhiều vào DSP này, hạn chế về khả
năng nâng cấp ứng dụng. ta không thể mong muốn thay đổi một chip xử lý âm
thanh đã được hổ trợ cứng thay vào đó bằng một chip xử lý ảnh mà board không hổ
trợ.
29
b) Tích hợp mềm
Một DSP tích hợp mềm thật chất là một IP viết bằng ngôn ngữ HDL và công cụ
thiết kế sẽ triển khai IP đó xuống FPGA. Với Altera đó chính là Nios, Nios II, còn
trong Xilinx là Picoblaze, Microblaze. Hình 1.22 chỉ ra một DSP nằm trong FPGA,
đồng nghĩa với DSP là một IPcore được nhúng trên FPGA.
tài nguyên cần phải được tính toán hợp lý sao cho tối ưu nhất cho ứng dụng đó. Để
hổ trợ cho việc thực hiện các ứng dụng lớn được thuận tiện hơn, đỡ tốn thời gian
viết nhân hơn, các hãng cũng cung cấp một số IP core về xử lý tín hiệu số, đó là các
thự viện, ví dụ như: Xilinx FFT Library, Polyphase DFT, FIR Filters,….
Tất nhiên việc tích hợp mềm cũng có ưu điểm nổi trội của nó, đó chính là
khả năng cập nhật. Đây sẽ là lựa chọn tốt cho các ứng dụng mà thường có sự thay
đổi nhanh trong thuật toán xử lý (hoặc nâng cấp thường xuyên). Bây giờ, nếu chúng
ta có một ứng dụng cần thử nghiệm, với một DSP tích hợp mềm, hiện chúng ta đang
làm DSP này, nhưng sau này chúng ta cảm thấy DSP khác hiệu quả hơn và muốn
thay đổi nó, việc cấu hình lại FPGA sẽ cho phép chúng ta thực hiện điều đó một
cách dễ dàng.
Ví dụ chúng ta thiết kế một hệ thống cửa nhận diện chủ nhà và tự động mở
khoá khi xác định đúng là chủ. Chúng ta dùng DSP xử lý ảnh để nhận diện được đối
tượng, một thiết kế DSP mềm được sử dụng và phần FPGA làm công việc điều
30
khiển. Nếu chỉ có vậy thì những hệ thống trước kia vẫn có thể làm được, nhưng nếu
chúng ta muốn thiết kế thêm tính năng điều khiển cửa tự khoá bằng giọng nói thì
lúc này với thiết kế truyền thống, chúng ta phải thay đổi hầu như toàn bộ phần cứng
cực kỳ gian nan, nhưng với Kết hợp FPGA và DSP tích hợp mềm thì việc nạp thêm
một IPcore DSP xử lý tiếng nói và thêm một số module điều khiển vào FPGA rất dễ
dàng, do vậy thiết kế tích hợp này tỏ ra vượt trội hơn hẳn.
Thêm một lợi thế của FPGA so với ASIC. Chúng ta xét trong các trường hợp
nghiên cứu khoa học hoặc quân sự chẳng hạn, ASIC không còn là sự lựa chọn ưu
31
tiên nữa. Đơn giản là vì đòi hỏi về một giải thuật mới hoặc một cải tiến đột phá mới
sẽ loại bỏ suy nghĩ về ASIC, vì họ cần sự mới mẻ hoàn toàn, và họ sẽ nhờ đến một
sự sáng tạo trên FPGA. Dù ASIC đa dạng đến đâu thì cũng sẽ có giới hạn, còn
FPGA tuy là chip trắng, nhưng có khả năng biến chuyển vô cùng.
Ưu điểm:
Kết hợp được khả năng của cả FPGA và DSP tạo nên một hệ thống ưu thế về
tốc độ xử lý so với các thiết kế trên các vi xử lý thông thường. Các thiết kế thông
thường, chẳng hạn như việc viết mã xử lý trên các vi xử lý, công việc này hạn chế
bởi bản thân chip không hổ trợ bất cứ DSP nào để tối ưu hoá tốc độ.
Tiết kiệm về hao phí thời gian, công suất khi thiết kế ra hệ thống có sử dụng
DSP. Với những DSP tích hợp sẵn, ta không phải thực hiện thao tác kết nối một bộ
DSP ngoài vào hệ thống như trước đây, hoặc viết một chương trình xử lý trên chip
thông thường, mà DSP đã trở thành một phần trong hệ thống.
Với khả năng cấu hình lại, chúng rất linh động trong thiết kế. Khá tiện lợi
cho nghiên cứu phát triển ứng dụng.
Nhược điểm:
Vì đặc điểm của FPGA là tái cấu hình lại mỗi khi reset, dù rằng hiện đã có
một số FPGA hổ trợ tự cấu hình, nhưng đây vẫn là một nhược điểm đáng nói của
hướng phát triển DSP-FPGA.
Tính linh động trong thiết kế làm cho DSP-FPGA trở nên khó tiếp cận với
người dùng bình thường. Chúng chỉ phù hợp với giới nghiên cứu, dân kỹ thuật.
Vì linh động nên cũng sinh ra một hạn chế, đó là không chuyên dụng.
Người thiết kế phải am hiểu về ngôn ngữ HDL cũng như nhiều kiến thức
khác, mới có thể thực hiện được.
Giá thành khá cao, nên sự tiếp cận DSP-FPGA cũng hạn chế phần nào.
32
1.2. Các giải pháp và xác định bài toán
1.2.1. Phân tích và lựa chọn giải pháp
a) Khảo sát và phân tích bài toán
Hiện nay trong thực tế thì việc điều khiển động cơ có rất nhiều phương pháp,
tùy vào mục đích sử dụng, tùy vào yêu cầu mà người ta có những phương pháp điều
khiển động cơ sao cho phù hợp với yêu cầu công nghệ cũng như tối ưu hóa của sản
phẩm. Trên thị trường hiện nay cũng có rất nhiều các modul điều khiển được thiết
kế sẵn, chuyên biệt phù hợp cho từng sản phẩm riêng.
Dựa vào nguyên lý hoạt động và các đặc tính động cơ, người ta đã thiết kế
sẵn các mạch số, các IC chuyên dụng để điều khiển động cơ, kết hợp với các modul
khác để hoàn thiện sản phẩm. Với các IC chuyên dụng thì người ta thiết kế các
mạch điều khiển động cơ nhanh gọn, đơn giản, độ chính xác cao. Tuy nhiên ngoài
việc sử dụng các vi mạch chuyên dụng để điều khiển động cơ, chúng ta hoàn toàn
có thể sử dụng các Bo mạch phát triển trên nền tảng FPGA để lập trình và điều
khiển động cơ tùy theo yêu cầu và mục đích sử dụng. Điều này làm cho chúng ta
chủ động hơn trong việc thiết kế hệ thống và thiết kế các phần mền, phần cứng phù
hợp. Với việc sử dụng bo mạch SoC để điều khiển động cơ thì có thể tích hợp thêm
nhiều chức năng khác cho từng ứng dụng cụ thể mà không cần phải thêm nhiều
modul khác để thực hiện chức năng khác.
Với một bo mạch SoC thì ngoài việc dùng nó làm modul điều khiển động cơ
chúng ta hoàn toàn có thể dùng nó đề điều khiển modul khác cùng hoạt động song
song mà không cần tốn thêm nhiều modul khác. Năng lượng để cấp cho bo mạch
SoC cũng rất nhỏ, khả năng xử lý đạt tốc độ nhanh, giải quyết được nhiều yêu cầu
của bài toán.
33
thực thi được gửi từ máy tính tới bo mạch SoC sau đó bo mạch thực thi và điều
khiển.
- Giải pháp thiết kế: sử dụng bo mạch SoC để tạo xung PWM đưa đến các
cuộn dây với tần số hợp lý thì động cơ sẽ quay với tốc độ hợp lý, và theo yêu cầu
thiết kế. Qua đó, ta xác định được tốc độ thực tế của động cơ. Chúng ta có thể điều
khiển động cơ qua Máy tính hoặc điện thoại thông minh bằng cách xây dựng phần
mềm kết nối với SoC qua mạng hoặc qua bluetooth để gửi lệnh yêu cầu động cơ
quay theo tốc độ và hướng khác nhau.
1.2.2. Kết luận chương
a) Các yêu cầu bài toán
Yêu cầu đặt ra cho bài toán là:
- Thực thi bộ điều khiển chuyển động đối tượng sử dụng Kit SoC ứng dụng nền
tảng FPGA của Altera để xây dựng mô hình gải lập xe robot.
- Kiểm thử và đánh giá kêt quả thực thi trên mô hình xe robot giả lập
b) Giới hạn của đề tài
Bài toán chỉ dừng lại robot mô hình nhỏ, không chịu được tải trọng lớn, chưa
đầy đủ các linh kiện điện tử để thiết kế hoàn chỉnh theo yêu cầu bài toán. Và các
tính toán ở đây chỉ mang tính chất thí nghiệm chưa đảm bảo được tính chính xác
cao.
34
CHƯƠNG II: THIẾT KẾ HỆ THỐNG
35
Hình 2. 2 Sơ đồ khối hệ thống
Trong hình 2.2 thể hiện rất rõ các chức năng và liên kết của hệ thống. Trong
đó phần HPS/ARM là nơi hệ điều hành linux được nhúng trên đó, từ đó người thiết
kế có thể lập trình các ứng dụng để thực thi các lệnh điều khiển các chức năng thiết
kế từ phần cứng. Các phần cứng này được thiết kế và thực thi trên phần
FPGA/QSYS và thông qua bộ điều khiển PWM để điều khiển động cơ. Đây chính
là phiên bản rất nhiều tính năng vượt trội sử dụng công nghệ kết hợp giữa FPGA
với DSP như đã trình bày trong chương I, phần 1.1.4.
36
2.3. Sơ đồ nguyên lý và các module của hệ thống
2.3.1. Sơ đồ nguyên lý tổng thê
Hình 2.3 thể hiện sơ đồ khối của dự án Quartus FPGA của dự án điều khiển
robot dò đường. Dự án này được tạo trong Qsys. Bộ điều khiển PWM được thiết kế
trong Qsys được sử dụng để điều khiển 2 động cơ của robot. Bộ điều khiển PIO cho
LED[6:0] và KEY[1:0] trong Qsys được bao gồm và kết nối với HPS. Vì vậy mà
HPS/ARM có thể truy cập các thiết bị ngoại vi. LED[7] được kết nối để đếm như một
xung clock. Khi FPGA được cấu hình với dự án Quartus này thì đèn LED[7] sẽ sáng.
2.3.2. Module điều khiển động cơ
Khối điều khiển động cơ có nhiệm vụ chuyển đổi tín hiệu điều khiển từ khối
điều khiển trung tâm thành tín hiệu điện áp để thay đổi tốc độ và chiều quay của
động cơ. Trên thực tế, rất nhiều mạch điều khiển động cơ có thể đảm nhận cả hai
nhiệm vụ này như: mạch cầu H dùng BJT hoặc FET, mạch 1 FET + 1 relay, IC 298,
IC TD18200… Tùy vào ứng dụng cụ thể, với các giá trị dòng áp theo yêu cầu mà
lựa chọn mạch điều khiển động cơ cho phù hợp. Sơ đồ mạch nguyên lý của khối
điều khiển động cơ được thiết kế như hình 2.4
37
Hình 2. 4 Mạch điều khiển motor
38
4 Công tắc gạt
8 đèn LEDs màu xanh
Ba nguồn xung clock 50MHz từ bộ tạo xung clock
Hai bộ chân cắm GPIO 40-pin expansion header
Một Arduino expansion header (Uno R3 compatibility), có thể kết nối với
Arduino shields.
Một bộ chân cắm 10-pin Analog input expansion header. (chia sẻ với Arduino
Analog input)
Bộ chuyển đổi A/D, 4-wire SPI giao tiếp với FPGA
HPS (Hard Processor System, Hệ thống xử lý cứng):
Bộ vi xử lý 925MHz Dual-core ARM Cortex-A9
1GB DDR3 SDRAM (32-bit data bus)
1 Gigabit Ethernet PHY Với bộ kết nối RJ45
Cổng USB OTG, Bộ kết nối USB Micro-AB
Chân cắm thẻ nhớ Micro SD card
Accelerometer (I2C interface + interrupt)
Cổng kết nối UART to USB, USB Mini-B
Nút reset nóng và nút reset nguội
Một nút cho người sử dụng và một nút điều khiển LED cho người sử dụng
Giao tiếp chân căm LTC 2x7
Tất cả các kết nối đã được thiết lập theo thiết bị Cyclone V SoC FPGA để cung cấp
tối đa các tiện dụng cho người dùng. Người dùng có thể cấu hình FPGA để phù hợp
với thiết kế của mình.
Sơ đồ khối Kit DE0-Nano được mô tả trong hình 2.5 bao gồm các thiết bị sau:
FPGA Device
Cyclone V SoC 5CSEMA4U23C6N Device
Dual-core ARM Cortex-A9 (HPS)
40K programmable logic elements
2,460 Kbits embedded memory
5 fractional PLLs
2 hard memory controllers
39
Configuration and Debug
Serial configuration device – EPCS128 on FPGA
Onboard USB-Blaster II (Mini-B USB connector)
40
ADC
12-Bit Resolution, 500Ksps Sampling Rate. SPI Interface.
8-Channel Analog Input. Input Range : 0V ~ 4.096V.
Switches, Buttons, and Indicators (Công tác, nút nhấn)
3 user Keys (FPGA x2, HPS x1)
4 user switches (FPGA x4)
9 user LEDs (FPGA x8, HPS x 1)
2 HPS reset buttons (HPS_RESET_n and HPS_WARM_RST_n)
Sensors (Cảm biến)
G-Sensor on HPS
Power (Nguồn)
5V DC input
Trên Board này người dùng có thể thiết kế phần cứng theo mục đích yêu cầu của dự
án trên phần FPGA, và lập trình phần mềm trên hệ điều hành Linux chạy trên chip
ARM của Board điều khiển các thành phần FPGA theo thiết kế thông qua các kết
nối của hệ thống.
2.3.4. Module dò đường
Nguyên lý hoạt động của mạch cảm biến thu phát quang dựa trên sự hấp thụ
và phản xạ ánh sáng của các màu sắc khác nhau của nền và đường đi. Vạch màu
trắng có khả năng phản xạ ánh sáng tốt hơn vạch màu đen. Khi đó, quang trở sẽ
nhận được các tia sáng phản xạ có cường độ lớn làm cho giá trị điện trở giảm khá
nhiều, dẫn đến điện áp trên quang trở là Vmin sẽ thấp. Ngược lại, vạch màu đen có
khả năng phản xạ ánh sáng kém hơn vạch màu trắng. Khi đó, quang trở nhận được
các tia sáng phản xạ có cường độ thấp làm cho giá trị điện trở của quang trở giảm
không đáng kể, dẫn đến điện áp trên quang trở lúc này là Vmax sẽ cao (hình 2.6).
Hình 2.6 thể hiện sơ đồ mạch nguyên lý của cảm biến.
(1)
Điện áp trên biến trở Vref, được tính theo công thức (1), dùng để so sánh với
điện áp từ quang trở để chuyển đổi thành các mức logic 0 tương ứng với 0Vdc hoặc
mức logic 1 tương ứng với 5Vdc mà vi điều khiển có thể hiểu được.
41
Hình 2. 6 Sơ đồ mạch module dò đường
42
Hệ thống gồm có các khối như trong hình 2.7 được phân làm 3 khối chính:
khối điều khiển hệ thống; Khối điều khiển động cơ; khối dò đường. Và nhiều các
khối khác như khối nguồn, khối động cơ. Tuy nhiên trong bài luận văn này chúng
tôi chỉ đi sâu và tìm hiều 3 khối chính, và đặc biệt đi sâu phân tích khối điều khiển
hệ thống, vì tất cả nhưng thao tác thiết kế, lập trình FPGA và lập trình phần mềm
bằng ngôn ngữ C đều nằm trên khối điều khiển. Khối điều khiển trung tâm này là
một Kit DE0-Nano sẽ được trình bày chi tiết trong phần 2.4.1
2.4.1. Khối điều khiển hệ thống
43
Trong cấu tạo khối hình 2.8, chúng ta thấy có thành phần chính: thành phần
FPGA được đánh dấu và chú thích màu xanh lá cây, các thành phần này giao tiếp
trực tiếp và các thành phần khác của hệ thống và đã được thiết kế lập trình để thực
thi các nhiệm vụ theo yêu cầu bài toán. Thành phần HPS được đánh dấu và chú
thích màu Cam, các thành phần này được thiết kế cứng cố định để kết nối giữa các
thiết kế FPGA với hệ thống (System). Thành phần hệ thống (System) được đánh
dấu và chú thích màu xanh nước biển gồm có một lõi xử lý ARM trung tâm để tính
toán và xử lý bài toán.
2.4.2. Khối điền khiển động cơ
Trong dự án này, tác giả sử dụng IC L298 để thiết kế và chế tạo cho mạch
điều khiển động cơ. IC này được tích hợp 2 mạch cầu H, có thể hoạt động ở điện áp
tối đa 46Vdc và dòng điện định mức tổng cộng là 5A. Hơn nữa, L298 có khả năng
đảo chiều quay và thay đổi tốc độ quay của động cơ một cách dễ dàng bằng cách sử
dụng phương pháp PWM. L298 được thiết kế và lắp đặt như hình 2.9
44
Trên hình 2.9: Các chân cắm đầu vào INA, INB, INC, IND được nối với dây
dẫn sang chân cắm GPIO của SoCKit khối điều khiển hệ thống. Các chân OUTA,
OUTB, OUTC, OUTD từng cặp được nối với 2 động cơ.
2.4.3. Khối dò đường
Khối dò đường sử dụng mạch dò đường New Way với điện áp vào 5 V và
dòng điện 100mA, sử dụng IC 74HC14D để xử lý các thông tin của 5 đèn cảm biến
màu sắc và 1 cảm biển gần đưa ra đầu ra là các tín hiệu số 0 và 1 để thể hiện kết quả
của cảm biến. Khi các đèn cảm biến màu sắc trả về giá trị 1 là lúc gặp dải màu đen
của vạch chỉ đường. Được thể hiện như hình 2.10
Trên hình 2.10: Các chân đầu ra của cảm biến từ s1 -> s7 được nối với dây
dẫn nối đến các chân cắm GPIO của SoCkit bên khối điều khiển hệ thống. Trong đó
chân s1->s5 là chân của các cảm biến hồng ngoại tương ứng với các đèn LED từ U1
– U5, còn s6 là chân của cảm biến va chạm gần.
45
CHƯƠNG III: XÂY DỰNG HỆ THỐNG
CD-Rom: \Demonstration\SOC_FPGA\my_first_hps_fpga_base
Dự án quartus này bao gồm tất cả các chân khai báo cần thiết cho cả HPS và
FPGA. Chú ý chân khai báo của HPS cần phải chỉ rõ tới trực tiếp các chân và chân
IO chuẩn. Dự án này cũng bao gồm các hệ thống Qsys cơ bản và các thành phần
của HPS. Các thành phần của HPS đã được thiết kế và cấu hình chuẩn trong thiết kế
phần cứng của HPS DE0-Nano-SoC.
46
Hình 3.2 minh họa các cổng ligthweight HPS-to-FPGA AXI Master của
thành phần HPS. Người phát triển có thể kết nối cổng này tới mọi cổng memory-
mapped slave của các thành phần mà người phát triển sẽ truy xuất từ HPS/ARM.
Trong hộp thư viện của công cụ Qsys, nhận từ khóa ‘pio’ nhấn tìm kiếm sẽ
xuất hiện cửa sổ như hình 3.3. Khi “PIO (Parallel I/O)” xuất hiện, chọn nó và sau
đó nhấn vào “Add …” để thêm thành phần PIO vào hệ thống Qsys.
47
Hình 3. 3 Tìm và thêm thành phần PIO
Khi của sổ PIO xuất hiện, chúng ta cần thay đổi độ rộng Width là 8, và đảm
bảo chắc chắn rằng “Output” trong thẻ Direction được lựa chọn, và thay đổi giá trị
trong Output Port Reset Value thành 0xff như trong hình 3.4
48
Hình 3. 4 Cấu hình thành phần PIO
Khi thành phần PIO được thêm vào hệ thống, cần thiết phải kết nối cổng
h2f_lw_axi_master AXI master v ới cổng s1 slave của thành phần PIO như hình
3.5. Hãy thay đổi tên thành phần PIO thành pio_led, thay đổi Clock Input thành
clk_0, xuất tín hiệu đường dân Conduit như là pio_led_external_connection, và
kết nối đầu vào Reset Input tới hệ thống reset. Chú ý, địa chỉ Base của thành phần
PIO pio_led là cực kỳ quan trọng cho việc lập trình phần mềm nhúng sau này.
Chương trình ARM sẽ truy xuất vào thành phần thông qua địa chỉ Base. Thường
thì chúng ta sẽ tạo ra một file header có tên hps_0.h, file này có ch ứa các địa chỉ
Base của các thành phần trong thiết kế FPGA, từ đó người phát triển phần mềm có
thể sử dụng địa chỉ đó để truy xuất vào các cổng và thực hiện đọc ghi các giá trị
vào thanh ghi đó.
49
Hình 3. 5 Tạo kết nối giữa HPS và thành phần PIO
Trong công cụ Qsys, nhấn vào menu Generate->HDL Example…“có thể tìm
tín hiệu giao diện mới pio_led_external_connection_export cho việc thêm thành phần
PIO pio_led như trong hình 3.6. Người phát triển có thể nhấn “Copy” để sao chép nội
dung tới bộ nhớ đệm, sau đó dán vào tín hiệu pio_led_external_connection_export
Quartus top và kết nối nó với cổng LEDR như hình 3.7. trước khi đóng công cụ Qsys,
hãy nhớ nhấn vào menu “Generate->Generate…” để tạo ra nguồn mã code cho hệ
thống.
50
Hình 3. 6 giao diện pio_led của hệ thống
Cách thêm một thành phần đã xây dựng sẵn từ code HDL: Hình 3.8 và 3.9 là
các thành phần trong Qys của hệ thống, Hình 3.10 cách thức thêm vào 1 thành phần
mới của Qys từ một file HDL thiết kế từ người dùng.
51
Hình 3. 8 các thành phần cơ bản trong Qys của hệ thống
52
Hình 3. 10 Thêm vào một thành phần trong Qys
53
///////// FPGA /////////
input FPGA_CLK1_50,
input FPGA_CLK2_50,
input FPGA_CLK3_50,
///////// GPIO /////////
inout [35:0] GPIO_0,
output [35:0] GPIO_1,
`ifdef ENABLE_HPS
///////// HPS /////////
inout HPS_CONV_USB_N,
output [14:0] HPS_DDR3_ADDR,
output [2:0] HPS_DDR3_BA,
output HPS_DDR3_CAS_N,
output HPS_DDR3_CKE,
output HPS_DDR3_CK_N,
output HPS_DDR3_CK_P,
output HPS_DDR3_CS_N,
output [3:0] HPS_DDR3_DM,
inout [31:0] HPS_DDR3_DQ,
inout [3:0] HPS_DDR3_DQS_N,
inout [3:0] HPS_DDR3_DQS_P,
output HPS_DDR3_ODT,
output HPS_DDR3_RAS_N,
output HPS_DDR3_RESET_N,
input HPS_DDR3_RZQ,
output HPS_DDR3_WE_N,
output HPS_ENET_GTX_CLK,
inout HPS_ENET_INT_N,
output HPS_ENET_MDC,
inout HPS_ENET_MDIO,
54
input HPS_ENET_RX_CLK,
input [3:0] HPS_ENET_RX_DATA,
input HPS_ENET_RX_DV,
output [3:0] HPS_ENET_TX_DATA,
output HPS_ENET_TX_EN,
inout HPS_GSENSOR_INT,
inout HPS_I2C0_SCLK,
inout HPS_I2C0_SDAT,
inout HPS_I2C1_SCLK,
inout HPS_I2C1_SDAT,
inout HPS_KEY,
inout HPS_LED,
inout HPS_LTC_GPIO,
output HPS_SD_CLK,
inout HPS_SD_CMD,
inout [3:0] HPS_SD_DATA,
output HPS_SPIM_CLK,
input HPS_SPIM_MISO,
output HPS_SPIM_MOSI,
inout HPS_SPIM_SS,
input HPS_UART_RX,
output HPS_UART_TX,
input HPS_USB_CLKOUT,
inout [7:0] HPS_USB_DATA,
input HPS_USB_DIR,
input HPS_USB_NXT,
output HPS_USB_STP,
//DC MOTOR CONTROL
output MTRL_P,
output MTRL_N,
55
output MTRR_P,
output MTRR_N,
input MTR_Fault_n,
output MTR_Sleep_n,
`endif /*ENABLE_HPS*/
///////// KEY /////////
input [1:0] KEY,
///////// LED /////////
output [7:0] LED,
///////// SW /////////
input [3:0] SW,
///////// SENSOR EXT//////
input s1,
input s2,
input s3,
input s4,
input s5,
input clp,
input near
);
//======================================================
=
// REG/WIRE declarations
//======================================================
=
wire [17:0] pwm;
//////////LegRF//////////
assign GPIO_1[9] = pwm[0];
assign GPIO_1[10] = pwm[1];
assign GPIO_1[11] = pwm[2];
56
//////////LegRM////////////
assign GPIO_1[17] = pwm[3];
assign GPIO_1[16] = pwm[4];
assign GPIO_1[15] = pwm[5];
//////////LegRB////////////
assign GPIO_1[14] = pwm[6];
assign GPIO_1[13] = pwm[7];
assign GPIO_1[12] = pwm[8];
//////////LegLF////////////
assign GPIO_1[2] = pwm[9];
assign GPIO_1[1] = pwm[10];
assign GPIO_1[0] = pwm[11];
//////////LegLM////////////
assign GPIO_1[18] = pwm[12];
assign GPIO_1[19] = pwm[13];
assign GPIO_1[20] = pwm[14];
//////////LegLB////////////
assign GPIO_1[21] = pwm[15];
assign GPIO_1[22] = pwm[16];
assign GPIO_1[23] = pwm[17];
//don't sleep
assign MTR_Sleep_n = 1'b1;
//======================================================
=
// Structural coding
//======================================================
soc_system u0 (
//Clock&Reset
.clk_clk (FPGA_CLK1_50 ), //
clk.clk
57
.reset_reset_n (1'b1 ), //
reset.reset_n
//HPS ddr3
.memory_mem_a ( HPS_DDR3_ADDR),
// memory.mem_a
.memory_mem_ba ( HPS_DDR3_BA), //
.mem_ba
.memory_mem_ck ( HPS_DDR3_CK_P),
// .mem_ck
.memory_mem_ck_n ( HPS_DDR3_CK_N),
// .mem_ck_n
.memory_mem_cke ( HPS_DDR3_CKE),
// .mem_cke
.memory_mem_cs_n ( HPS_DDR3_CS_N),
// .mem_cs_n
.memory_mem_ras_n ( HPS_DDR3_RAS_N),
// .mem_ras_n
.memory_mem_cas_n ( HPS_DDR3_CAS_N),
// .mem_cas_n
.memory_mem_we_n ( HPS_DDR3_WE_N),
// .mem_we_n
.memory_mem_reset_n ( HPS_DDR3_RESET_N),
// .mem_reset_n
.memory_mem_dq ( HPS_DDR3_DQ), //
.mem_dq
.memory_mem_dqs ( HPS_DDR3_DQS_P),
// .mem_dqs
.memory_mem_dqs_n ( HPS_DDR3_DQS_N),
// .mem_dqs_n
58
.memory_mem_odt ( HPS_DDR3_ODT),
// .mem_odt
.memory_mem_dm ( HPS_DDR3_DM),
// .mem_dm
.memory_oct_rzqin ( HPS_DDR3_RZQ), //
.oct_rzqin
//HPS ethernet
.hps_0_hps_io_hps_io_emac1_inst_TX_CLK (
HPS_ENET_GTX_CLK), //
hps_0_hps_io.hps_io_emac1_inst_TX_CLK
.hps_0_hps_io_hps_io_emac1_inst_TXD0 (
HPS_ENET_TX_DATA[0] ), //
.hps_io_emac1_inst_TXD0
.hps_0_hps_io_hps_io_emac1_inst_TXD1 (
HPS_ENET_TX_DATA[1] ), //
.hps_io_emac1_inst_TXD1
.hps_0_hps_io_hps_io_emac1_inst_TXD2 (
HPS_ENET_TX_DATA[2] ), //
.hps_io_emac1_inst_TXD2
.hps_0_hps_io_hps_io_emac1_inst_TXD3 (
HPS_ENET_TX_DATA[3] ), //
.hps_io_emac1_inst_TXD3
.hps_0_hps_io_hps_io_emac1_inst_RXD0 (
HPS_ENET_RX_DATA[0] ), //
.hps_io_emac1_inst_RXD0
.hps_0_hps_io_hps_io_emac1_inst_MDIO ( HPS_ENET_MDIO ),
// .hps_io_emac1_inst_MDIO
.hps_0_hps_io_hps_io_emac1_inst_MDC ( HPS_ENET_MDC ),
// .hps_io_emac1_inst_MDC
59
.hps_0_hps_io_hps_io_emac1_inst_RX_CTL ( HPS_ENET_RX_DV),
// .hps_io_emac1_inst_RX_CTL
.hps_0_hps_io_hps_io_emac1_inst_TX_CTL ( HPS_ENET_TX_EN),
// .hps_io_emac1_inst_TX_CTL
.hps_0_hps_io_hps_io_emac1_inst_RX_CLK (
HPS_ENET_RX_CLK), //
.hps_io_emac1_inst_RX_CLK
.hps_0_hps_io_hps_io_emac1_inst_RXD1 (
HPS_ENET_RX_DATA[1] ), //
.hps_io_emac1_inst_RXD1
.hps_0_hps_io_hps_io_emac1_inst_RXD2 (
HPS_ENET_RX_DATA[2] ), //
.hps_io_emac1_inst_RXD2
.hps_0_hps_io_hps_io_emac1_inst_RXD3 (
HPS_ENET_RX_DATA[3] ), //
.hps_io_emac1_inst_RXD3
//HPS SD card
.hps_0_hps_io_hps_io_sdio_inst_CMD ( HPS_SD_CMD
), // .hps_io_sdio_inst_CMD
.hps_0_hps_io_hps_io_sdio_inst_D0 ( HPS_SD_DATA[0] ), //
.hps_io_sdio_inst_D0
.hps_0_hps_io_hps_io_sdio_inst_D1 ( HPS_SD_DATA[1] ), //
.hps_io_sdio_inst_D1
.hps_0_hps_io_hps_io_sdio_inst_CLK ( HPS_SD_CLK ), //
.hps_io_sdio_inst_CLK
.hps_0_hps_io_hps_io_sdio_inst_D2 ( HPS_SD_DATA[2] ), //
.hps_io_sdio_inst_D2
.hps_0_hps_io_hps_io_sdio_inst_D3 ( HPS_SD_DATA[3] ), //
.hps_io_sdio_inst_D3
//HPS USB
60
.hps_0_hps_io_hps_io_usb1_inst_D0 (
HPS_USB_DATA[0] ), // .hps_io_usb1_inst_D0
.hps_0_hps_io_hps_io_usb1_inst_D1 ( HPS_USB_DATA[1] ),
// .hps_io_usb1_inst_D1
.hps_0_hps_io_hps_io_usb1_inst_D2 ( HPS_USB_DATA[2] ),
// .hps_io_usb1_inst_D2
.hps_0_hps_io_hps_io_usb1_inst_D3 ( HPS_USB_DATA[3] ),
// .hps_io_usb1_inst_D3
.hps_0_hps_io_hps_io_usb1_inst_D4 ( HPS_USB_DATA[4] ),
// .hps_io_usb1_inst_D4
.hps_0_hps_io_hps_io_usb1_inst_D5 ( HPS_USB_DATA[5] ),
// .hps_io_usb1_inst_D5
.hps_0_hps_io_hps_io_usb1_inst_D6 ( HPS_USB_DATA[6] ),
// .hps_io_usb1_inst_D6
.hps_0_hps_io_hps_io_usb1_inst_D7 ( HPS_USB_DATA[7] ),
// .hps_io_usb1_inst_D7
.hps_0_hps_io_hps_io_usb1_inst_CLK ( HPS_USB_CLKOUT ),
// .hps_io_usb1_inst_CLK
.hps_0_hps_io_hps_io_usb1_inst_STP ( HPS_USB_STP ), //
.hps_io_usb1_inst_STP
.hps_0_hps_io_hps_io_usb1_inst_DIR ( HPS_USB_DIR ), //
.hps_io_usb1_inst_DIR
.hps_0_hps_io_hps_io_usb1_inst_NXT ( HPS_USB_NXT ),
// .hps_io_usb1_inst_NXT
//HPS SPI
.hps_0_hps_io_hps_io_spim1_inst_CLK (
HPS_SPIM_CLK ), // .hps_io_spim1_inst_CLK
.hps_0_hps_io_hps_io_spim1_inst_MOSI ( HPS_SPIM_MOSI ),
// .hps_io_spim1_inst_MOSI
61
.hps_0_hps_io_hps_io_spim1_inst_MISO ( HPS_SPIM_MISO ),
// .hps_io_spim1_inst_MISO
.hps_0_hps_io_hps_io_spim1_inst_SS0 ( HPS_SPIM_SS ), //
.hps_io_spim1_inst_SS0
//HPS UART
.hps_0_hps_io_hps_io_uart0_inst_RX ( HPS_UART_RX
), // .hps_io_uart0_inst_RX
.hps_0_hps_io_hps_io_uart0_inst_TX ( HPS_UART_TX ), //
.hps_io_uart0_inst_TX
//HPS I2C1
.hps_0_hps_io_hps_io_i2c0_inst_SDA ( HPS_I2C0_SDAT
), // .hps_io_i2c0_inst_SDA
.hps_0_hps_io_hps_io_i2c0_inst_SCL ( HPS_I2C0_SCLK ), //
.hps_io_i2c0_inst_SCL
//HPS I2C2
.hps_0_hps_io_hps_io_i2c1_inst_SDA ( HPS_I2C1_SDAT
), // .hps_io_i2c1_inst_SDA
.hps_0_hps_io_hps_io_i2c1_inst_SCL ( HPS_I2C1_SCLK ), //
.hps_io_i2c1_inst_SCL
//GPIO
.hps_0_hps_io_hps_io_gpio_inst_GPIO09 (
HPS_CONV_USB_N ), // .hps_io_gpio_inst_GPIO09
.hps_0_hps_io_hps_io_gpio_inst_GPIO35 ( HPS_ENET_INT_N ), //
.hps_io_gpio_inst_GPIO35
.hps_0_hps_io_hps_io_gpio_inst_GPIO40 ( HPS_LTC_GPIO ), //
.hps_io_gpio_inst_GPIO40
.hps_0_hps_io_hps_io_gpio_inst_GPIO53 ( HPS_LED ), //
.hps_io_gpio_inst_GPIO53
.hps_0_hps_io_hps_io_gpio_inst_GPIO54 ( HPS_KEY ), //
.hps_io_gpio_inst_GPIO54
62
.hps_0_hps_io_hps_io_gpio_inst_GPIO61 ( HPS_GSENSOR_INT ),
// .hps_io_gpio_inst_GPIO61
//FPGA Partion
.led_pio_external_connection_export ( LED[6:0] ), //
led_pio_external_connection.export
.dipsw_pio_external_connection_export ( SW ), //
dipsw_pio_external_connection.export
.button_pio_external_connection_export ( KEY ), //
button_pio_external_connection.export
// .hps_0_h2f_reset_reset_n (1'b1 ), //
hps_0_h2f_reset.reset_n .pwm0_conduit_end_writeresponsevalid_n
(<connected-to-pwm0_conduit_end_writeresponsevalid_n>), //
pwm0_conduit_end.writeresponsevalid_n
// .pwm0_conduit_end_export (pwm[0]), //
// .pwm1_conduit_end_export (pwm[1]), //
pwm1_conduit_end.writeresponsevalid_n
// .pwm2_conduit_end_export (pwm[2]), //
pwm2_conduit_end.writeresponsevalid_n
// .pwm3_conduit_end_export (pwm[3]), //
pwm3_conduit_end.writeresponsevalid_n
// .pwm4_conduit_end_export (pwm[4]), //
pwm4_conduit_end.writeresponsevalid_n
// .pwm5_conduit_end_export (pwm[5]), //
pwm5_conduit_end.writeresponsevalid_n
// .pwm6_conduit_end_export (pwm[6]), //
pwm6_conduit_end.writeresponsevalid_n
// .pwm7_conduit_end_export (pwm[7]), //
pwm7_conduit_end.writeresponsevalid_n
// .pwm8_conduit_end_export (pwm[8]), //
pwm8_conduit_end.writeresponsevalid_n
63
// .pwm9_conduit_end_export (pwm[9]), //
pwm9_conduit_end.writeresponsevalid_n
// .pwm10_conduit_end_export (pwm[10]), //
pwm10_conduit_end.writeresponsevalid_n
// .pwm11_conduit_end_export (pwm[11]), //
pwm11_conduit_end.writeresponsevalid_n
// .pwm12_conduit_end_export (pwm[12]), //
pwm12_conduit_end.writeresponsevalid_n
// .pwm13_conduit_end_export (pwm[13]), //
pwm13_conduit_end.writeresponsevalid_n
// .pwm14_conduit_end_export (pwm[14]), //
pwm14_conduit_end.writeresponsevalid_n
// .pwm15_conduit_end_export (pwm[15]), //
pwm15_conduit_end.writeresponsevalid_n
// .pwm16_conduit_end_export (pwm[16]), //
pwm16_conduit_end.writeresponsevalid_n
// .pwm17_conduit_end_export (pwm[17]), //
pwm17_conduit_end.writeresponsevalid_n
.dc_motor_left_conduit_end_motor_p (MTRL_P),
.dc_motor_left_conduit_end_motor_n (MTRL_N),
.dc_motor_right_conduit_end_motor_p (MTRR_P),
.dc_motor_right_conduit_end_motor_n (MTRR_N),
.sensor_ex_s1_in (s1), //
sensor_ex.s1_in
.sensor_ex_s2_in (s2), //
.s2_in
.sensor_ex_s3_in (s3), //
.s3_in
64
.sensor_ex_s4_in (s4), //
.s4_in
.sensor_ex_s5_in (s5), //
.s5_in
.sensor_ex_CLP (clp), //
.CLP
.sensor_ex_NEAR (near), //
.NEAR
.sensor_ex_s_data () //
.s_data
// .sensor_ex_reset_reset (1'b0) //
sensor_ex_reset.reset
);
assign LED[7] = heart_beat[23];
reg [23:0] heart_beat;
always @ (posedge FPGA_CLK2_50)
begin
heart_beat <= heart_beat + 1;
end
endmodule
Chúng ta có thể bắt đầu xử lý biên dịch bằng cách nhấn vào menu
“Processing->Start Compilation”. Khi xử lý biên dịch thành công, file soc_system.sof
được tạo ra. Người phát triển có thể sử dụng file này để cấu hình FPGA bằng chương
trình Quartus thông qua USB-Blaster II trên board DE0-Nano-SoC.
Bởi vì file .tcl của điều khiển SDRAM DDR3 cho HPS đã được thực thi
trong my_first_hps_fpga_base, vì vậy chúng ta có thể giữ dự án này. Nếu chúng ta
không dùng dữ án my_first_hps_fpga_base để phát triển, thì nhớ rằng phải thực thi
tạo file . tcl như trong hình 3.11 trước khi thực hiện bắt đầu biên dịch. File kịch bản
TCL có thể được tạo ra bằng cách nhấn vào menu “Tools->TCL Scripts…”.
65
Các file tcl <qsys_system_name>_parameters.tcl và
<qsys_system_name>_pin_assignments.tcl sẽ được thực thi, ở đây
<qsys_system_name> là tên của hệ thống Qsys. Chạy kịch bản này để gán ràng
buộc cho thành phần SDRAM DDR3.
66
Hình 3. 12 Sơ đồ khối giải thuật PID
- Hàm lỗi e(t) tại thời điểm t: độ lệch giữa giá trị mong muốn và giá trị đo được:
e(t) = Vset – Vmo(t) (3)
Trong đó: Vset : Setpoint Value (giá trị điện áp mong muốn)
Vmo(t): Measurable Output Value (giá trị điện áp đo được tại thời điểm t).
- Proportional P(t) (hàm tỉ lệ): điều khiển tỉ lệ với giá trị lỗi hiện tại.
P(t) = K pe(t) (4)
- Integral I(t) (hàm tích phân): điều khiển tương ứng với mức lỗi được tích lũy theo
thời gian.
I(t) = Ki (5)
D(t) = Kd (6)
67
Giải thuật PID được tích hợp vào trong giải thuật điều khiển robot dò đường
để tính toán và xuất ra các giá trị PWM điều khiển 2 động cơ gắn với 2 bánh sau
của robot dựa vào độ sai lệch giữa giá trị đo đạc ngõ vào và giá trị mong muốn. Độ
sai lệch, hay còn gọi là giá trị lỗi, được tính toán trong giải thuật PID là độ lệch giữa
trạng thái hiện tại của robot so với đường đi. Có nghĩa là, độ sai lệch giữa giá trị
hiện tại của bộ cảm biến so với giá trị của cảm biến trong trường hợp robot chạy
thằng về phía trước.
Việc áp dụng giải thuật PID trên robot dò đường sử dụng cảm biến quang
được trình bày bằng sơ đồ khối như sau:
Hình 3. 13 Sơ đồ khối ứng dụng giải thuật PID vào robot dò đường
- Vị trí mục tiêu V set: trung tâm của đường đi, vị trí mà ta muốn robot
hướng đến
- Vị trí thực tại Vmo (t): vị trí thực của robot, có thể lêch bên trái hoặc bên
phải so với đường đi của robot.
- Lỗi e(t): độ sai lệch giữa vị trí mục tiêu và vị trí thực của robot, có thể là
giá trị âm hoặc dương hoặc bằng 0, được tính theo công thức (3).
- Hệ số K p, Ki , Kd là các hằng số tương ứng được sử dụng để điều chỉnh
ảnh hưởng của các khâu tỉ lệ, khâu tích phân và khâu vi phân.
-
68
b) Giải thuật PID
Giải thuật PID là một chuỗi các phép toán để xác định các giá trị của khâu
điều khiển tỉ lệ, khâu điều khiển vi phân và khâu điều khiển tích phân. Sau đó, kết
hợp với các giá trị lại với nhau và xuất ra giá trị điều độ rộng xung PWm để điều
khiển 2 động cơ bánh sau của robot.
- Khâu điều khiển tỉ lệ tính toán độ lệch của robot, xác định được robot đang lệch
phải hay lệch trái đường và xuất ra các giá trị PWM để điều khiển hai động cơ giúp
robot quay về vị trí mục tiêu (áp dụng công thức (3) và (4)).
Độ lệch: e(n) = Vmo(n) – Vset (7)
Dáp ứng khâu tỉ lệ: P(n) = K pe(n) (8)
Trong đó: n là số lần lấy mẫu
Hằng số Kp càng lớn thì sự điều chỉnh càng lớn khi lỗi càng lớn. Ngược lại, Kp càng
nhỏ thì sẽ đáp ứng điều chỉnh nhỏ đối với lỗi.
- Khâu điều khiển tích phân tính toán dựa trên sai số tích lũy theo thời gian. Robot
càng lệch xa đường thì sai số tích lũy càng lớn. Khâu này thể hiện rằng trong quá
khứ robot có bám đường đi tốt hay không (áp dụng công thức (4)).
69
c) Hiệu chỉnh thuật toán PID
Khi sử dụng giải thuật PID để điều khiển robot dò đường, kết quả ban đầu
cho thấy robot hoạt động không như mong đợi. Trường hợp này được lý giải là do
các giá trị của các hệ số Kp, Ki , Kd chưa phù hợp. Mỗi robot có một đặc tính vật lý
khác nhau do đó các hệ số này cũng phải thay đổi để phù hợp. Lưu đồ thuật toán
hiệu chỉnh PID
70
3.2.3. Biên dịch và chạy chương trình
B1: Viết một file biên dịch (Makefile) với nội dung như sau:
#
TARGET = smart_car
#
CROSS_COMPILE = arm-linux-gnueabihf-
CFLAGS = -g -I ${SOCEDS_DEST_ROOT} -I
${SOCEDS_DEST_ROOT}/ip/altera/hps/altera_hps/hwlib/include -I
${SOCEDS_DEST_ROOT}/ip/altera/hps/altera_hps/hwlib/include/soc_cv_av
LDFLAGS = -g
CC = $(CROSS_COMPILE)gcc
ARCH= arm
build: $(TARGET)
$(TARGET): main.o
$(CC) $(LDFLAGS) $^ -o $@ -pthread
%.o : %.c
$(CC) $(CFLAGS) -c $< -o $@ -pthread
.PHONY: clean
clean:
rm -f $(TARGET) *.a *.o *~
B2: Mở phần mềm Embedded_Commanshell trong altera. Thực hiện các lệnh như
hình 3.15 dưới đây:
71
Hình 3. 15 Biên dịch và copy file vào thẻ nhớ trên Sockit
B3: Mở phần mềm Putty chọn kết nối cổng Serial, COMx, 115200 sau đó kết nối và
thực thi phần mềm như hình 3.16 dưới:
72
3.3. Kết quả mô phỏng và kiểm thử
3.3.1. Kết quả mô phỏng
Qua các bài mô phỏng trên máy tính để kiểm tra các giá trị kết quả của đầu ra
sử dụng phần mềm SignalTap II Logic Analyzer để phân tích và đánh giá các kết
quả đầu ra của các chân địa chỉ đã được thiết kế trong FPGA.
Trong hình 3.17 các chân địa chỉ đầu ra cần kiểm tra và đánh giá đó là:
MTRL_N, MTRL_P dùng để tạo xung PWM điều khiển động cơ trái; MTRR_N và
MTRR_P dùng để tạo xung PWM điều khiển động cơ phải; s1->s5 là thể hiện kết
quả đầu ra của cảm biến đèn LED từ U1->U5; near là kết quả đầu ra của cảm biến
gần.
73
hình 3.14. Vì quá trình thực nghiệm sinh ra rất nhiều giá trị khác nhau nên trong
bảng 3.1 chỉ thể hiện các kết quả của mỗi 1 lần thử nghiệm, cụ thể như sau:
21 25 5 0.3 1.4
22 30 5 0.4 1.41
23 35 5 0.5 1.53
24 40 5 0.6 1.71
25 45 5 0.7 1.83
74
Lần Kp Kd Ki Vận tốc
26 30 5 0.8 2
27 30 5 0.9 1.82
28 30 5 1.0 1.75
29 30 5 1.1 1.72
30 30 5 1.2 1.70
Các số liệu trong bảng 3.1 lần lượt được thể hiện trên đồ thị trong các hình
(3.18
-3.20). Trong đồ thị hình 3.18, thể hiện quá trình hiệu chỉnh Kp, giữ cố định Kd=0,
Ki=0, robot di chuyển với vận tốc V=1.3 (m/s) là giá trị vận tốc cực đại tại giá trị
Kp=30.
Hình 3. 18 Vận tốc của robot khi hiệu chỉnh Kp (với: Kd=0; Ki=0)
Trong đồ thị hình 3.19, trong khi cố định Kp=30, Ki=0 và hiệu chỉnh Kd,
robot
di chuyển với vận tốc V=1.38 (m/s) là giá trị vận tốc cực đại đạt tại giá trị Kd=5.
Trong đồ thị hình 3.20, khi cố định Kp=30, Kd=5 và hiệu chỉnh Ki, robot di chuyển
với vận tốc V=2 (m/s) là giá trị vận tốc cực đại đạt tại giá trị Ki=0.8.
75
Hình 3. 19 Vận tốc của robot khi hiệu chỉnh Kd (với: Kp=30; Ki=0)
Hình 3. 20 Vận tốc của robot khi hiệu chỉnh Ki (với: Kp=30; Kd=5)
Từ kết quả thực nghiệm trên cho thấy hiệu quả của từng khâu: điều khiển tỉ
lệ, điều khiển vi phân và điều khiển tích phân của giải thuật PID trong điều khiển
robot dò đường là rất tốt. Như vậy, qua thực nghiệm trên mô hình robot thật, các hệ
số của bộ điều khiển PID được chọn để robot di chuyển với vận tốc cực đại lần lượt
là: Kp = 30, Kd = 5 và Ki = 0.8.
76
KẾT LUẬN
Trong bài luận văn này, chúng tôi đã thành công khi đưa nghiên cứu ứng
dụng SoC vào điều khiển động cơ một chiều bằng phương pháp điều chế xung
PWM. Như chúng ta đã biết nền tảng SoC chính là nền tảng ứng dụng sự kết hợp
hoàn hảo của FPGA và DSP. Với yêu cầu của bài toán “Nghiên cứu thực thi bộ điều
khiển Robot công nghiệp trên nền tảng FPGA” chúng tôi đã sử dụng nền tảng SoC
để thiết kế hệ thống và điều khiển robot theo yêu cầu của bài toán. Ưu điểm của nền
tảng SoC là sử dụng chip vi xử lý ARM hiệu năng cao và hệ điều hành linux thời
gian thực giúp tối ưu xử lý, tính toán thuật toán và hiệu năng xử lý của SoC. Ngoài
ra cho phép người dùng có thể dễ dàng thay đổi thiết kế phần cứng cũng như phần
mềm để ứng dụng đưa vào bài toán của mình. Trong luận văn này chúng tôi đã ứng
dụng nền tảng SoC để thiết kế phần cứng FPGA tạo ra các xung PWM để điều
khiển động cơ và sử dụng thuật toán PID trong phần mềm để điều chỉnh hướng đi
của robot theo một vạch đường định trước, bước đầu đã thành công về mặt hệ thống
và thuật toán, tuy nhiên trong quá trình thiết kế và thực thi có gặp một số vấn đề về
chất lượng của thiết bị động cơ, thiết bị cảm biến dò đường vì vậy kết quả vẫn chưa
được tối ưu như mong muốn.
77
TÀI LIỆU THAM KHẢO
[1]. Boumediène A., Brahim G. and Brahim M., (14 January-June 2009), Setting Up
PID DC Motor Speed Control Alteration Parameters Using Particle Swarm
Optimization Strategy, Bechar University, Department of Electrical Engineering,
B.P 417BECHAR (08000) Algeria, ISSN 1583-1078
[2]. Cơ điện tử Việt Nam (http://codientu.org)
[3]. DE0_Nano_User_Manual_v1.9 – Terasic
[4]. DS-5+SoCkit+WorkshopUSA - Terasic
[5]. John A. Shaw, (1 December 2003), the PID Control Algorithm: How it works,
how totune it, and how to use it, 2nd Edition, Process Control Solutions.
[6]. Seyed Yahya Moradi, Controling DC Motor Position, Using PID Controller
Made by PIC Microcontroller. Department of Electronic Engineering Faculty of
Electrical Engineering, Sahand University of Technology
78