1. Trang chủ
  2. » Luận Văn - Báo Cáo

Điều khiển động cơ 1 chiều DC sử dụng vi xử lí arduino

80 3,4K 21

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 2,83 MB

Nội dung

Điều khiển động cơ 1 chiều DC sử dụng vi xử lí arduino

Trang 1

MỤC LỤC

LỜI MỞ ĐẦU……… 3

Chương 1: TỔNG QUAN……… 4

1 Giới thiệu chung về Arduino……… 4

1.1 Tổng quan về Arduino Uno……… 4

1.2 Sơ đồ chân Arduino……… 5

2 Giới thiệu về phần mền Proteus……… 7

3.Các phần mềm sử dụng……….9

4 Chi phí thực hiện đề tài………9

Chương 2: Nhận dạng động cơ DC………11

1 Xác định thông số động cơ ……… 11

1.1 Xác định dạng hàm truyền ……… 11

1.2 Xác định hàm truyền và thông số PID ……… 11

1.3 Kiểm nghiệm thông số PID………21

2 Nhận dạng động cơ thực………24

Chương 3: Thiết kế và mô phỏng mạch điều khiển động cơ DC- Encoder……… 30

1 Thiết kế mạch điều khiển động cơ DC-Encoder………30

1.1 Cách băm xung trong Arduino………30

1.2 Đọc Encoder bằng phương pháp ngắt ngoài ……… 31

1.2.1 Giới thiệu về Encoder……… 31

1.2.2 Ngắt ngoài trong Arduino………33

1.3 Ngắt Timer……… 35

1.4 Nguyên tắc điều khiển động cơ ……… 36

Trang 2

1.5 Thiết kế mạch trên Proteus….………39

2 Thiết kế giao diện điều khiển bằng Megunolink……… 41

2.1 Giới thiệu về Megunolink……… 41

2.2 Các bước thiết kế giao diện Megunolink………42

2.3 Kết quả bài toán……… 49

Chương 4: Mô phỏng tay máy 1DOF………52

1 Thiết lập hệ phương trình vi phân……… 52

2 Mô phỏng bằng Simulink……… 54

3 Mô phỏng bằng Matlab……… 59

Chương 5: Ý tưởng phát triển………66

Kết luận……… 72

Tài liệu tham khảo……….73

Phụ lục……… 74

Trang 3

LỜI MỞ ĐẦU

Hiện nay khoa học kỹ thuật đang phát triển rất nhanh, mang lại những lợi ích cho con người về tất cả những lĩnh vực trong cuộc sống Để nâng cao đời sống nhân dân và hòa nhập với sự phát triển chung của thế giới, Đảng và nhà nước ta đã đề ra những mục tiêu đưa đất nước đi lên thành một nước công nghiệp hóa hiện đại hóa Để thực hiện điều đó thì một trong những ngành cần quan tâm phát triển nhất đó là ngành cơ khí nói chung và

cơ điện tử nói riêng vì nó đóng vai trò quan trọng trong việc sản xuất ra các thiết bị công

cụ ( máy móc, robot…) của mọi ngành kinh tế

Sự xuất hiện của Arduino đã tạo ra làn sóng trên thế giới trong việc lập trình và thiết

kế các mạch vi điều khiển mà không đòi hỏi quá nhiều kiến thức về lập trình Hiện nay việc sử dụng Arduino ở Việt Nam đã trở nên phổ biến và được sử dụng rộng rãi trong các trường đại học công nghệ của Việt Nam, cũng như những người đam mê về lập trình vi điều khiển

Việc sử dụng Arduino để điều khiển động cơ cho thấy khả năng của Arduino, góp phần điều khiển các cơ cấu, Robot trở nên linh hoạt và dễ dàng hơn Vì vậy việc điều khiển động cơ bằng Arduino đang được sử dụng rộng rãi trong công nghiệp phòng thí nghiệm hiện nay

Bài viết không tránh khỏi những sai sót, rất mong được sự giúp đỡ và chỉ bảo của thầy cô để chúng em làm tốt hơn trong những lần tiếp theo

Cuối cùng em xin trân thành cảm ơn sự chỉ bảo tận tình của thầy cô trong bộ môn Cơ Ứng Dụng và đặc biệt là sự hướng dẫn của thầy Đỗ Đăng Khoa đã giúp chúng em học được rất nhiều điều và hoàn thành môn thực tập kỹ thuật này

Trân trọng cảm ơn

Hà Nội, ngày tháng năm 2015

Trang 4

Chương 1: Tổng quan

1 Giới thiệu về Arudino

Arduino ra đời tại thị trấn Ivrea thuộc nước Italia Được đặt tên theo vị vua vào thế kỉ thứ 9 là King Arduin Arduino chính thức được giới thiệu vào năm 2005 như là 1 công cụ khiêm tốn dành cho các sinh viên và giáo sư Massimo Banzi là 1 trong những người phát triển Arduino tại trường IDII Mặc dù hầu như không được tiếp thị gì cả, tin tức về Arduino vẫn lan truyền với tốc độ chóng mặt nhờ những lời truyền miệng tốt đẹp của những người dùng đầu tiên Hiện nay Arduino nổi tiếng tới nỗi có người đến thị trấn Ivrea để thăm quan nơi sinh ra của Arduino

Arduino thực ra là một bo mạch vi xử lý, được dùng để lập trình tương tác với các thiết bị phần cứng như cảm biến, động cơ, đèn, hoặc các thiết bị khác Đặc điểm nổi bật của Arduino là môi trường phát triển ứng dụng cực kì dễ sử dụng, với một ngôn ngữ lập trình có thể học một cách nhanh chóng ngay cả với những người ít am hiểu về điện tử và lập trình Và điều làm nen hiện tượng Arduino chính là mức giá rất thấp và tính chất nguồn mở từ phần cứng tới phần mền Chỉ với hơn 200.000 VND , ta có thể sở hữu một board Arduino có 14 ngõ I/O thoa các điều khiển thiết bị

1.1 Tổng quan về Arduino Uno

Arduino Uno là 1 bo mạch thiết kế với bộ xử lý trung tâm là vi điều khiển AVR Atmega328

Nó có 14 chân digital I/O, 6 chân đầu vào (input) analog, thạch anh dao động 16Mhz Một số thông số kỹ thuật như sau :

Trang 5

Bảng 1.1: Bảng thông số về Arduino Uno

Điện áp cấp nguồn 5V Điện áp đầu vào 7-12V Điện áp đầu vào giới hạn 6-20V

Số chân Digital I/O 14(có 6 chân điều chế độ rộng xung PWM)

DC Current per I/O Pin 40mA

DC Current for 3.3V Pin 50mA Flash Memory 32KB (ATMega328) với 0,5KB sử dụng bootloader

Trang 6

a) USB (1)

Arduino sử dụng cáp USB để giao tiếp với máy tính Thông qua cáp USB chúng ta

có thể Upload chương trình cho Arduino hoạt động, ngoài ra USB còn là nguồn cho Arduino

b) Nguồn ( 2 và 3 )

Khi không sử dụng USB làm nguồn thì chúng ta có thể sử dụng nguồn ngoài thông qua jack cắm 2.1mm ( cực dương ở giửa ) hoặc có thể sử dụng 2 chân Vin và GND để cấp nguồn cho Arduino

Bo mạch hoạt động với nguồn ngoài ở điện áp từ 5 – 20 volt Chúng ta có thể cấp một áp lớn hơn tuy nhiên chân 5V sẽ có mực điện áp lớn hơn 5 volt Và nếu sử dụng nguồn lớn hơn 12 volt thì sẽ có hiện tượng nóng và làm hỏng bo mạch Khuyết cáo các bạn nên dùng nguồn ổn định là 5 đến dưới 12 volt

Chân 5V và chân 3.3V (Output voltage) : các chân này dùng để lấy nguồn ra từ nguồn mà

chúng ta đã cung cấp cho Arduino Lưu ý : không được cấp nguồn vào các chân này vì sẽ làm hỏng Arduino

Dòng điện trong mạch Arduino chỉ vào khoảng 50mA GND: chân mass

Trang 7

Serial : chân 0 (Rx ), chân 1 ( Tx) Hai chân này dùng để truyền (Tx) và nhận (Rx) dữ liêu nối tiếp TTL Chúng ta có thể sử dụng nó để giao tiếp với cổng COM của một số thiết bị hoặc các linh kiện có chuẩn giao tiếp nối tiếp

PWM (pulse width modulation): các chân 3, 5, 6, 9, 10, 11 trên bo mạch có dấu “~” là các chân PWM chúng ta có thể sử dụng nó để điều khiển tốc độ động cơ, độ sáng của đèn…

SPI : 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK), các chân này hỗ trợ giao tiếp theo chuẩn SPI

I2C: Arduino hỗ trợ giao tiếp theo chuẩn I2C Các chân A4 (SDA) và A5 (SCL) cho phép chúng tao giao tiếp giửa Arduino với các linh kiện có chuẩn giao tiếp là I2C

e) Reset (7): dùng để reset Arduino

2 Giới thiệu về phần mền Proteus

Phần mền Proteus là phần mền cho phép mô pohngr hoạt động của mạch điện tử bảo gồm phần thiết kế mạch và viết chương trình điều khiển cho các họ vi điều khiển như MCS-51, PIC, AVR, Proteus là phần mền mô phỏng mạch điện tử của Lanccenter Electronics, mô phỏng cho hầu hết các linh kiện điện tử thông dụng, đặc biệt hỗ trợ cho các MCU như PIC, 8051, AVR

Trang 8

Hình 1.2: Giao diện khởi động Proteus 8.0 Phần mền bao gồm 2 chương trình ISIS cho phép mô phngr mạch và ARES dùng đễ

vẽ mạch in Proteus là công cụ mô phỏng cho các lại vi điều khiển khá tốt, nó hỗ trợ các dòng vi điều khiển như PIC, 8051, AVR, .vv các giao tiếp I2C, SPI, CAN, USB, Ethenet ngoài ra còn mô phỏng các mạch số, mạch tương tự một cách hiệu quả

Để mô phỏng được Arduino trên proteus thì chúng ta cần phải download thư viện arduino cho proteus Để có được thư viên này các bạn cần truy cập vào trang web:

http://blogembarcado.blogspot.com/search/label/Proteus

Hình 1.3: Thư viện mô phỏng Arduino

Trang 9

Sau khi download về các bạn chép 2 file ARDUINO.IDX và ARDUINO.LIB vào thư mục:

Hình 1.4: Mô phỏng Arduino bằng Proteus

Lưu ý chúng ta cần phải cấp nguồn vào 2 chân 5V và Gnd trên mạch như hình trên

3.Các phần mềm sử dụng:

Trang 10

-Matlab-simulink:mô phỏng hoạt động, tìm hàm truyền -Arduino IDE: biên dịch code C sang file HEX

-Meguno link: Thiết kế giao diện

-Proteus: Mô phỏng mạch Arduino

4 Chi phí thực hiện đề tài

Sau đây là bảng chi tiết các linh kiện được sử dụng trong bài thực tập như sau:

Bảng 1.2: Báo giá linh kiện được sử dụng

Trang 11

Chương 2: Nhận dạng động cơ

1 Xác định thông số động cơ 1.1 Xác định dạng hàm truyền

Hàm truyền động cơ 1 chiều đầu vào điện áp; đầu ra vận tốc góc:

Hình 2.1 : Sơ đồ điện cơ -Động cơ DC: Điện trở Ra; cuộn cảm L; hằng số phản sức điện động Ke; hằng số momen

1.2 Xác định hàm truyền và thông số PID

Đơn vi dùng để tính PID: góc[xung]; vận tốc góc [xung/s]; điện áp u (V); tín hiệu điều khiển U cấp cho chân 9 (PWM): 0-255 tương ứng với u nguồn cấp 9V do U tuyến tính với u nên ta quy ước đơn vị của nó là V

Trang 12

Tìm hàm truyền:

*Cấp U=255V đo [xung/s]

Code test động cơ DC

#include <Timer.h>

Timer t0;

#define motorPin1 8 // L293D Input 1

#define motorPin2 7 // L293D Input 2

#define speedPin 9 // L293D enable chân 1 int menu=0,dau=0,dem=0,dem2=0;

float v=0,time=0.025,inv=40,U = 0,t=0;

long int a=0,b=0,c=0,qold=0,qnew=0,eold=0,enew=0;

void setup() { Serial.begin(9600);

if(dem2==40) U=0;

Trang 13

dem=0;}

} void dao() // chương trình con ngắt, khi có ngắt xảy ra sẽ thực hiện chương trình này {

Trang 14

Dùng lệnh Serial.println(v); trong để in vận tốc đo được ra màn hình Serial monitor

Hình 2.2 : Mở màn hình Serial Monitor

Trang 15

Hình 2.3: Vận tốc góc đo được Sau đó copy số liệu trên serial monitor vào file excel

Trang 16

Import file excel của vận tốc góc đo được theo thời gian trong matlab:

Hình 2.5: Giá trị vận tốc theo thời gian Sau khi có vector v (138x1); ta nhập u (138x1):

Trang 17

Hình 2.6: u và v trong workspace

Mở toolbox Matlab Identification : Trong mục import data chọn time domain nhập biến v vừa import Trong mục Estimate chọn Transfer Fcn : Điền vào ô 1 điểm cực và 0 điểm không

Ấn Estimate để chạy

Trang 18

Hình 2.7: Môi trường Transfer Fcn +Kết quả hàm truyền tìm được:

Trang 19

Hình 2.8: Hàm truyền tìm được

(s) 52,17 (s)

Y s G s h s Y s G s U s

U t U t U s U h s Y s U Y s y t U y t

Trang 20

2 1

b xung/s là giá trị  trung bình khi xác lập tra theo kết quả đo

Hình 2.9: Giá trị trung bình của bG(s) có đáp ứng quá độ như hình:

Hình 2.10: Đáp ứng quá độ hàm truyền G(s)

=> Thới điểm T tương ứng với y t1( )0.63k

=> Tại t=T y t2( )U y t ( )1 0, 63 .U k 0, 63.b0, 63.132778400Đối chiếu bảng kết quả đo ta thấy T  0.05s

Trang 21

-Hàm truyền tính được với đầu vào: U(0-255 thang 9V) đầu ra  (xung / s):

-Phương pháp tối ưu đối xứng:

1 1

i K

Trang 22

Hình 2.13: Sai lệch giữa lượng đặt và thực tế

Trang 23

Hình 2.15: Sai lệch giữa lượng đặt và thực tế

Trang 24

Hình 2.17: Sai lệch giữa lượng đặt và thực tế

2 Nhận dạng động cơ thực

Trong mô hình của ta sử dụng động cơ một chiều các thông số R (điện trở phần ứng), Ke

(hệ số phản sức điện động), Km (hệ số momen) của động cơ không có sẵn, do đó trong mục nhận dạng hệ thật sẽ nói về việc nhận dạng động cơ DC

Ta có các phương trình cơ điện của động cơ có dạng như sau:

Trang 25

Nếu đáp ứng phần điện nhanh so với đáp ứng phần cơ (hằng số thời gian cơ rất lớn so với hằng số thời gian phần điện) thì ta có thể đơn giản hóa bằng cách cho La = 0 Khi đó ta

viết lại Error! Reference source not found như sau:

  ( ) ( )

R i te tU t (2.5) Thay (2.2) vào phương trình (2.5) ta thu được:

  0  ( )

R i tKtU t (2.6)

Từ phương trình Error! Reference source not found ta có thể xác định được các tham

số Ra và Ke bằng cách tiến hành đó điện áp, dòng điện và vận tốc của động cơ với 2 mức điện áp khác nhau

Dụng cụ đo gồm có :

Hình 2.18 Đồng hồ đo điện vạn năng Hình 2.19 Điện trở 0.47 ohm

Encoder nối sẵn với động cơ có độ phân dải 448 xung/vòng

Trang 26

Bước 2: Đo điện áp 2 đầu đậu cơ ta được U(t), đo điện áp hai đầu điện trở 0.47 ohm (do điện trở của động cơ không lớn khoảng nên việc đo nối tiếp bằng đồ hồ đo không được chính xác bằng phương pháp đo điện áp hai đầu điện trở rồi tính ra dòng trong mạch) rồi tính ra dòng trong mạch theo định luật ohm

Bước 3: Ghi lại số xung đo được trên LCD trong một giây, ta lấy giá trị hiện thị khi động

cơ chạy ổn định lấy giá trị trung bình cộng rồi chia cho độ phân giải là 100 xung ta được

số vòng quay trong một giây

Bước 4: Lặp lại với mức điện áp còn lại các bước 1,2,3

Kết quả đo:

Bảng 2.2: Kết quả đo Nguồn Điện áp 2 đầu DC(V) Dòng điện trong mạch(A) Tốc độ(rad/s)

Thế phương trình Error! Reference source not found vào phương trình

Error! Reference source not found ta được:

Trang 27

Dựa vào phương trình Error! Reference source not found ta có thể tiến hành xác định

thông số Km bằng cách tiến hành dùng mẫu thử gắp trực tiếp với trục động cơ đặt một điện áp phù hợp vào 2 đầu động cơ sao cho động cơ quay một góc giới hạn   90o và dữ cân bằng tại vị trí đó Do động cơ không quay nên

Trang 28

Phương pháp đo Lắp mạch với nguồn DC 5V Tiến hành đo dòng điện của mạch như trên kết hợp hiện thị góc quay động cơ so với phương thẳng đứng

i tb

Momen tĩnh tác dụng lên trục động cơ là

Trang 29

i t

Vậy ta đã xác định xong các tham số động cơ với kết quả là :

Bảng 2.21: Tham số của động cơ

Trang 30

Chương 3: Thiết kế và mô phỏng mạch điều khiển

-Pin: là vị trí chân, đối với Arduino Uno thì chỉ có các chân 3, 5, 6, 9, 10 & 11 mới

có chức năng tạo PWM Vậy chúng ta có thể trả lời được câu hỏi bên trên, các chân digital

còn lại của có thể đọc hoặc xuất 2 giá trị là 0 và 1 mà thôi

-Value: Giá trị nằm trong khoảng 0 đến 255

Trang 31

Hình 3.2: PWM 25%

Value = 229 (hay 90%) thì dạng xung sẽ là :

Hình 3.3: PWM 90%

Từ ví dụ trên ta thấy sự thay đổi độ rộng của chuổi xung dẫn đến sự thay đổi điện áp ra

Ta cũng thấy rằng điện áp trên motor cũng thay đổi tuyến tính theo sự thay đổi điện áp ngõ ra trên chân 9 Tức là nếu điện áp trung bình trên chân 9 là 2,5 volt (50% ) thì điện áp trên hai đầu motor là 4.5 volt ( nguồn motor là 9 volt)

1.2 Đọc Encoder bằng phương pháp ngắt ngoài 1.2.1 Giới thiệu về Encoder

Hệ thống optical encoder bao gồm một nguồn phát quang (thường là hồng ngoại – infrared), một cảm biến quang và một đĩa có chia rãnh Optical encoder lại được chia thành 2 loại:

Encoder tuyệt đối (absolute optical encoder) và encoder tương đối (incremental

Trang 32

mô hình động cơ servo trong bài này cũng không ngoại lệ Từ bây giờ khi nói encoder tức

là incremental encoder

Hình 3.4 Optical Encoder Encoder thường có 3 kênh (3 ngõ ra) bao gồm kênh A, kênh B và kênh I (Index) Trong hình lỗ nhỏ bên phía trong của đĩa quay và một cặp phat-thu dành riêng cho lỗ nhỏ này Đó là kênh I của encoder Cữ mỗi lần motor quay được một vòng, lỗ nhỏ xuất hiện tại vị trí của cặp phát-thu, hồng ngoại từ nguồn phát sẽ xuyên qua lỗ nhỏ đến cảm biến quang, một tín hiệu xuất hiện trên cảm biến Như thế kênh I xuất hiện một “xung” mỗi vòng quay của motor Bên ngoài đĩa quay được chia thành các rãnh nhỏ và một cặp thu-phát khác dành cho các rãnh này Đây là kênh A của encoder, hoạt động của kênh A cũng tương tự kênh I, điểm khác nhau là trong 1 vòng quay của motor, có N “xung” xuất hiện trên kênh A N là số rãnh trên đĩa và được gọi là độ phân giải (resolution) của encoder Mỗi loại encoder có độ phân giải khác nhau, có khi trên mỗi đĩa chĩ có vài rãnh nhưng cũng có trường hợp đến hàng nghìn rãnh được chia Để điều khiển động cơ, phải biết độ phân giải của encoder đang dùng Độ phân giải ảnh hưởng đến độ chính xác điều khiển

và cả phương pháp điều khiển Không được vẽ trong hình , tuy nhiên trên các encoder còn có một cặp thu phát khác được đặt trên cùng đường tròn với kênh A nhưng lệch một

Trang 33

chút (lệch M+0,5 rãnh), đây là kênh B của encoder Tín hiệu xung từ kênh B có cùng tần

số với kênh A nhưng lệch pha 90o Bằng cách phối hợp kênh A và B người đọc sẽ biết chiều quay của động cơ Hãy quan sát hình 3

Hình 3.5 Hai kênh A và B lệch pha trong encoder (trích từ [1]) Hình trên cùng trong hình 3 thể hiện sự bộ trí của 2 cảm biến kênh A và B lệch pha nhau Khi cảm biến A bắt đầu bị che thì cảm biến B hoàn toàn nhận được hồng ngoại xuyên qua, và ngược lại Hình thấp là dạng xung ngõ ra trên 2 kênh Xét trường hợp motor quay cùng chiều kim đồng hồ, tín hiệu “đi” từ trái sang phải Quan sát lúc tín hiệu

A chuyển từ mức cao xuống thấp (cạnh xuống) thì kênh B đang ở mức thấp Ngược lại, nếu động cơ quay ngược chiều kim đồng hồ, tín hiệu “đi” từ phải qua trái Lúc này, tại cạnh xuống của kênh A thì kênh B đang ở mức cao Như vậy, bằng cách phối hợp 2 kênh

A và B chúng ta không những xác định được góc quay (thông qua số xung) mà còn biết được chiều quay của động cơ (thông qua mức của kênh B ở cạnh xuống của kênh A)

Có 3 cách đọc Encoder :

- Dùng input capture

Trang 34

- Dùng chức năng Counter

- Cuối cùng là ngắt ngoài

1.2.2 Ngắt ngoài trong Arduino

Ngắt (interrupt) là những lời gọi hàm tự động khi hệ thống sinh ra một sự kiện Những sự kiện này được nhà sản xuất vi điều khiển thiết lập bằng phần cứng và được cấu

hình trong phần mềm bằng những tên gọi cố định

Ngắt giúp chương trình gọn nhẹ và xử lý nhanh hơn Chẳng hạn, khi kiểm tra 1 nút nhấn có được nhấn hay không, thông thường bạn cần kiểm tra trạng thái nút nhấn bằng hàm digitalRead() trong đoạn chương trình loop() Với việc sử dụng ngắt, bạn chỉ cần nối nút nhấn đến đúng chân có hỗ trợ ngắt, sau đó cài đặt ngắt sẽ sinh ra khi trạng thái nút chuyển từ HIGH->LOW Thêm 1 tên hàm sẽ gọi khi ngắt sinh ra Vậy là xong, biến trong đoạn chương trình ngắt sẽ cho ta biết trạng thái nút nhấn

Số lượng các ngắt phụ thuộc vào từng dòng vi điều khiển Với Arduino Uno bạn chỉ

có 2 ngắt, Mega 2560 có 6 ngắt và Leonardo có 5 ngắt

Cú pháp:

attachInterrupt(interrupt, ISR, mode);

Thông số interrupt: Số thứ tự của ngắt Trên Arduino Uno, bạn có 2 ngắt với số thứ tự là 0 và 1 Ngắt số 0 nối với chân digital số 2 và ngắt số 1 nối với chân digital số 3

ISR: tên hàm sẽ gọi khi có sự kiện ngắt được sinh ra

mode: kiểu kích hoạt ngắt, bao gồm LOW: kích hoạt liên tục khi trạng thái chân digital có mức thấp HIGH: kích hoạt liên tục khi trạng thái chân digital có mức cao

RISING: kích hoạt khi trạng thái của chân digital chuyển từ mức điện áp thấp sang mức điện áp cao

Trang 35

FALLING: kích hoạt khi trạng thái của chân digital chuyển từ mức điện áp cao sang mức điện áp thấp

Lưu ý: với mode LOW và HIGH, chương trình ngắt sẽ được gọi liên tục khi chân digital còn giữ mức điện áp tương ứng

void setup() {

attachInterrupt(0, dao, FALLING);

} void dao() // chương trình con ngắt, khi có ngắt xảy ra sẽ thực hiện chương trình này

{ c=digitalRead(2); //chan ngat -kenh A b=digitalRead(13); //kenh B

if (c==b) a=a-1; // tru bot xung A (nghich) else a=a+1; // cong them xung cua A (thuan) }

1.3 Ngắt Timer (để tính PID)

Trong Arduino có thư viện Timer.h phục vụ cho ngắt timer Mục đích của ngắt timer

là định sẵn một khoảng thời gian và đếm ngược đến hết thời gian đó timer sẽ thực hiện lệnh hoặc gọi chương trình con

#include <Timer.h>

Timer t0;

Trang 36

int time=0.025;

void setup() {

t0.update() // cập nhật thời gian

t0.every sẽ gọi hàm pid sau mỗi 25ms

1.4 Nguyên tắc điều khiển động cơ

Trang 37

h[s] thời gian lấy mẫu;

Tùy thuộc hàm truyền mà ta chọn dùng PID, PI, I

Từ đó ra sẽ có sơ đồ nguyên tắc thiết kế điều khiển động cơ

Hình 3.8: Sơ đồ điều khiển Ngắt ngoài khi chân 2 có tín hiệu xuống 1->0 liên tục gửi tín hiệu khi động cơ quay

So sánh kênh A và B để biết chiều thuận nghịch tương ứng q - hay +

(1)Hàm tính U điều khiển (0-255) xuất ra chân 9; Hàm chỉ được gọi sau mỗi 25ms qua ngắt timer

T=0.025 s : thời gian lấy mẫu Thời gian lấy mẫu càng nhỏ (tấn số cao) thì việc hiệu chỉnh càng tiến gần đến sự “liên tục” và chất lượng điều khiển sẽ tốt hơn Trong các bộ

Trang 38

điều khiển số, thời gian lấy mẫu là một yếu tố rất quan trọng Cần tính toán để thời gian này không quá lớn nhưng cũng đừng quá nhỏ, vì như thế sẽ hao phí thời gian thực thi

Code tính PID:

void pid() {

qnew=a; // dat goc moi = a if(menu==0){

t=t+time; // tang thoi gian dem enew=x*sin(y*t+1.57)-a; //e(k)

ipart+=0.05*(enew-eold)*time; //I(k) U=0.21*enew+ipart; }

if(menu==1) { enew=z-abs(qold-qnew); //enew sai so van toc z xung dat tuong ung voi van to dat U+=0.21*enew; //ki=021; U chinh la I(k)

v=(qnew-qold); } // van toc dang xung in ra man hinh qold=qnew; // dat vi tri cu = vi tri moi cho vong lap moi eold=enew; // dat sai so cu = sai so moi cho vong lap moi dem++;

Trang 39

1.5 Thiết kế mạch trên Proteus

Sau khi thực hiện được lập trình cho mạch trên Arduino IDE ta có thể chạy thử xem mạch hoạt động như thế nào trên phần mền Proteus

Phần mền hoạt động khá đơn giản, ta chỉ việc kích vào biểu tượng P và đánh ra tên linh kiện trong khung Keywords và kích đúp vào để đưa linh kiện ra bên ngoài

Hình 3.9: Lấy linh kiện

Trang 40

Hình 3.10: Cách lấy linh kiện

Từ đó chúng ta thiết kế mạch như trong hình vẽ dưới đây:

Các chân được đánh số từ 1 đến 9 như trong hình vẽ

Hình 3.11: Sơ đồ nối mạch trên Proteus

Ngày đăng: 25/09/2015, 21:41

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w