04/06/2013
Điu khin Đng DC servo (PID)
www.hocavr.com/index.php/vi/app/dcservo
1/13
Điều khin Động DC servo (PID)
( 97 Votes )
Nội dung c bài cần tham khảo trước
1. Giới thiệu
2. Incremental Optical Encoder
3. Chip driver L298D
4. Mạch logic cho L298D
5. Gii thuật điều khiển PID
6. Điu khin DC Motor bằng AVR
Download ví d
Cấu trúc AVR.
WinAVR.
C cho AVR.
Mô phỏng với Proteus.
I. Giới thiu
Điu khiển đng cơ DC (DC Motor) là mt ng dụng thuc dng cơ bản nhất của điu khin tự động DC Motor là
cơ cu chấp hành (actuator) được dùng nhiu nhất trong các hệ thng tự động (ví d robot). Điu khiển được DC Motor
là bn đã thể tự y dng được cho mình rất nhiu hthng tự động. Khái nim Servo mà tôi dùng trong bài học y
đ chỉ mt hệ thng hi tiếp. DC servo motor là động cơ DC b điu khin hồi tiếp.
i này là một bài tổng hợp nhiều vấn đ ứng dng AVR bao gồm nhận dữ liệu từ người dùng, điu khin motor, đc
encoder, hiển th LCD, c giải thuật điu khiển PID và mch ng suất cho Motor…Do đó, ít nhất bạn phải nắm được các
vấn đ cơ bn như Timer-Counter, TexLCD, mạch cầu H. Phần còn lại tôi s gii thích trong lúc học bài này. 2
phương pháp điều khin động cơ DC là analog và digital. Mục đích chính ca chúng ta là dùng AVR điu khiển đng cơ
DC n phương pháp smà c thể là phương pháp điều rộng xung (PWM) s được giới thiệu. Ngoài ra, khi nói đến điu
khin đng cơ DC có 2 đi lương điu khiển chính là vị trí (số vòng quay) vận tốc. Trong phần gii thích về b điều
khin PID tôi sđiều khiển vị trí làm ví d, tuy nhiên trong phần ví dụ lập tnh cho AVR chúng ta s thực hin điu khiển
vận tốc cho DC Motor. Bằng cách này, bạn có thtự tin để mở rộng ví dụ đ điu khiển cho cả 2 đại lượng. Vì là điều
khin mt cách tự động n chúng ta cần đọc vđi lượng điều khiển (cụ thlà v trí hoặc vận tốc motor) hi tiếp
(feedback) về để hiu chnh” PWM cp cho động cơ. Chúng ta sdùng incremental optical encoder đ đc svòng
quay hồi tiếp về cho AVR. Bộ điều khiển PID s được dùng và vận hành bởi AVR. Tổng quát, bài họcy bao gm:
- AVR phát PWM điều chnh vận tc động cơ: phần này bn xem lại bài 4 về Timer-Counter. Điều cơ bn cn nắm là
bng cách thay đổi độ rộng của xung PWM chúng ta sẽ thay đi được vận tốc Motor.
- Xung PWM không trực tiếp làm quay động cơ thông qua mt mạch công sut gọi là dirver. Driver cho DC
Motor chính là mạch cầu H mà chúng ta đã m hiu trong bài Mch cầu H. Trong bài học y, i giới thiu mt chip
có tích hợp sn mch cầu H, chip L298D.
- Để việc điu khin chip driver L298D d dàng, chúng ta s tạo mt mạch logic dùng các cổng NOT AND.
- Động DC mà chúng ta sử dụng có tích hợp sẵn một encoder 3 nra, cng ta s dùng AVR đ đọc s xung
(hay svòng quay) và tính ra vận tốc của Motor. Vic đọc encoder sẽ được thực hiện bằng ngắt ngoài.
- Mt gii thuật PID đượcy dựng trong AVR đ hiệu chnh vận tc động cơ.
- Người dùng sẽ nhập vận tc cn điu khiển o AVR thông qua các switches. Vận tốc mong muốn và vận tốc thực
ca động cơ được hin th tn Text LCD.
CÙNG HỌC AVR
...to become the AVR Master
tìm kiếm...
Trang ch Học AVR ng dụng AVR Hỗ trợ phần mềm Hỗ trợ phần cng Thảo luận Thông tin
04/06/2013
Điu khin Đng DC servo (PID)
www.hocavr.com/index.php/vi/app/dcservo
2/13
Mch điện ví d được tnh bày trong hình 1.
Hình 1. Hệ thng điều khiển động cơ DC servo.
Trong mạch đin nh 1, i chia hthng thành 3 nhóm: nhóm CONTROL bao gồm AVR vận nh gii thuật điều
khin PID và vic nhập, xuất. Nhóm LOGIC thực hiện việc biến đổi các tín hiệu điu khiển đ tạo ra các tín hiu phù hợp
cho chip driver. Nhóm POWER bao gm chip driver L298D và DC Motor. Ngoài ra còn có một Encoder được tích hợp
sn trên DC Motor.
Phần tiếp theo chúng ta s tìm hiểu riêng từng nhóm, cui cùng là viết chương tnh cho AVR điu khin hệ thống DC
Servo Motor
II. Incremental Optical Encoder
Để điều khiển số vòng quay hay vận tốc động t chúng ta nhất thiết phải đc được góc quay ca motor. Mt s
phương pháp có thđược dùng đc đnh góc quay của motor bao gồm tachometer (thật ra tachometer đo vận tốc
quay), dùng biến trxoay, hoặc dùng encoder. Trong đó 2 phương pháp đầu tiên là phương pháp analog và dùng optiacal
encoder (encoder quang) thuộc nhóm phương pp digital. H thống optical encoder bao gồm mt ngun pt quang
(tờng là hồng ngoi – infrared), một cảm biến quang mt đĩa có chia rãnh. Optical encoder lại được chia thành 2 loại:
encoder tuyệt đối (absolute optical encoder) encoder tương đi (incremental optical encoder). Trong đa s các DC
Motor, incremental optical encoder được dùng và mô nh động cơ servo trong bài này cũng không ngoại lệ. Từ bây gi
khi tôi nói encoder tức là incremental encoder. Hình 2 là mô hình ca encoder loại này.
04/06/2013
Điu khin Đng DC servo (PID)
www.hocavr.com/index.php/vi/app/dcservo
3/13
Hình 2. Optical Encoder (trích từ [1]).
Encoder thường 3 kênh (3 nra) bao gồm kênh A, kênh B và nh I (Index). Trong nh 2 bạn thấy y chú ý
mt l nh bên phía trong ca đĩa quay mt cp phat-thu dành riêng cho l nh y. Đó là kênh I ca encoder. Cữ
mi lần motor quay được mt vòng, l nh xut hin tại v trí ca cp phát-thu, hng ngoi từ ngun phát s xuyên qua l
nhỏ đến cm biến quang, mt n hiệu xuất hin trên cm biến. N thế nh I xuất hiện mt xungmi vòng quay của
motor. Bên ngoài đĩa quay được chia tnh các rãnh nh một cặp thu-phát kc dành cho các rãnh này. Đây là kênh A
ca encoder, hoạt động ca kênh A cũng ơng tự kênh I, đim khác nhau là trong 1 vòng quay ca motor, có N xung”
xuất hin trên kênh A. N là snh tn đĩa và được gọi là đphân gii (resolution) ca encoder. Mỗi loại encoder có đ
phân gii khác nhau, có khi trên mi đĩa chĩ vài nh nng cũng có trường hợp đến ng nghìn rãnh được chia. Đ
điu khiển đng cơ, bạn phải biết độ phân gii ca encoder đang dùng. Đphân giải ảnh hưởng đến đ chính c điều
khin c phương pháp điu khiển. Không được vẽ trong hình 2, tuy nhiên trên các encoder còn có mt cặp thu phát
kc được đặt trên cùng đường tròn vớinh A nng lch mt chút (lệch M+0,5 rãnh), đây là kênh B ca encoder. n
hiu xung từ kênh B có cùng tần svới kênh A nhưng lệch pha 90o. Bng cách phối hợp kênh A B nời đọc sbiết
chiều quay của đng cơ. Hãy quan sátnh 3.
Hình 3. Hainh A B lệch pha trong encoder (trích từ [1])
Hình trên cùng trong hình 3 thể hiện sb trí của 2 cm biến kênh A B lệch pha nhau. Khi cảm biến A bt đầu b
che thì cảm biến B hoàn toàn nhận được hồng ngoi xuyên qua, và nợc li. Hình thấp là dng 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 hiu “đitừ trái sang phải. Bạn y quan sát lúc tín hiệu A
chuyn từ mức cao xuống thấp (cạnh xuống) thì kênh B đang mc thấp. Ngược li, nếu động cơ quay ngược chiều kim
đồng h, tín hiu đi từ phi qua trái. Lúc y, tại cnh xuống ca 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 cng ta không nhữngc đnh được góc quay (thông qua số xung) mà n biết được chiều
quay ca động cơ (thông qua mức ca kênh B ở cạnh xung ca kênh A).
u hỏi bây giờ là làm thế nào để đọc encoder bằng AVR?
04/06/2013
Điu khin Đng DC servo (PID)
www.hocavr.com/index.php/vi/app/dcservo
4/13
Tùy theo đại lượng điều khin (v trí hay vận tốc) và đc điểm encoder (đ phân gii) chúng ta có các gii pháp sau
đ đc encoder bằng AVR
- Dùng input capture: mt số b timer-counter trên AVR có chức ng Input capture, hiểu nôm na như sau. Cứ mi
lần có mt tín hiu (cạnh lên hoăc cnh xuống) trên cn ICP (Input Capture Pin), giá tr thời gian ca timer được tự đng
gán cho thanh ghi ICR (Input capture Register). So sánh giá trị thanh ghi ICR trong 2 lần liên tiếp s đc được chu kỳ ca
tín hiệu ch cn ICP. T đó suy ra tần sn hiệu. Nếu mt kênh ca encoder được nối với chân ICP thì chúng ta
thđo được tần s n hiệu ca nh y. Nói cách kc, chúng ta snh được vận tốc ca động cơ. Chúng ta th
dùng ngắt Input capture khi ngắt xảy ra, có th đếm sthêm sxung đ biết được góc quay motor, cũng thể xác
đnh đượcớng quay thông qua xác đnh mức nh B trong trình phục vụ ngắt input capture. Đây là mt phương pháp
hay, nhưng nhược đim là k phức tạp khi sử dng chứcng input capture ca AVR. Mặc khác trên các chip AVR
từ mega32 trở xung, Input capture ch có ở timer 1, trong khi Timer này thường dùng đ tạo PWM điều khiển động cơ.
- Dùng chức năng counter: đt các kênh ca encoder o các chân đếm (T0, T1…) của các b timer chúng ta s
đếm được slượng xung ca các nh. Đây là phương pháp sdụng ít i ngun nht t tốn thời gian cho encoder).
Nợc đim lớn nhất ca pơng pháp y là không xác đnh được chiều quay, mặc khác pơng pháp y không n
đnh khi vận tc động cơ có s thay đổi lớn.
- Cuối cùng s dụng ngắt ngoài: đây là phương pp d nhưng chính xác đ đọc encoder cũng là phương
pháp được dùng trong bài học này. Ý tưởng ca phương pháp rất đơn giản, chúng ta nối nh A ca encoder với 1 ngắt
ngoài (INT2 chẳng hn) và kênh B với mt chân o đó bất k(không phải cn ngắt). Cứ mi lần ngắt ngoài xảy ra, tức
có 1 xung xuất hin trên nh A thì trình phục vụ ngắt ngoài tự động được gọi. Trong trình phục vngt này chúng ta
kim tra mức ca kênh B,y theo mức ca nh B chúng ta s tăng biến đếm xung lên 1 hoặc giảm đi 1. Tuy nhiên, bn
cn phải tính toán rất cn thận khi sdng pơng pháp này. Ví dụ trường hợp encoder có đphân gii 2000 xung/vòng,
motor bn quay với vận tốc 100 vòng/s thì tần s xung trênnh A của encode là 2000x100=200KHz, nghĩa là cứ mỗi 5
us ngắt ngoài xảy ra một lần. Tn s ngắt như thế là quá cao cho AVR, điu này có nghĩa là AVR ch tập trung cho mi
vicđếm xung, không có đ thời gian để thực thi các việc kc. Trong bài này, cng ta chọn đphân giải ca encoder
là 112 (112 xung trên mỗi vòng quay). Vận tc tối đa của động cơ được chọn o khoảng 30 vòng/s nên tần số xung lớn
nhất từ encoder là 112x30=3.36KHz. Giá tr y hợp lí tần s cho AVR trong bài này được chọn 8MHz. Kênh A của
encoder được nối với ngắt INT2 ca chip atmega32, kênh B được ni với chân PB0, chúng ta không s dụng kênh I (xem
hình 1).
Chú ý: các nra trên đa s(gần n tất cả) các encoder có dạng cc góp hở (Open collector), mun sử dng cng
cn mc điện trở kéo lên VCC (5V).
III. Chip driver L298D
L298D là mt chip ch hợp 2 mạch cu H trong gói 15 chân. Tt c các mạch kích, mạch cu đu được tích hợp
sn. L298D điện áp danh nghĩa cao (lớn nhất 50V) và dòng điện danh nghĩa lớn hơn 2A nên rất thích hợp cho các các
ứng dụng công suất nh n các động cơ DC loại nh vừa. Vì là loạiall in one” nên là la chn hoàn hảo cho những
nời chưa có nhiều kinh nghiệm làm mạch điện tử. Trong bài học y i dùng chip L298D đ làm driver cho motor.
Hình 4 thể hiện mô hình thật ca chip và cu trúc bên trong chip.
04/06/2013
Điu khin Đng DC servo (PID)
www.hocavr.com/index.php/vi/app/dcservo
5/13
Hình 4. Chip L298D
nh phía trên là hình dáng bên ngoài tên gi các cn của L298D. Hình phía dưới là cấu tc bên trong chip. 2
mạch cu H trên mi chip L298D nên có thể điu khiển 2 đi tượng chỉ với 1 chip này. Mi mch cu bao gồm 1 đường
ngun Vs (thật ra là đường chung cho 2 mạch cầu), mt đường current sensing (cm biến dòng), phần cuối ca mch cầu
H không được ni với GND mà btrng cho nời dùng nối mt đin trnh gi là sensing resistor. Bng cách đo điện
áp rơi trên điện trở y chúng ta thểnh được dòng qua điện trở, cũng là dòng qua động cơ (xem nh 4). Mục đích
chính ca vic đo ng điện qua động là để c đnh các trường hợp nguy hiểm xảy ra trong mạch, ví d quá tải. Nếu
vic đo dòng động không thật scn thiết bn có thnối đường current sensing y với GND (trong mạch điện của
bài này, tôi nối chân current sensing với GND). Động cơ s được ni với 2 đường OUT1, OUT2 (hoặc OUT3, OUT4 nếu
dùng mạch cu bên phải). Mt chân En (EnA và EnB cho 2 mạch cầu) cho phép mch cu hot động, khi chân En được
kéo lên mức cao, mạch cầu sẵn sang hoạt đng. Các đườngch mi bên của mạch cầu được kết hợp với nhau và nng
mức đin áp ngược nhau do mt cổng Logic NOT. Bằng cách này chúng ta có th tnh được trường hợp 2 transistor
cùng mt bên được ch cùng lúc (ngắn mạch). Như vậy, scó 2 đường kích cho mi cầu H gi là In1 và In2 (hoặc In3,
In4). Để motor hoạt đng chúng ta phảio 1 trong 2 đường ch này lên cao trong khi đường kia gi mức thp, ví d
In1=1, In2=0. Khi đảo mức kích ca 2 đường In, đng cơ sẽ đo chiu quay. Tuy nhiên, do L298D không ch được dùng
đ đảo chiu động cơ mà còn điu khiển vận tc động cơ bng PWM, các đường In cn đượctổ hợp lại bằng các cổng
Logic (xem phn tiếp theo). Ngoài ra, trên chip L298D còn có các đường Vss cp điện áp cho phần logic (5V) GND
chung cho cả logic motor.
Trong thực tế, công suất thực mà L298D có thể tải nh hơn so với giá trị danh nga của nó (V=50V, I=2A). Để tăng