You are on page 1of 87

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI


----------------------------------

NGUYỄN TRUNG TIẾ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

Chuyên ngành: Kỹ thuật Điện tử

LUẬN VĂN THẠC SĨ

NGƯỜI HƯỚNG DẪN:


PGS.TS. Đỗ Trọng Tuấn

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Ẽ:

Hình 1. 1 Robot Công nghiệp ..................................................................................... 4


Hình 1. 2 Robot y tế và an ninh quốc phòng ............................................................... 4
Hình 1. 3 Động cơ một chiều ...................................................................................... 5
Hình 1. 4 Cấu tạo động cơ DC .................................................................................... 6
Hình 1. 5 Động cơ Servo ............................................................................................. 6
Hình 1. 6 Cấu tạo động cơ Servo ................................................................................ 7
Hình 1. 7 Động cơ bước .............................................................................................. 8
Hình 1. 8 Sơ đồ nguyên tắc điều khiển tải sử dụng PWM ........................................ 11
Hình 1. 9 Mạch nguyên lý điều khiển tải bằng PWM............................................... 12
Hình 1. 10 Sơ đồ xung PWM .................................................................................... 13
Hình 1. 11 Tạo xung vuông bằng phương pháp so sánh ........................................... 14
Hình 1. 12 Sơ đồ mạch L298 điều khiển động cơ một chiều .................................... 16
Hình 1. 13 Sơ đồ khối chức năng của DRV8833 ...................................................... 17
Hình 1. 14 Sơ đồ mạch FET+relay ........................................................................... 18
Hình 1. 15 Chu kỳ xung PWM trong động cơ Servo ................................................ 19
Hình 1. 16 Module Driver A4988 ............................................................................. 20
Hình 1. 17 Sơ đồ kết nối ........................................................................................... 21
Hình 1. 18 Sơ đồ thực thi hệ thống DSP ................................................................... 26
Hình 1. 19 Kiến trúc bên trong FPGA ...................................................................... 27
Hình 1. 20 Cấu trúc một Logic Block ....................................................................... 27
Hình 1. 21 Sơ đồ tích hợp cứng ................................................................................ 29
Hình 1. 22 Sơ đồ khối tích hợp mềm ........................................................................ 30
Hình 2. 1 Sơ đồ cấu chúc của hệ thống ..................................................................... 35
Hình 2. 2 Sơ đồ khối hệ thống .................................................................................. 36
Hình 2. 3 Sơ đồ thiết kế phần cứng điều khiển hệ thống .......................................... 37
Hình 2. 4 Mạch điều khiển motor ............................................................................. 38
Hình 2. 5 Sơ đồ khối của Kit DE0 Nano ................................................................... 40
Hình 2. 6 Sơ đồ mạch module dò đường .................................................................. 42
Hình 2. 7 Mô hình hệ thống ...................................................................................... 42

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 1. 1 Bảng chân điều khiển động cơ bước ........................................................ 22

Bảng 1. 2 Tóm tắt các ứng dụng sử dụng của DSP................................................... 25

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

Từ viết tắt Nghĩa tiếng Anh Nghĩa tiếng Việt

SoC system-on-a-chip Hệ thống trên một vi mạch


Mạch tích hợp các phần tử mảng
FPGA Field-programmable gate array
logic có thể lập trình được
DSP Digital Signal Processing Xử lý tín hiệu số

PWM Pulse-width modulation điều chế độ rộng xung

IC integrated circuit Vi mạch

ADC Analog-to-digital converter Mạch chuyển đổi tương tự ra số

HPS hard processor system Hệ thống xử lý phần cứng

DC Direct Current dòng điện một chiều

PID Proportional Integral Derivative Cơ chế phản hồi vòng điều khiển

RAM Random Access Memory Bộ nhớ truy cập ngẫu nhiê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

HDL Hardware Description Language ngôn ngữ mô tả phần cứng

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à nội, ngày tháng năm

Học viên

(Ký ghi rõ họ tên)

viii
MỞ ĐẦU

1. Tính cấp thiết của đề tài


Công nghệ robot là một ngành khoa học mới mẻ so với nhiều ngành khác
nhưng tốc độ phát triển của nó rất nhanh, khả năng ứng dụng vô cùng to lớn. Các
ứng dụng nổi bật của công nghệ robot như: Robot công nghiệp giúp phát triển
nhanh nền công nghiệp, robot chiến đấu, robot tự hành, robot cảnh sát,… đã đem lại
nhiều lợi ích to lớn trong nhiều lĩnh vực khác nhau từ giải trí, học tập, lao động,
quân sự, v.v…

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.

2. Mục tiêu nghiên cứu


Mục tiêu đề tài là:

- 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

3. Đối tượng và phạm vi nghiên cứu


- Nghiên cứu lý thuyết về nền tảng FPGA và DSP.
- Nghiên cứu kỹ thuật lập trình trên công nghệ SoC.
- Nghiên cứu thuật toán dò đường PID.
- Nghiên cứu phương pháp điều chế độ rộng xung PWM

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:

Chương 1: Tổng quan hệ thống

Chương 2: Thiết kế hệ thống

Chương 3: Xây dựng hệ thố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.

6. Tổng quan tài liệu nghiên cứu


Tài liệu phục vụ cho việc nghiên cứu đề tài này bao gồm các tài liệu cơ bản
như DE0_Nano_User_Manual_v1.9 phát hành bởi Terasic. DS-
5+SoCkit+WorkshopUSA phát hành bở Terasic. Speed Control of Dc Motor By
PWM Method Using Microcontroller của Tran Quoc Cuong, Tran Thanh Phong

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]

Hình 1. 1 Robot Công nghiệp


Ngày nay, ngoài ứng dụng sơ khai ban đầu của robot trong chế tạo máy thì
các ứng dụng khác như trong y tế, chăm sóc sức khỏe, nông nghiệp, đóng tàu, xây
dựng, an ninh quốc phòng đang là động lực cho sự phát triển của ngành công
nghiệp robot. Hình 1.2 minh họa cho những cánh tay robot ý tế đang thực hiện ca
phẫu thuật cho bệnh nhân và Robot chiến đấu được phát triển bởi Nhật Bản.

Hình 1. 2 Robot y tế và an ninh quốc phòng

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

Hình 1. 3 Động cơ một chiều

Động cơ một chiều DC ( DC là từ viết tắt của "Direct Current Motors") là


động cơ điều khiển trực tiếp có cấu tạo gồm hai dây (dây nguồn và dây tiếp đất).
DC motor là một động cơ một chiều với cơ năng quay liên tục.

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ơ.

Hình 1. 4 Cấu tạo động cơ DC

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

Hình 1. 5 Độ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.

Hình 1. 6 Cấu tạo động cơ Servo

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

Hình 1. 7 Độ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.

Động cơ điện một chiều DC

- Tốc độ nhanh, động cơ xoay vòng liên tục.

-Đượ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.

Ứng dụng của PWM trong điều khiển


PWM được ứng dụng nhiều trong điều khiển. Điển hình nhất mà chúng ta
thường hay gặp là điều khiển động cơ và các bộ xung áp, điều áp... Sử dụng PWM
điều khiển độ nhanh chậm của động cơ hay cao hơn nữa, nó còn được dùng để điều
khiển sự ổn định tốc độ động cơ.

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ơ.

Hình 1. 8 Sơ đồ nguyên tắc điều khiển tải sử dụng PWM

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.

Nguyên lý hoạt động của PWM


Đây là phương pháp được thực hiện theo nguyên tắc đóng ngắt nguồn của tải
một cách có chu kì theo luật điều chỉnh thời gian đóng cắt. Phần tử thực hiện nhiện
vụ đó trong mạch các van bán dẫn.

Hình 1. 9 Mạch nguyên lý điều khiển tải bằng PWM


Xét hoạt động đóng cắt của một van bán dẫn. Dùng van đóng cắt bằng
Mosfet IRF540 (Mosfet là Transistor hiệu ứng trường- Metal Oxide Semiconductor
Field Effect Transistor)

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ó:

Ud = Umax.( t1/T) (V)


hay Ud = Umax.D
(Với D = t1/T là hệ số điều chỉnh và được tính bằng % tức là PWM)

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à :

Ud = 12x20% = 2.4V ( với D = 20%)


Ud = 12x40% = 4.8V (Vói D = 40%)
Ud = 12x90% = 10.8V (Với D = 90%)

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.

- Cách 1: Tạo xung vuông bằng phương pháp so sánh


Để tạo được bằng phương pháp so sánh ta cần 2 điều kiện sau đây :

+ Tín hiệu răng cưa : Xác định tần số của PWM

+ 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 :

Hình 1. 11 Tạo xung vuông bằng phương pháp so sánh

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.

- Cách 2: Tạo xung vuông bằng phần mềm

Đâ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.

Lấy 1 đoạn ví dụ tạo PWM trong chip 8501 :

a) Module điều khiển động cơ một chiều


Để điều khiển tốc độ và cả chiều của động cơ điện 1 chiều khá đơn giản. Để
điều khiển chiều chúng ta chỉ cần đảo chiều điện áp cấp vào phần ứng của động cơ.
Còn muốn điều khiển vận tốc thì thay đổi điện áp phần ứng cấp vào động cơ.

Mạch điều khiển sử dụng cũng có rất nhiều loại:

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:

Hình 1. 12 Sơ đồ mạch L298 điều khiển động cơ một chiều


Trong sơ đồ mạch L298 hình 1.12, gồm 4 chân đầu vào INPUT: IN1, IN2,
IN3, IN4 được nối lần lượt với các chân 5, 7, 10, 12 của L298. Đây là các chân
nhận tín hiệu điều khiển. Và gồm 4 chân đầu ra OUTPUT: OUT1, OUT2, OUT3,
OUT4 (tương ứng với các chân INPUT) được nối với các chân 2, 3, 13, 14 của
L298. Các chân này sẽ được nối với động cơ.

- 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.

Điều khiển chiều quay với L298:

-Khi ENA = 0: Động cơ không quay với mọi đầu vào .

-Khi ENA = 1:

16
+ INT1 = 1; INT2 = 0: động cơ quay thuân.

+ INT1 = 0; INT2 = 1: động cơ quay nghịch.

+ INT1 = INT2: động cơ dừng ngay tức thì.

(tương tự với các chân ENB, INT3, INT4).

Hình 1. 13 Sơ đồ khối chức năng của DRV8833

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.

b) Module điều khiển động cơ Servo


Động cơ Servo là loại động cơ có góc quay cực kỳ chính xác, nó quay theo độ rộng
của xung PWM. Chính vì vậy mà chúng ta chỉ cần một vi điều khiển có thể tạo ra
các độ rộng xung khác nhau là có thể điều khiển được động cơ Servo RC. Góc quay
cơ học được xác định bởi chiều rộng của một xung điện phát lên dây điều khiển.
Đây là một hình thức điều chế độ rộng xung. Servo RC thấy một xung sau mỗi 20
ms, tuy nhiên điều này có thể thay đổi trong một phạm vi rộng khác nhau từ servo
này sang servo khác. Chiều rộng của xung sẽ xác định được tốc độ của động cơ. Ví
dụ, trong nhiều Servo RC một xung 1,5 ms sẽ làm cho động cơ quay về vị trí 90 độ
(vị trí trung tính). Thời gian của giá trị thấp (và tổng thời gian) có thể thay đổi trong
phạm vi rộng, và thay đổi từ xung này sang xung kế tiếp, mà không ảnh hưởng đến
vị trí của động cơ servo.
Vị trí của servo RC không được xác định bởi chu kỳ làm việc PWM (nghĩa
là, thời gian ON, OFF) mà chỉ bằng chiều rộng của xung. (Điều này rất khác so với
PWM từng được sử dụng trong một số hệ thống khác. Đặc biệt, điều khiển tốc độ
động cơ PWM DC hoạt động theo cách thức khác hoàn toàn). Hầu hết các động cơ

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.

Hình 1. 15 Chu kỳ xung PWM trong động cơ Servo


c) Module điều khiển động cơ bước
-Động cơ bước có nhiều cách điều khiển. Có thể điều khiển các dây trực tiếp
qua 4 cổng qua MCU thông qua driver đệm công suất. cách này hơi phức tạp một
chút, cần phải hiểu rõ bên trong động cơ và thường chỉ điều khiển được full bước
-Cách thông dụng nhất là dùng các IC chuyên dụng điều khiển động cơ bước.
Các IC hay gặp nhất là TB6560, TB6600, L297, A4988, DRV8825, MA860H...
Việc lựa chọn dùng loại driver nào phụ thuộc vào loại động cơ và công suất động cơ
định điều khiển. Ví dụ như A4988, DRV8825 dùng để điều khiển các loại động cơ
nhỏ có công suất bé ví dụ như trong máy photo hoặc máy in 3d, TB6560 hoặc
TB6600 thì lại dùng để điều khiển các loại động cơ lớn hơn một chút ví dụ như
trong các loại máy cnc mini. Các loại động cơ to thì người ta hay dùng MA860H
hoặc các driver khủng hơn nữa

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

Giới thiệu module Driver A4988

 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ỏ.

Hình 1. 16 Module Driver A4988

20
 Tính năng:

- Điều khiển đơn giản


- Điều khiển được động cơ hoạt động với điện áp lên tới 35V dòng lên tới 2A

- 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

- Tự động Shutdown thì quá nóng

 Sơ đồ kết nối

Hình 1. 17 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)

 Hai chân Sleep với Reset nối với nhau luôn.

1.1.4. Nền tảng FPGA/DSP trong điều khiển Robot


FPGA là công nghệ vi mạch tích hợp khả trình (PLD - Programmable Logic
Device) mới nhất và tiên tiến nhất hiện nay. Thuật ngữ Field Programmable chỉ quá
trình tái cấu trúc IC có thể được thực hiện bởi người dùng cuối, trong điều kiện
thông thường thường, hay nói một cách khác là người kỹ sư lập trình IC có thể dễ
dàng hiện thực hóa thiết kế của mình sử dụng FPGA mà không lệ thuộc vào một
quy trình sản xuất hay cấu trúc phần cứng phức tạp nào trong nhà máy bán dẫn. Đây
chính là một trong những đặc điểm làm FPGA trở thành một công nghệ IC khả trình
được nghiên và cứu phát triển nhiều nhất hiện nay. Để có được khả năng đó, FPGA
ra đời hoàn toàn là một công nghệ mới chứ không phải là một dạng mở rộng của các
chip khả trình kiểu như PAL, PLA... Sự khác biệt đó thứ nhất nằm ở cơ chế tái cấu
trúc FPGA, toàn bộ cấu hình của FPGA thường được lưu trong một bộ nhớ truy cập
ngẫu nhiên (thông thường SRAM), quá trình tái cấu trúc được thực hiện bằng cách

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.

1.3.4.1. DSP (Digital Signal Processing)


Xử lý tín hiệu số (DSP) là sử dụng các biến đổi hoặc điều khiển tín hiệu số
trong suốt thời gian dài. DSP đã trở thành một nền tảng công nghệ và đã thay thế
cho hệ thống xử lý tín hiệu truyền thống trong nhiều ứng dụng. DSP có nhiều điểm
mạnh, chẳng hạn như không thay đổi theo nhiệt độ, tuổi thọ, và thêm vào đó, các
thiết kế số có hiệu suất cao, công suất thấp, giá thành rẻ hơn so với các thiết kế
tương tự.

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.

Lĩnh Vực Giải thuật DSP

Lọc và nhân chập, lọc thích nghi, nhận diện và so


Mục đích tổng quát sánh, đánh giá phổ, phân tích phổ và biến đổi
Fourier.

Mã hoá và giải mã, nhận dạng và tổng hợp tiếng nói,


Xử lý tiếng nói nhận diện người nói, loại bỏ tiếng vọng, xử lý tín
hiện trong cấy tai.

Mã hoá và giải mã Hi-Fi, loại bỏ nhiễu, cân bằng âm


Xử lý âm thanh thanh, mô phỏng âm thanh xung quanh, trộn và hiệu
chỉnh âm thanh, tổng hợp âm thanh.

Nén và giải nén ảnh, xoay, truyền và phân giải ảnh,


Xử lý hình ảnh nhận dạng ảnh, nâng cấp ảnh, xử lý tín hiệu trong
cấy võng mạc.

Thư âm thanh, fax, bộ điều hoà, mạng điện thoại,


điều chế và giải điều chế, cân bằng đường dây, mã
Các hệ thống thông tin hoá và giải mã dữ liệu, truyền thông số và mạng
LAN, mạng không dây, vô tuyến và truyền hình, y
sinh.

Đ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ị.

Bảng 1. 2 Tóm tắt các ứng dụng sử dụng của DSP

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ự.

1.3.4.2. FPGA (Field Programmalbe Gate Arrays)


FPGA là một thiết bị logic lập trình được. FPGA hình dung như một mảng 2
chiều các khối logic và flip-flop kết hợp với những liên kết điện tử khả trình giữa
các khối logic đó. Khác với liên kết cứng dùng kết nối kim loại trong những IC,
những liên kết trong FPGA là tổng hợp các chuyển mạch điện tử khả trình. Chính vì
vậy mà FPGA có khả năng sử dụng để tạo nên hầu hết các thiết kế phần cứng.

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.

Hình 1. 20 Cấu trúc một Logic Block

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).

a) Tích hợp cứng

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.

Hình 1. 21 Sơ đồ tích hợp cứng


Altera DSP Development Kit Stratix II, hỗ trợ một FPGA Stratix II
EP2S60F1020C4, bộ DSP có tên DK-DSP-2S60N (với phiên bản Professional có
thêm DK-DSP-2S180N), một DC-VIDEO-TVP5146 ngõ vào xử lý video,….

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.

Hình 1. 22 Sơ đồ khối tích hợp mềm


Với một DSP được tích hợp mềm, hạn chế lớn nhất của nó chính là tiêu tốn
khá nhiều tài nguyên FPGA, nếu chúng ta có một hệ thống DSP phức tạp thì vấn đề
sử dụng

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.

1.3.4.4. So sánh FPGA/DSP với ASIC/DSP


Một công nghệ đưa ra sự lựa chọn cạnh trang với DSP FPGA, đó chính là
DSP ASIC, hay còn gọi là DSP chuyên dụng. Mọi hoạt động xử lý của ASIC cũng
giống như FPGA, hoàn toàn chỉ thực hiện trên phần cứng vì vậy tốc độ xử lý tăng
đáng kể so với CPU. Các Chip chuyên dụng có tốc độ rất nhanh, nhanh hơn cả
FPGA, vì thực chất FPGA chính là một ASIC lập trình được. Chưa kể đến giá thành
của DSP ASIC rẻ hơn DSP FPGA khá nhiều.
Công nghệ ASIC gần như tuyệt vời về mọi mặt, tuy nhiên công nghệ không
bao giờ hoàn hảo tuyệt đối. Nhược điểm lớn nhất của ASIC đó chính là thiếu tính đa
dụng. ASIC như nhiều chip truyền thống khác, đó là một chip được chế tạo cứng
hoàn toàn, chỉ thực hiện được một nhiệm vụ duy nhất với mỗi chip, ta không thể tuỳ
biến được. Ngược lại, FPGA làm rất tốt chuyện này, với khả năng cấu hình lại phần
cứng đã làm cho FPGA trở nên hấp dẫn hơn ASIC ở một số ứng dụng cụ thể.
Ví dụ như một hệ thống điều khiển nhà thông minh, với công nghệ ASIC,
thật khó tìm ra một Chip đáp ứng yêu cầu xử lý nhiều loại DSP cùng một lúc để
điều khiển tất cả các thiết bị trong gia đình. Nếu có đi nữa, thì việc thêm một thiết bị
mới vào ngôi nhà, cũng sẽ kéo theo việc hay đổi hệ thống tốn nhiều chi phí và rất
mất thời gian. Giải pháp hiệu quả hơn được nghĩ đến, đó là FPGA/DSP, với nhiều
DSP tích hợp vào FPGA và một hệ thống điều khiển được cấu hình thành phần
cứng với khả năng nâng cấp bất kỳ khi nào người dùng muốn, việc thêm vào các
thiết bị mới vào ngôi nhà trở nên đơn giản hơn rất nhiều.

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.

1.3.4.5. Đánh giá

Ư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.

b) Lựa chọn giải pháp


- Giải pháp công nghệ: Qua phân tích ở trên chúng tôi đã đưa ra giải pháp điều
khiển động cơ sử dụng bo mạch SoC thông qua việc sử dụng các chuỗi xung PWM
đưa đến modul điều khiển động cơ để tăng công xuất của xung và đưa đến các cuộn
dây của động cơ để động cơ quay theo các yêu cầu tính toán trước. Tất cả các lệnh

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

2.1. Sơ đồ khối tổng thể của hệ thống

Hình 2. 1 Sơ đồ cấu chúc của hệ thống


Hệ thống được xây dựng trên cơ sở 4 module lớn: gồm module mạch điều
khiển động cơ, module phần cứng của bo mạch điều khiển trung tâm, phần mềm
chạy trên linux arm để điều khiển trực tiếp tới phần cứng, module cuối cùng là phần
mềm xây dựng trên Máy tính PC hoặc trên điện thoại để tương tác với người dùng.
2.2. Sơ đồ đặc tả hệ thống
Hệ thống chủ yếu được thực thi trên module điều khiển. Dự án này cũng chủ
yếu lập trình FPGA và lập trình code C trên module này. Module này gồm 2 phần
chính đó là thiết kế phần cứng và thiết kế phần mềm. Dự án robot có các file chính
là loại FPGA Bitstream: soc_system.rbf và chương trình smart_car chạy trên Linux.
Chức năng chính của FPGA Bitstream là cung cấp bộ điều khiển PWM để điều
khiển quay 2 động cơ một chiều của robot. Chương trình smart_car được chạy trên
Linux nhúng trong Altera SoC. Chức năng chính của chương trình này là điều khiển
thông qua yêu cầu của người dùng tới các thanh địa chỉ được liên kết từ phần cứng
tới các chức năng làm quay động cơ của robot.

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 Sơ đồ thiết kế phần cứng điều khiển hệ thống

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

2.3.3. Module điều khiển hệ thống


Các thiết bị SoC FPGA có cấu trúc tương tự nhau, vì vậy trong phần này sẽ
mô tả cụ thể về kiến trúc của thiết bị Altera Cyclone V SoC. Thiết bị SoC bao gồm
hai phần riêng biệt, một là bộ xử lý cứng (HPS) lõi kép ARM Cortex A9 và hai là
phần FPGA. Bộ xử lý HPS tích hợp nhiều loại thiết bị ngoại vi cho phép giảm kích
thước bo mạch và tăng hiệu năng hoạt động của hệ thống. Trong đó:
FPGA:
 Thiết bị Altera Cyclone® V SE 5CSEMA4U23C6N
 Thiết vị cấu hình cổng Serial – EPCS128
Cổng USB-Blaster II onboard để nạp chương trình; JTAG Mode
2 Nút ấn

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)

Hình 2. 5 Sơ đồ khối của Kit DE0 Nano


Memory Device (Thiết bị bộ nhớ)
1GB (2x256Mx16) DDR3 SDRAM trên HPS
Một khe cắm thẻ nhớ Micro SD trên HPS
Communication (Kết nối)
One USB 2.0 OTG (ULPI interface with USB Micro-AB connector)
UART to USB (USB Mini-B connector)
10/100/1000 Ethernet
Connectors (Bộ kết nối)
Two 40-pin expansion headers
Arduino expansion header
One 10-pin ADC input header
One LTC connector (one Serial Peripheral Interface (SPI) Master ,one I2C and
one GPIO interface )

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

2.4. Lựa chọn cấu hình hệ thống


Để lựa chọn được cấu hình hệ thống phù hợp với yêu cầu bài toán, chúng tôi
đã tìm hiều các hệ thông như trong phần 2.3 đã phân tích, và sau đó đưa ra các lựa
chọn phù hợp để thiết kế thành mô hình như trong hình 2.7 dưới đây:

Hình 2. 7 Mô hình hệ thố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

Hình 2. 8 Khối điều khiển Kit DE0 Nano

Khối điều khiển hệ thống là một board DE0-Nano-SoC. Nó sử dụng chip


ARM/HPS chạy hệ điều hành linux. Hệ thống được cấu hình sao cho khởi động từ
thẻ nhớ MicroSD trên DE0-Nano-SoC. Hệ điều hành linux và các file FPGA
bitstream được lưu trữ trên thẻ nhớ MicroSD (file soc_system.rbf; socfpga.dtb; u-
boot.scr; zImage). Để chế độ Linux boot với MSEL[4:0]=00000 thì bootloader sẽ
được cấu hình FPGA khi khởi động với file soc_system.rbf.

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

Hình 2. 9 Khối điều khiển động cơ L298

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

Hình 2. 10 Khối dò đường

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

3.1. Xây dựng phần cứng

3.1.1. Dự án Quartus cơ bản


Dự án Quartus my_first_hps-fpga_base là có sẵn trong thư mục DE0-Nano-
SoC trong đĩa CD đi kèm với Kit:

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.

Hình 3. 1 Thành phần HPS hps_0 trong hệ thống Qsys

Để phát triển chúng ta có thể mở hệ thống Qsys trong khi đang mở dự án


Quartus, và nhấn chọn vào menu “Tools->Qsys” trong Quartus II. Khi cửa sổ Qsys
xuất hiện, nó sẽ hỏi người dùng chọn một file hệ thống Qsys. Trong trường hợp này
chọn file Qsys là “soc_system.qsys”. Hình 3.1 thể hiện nội dung của file hệ thống
Qsys, nó chứa các thành phần HPS hps_0.

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.

Hình 3. 2 Cổng AXI Master của thành phần HPS

3.1.2. Phát triển trên nền tảng dự án cơ bản


Phần này sẽ minh họa cách thức thêm vào một thành phần PIO trong Qsys,
và làm thế nào để kết nối thành phần PIO này với thành phần HPS. Thành phần PIO
này sử dụng để điều khiển đèn LED kết nối với FPGA. Đầu tiên hãy sao chép dự án
Quartus my_first_hps_fpga_base tới thư mục trên máy tính. Mở dự án và mở file
Qsys “soc_system.qsys”.

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

Hình 3. 7 ban đầu hóa .pio_led_external_connection_export trong u0


soc_system

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

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

3.1.3. Biên dịch và chạy chương trình


Các thành phần khác chúng ta cũng xây dựng các bước một cách tương tự
như các bước thiết kế pio_led như các bước trên, sau khi xây dựng xong chương
trình sẽ tạo ra một file *top.v, từ file này chúng ta có thể viết code HDL để lập trình
theo ý đồ của dự án.
Nội dung file HDL như sau:
`define ENABLE_HPS
module DE0_Nano_SoC_golden_top(
///////// ADC /////////
output ADC_CONVST,
output ADC_SCK,
output ADC_SDI,
input ADC_SDO,
///////// ARDUINO /////////
inout [15:0] ARDUINO_IO,
inout ARDUINO_RESET_N,

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.

Hình 3. 11 file TCL cho SDRAM DDR3 của HPS

3.2. Xây dựng phần mềm


3.2.1. Giải thuật điều khiển vi tích phân tỉ lệ (PID)
Giải thuật điều khiển vi tích phân tỉ lệ hiệu chỉnh sai số giữa giá trị biến đo
được và giá trị mong muốn đạt đến bằng cách tính toán và xuất ra một “hành động
điều chỉnh” nhanh chóng để giữ cho lỗi ở mức nhỏ nhất có thể được. Bộ điều khiển
này bao gồm 3 thông số: Proportional (P), Integral (I) và Derivative (D), được thể
hiện qua sơ đồ khối và phương trình tổng quát như hình:

66
Hình 3. 12 Sơ đồ khối giải thuật PID

Phương trình PID tổng quát:

U(t) = K pe(t) + Ki + Kd (2)

- 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)

Trong đó: K p : hằng số tỉ lệ, tham số dùng để tinh chỉnh.

- 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)

Trong đó: Ki : hằng số điều chỉnh hàm tích phân


- Derivative D(t) (hàm vi phân): điều khiển tương ứng với tốc độ thay đổi của lỗi,
hay độ dốc lỗi theo thời gian.

D(t) = Kd (6)

Trong đó Kd hằng số điều chỉnh hàm vi phân.


3.2.2. Ứng dụng giải thuật PID vào điều khiển robot
a) Mô hình PID áp dụng cho robot dò đường

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)).

Sai số tích lũy: E(n) = (9)

Đáp ứng khâu tích phân: I(n) = Ki E(n) (10)


Trong đó: n là số lần lấy mẫu
- Khâu vi phân tính toán dựa trên sai số hiện tại. Khâu này cho biết tốc độ robot
dao động qua lại của đường đi (áp dụng công thức (6)).
Tốc độ dao động: (11)

Đáp ứng khâu vi phân: D(n) = Kd (12)


- Cuối cùng, giá trị PWM để xuất ra điều khiển cho các động cơ của robot sẽ là áp
dụng công thức (2), (7) – (12)
PWM = P(n) + I(n) + D(n) = Kp e(n) + Ki I(n) + Kd D(n)

 PWM = K p [Vmo(n) - Vset] + K i + Kd [e(n) – e(n-1)] (13)

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

Hình 3. 14 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:

Hình 3. 16 Thực thi chương trình trên Putty

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.

Hình 3. 17 Kết quả đầu ra mô phỏng qua SignalTap

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.

3.3.2. Kết quả kiểm thử


Bảng 3.1 thể hiện các giá trị vận tốc trung bình V(m/s) được đo từ thực
nghiệm của robot được điều khiển bằng phương pháp PWM vòng kín trên đoạn
đường thẳng có chiều dài 10m. Kết quả này được ghi nhận thông qua việc hiệu
chỉnh các thông số Kp, Ki và Kd của giải thuật PID dựa vào lưu đồ giải thuật trong

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:

Lần Kp Kd Ki Vận tốc


1 0 0 0 0.7
2 5 0 0 0.9
3 10 0 0 0.87
4 15 0 0 0.95
5 20 0 0 1
6 25 0 0 1.1
7 30 0 0 1.3
8 35 0 0 1.22
9 40 0 0 1.2
10 45 0 0 1.17
11 30 1 0 1.24
12 30 2 0 1.27
13 30 3 0 1.3
14 30 4 0 1.34
15 30 5 0 1.38
16 30 6 0 1.3
17 30 7 0 1.37
18 30 8 0 1.3
19 30 5 0.1 1.33
20 30 5 0.2 1.38

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

Bảng 3. 1 Kết quả thực nghiệm hiệu chỉnh PID

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

You might also like