Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 3 Trong đề tài làm bài tập lớn môn Vi xử lí ĐIỀU KHIỂN ĐỘNG CƠ MỘT CHIỀU được giới thiệu sau đây, chúng em sẽ sử dụng chính dòng Vi xử lí của
Trang 1Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 1
Mục lục:
I Lời mở đầu: 3
II Phân tích đề tài: 5
1 Phân tích yêu cầu chức năng: 5
a Điều khiển động cơ: 5
b Hiển thị thời gian thực: 5
2 Phân tích yêu cầu phi chức năng: 5
3 Đề xuất phương án: 5
a Sử dụng Vi điều khiển Atmega32: 5
b Chọn giải thuật điều khiển PID để điều khiển vận tốc của động cơ: 5
c Xung điều khiển động cơ là xung điều rộng PWM: 9
d Sử dụng Chip DS1307 làm bộ xử lí thời gian thực: 10
e Sử dụng LCD text 16×2 làm màn hình hiển thị cho người dùng: 10
f Sử dụng hệ thống Button và Switch để nhập dữ liệu từ người dùng: 11
4 Phần mềm và Công cụ sử dụng trong đề tài: 11
5 Phân công nhiệm vụ và Kế hoạch thực hiện: 12
III Thiết kế: 13
1 Sơ đồ khối của hệ thống: 13
a Khối Atmega32 (Khối điều khiển): 14
b Khối thời gian thực: 14
c Khối LCD: 14
d Khối L298 và Mạch Logic: 15
e Khối động cơ DC: 15
f Khối nguồn: 15
2 Mạch nguyên lí Proteus: 16
a Khối LCD: 16
Trang 2Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 2
b Khối thời gian thực: 18
c Khối điều khiển và khối Switch and Button: 20
d Khối Logic, L298 và Motor: 23
3 Lập trình cho vi điều khiển (trình bày tóm tắt phần chính): 26
a Khai báo thanh ghi cho TC: 26
b Khai báo hàm ngắt: 27
c Hàm điều khiên Motor sử dụng thuật toán điều khiển PID: 28
4 Cắm bo mạch chạy thử: 29
5 Mạch capture và layout từng khối 29
a Khối thời gian thực 29
b Khối Atmega32 31
c Khối Logic,L298 32
d Khối nguồn 34
6 Làm mạch in: 35
7 Lắp ráp linh kiện và hàn mạch: 35
8 Kiểm tra mạch, chạy demo: 35
IV Kết luận: 35
1 Đánh giá kết quả: 35
2 Hướng giải quyết vấn đề tồn tại và phát triển thêm đề tài: 35
V Tài liệu tham khảo trong đề tài: 37
Trang 3Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 3
Trong đề tài làm bài tập lớn môn Vi xử lí ĐIỀU KHIỂN ĐỘNG CƠ MỘT CHIỀU được giới thiệu sau đây, chúng em sẽ sử dụng chính dòng Vi xử lí của
Atmel để điều khiển động cơ Điều khiển động cơ là một ứng dụng cơ bản nhất của điều khiển tự động vì DC Motor là cơ cấu chấp hành (actuator) được sử dụng
nhiều trong các hệ thống tự đông (robot) Ngoài ra, khi làm đề tài ĐIỀU KHIỂN ĐỘNG CƠ MỘT CHIỀU chúng em còn được thực hành với nhiều loại giao tiếp của Vi điều khiển như nhận dữ liệu từ người dùng, điều khiển motor, đọc encoder, hiển thị LCD, cả giải thuật điều khiển PID và mạch công suất cho Motor, xung Điều rộng PWM…
Đây là lần đầu tiên chúng em làm một ứng dụng thực tế, liên quan đến phần cứng, linh kiện điện tử thức nên không tránh khỏi nhiều sai sót, nhiều thất bại
Nhưng đây cũng là một cơ hội cho sinh viên chúng em được tích lũy thêm kinh nghiệm làm thực tế, kinh nghiệm làm việc nhóm…
Chúng em xin chân thành cảm ơn sự hướng dẫn của thầy giáo bộ môn Vi xử
lí, sự giúp đỡ của các bạn trong lớp để chúng em có thể hoàn thành được bài tập này
Mọi liên hệ thắc mắc có thế gửi về hòm thư điện tử
tangvubk@gmail.com hoặc nguyennamhai.kstn.dtvt.k55@gmail.com Xin chân thành cảm ơn!
Trang 4Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 4
Thành viên nhóm bài tập lớn môn Vi điều khiển:
1 Tăng Thiên Vũ 2010 2788 tangvubk@gmail.com
2 Nguyễn Nam Hải nguyennamhai.kstn.dtvt.k55@gmail.com
Là thành viên lớp Kỹ sư tài năng Điện tử Viên thông Khóa 55
Trường Đại học Bách khoa Hà Nội
Số 1 Đại Cồ Việt quận Hai Bà Trưng Hà Nội
Trang 5Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 5
II Phân tích đề tài:
1 Phân tích yêu cầu chức năng:
a Điều khiển động cơ:
o Người dùng nhập vận tốc cần đạt được qua đầu vào của hệ thống, hệ thống có nhiệm vụ điều khiển động cơ chuyển động theo vận tốc mong muốn này
o Động cơ sẽ được cho phép chuyển động, thay đổi hướng theo yêu cầu của người sử dụng
o Sai số điều khiển động cơ là 1 vòng/s
b Hiển thị thời gian thực:
o Thời gian thực ngày (day), tháng (month), năm (year) và giờ (hour), phút (minute), giây (second) phải được hiển thị cho người sử dụng quan sát
o Yêu cầu: hiển thị chính xác, rõ ràng
2 Phân tích yêu cầu phi chức năng:
a Sử dụng Vi điều khiển Atmega32:
Atmega32 được chọn làm Vi điều khiển xử lí trung tâm Atmega 32 là vi điều khiển thuộc họ AVR của Atmel, có 40 chân trong đó có 32 chân I/O, có 4 kênh điều xung PWM (đây là lí do chính để chọn Vi điều khiển Atmega32 điều khiển động cơ) Chi tiết về Atmega32 sẽ được giới thiệu trong phần sơ đồ nguyên lí
b Chọn giải thuật điều khiển PID để điều khiển vận tốc của động cơ:
PID là cách viết tắc của các từ Propotional (tỉ lệ), Integral (tích phân) và Derivative (đạo hàm) Tuy xuất hiện rất lâu nhưng đến nay PID vẫn là giải thuật điều khiển được dùng nhiều nhất trong các ứng dụng điều khiển tự động
Trang 6Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 6
Để hiểu rõ hơn bản chất của giải thuật PID chúng ta sẽ dùng một ví dụ điều
khiển đơn giản: điều khiển vị trí của một chiếc xe trên đường thẳng Giả sử ta có
một xe (đồ chơi ) có gắn một động cơ DC Động cơ sinh ra một lực để đẩy xe
chạy tới hoặc lui trên một đường thẳng như trong hình 6
Gọi F là lực do động cơ tạo ra điều khiển xe Ban đầu xe ở vị trí A, nhiệm vụ
đặt ra là điều khiển lực F (một cách tự động) để đẩy xe đến đúng vị trí O với các
yêu cầu: chính xác (accurate), nhanh (fast response), ổn định (small overshot)
Một điều rất tự nhiên, nếu vị trí hiện tại của xe rất xa vị trí mong muốn (điểm
O), hay nói cách khác sai số(error) lớn, chúng ta cần tác động lực F lớn để nhanh
chóng đưa xe về O Một cách đơn giản để công thức hóa ý tưởng này là dùng quan
hệ tuyến tính:
F=Kp*e (1)
Trong đó Kp là một hằng số dương nào đó mà chúng ta gọi là hệ số P
(Propotional gain), e là sai số cần điều khiển tức khoảng cách từ điểm O đến vị trí
hiện tại của xe Mục tiêu điều khiển là đưa e tiến về 0 càng nhanh càng tốt Rõ ràng
nếu Kp lớn thì F cũng sẽ lớn và xe rất nhanh chóng tiến về vị trí O Tuy nhiên, lực
F quá lớn sẽ gia tốc cho xe rất nhanh (định luật II của Newton: F=ma) Khi xe đã
đến vị trí O (tức e=0), thì tuy lực F=0 (vì F=Kp*e=F=Kp*0) nhưng do quán tính xe
vẫn tiếp tục tiến về bên phải và lệch điểm O về bên phải, sai số e lại trở nên khác 0,
giá trị sai số lúc này được gọi là overshot (vượt quá) Lúc này, sai số e là số âm,
lực F lại xuất hiện nhưng với chiều ngược lại để kéo xe về lại điểm O Nhưng một
lần nữa, do Kp lớn nên giá trị lực F cũng lớn và có thể kéo xe lệch về bên trái điểm
Trang 7Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 7
O Quá trình cứ tiếp diễn, xe cứ mãi dao động quanh điểm O Có trường hơp xe dao động càng ngày xàng xa điểm O Bộ điều khiển lúc này được nói là không ổn định Một đề xuất nhằm giảm overshot của xe là sử dụng một thành phần “thắng” trong bộ điều khiển Sẽ rất lý tưởng nếu khi xe đang ở xa điểm O, bộ điều khiển sinh ra lực F lớn nhưng khi xe đã tiến gần đến điểm O thì thành phần “thắng” sẽ giảm tốc độ xe lại Chúng ta đều biết khi một vật dao động quanh 1 điểm thì vật đó
có vận tốc cao nhất ở tâm dao động (điểm O) Nói một cách khác, ở gần điểm O sai
số e của xe thay đổi nhanh nhất (cần phân biệt: e thay đổi nhanh nhất không phải e lớn nhất) Mặt khác, tốc độ thay đổi của e có thể tính bằng đạo hàm của biến này theo thời gian Như vậy, khi xe từ A tiến về gần O, đạo hàm của sai số e tăng giá trị nhưng ngược chiều của lực F (vì e đang giảm nhanh dần) Nếu sử dụng đạo hàm làm thành phần “thắng” thì có thể giảm được overshot của xe Thành phần “thắng” này chính là thành phần D (Derivative) trong bộ điều khiển PID mà chúng ta đang khảo sát Thêm thành phần D này vào bộ điều khiển P hiện tại, chúng ta thu được
bộ điều khiển PD nhu sau:
F=Kp*e + Kd*(de/dt) (2) Trong đó (de/dt) là vận tốc thay đổi của sai số e và Kd là một hằng số không
âm gọi là hệ số D (Derivative gain)
Sự hiện diện của thành phần D làm giảm overshot của xe, khi xe tiến gần về O, lực F gồm 2 thành phần Kp*e > =0 (P) và Kd*(de/dt) <=0 (D) Trong một số
trường hợp thành phần D có giá trị lớn hơn thành phần P và lực F đổi chiều,
“thắng” xe lại, vận tốc của xe vì thế giảm mạnh ở gần điểm O Một vấn đề nảy sinh
là nếu thành phần D quá lớn so với thành phần P hoặc bản thân thành phần P nhỏ thì khi xe tiến gần điểm O (chưa thật sự đến O), xe có thể dừng hẳn, thành phần D bằng 0 (vì sai số e không thay đổi nữa), lực F = Kp*e Trong khi Kp và e lúc này đều nhỏ nên lực F cũng nhỏ và có thể không thắng được lực ma sát tĩnh Bạn hãy tưởng tượng tình huống bạn dùng sức của mình để đẩy một xe tải nặng vài chục tấn, tuy lực đẩy tồn tại nhưng xe không thể di chuyển Như thế, xe sẽ đứng yên mãi
dù sai số e vẫn chưa bằng 0 Sai số e trong tình huống này gọi là steady state error (tạm dịch là sai số trạng thái tĩnh) Để tránh steady state error, người ta thêm vào
bộ điều khiển một thành phần có chức năng “cộng dồn” sai số Khi steady state error xảy ra, 2 thành phần P và D mất tác dụng, thành phần điều khiển mới sẽ
“cộng dồn” sai số theo thời gian và làm tăng lực F theo thời gian Đến một lúc nào
Trang 8Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 8
đó, lực F đủ lớn để thắng ma sát tĩnh và đẩy xe tiến tiếp về điểm O Thành phần
“cộng dồn” này chính là thành phần I (Integral - tích phân) trong bộ điều khiển PID Vì chúng ta điều biết, tích phân một đại lượng theo thời gian chính là tổng của đại lượng đó theo thời gian Bộ điều khiển đến thời điểm này đã đầy đủ là PID: F=Kp*e + Kd*(de/dt)+Ki*∫edt (3)
(chú ý: ∫edt là tích phân của biến e theo t)
đối tượng điều khiển
mà bộ điều khiển PID
có thể được lượt bớt
để trở thành bộ điều khiển P, PI hoặc PD Công việc chính của người thiết kế bộ điều khiển PID là chọn các hệ số Kp, Kd và Ki sao cho bộ điều khiển hoạt động tốt
và ổn định (quá trình này gọi là PID gain tuning) Đây không phải là việc dễ dàng
vì nó phụ thuộc vào nhiều yếu tố Tôi tóm tắt một kinh nghiệm cơ bản khi chọn các
hệ số cho PID như sau:
- Chọn Kp trước: thử bộ điều khiển P với đối tượng thật (hoặc mô phỏng), điều chỉnh Kp sao cho thời gian đáp ứng đủ nhanh, chấp nhận overshot nhỏ
- Thêm thành phần D để loại overshot, tăng Kd từ từ, thử nghiệm và chọn giá trị thích hợp Steady state error có thể sẽ xuất hiện
- Thêm thành phần I để giảm steady state error Nên tăng Ki từ bé đến lớn để giảm steady state error đồng thời không để cho overshot xuất hiện trở lại
Có một phương pháp rất phổ biến dùng để chọn các hệ số cho bộ điều khiển PID gọi là Ziegler–Nichols, bạn quan tâm có thể tự tìm hiểu thêm
Trang 9Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 9
c Xung điều khiển động cơ là xung điều rộng PWM:
Giới thiệu về xung PWM:
Trước hết, PWM hay Pulse Width Modulation được hiểu theo nghĩa tiếng Việt
là “xung điều rộng” là khái niệm chỉ tín hiệu xung mà thường thì chu kỳ (Time period) của nó được cố định, duty cycle (thời thời gian tín hiệu ở mức HIGH) của
nó có thể được thay đổi Bạn xem 1 ví dụ về PWM trong hình dưới
Tạo ra PWM tức là tạo ra những tín hiệu xung mà ta có thể thay đổi khoảng thời gian xung ở mức HIGHT theo ý muốn(Duty Cycle), thông thường thì Time Period được giữ là hằng số nhưng vẫn có thể thay đổi nếu cần thiết Nhưng PWM dùng để làm gì và cách mà nó được sử dụng như thế nào? Để tìm hiểu điều này, ta
có thể dùng một ví dụ đơn giản với một Button và một Motor DC
Nếu nhấn button thì động cơ hoạt động, thả button thì
động cơ dừng, thời gian bạn giữ button càng lâu thì động cơ càng
được cung cấp nhiều năng lượng và ngược lại, rõ rang, tốc độ
quay của động cơ phụ thuộc vào thời gian và số lần nhấn của
Button Tuy nhiên do tốc độ nhấn và thả của con người có hạn,
bạn sẽ thấy động cơ hoạt động hơi “sượng” (ripple) Điều gì xảy
ra nếu bạn nhấn và thả button với vận tốc 5000 lần/giây Câu trả
lời là tay bạn sẽ bị gãy và button sẽ bị hỏng (^^) 5000 lần/s là
điều không tưởng, tuy nhiên nếu bạn làm được như thế thì tổng
thời gian cho 1 lần nhấn+thả là 1:5000=0.0002s = 200us Có sự
khác biệt nào không giữa trường hợp thời gian nhấn = 150us, thời gian thả 50us và trường hợp thời gian nhấn là 50us còn thời gian thả là 150us Bạn sẽ dễ dàng tìm câu trả lời, trong trường hợp 1 động cơ sẽ quay với vận tốc nhanh hơn trường hợp
Trang 10Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 10
2 Đó là ý tưởng cơ bản để sử dụng PWM điều khiển vận tốc động cơ (và điều
khiển nhiều thứ khác nữa) để biến cái không tưởng trên (5000 lần/s) thành hiện thực, chúng ta sẽ thay thế cái button cơ khí kia bằng 1 công tắc điện tử (electronics switch) Thường thì các chip MOSFET được dùng làm các khóa điện tử MOSFET thường có 3 chân G (gate), D (drain) và S (source) Ví dụ 1 MOSFET kênh N ở trạng thái thông thường 2 chân D và S ko có dòng điện chạy qua, nếu điện áp chân
G lớn hơn chân S khoảng 3V trở lên thì dòng điện có thể chạy từ D sang S hãy xem cách mô tả tương đương 1 MOSFET với 1 button trong hình dưới
Việc “kích” các MOSFET có thể thực hiện bằng các tín hiệu PWM Vì thế ý tưởng điều khiền động cơ trong hình 6 có thể được thực hiện lại thông qua PWM
Hình Điều khiển động cơ
nhờ xung PWM do AVR
tạo ra
Như vây, thực chất điều khiển động cơ sẽ là điều khiển độ rộng của Duty Cycle, chúng tôi sẽ sử dụng bộ Timer Counter của ATMega32 để tạo ra xung PWM kết hợp thuật toán điều khiển PID để điều khiển động cơ DC
d Sử dụng Chip DS1307 làm bộ xử lí thời gian thực:
DS1307 là chip đồng hồ thời gian thực (RTC : Real-time clock), khái niệm thời gian thực ở đây được dùng với ý nghĩa thời gian tuyệt đối mà con người đang
sử dụng, tình bằng giây, phút, giờ…DS1307 là một sản phẩm của Dallas
Semiconductor (một công ty thuộc Maxim Integrated Products) Chi tiết về Chip sẽ được giải thích trong sơ đồ nguyên lí Proteus
e Sử dụng LCD text 16×2 làm màn hình hiển thị cho người dùng:
LCD Text là một thiết bị giao tiếp với AVR , có thư viện hàm giao tiếp được viết sẵn cho các trình dịch như Codevision, AVR studio nên có thể dễ dàng sử
dụng Ngoài ra, khả năng hiện thị linh hoạt chữ và số trên 2 dòng, cách mắc mạch
Trang 11Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 11
đơn giản hơn so với sử dụng Ma trân LED, LED 7 thanh, như giá thành thấp hơn
so với LCD khác là những lí do chon LCD Text làm thiết bị Output trong hệ thống
f Sử dụng hệ thống Button và Switch để nhập dữ liệu từ người dùng:
Button và Switch là hai thiết bị nhập dữ liệu căn bản, dễ thiết kế mạch, dễ dàng
sử dụng đối với người dùng
4 Phần mềm và Công cụ sử dụng trong đề tài:
a Phần mềm Proteus: Mô phỏng mạch điện tử
b Phần mềm Orcad: Vẽ mạch in
c Phần mềm CodeVision: Lập trình C cho vi điều khiển
d Phần mềm MicroSoft Visio: Vẽ sơ đồ khối
Trang 12Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 12
5 Phân công nhiệm vụ và Kế hoạch thực hiện:
Thời Gian Nhiệm vụ Người thực hiện Ghi chú
Tuần 3-4 Tìm kiếm đề tài Tăng Thiên Vũ
Nguyễ Nam Hải
Tăng Thiên Vũ
Nguyễn Nam Hải
Tuần 7-10 Thiết kế
mạch nguyên lí
Tăng Thiên Vũ
Nguyễ Nam Hải
Lập trình cho vi điều khiển
Tăng Thiên Vũ
Tìm hiểu chi tiết từng linh kiện
Nguyễn Nam Hải
Nguyễn Nam Hải
Tăng Thiên Vũ
Tuần
13-15
In mạch in, lắp ráp linh kiện và hàn mạch:
Khối atemega Khối Logic
Tăng Thiên Vũ
Khối L298, Khối Thời gian, Khối nguồn
Nguyễn Nam Hải
Trang 13Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 13
III Thiết kế:
1 Sơ đồ khối của hệ thống:
Hình Sơ đồ khối
Trang 14Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 14
a Khối Atmega32 (Khối điều khiển):
Chức năng của khối điều khiển Atmega:
- Nhận tín hiệu điều khiển vào từ người dùng qua Switch và Button
- Nhận tín hiệu thời gian từ Khối Thời gian thực
- Nhận tín hiệu hồi tiếp từ Encoder trong động cơ
- Đưa tín hiệu xung điều khiển động cơ ra Khối L298 và Mạch Logic
- Đưa tín hiệu hiển thị ra LCD
Chi tiết:
- Vi điều khiển ATmega32
- Thạch anh (Crystal) tạo giao động ngoại cho Vi điều khiển
Cấp nguồn: dùng chung nguồn DC5V
b Khối thời gian thực:
Chức năng:
- Gửi thông tin Giờ (Hour), Phút (Minute), Giây (Second) và Ngày (Day), Tháng (Month), Năm (Year) về cho Khối điều khiển trung tâm
- Hoạt động riêng rẽ khi nguồn chung bị ngắt (để đếm thời gian)
Trang 15Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 15
- Nhận tín hiệu từ khối L298 để chạy
- Gửi tín hiệu hồi tiếp từ Encoder về cho Khối xử lí trung tâm
- Nguồn cho động cơ chính là tín hiệu của Khối L298
- Nguồn cho Encoder là nguồn chung DC5V
f Khối nguồn:
Chức năng:
- Cấp nguồn DC 5V cho cả mạch làm việc
Trang 16Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 16
2 Mạch nguyên lí Proteus:
a Khối LCD:
Hình Khối LCD
a LCD 16x2 (Text LCD)
Trang 17Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 17
- Text LCD là loại màn hình tinh thể lỏng nhỏ dùng hiển thị các dòng chữ
hoặc số trong bảng mã ASCII Text LCD được chia sẵn thành từng ô,ứng
với mỗi ô chỉ hiện thị 1 ký tự chữ hoặc số, mỗi ô bao gồm các chấm tinh thể
lỏng,khi kết hợp ẩn hiện các chấm này sẽ giúp hiển thị lên ký tự
- Text LCD có 2 giao tiếp cơ bản là nỗi tiếp (I2C) hoặc song song
- Cấu tạo chân:
- Text LCD thường có 3 bộ nhớ chính là DDRAM,ROM,CGROM
Trang 18Tăng Thiên Vũ – Nguyễn Nam Hải KSTN-ĐTVT-K55 18
b Khối thời gian thực:
b IC thời gian thực DS1307
- DS1307 là chip đồng hồ thời gian thực của hãng Dallas Semiconductor,
khái niệm thời gian thực ở đây dùng với nghĩa thời gian tuyệt đối mà con
người đang sử dụng tính bằng giờ, phút, giây…Chip này chứa 7 thanh ghi
8-bit là giây, phút, giờ, thứ, ngày, tháng, năm Ngoài ra DS1307 chứa 1 thanh
ghi điều khiển ngõ ra phụ và 56 thanh ghi trống tác dụng như RAM DS1307
được đọc và ghi thông qua giao diện nối tiếp I2C