Khóa luận Điều khiển động cơ DC motor với giải thuật PID

Điều khiển động cơ DC motor với giải thuật PID Tóm tắt: Có thể nói trong lĩnh vực điều khiển và trong công nghiệp thì bộ điều khiển PID có ứng dụng khá rộng rãi, một giải pháp đa năng cho các ứng dụng cả Analog cũng như Digital. Thống kê cho thấy có tới hơn 90% các bộ điều khiển sử dụng trong thực tế là PID. Rõ ràng nếu có thiết kế và chọn lựa các thông số hợp lý cho bộ điều khiển PID thì việc đạt được các chỉ tiêu chất lượng mong muốn là khả thi. Bộ điều khiển PID cũng giúp người sử dụng dễ dàng tích hợp cũng như chọn các luật điều khiển như : tỉ lệ(P), tích phân(I), tỉ lệ tích phân(PI), tỉ lệ vi phân(PD) sao cho phù hợp đối với các đối tượng điều khiển. Nhiều quá trình trong công nghiệp việc sử dụng bộ điều khiển PID là không thể thay thế như khống chế nhiệt độ, mức, tốc độ Ngay cả những lý thuyết điều khiển hiện đại cũng không cho ta những hiệu quả cao như bộ điều khiển PID mang lại.Ngoài ra bộ điều khiển PID còn ứng dụng nhiều trong điều khiển thích nghi,bền vững vẫn mang lại hiệu quả cao trong các cơ cấu chỉnh định Ngày nay động cơ điện một chiều được ứng dụng rất nhiều trong các lĩnh vực của khoa học & đời sống như: Trong các dây chuyền sản xuất, ô tô điện, tàu thủy, máy bay . Bài toán thiết kế và điều khiển động cơ một chiều là bài toán cơ bản và quen thuộc trong ngành điều khiển tự động. Trên cơ sở muốn tìm hiểu thuật toán PID em xin chọn đề tài : Điều khiển động cơ DC motor với giải thuật PID

doc46 trang | Chia sẻ: lvcdongnoi | Lượt xem: 6507 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Khóa luận Điều khiển động cơ DC motor với giải thuật PID, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
LỜI MỞ ĐẦU Điều khiển là một lĩnh vực quan trọng của đời sống xã hội, của nền kinh tế quốc dân, của khoa học kỹ thuật, của nền công nghiệp v.v… Bất cứ ở vị trí nào, bất cứ một công việc gì mỗi người trong chúng ta đều tiếp cận với điều khiển. Nó là khâu quan trọng cuối cùng quyết định sự thành bại trong mọi hoạt động của chúng ta. Kĩ thuật điều khiển trong tiến trình hoàn thiện lý thuyết cũng tạo cho mình nhiều phát triển có ý nghĩa. Hiện nay khi nhắc tới điều khiển con người dường như hình dung đến sự chính xác, tốc độ xử lý và thuật toán thông minh đồng nghĩa là lượng chất xám cao hơn. Có thể nói trong lĩnh vực điều khiển và trong công nghiệp thì bộ điều khiển PID có ứng dụng khá rộng rãi, một giải pháp đa năng cho các ứng dụng cả Analog cũng như Digital. Thống kê cho thấy có tới hơn 90% các bộ điều khiển sử dụng trong thực tế là PID. Rõ ràng nếu có thiết kế và chọn lựa các thông số hợp lý cho bộ điều khiển PID thì việc đạt được các chỉ tiêu chất lượng mong muốn là khả thi. Bộ điều khiển PID cũng giúp người sử dụng dễ dàng tích hợp cũng như chọn các luật điều khiển như : tỉ lệ(P), tích phân(I), tỉ lệ tích phân(PI), tỉ lệ vi phân(PD)… sao cho phù hợp đối với các đối tượng điều khiển. Nhiều quá trình trong công nghiệp việc sử dụng bộ điều khiển PID là không thể thay thế như khống chế nhiệt độ, mức, tốc độ… Ngay cả những lý thuyết điều khiển hiện đại cũng không cho ta những hiệu quả cao như bộ điều khiển PID mang lại.Ngoài ra bộ điều khiển PID còn ứng dụng nhiều trong điều khiển thích nghi,bền vững vẫn mang lại hiệu quả cao trong các cơ cấu chỉnh định. Ngày nay động cơ điện một chiều được ứng dụng rất nhiều trong các lĩnh vực của khoa học & đời sống như: Trong các dây chuyền sản xuất, ô tô điện, tàu thủy, máy bay…. Bài toán thiết kế và điều khiển động cơ một chiều là bài toán cơ bản và quen thuộc trong ngành điều khiển tự động. Có thể thiết kế điều khiển cho đối tượng động cơ điện một chiều theo nhiều phương pháp như :dùng PLC & biến tần, điện tử công suất, vi điều khiển… Mỗi phương pháp đều có ưu, nhược điểm khác nhau nhưng đều cùng chung mục đích là điều khiển tốc độ của động cơ.Trên cơ sở muốn tìm hiểu thuật toán PID em xin chọn đề tài : Điều khiển động cơ DC với giải thuật PID Nội dung khóa luận gồm có 03 chương: Chương I: Lý thuyết điều khiển tự động & thuật toán PID cơ bản. Chương II: Mạch mô phỏng với Proteus Chương III: Thực nghiệm và kết quả đạt được Vì khả năng và thời gian có hạn nên không tránh khỏi những thiếu sót trong đề tài .Do vậy em mong thầy cô và bạn bè đóng góp xây dựng để đề tài của em được hoàn thiện hơn CHƯƠNG I: LÝ THUYẾT ĐIỀU KHIỂN TỰ ĐỘNG, VÀ THUẬT TOÁN PID CƠ BẢN Điều khiển tự động đóng vai trò quan trọng trong sự phát triển của khoa học và kỹ thuật. Lĩnh vực này hữu hiệu khắp nơi từ hệ thống phi thuyền không gian, hệ thống điều khiển tên lửa, máy bay không người lái, người máy, tay máy trong các quy trình sản xuất hiện đại, và ngay cả trong đời sống hàng ngày: Điều khiển nhiệt độ, độ ẩm, tốc độ v.v … 1.1. Những khái niệm cơ bản[1] 1.1.1 Điều khiển (control) Là tập hợp tất cả các tác động có mục đích nhằm điều khiển một quá trình này hay quá trình kia theo một quy luật hay một chương trình cho trước. 1.1.2 Điều khiển học (Cybernctics) Là khoa học nghiên cứu những quá trình điều khiển và truyền thông máy móc, sinh vật và kinh tế. Điều khiển học mang đặc trưng tổng quát và được phân chia thành nhiều lĩnh vực khác nhau như: toán điều khiển, điều khiển học kỹ thuật, điều khiển học sinh vật (phỏng sinh vật: bionics), điều khiển học kinh tế. 1.1.3 Lý thuyết điều khiển tự động (Theory of control) Là cơ sở lý thuyết của điều khiển học kỹ thuật. Điều khiển tự động là thuật ngữ chỉ quá trình điều khiển một đối tượng trong kỹ thuật mà không có sự tham gia của con người (automatic) nó ngược lại với quá trình điều khiển bằng tay (manual). 1.1.4 Hệ thống điều khiển tự động (Automatic control system) Tập hợp tất cả các thiết bị, kỹ thuật nhằm đảm bảo điều khiển tự động một quá trình nào đó được gọi là hệ thống điều khiển tự động 1.2. Các thành phần cơ bản của hệ thống điều khiển tự động Một hệ thống điều khiển gồm có 3 thành phần cơ bản đó là: - Đối tượng điều khiển (Object device) - Thiết bị điều khiển (Controler device) - Thiết bị đo lường (Measuring device) Sơ đồ tổng quát. C y(t) x(t) O z(t) M Hình 1.1- Sơ đồ tổng quát hệ thống điều khiển tự động Các tín hiệu tác động trong hệ thống u(t) : tín hiệu vào (input) y (t): tín hiệu ra (output) x(t) : tín hiệu điều khiển tác động lên đối tượng (O) e(t) : sai lệch điều khiển z(t) : tín hiệu phản hồi 1.3 Các nguyên tác điều khiển cơ bản[2] Có 3 nguyên tắc điều khiển cơ bản . 1.3.1 Nguyên tắc điều khiển theo sai lệch (hình 1.2) y(t) e(t) O C u(t) x(t) z(t) M Hình 1.2- Sơ đồ nguyên tắc điều khiểntheo sai lệch Tín hiệu y(t) được đưa ra so sánh với tín hiệu lối vào u(t) nhằm tạo nên tín hiệu tác động lên đầu vào bộ điều khiển C nhằm tạo nên tín hiệu điều khiển đối tượng O K C O u(t) e(t) x(t) y(t) 1.3.2 Nguyên tắc điều khiển theo phương pháp bù nhiễu (Hình 1.3) Hình 1.3- Sơ đồ nguyên tắc điều khiển bù nhiễu Nguyên tắc bù nhiễu là sử dụng thiết bị bù K để giảm ảnh hưởng của nhiễu là nguyên nhân trực tiếp gây ra hậu quả cho hệ thống. K C O M u(t) e(t) x(t) y(t) z(t) y1(t) 1.3.3 Nguyên tắc điều khiển theo sai lệch và bù nhiễu(hình 1.4) Hình 1.4- Sơ đồ nguyên tắc điều khiển hỗn hợp Nguyên tắc điều khiển hỗn hợp là phối hợp cả 2 nguyên tắc trên, vừa có hồi tiếp theo sai lệch vừa có các thiết bị để bù nhiễu. 1.3.4. Nguyên tắc điều khiển theo chương trình Nguyên tắc này mục đích là giữ tín hiệu u=u(t) theo một chương trình đã được định sẵn.Để tính một tín hiệu nào đó theo chương trình, cần phải sử dụng một thiết bị có lưu trữ chương trình lớn. Hai thiết bị thông dụng chứa chương trình điều khiển đó là: -PLC(Programmable Logic Contronler) -CNC(Computerized Numerical Contronler) 1.4 Phân loại hệ thống ĐKTĐ [3] 1.4.1 Phân loại theo đặc điểm của tín hiệu ra - Tín hiệu ra ổn định -Tín hiệu ra theo chương trình 1.4.2 Phân loại theo số vòng kín - Hệ hở: Là hệ không có vòng kín nào - Hệ kín: Có nhiều loại như hệ 1 vòng kín, hệ nhiều vòng kín … 1.4.3 Phân loại theo khả năng quan sát tín hiệu a) Hệ thống liên tục - Quan sát được tất cả các trạng thái của hệ thống theo thời gian - Mô tả toán học: Phương trình đại số, phương trình vi phân, hàm truyền. b) Hệ thống không liên tục Quan sát được một phần các trạng thái của hệ thống. Nguyên nhân - Do không thể đặt được tất cả các cảm biến - Do không cần đặt đủ các cảm biến Trong hệ thống không liên tục người ta chia làm hai loại + Hệ thống gián đoạn - Là hệ thống mà ta có thể quan sát các trạng thái của hệ thống theo chu kỳ T. Về bản chất hệ thống này là một dạng của hệ thống liên tục + Hệ thống với các sự kiện gián đoạn -Đặc trưng bởi các sự kiện không chu kỳ -Quan tâm đến các sự kiện, tác động 1.4.4. Phân loại theo mô tả toán học - Hệ tuyến tính: Đặc tính tĩnh của tất cả các phần tử có trong hệ thống là tuyến tính - Hệ phi tuyến: Có ít nhất một đặc tính tĩnh của một phần tử là hàm phi tuyến - Hệ thống tuyến tính hóa: Tuyến tính hóa từng phần của hệ phi tuyến với một số điều kiện cho trước để có được hệ thống tuyến tính gần đúng 1.5 Nhiệm vụ của lý thuyết điều khiển tự động Để khảo sát và thiết kế một hệ thống điều khiển tự động người ta thực hiện các bước sau: a) Dựa trên các yêu cầu thực tiễn, các mô hình vật lý ta xây dựng mô hình toán học dựa trên các quy luật, hiện tượng, quan hệ của các đối tượng vật lý. Mô hình toán học của hệ thống được xây dựng từ các mô hình toán học của các phần tử riêng lẻ. b) Dựa trên lý thuyết ổn định, ta khảo sát tính ổn định của hệ thống. Nếu hệ thống không ổn định ta thay đổi đặc tính của hệ thống bằng cách đưa vào một khâu bổ chính (compensation) hay thay đổi thay đổi tham số của hệ để hệ thành ổn định. c) Khảo sát chất lượng của hệ theo các chỉ tiêu đề ra ban đầu. Nếu hệ không đạt chỉ tiêu chất lượng ban đầu, ta thực hiện bổ chính hệ thống. d) Mô phỏng hệ thống trên máy tính để kiểm tra lại thiết kế. e) Thực hiện mô hình mẫu (prototype) và kiểm tra thiết kế bằng thực nghiệm. f) Tinh chỉnh lại thiết kế để tối ưu hóa chỉ tiêu chất lượng và hạ thấp giá thành nều có yêu cầu. g) Xây dựng hệ thống thực tế. 1.6 Thuật toán PID số[4] 1.6.1 Quy luật tỷ lệ (P) - Tín hiệu điều khiển trong quy luật tỷ lệ được hình thành theo công thức x = Kp . e (1.1) Trong đó Kp là hệ số khuếch đại của quy luật. Theo tính chất của khâu khuếch đại thì ta thấy rằng tín hiệu ra của khâu luôn luôn trùng pha với tín hiệu vào. Điều này nói lên rằng ưu điểm của khâu khuếch đại là có tác động nhanh. Vì vậy, trong công nghiệp quy luật tỷ lệ làm việc ổn định với mọi đối tượng. Tuy nhiên, nhược điểm của khâu tỷ lệ là khi hệ số tỷ lệ Kp càng lớn thì độ vọt lố càng cao, hệ thống kém ổn định và khi sử dụng với các đối tượng tĩnh, hệ thống điều khiển luôn tồn tại sai lệch tĩnh. Để giảm sai lệch tĩnh thì phải tăng hệ số khuếch đại nhưng khi đó, tính dao động của hệ thống sẽ tăng lên và có thể làm cho hệ thống mất ổn định Trong công nghiệp quy luật tỷ lệ thường được dùng cho những hệ thống cho phép tồn tại sai lệch tĩnh. Để giảm sai lệch tĩnh, quy luật tỷ lệ thường được hình thành theo biểu thức x = x0 + Kp .e (1.2) Trong đó x0 là điểm làm việc của hệ thống. Tác động điều khiển luôn giữ cho tín hiệu điều khiển thay đổi xung quanh giá trị sai lệch. Hình (1.5) mô tả quá trình điều khiển với các hệ số Kp khác nhau Hình 1.5- Quá trình điều khiển với các hệ số Kp khác nhau 1.6.2 Quy luật tích phân (I) Trong quy luật tích phân, tín hiệu điều khiển được xác định theo biểu thức (1.3) Trong đó Ki = 1/Ti gọi là hằng số tích phân Từ công thức này ta thấy giá trị điều khiển x chỉ đạt được giá trị xác lập (quá trình điều khiển đã kết thúc) khi e = 0. Như vậy ưu điểm của quy luật tích phân là triệt tiêu sai lệch tĩnh Xét đặc tính của khâu tích phân, tín hiều ra của nó luôn chậm pha so với tín hiệu vào 1 góc là . Điều này có nghĩa là quy luật tích phân có tác động chậm. Do sự tác động chậm mà trong công nghiệp, hệ thống điều khiển tự động sử dụng quy luật tích phân kém ổn định. Vì vậy mà quy luật này hiện nay ít được sử dụng trong công nghiệp 1.6.3 Quy luật tỷ lệ - tích phân (Proportional Integral) Để hệ thống vừa có tác động nhanh, vừa có thể triệt tiêu được sai lệch dư, người ta kết hợp quy luật tỷ lệ với quy luật tích phân để tạo ra quy luật tỷ lệ - tích phân Tín hiệu điều khiển được xác định theo công thức x = Kp .e + = Kp (e+) (1.4) Trong đó: Kp là hệ số khuếch đại Ti = Kp/Ki là hằng số thời gian tích phân - Hàm truyền đạt của quy luật tỷ lệ tích phân có dạng W(p) = Kp (1+ ) - Hàm truyền tần số của quy luật PI W(j) = Kp (1-j ) Như vậy khi khi ω = 0 thì ϕ (ω ) = −π/ 2 , còn khi ω = ∞ thì ϕ (ω ) = 0. Tín hiệu chậm pha so với tín hiệu vào một góc trong khoảng từ −π/2 đến 0 phụ thuộc vào các tham số Kp , Ti và tần số tín hiệu vào. Rõ ràng , về tốc độ tác động thì quy luật PI chậm hơn quy luật tỷ lệ nhưng lại nhanh hơn quy luật tích phân. Hình 1.6- Ảnh hưởng của khâu hiệu chỉnh tỷ lệ-tích phân với các hằng số thời gian tích phân khác nhau. Nhận xét: Thời gian tích phân càng nhỏ, độ vượt mức càng cao. 1.6.4 Quy luật tỷ lệ - vi phân (Proportional Derivative) - Tác động điều khiển của quy luật PD được hình thành theo công thức: x = Kp.e + Kd. = Kp (e+Td ) Trong đó: Kp hệ số khuếch đại Td = Kp/ Kd hằng số thời gian vi phân Có thêm thành phần vi phân làm tăng tốc độ tác động hệ thống Hàm truyền đạt của quy luật tỉ lệ - vi phân có dạng: W(p) = Kp (1+Td.p) - Hàm truyền tần số của quy luật PD W ( jω ) = Kp (1+ jTd) - Đặc tính pha tần: ϕ (ω ) = arctg(Td .ω) Như vậy khi ω thay đổi từ 0 đến ∞ thì đặc tính PT sẽ thay đổi từ 0 đến π/2 . Ta có thể khẳng định tốc độ tác động của quy luật PD còn nhanh hơn cả quy luật tỉ lệ.Tuy nhiên, do có thêm thành phần vi phân nên hệ thống sẽ phản ứng với các nhiễu cao tần có biên độ nhỏ, là điều mà chúng ta không mong muốn, đồng thời quy luật PD cũng không làm giảm sai lệch dư. Vì vậy, trong công nghiệp, quy luật PD chỉ sử dụng ở đâu đòi hỏi tốc độ tác động nhanh như điều khiển tay máy… Hình 1.7 Ảnh hưởng của khâu hiệu chỉnh tỷ lệ-vi phân với các hằng số thời gian vi phân khác nhau Nhận xét: Thời gian vi phân càng lớn thì đáp ứng càng nhanh. 1.6.4 Quy luật điều khiển tỉ lệ vi tích phân (Proportional Integral Derivative) Để tăng tốc độ tác động của quy luật PI, trong thành phần của nó người ta ghép thêm thành phần vi phân và nhận được quy luật điều khiển tỉ lệ vi tích phân.Tác động điều khiển được tính toán theo công thức: x = Kp .e + + Kd. = Kp (e+ + Td ) Trong đó: Kp là hệ số khuếch đại Ti = Kp/Ki là hằng số thời gian tích phân Td = Kp/ Kd hằng số thời gian vi phân - Hàm truyền đạt của quy luật tỉ lệ - vi tích phân có dạng: W(p) = Kp (1+ + Td. p) - Hàm truyền tần số của khâu PID: W( j) = Kp (1+j(Td.ω -)) - Đặc tính pha tần: ϕ(ω)= arctg() Như vậy khi ω = 0 thì ϕ (ω ) = − π/2 , còn khi ω = thì ϕ (ω ) = 0 và khi ω = ∞ thì ϕ (ω ) =π/2 . Rõ ràng góc lệch pha của tín hiệu ra so với tín hiệu vào nằm trong khoảng từ −π/2 đến π/2 , phụ thuộc vào các tham số Kp , Ti , Td và tần số của tín hiệu vào. Nghĩa là về tốc độ tác động, quy luật PID còn có thể nhanh hơn cả quy luật tỉ lệ. Nói tóm lại, quy luật PID là hoàn hảo nhất. Nó đáp ứng được yêu cầu về chất lượng của hầu hết các quy trình công nghệ nhưng việc hiệu chỉnh các tham số của nó rất phức tạp, đòi hỏi người sử dụng phải có một trình độ nhất định. Vì vậy, trong công nghiệp, quy luật PID chỉ sử dụng ở những nơi cần thiết, khi quy luật PI không đáp ứng được yêu cầu về chất lượng điều chỉnh. Hình 1.7- So sánh các khâu hiệu chình PD,PI,PID Nhận xét: Khâu hiệu chỉnh PID có ưu điểm so với các khâu hiệu chỉnh còn lại có thời gian đáp ứng nhanh và độ vượt mức nhỏ. CHƯƠNG II MẠCH MÔ PHỎNG TRÊN PROTEUS 2.1. Sơ đồ nguyên lý. Hình 2.1-Sơ đồ nguyên lý của mạch điều khiển + Nguyên lý hoạt động: AVR Atmega32 phát PWM(Pulse Width Modulation) điều chỉnh vận tốc động cơ bằng cách thay đổi độ rộng của xung PWM ta sẽ có thể thay đổi được vận tốc của động cơ. Xung PWM không trực tiếp làm quay động cơ mà thông qua một mạch công suất gọi là driver .Driver cho DC Motor chính là mạch cầu H.Trong bài này ta sử dụng chip L298N có tích hợp sẵn mạch cầu H. Để cho việc điều khiển chip driver L298N được dễ dàng, ta sẽ sử dụng một mạch logic sử dụng các cổng NOT và AND Động cơ DC mà ta sử dụng là có tích hợp sẵn một encoder gồm 3 ngõ ra, chúng ta sẽ dùng AVR để đọc số xung(hay số vòng quay) để tính ra được vận tốc của motor.Việc đọc encoder sẽ được thực hiện bằng ngắt ngoài. Một giải thuật PID được xây dựng trong AVR để hiệu chỉnh vận tốc của động cơ Chúng ta sẽ nhập vận tốc cần điều khiển vào AVR thông qua cá swithes.Vận tốc cần mong muốn và vận tốc đạt được sẽ được hiển thị trên Text LCD 2.2 . Tổng Quát về vi điều khiển ATMEGA32[5] 2.2.1 Giới thiệu chung về ATMEGA32 ATmega32 là vi điều khiển chuẩn CMOS 8 bit tiết kiệm năng lượng, được chế tạo dựa trên cấu trúc AVR RISC (Reduced Instruction Set Computer), đây là cấu trúc có tốc độ xử lý cao hơn nhiều so với cấu trúc CISC (Complex Instruction Set Computer). Tần số hoạt động của vi điều khiển AVR bằng với tần số của thạch anh, trong khi với họ vi điều khiển theo cấu trúc CISC như họ 8051 thì tần số hoạt động bằng tần số thạch anh chia cho 12. Hầu hết các lệnh được thực thi trong một chu kỳ xung nhịp, do đó ATmega32 có thể đạt được tốc độ xử lý đến một triệu lệnh mỗi giây (với tần số 1MHz). Đặc điểm này cho phép người thiết kế có thể tiết kiệm tối đa mức độ tiêu thụ năng lượng mà vẫn đảm bảo tốc độ xử lý. Sau đây là các đặc tính của ATmega32: - Hiệu năng cao, tiêu thụ ít năng lượng. -Kiến trúc RISC: 131 lệnh – hầu hết các lệnh thực thi trong một chu kỳ máy. 32 thanh ghi 8 bit đa năng. Tốc độ thực hiện lên tới 16 triệu lệnh trong 1 giây (tần số 16MHz). - Các bộ nhớ chương trình và bộ nhớ dữ liệu: 32Kbyte bộ nhớ Flash có khả năng tự lập trình trong hệ thống. - Có thể thực hiện được 10.000 lần ghi xóa. Vùng mã Boot tùy chọn với những bit khóa độc lập. Lập trình trong hệ thống bởi chương trình on-chip boot. Thao tác đọc ghi trong khi nghỉ. 1024 Byte EEPROM. - Có thể thực hiện 100.000 lần ghi xóa. 2Kbyte SRAM nội. Lập trình khóa an toàn phần mềm. - Ghép nối ngoại vi: 2 bộ định thời/bộ đếm 8 bit với bộ chia tần số độc lập và chế độ so sánh. 1 bộ định thời/bộ đếm 16 bit với bộ chia tần số, chế độ so sánh và chế độ bắt mẫu (Capture). Bộ đếm thời gian thực với bộ dao động độc lập. Bốn kênh PWM. Bộ ADC 8 kênh 10 bit. Bộ truyền dữ liệu đồng bộ/bất đồng bộ USART. Bộ truyền dữ liệu chuẩn SPI. Watchdog timer khả trình với bộ dao động nội riêng biệt. Bộ so sánh Analog. - Các đặc điểm khác: Power-on Reset và phát hiện Brown-out khả trình. Bộ tạo dao động nội. Nguồn ngắt nội và ngoại. 6 chế độ ngủ: Idle, ADC noise reduction, Power-save, Power-down, Standby và Extended Standby. - Ngõ vào/ra: có 32 ngõ vào ra. - Điện áp hoạt động: 2.7V – 5.5V đối với ATmega32L. 4.5V – 5.5V đối với ATmega32. - Tần số hoạt động: 0 – 8MHz đối với ATmega32L. 0 – 16MHz đối với ATmega32. 2.2.2. Cấu trúc bên trong Hình 2.2 – Sơ đồ cấu trúc bên trong Atmega32 Phần lõi AVR kết hợp tập lệnh phong phú với 32 thanh ghi đa dụng. Toàn bộ 32 thanh ghi này đều kết nối trực tiếp với ALU (Arithmetic Logic Unit), cho phép truy cập 2 thanh ghi độc lập với 1 lệnh thực thi trong 1 chu kỳ xung nhịp. Cấu trúc đạt được có tốc độ xử lý nhanh gấp 10 lần so với vi điều khiển CISC thông thường. Với các tính năng đã nêu trên, khi ở chế độ nghỉ (Idle), CPU vẫn cho phép các chức năng khác hoạt động như: USART, giao tiếp 2 dây, chuyển đổi A/D, SRAM, bộ đếm/bộ định thời, cổng SPI và các chế độ ngắt. Chế độ Power-down lưu giữ nội dung các thanh ghi nhưng làm ngừng bộ tạo dao động, thoát khỏi các chức năng của chip cho đến khi có ngắt ngoài hoặc reset phần cứng. Trong chế độ Power-save, đồng hồ đồng bộ tiếp tục chạy cho phép chương trình có thể giữ được sự đồng bộ về thời gian nhưng các thiết bị còn lại ở trong trạng thái ngủ. Chế độ ADC Noise Reduction dừng CPU và tất cả các thiết bị còn lại ngoại trừ đồng hồ đồng bộ và ADC, giảm thiểu nhiễu khi ADC hoạt động. Ở chế độ Standby, bộ tạo dao động chạy trong khi các thiết bị còn lại ở trạng thái ngủ. Những đặc điểm này cho phép bộ vi điều khiển khởi động rất nhanh trong chế độ tiêu thụ công suất thấp. AVR được sản xuất sử dụng công nghệ bộ nhớ cố định mật độ cao của Atmel. Bộ nhớ On-chip ISP Flash cho phép lập trình lại vào hệ thống thông qua giao diện SPI bởi bộ lập trình bộ nhớ cố định truyền thống hoặc bởi chương trình On-chip Boot chạy trên lõi AVR. Chương trình Boot có thể sử dụng bất cứ giao diện nào để download chương trình ứng dụng trong bộ nhớ Flash. Phần mềm trong vùng Boot Flash sẽ tiếp tục chạy trong khi vùng Application Flash được cập nhật, giúp tạo ra thao tác Read-While-Write thực sự. Nhờ việc kết hợp một bộ 8bit RISC CPU với In-System Self-Programmable Flash chỉ trong một chip, ATmega32 là một vi điều khiển mạnh có thể cung cấp những giải pháp có tính linh động cao, giá thành rẻ cho nhiều ứng dụng điều khiển nhúng. ATmega32 được hỗ trợ đầy đủ với các công cụ hỗ trợ phát triển cũng như lập trình, bao gồm: trình biên dịch C, macro assembler, mô phỏng/dò lỗi lập trình, mô phỏng mạch điện và các bộ kit thí nghiệm. 2.2.3. Sơ đồ chân của ATmega32: Hình 2.3 – Sơ đồ chân của ATmega32 - GND: chân nối mass. - VCC: điện áp nguồn. - Port A (PA0…PA7): ngõ vào/ra Port A. Các chân Port A cũng là ngõ vào analog của bộ chuyển đổi A/D Chân Chức năng PA7 ADC7 (Ngõ vào ADC 7) PA6 ADC6 (Ngõ vào ADC 6) PA5 ADC5 (Ngõ vào ADC 5) PA4 ADC4 (Ngõ vào ADC 4) PA3 ADC3 (Ngõ vào ADC 3) PA2 ADC2 (Ngõ vào ADC 2) PA1 ADC1 (Ngõ vào ADC 1) PA0 ADC0 (Ngõ vào ADC 0) - Port B (PB0…PB7): ngõ vào/ra Port B. Các chức năng khác của Port B: Chân Chức năng PB7 SCK (Chân Clock của SPI) PB6 MISO (Master Input / Slave Output của SPI) PB5 MOSI (Master Output / Slave Input của SPI) PB4 SS (Ngõ vào chọn Slave của SPI) PB3 AIN1 (Ngõ vào Negative của bộ so sánh analog). OC0 (Ngõ ra so sánh của Timer/Counter 0). PB2 AIN0 (Ngõ vào Possitive của bộ so sánh analog). INT2 (Ngõ vào ngắt ngoài 2) PB1 T1 (Ngõ vào của bộ đếm ngoài counter 1) PB0 T0 (Ngõ vào của bộ đếm ngoài counter 0) XCK (Chân I/O Clock của USART) - Port C (PC0…PC7): ngõ vào/ra Port C. Các chức năng khác của Port C: Chân Chức năng PC7 TOSC2 (Chân 2 bộ dao động của Timer) PC6 TOSC1 (Chân 1 bộ dao động của Timer) PC5 TDI (Chân data in Test JTAG) PC4 TDO (Chân data out Test JTAG) PC3 TMS (Chân chọn Mode Test JTAG) PC2 TCK (Chân Clock Test JTAG) PC1 SDA (Chân data I/O của giao thức Two-wire) PC0 SCL (Chân clock của giao thức Two-wire) - Port D (PD0…PD7): ngõ vào/ra Port D. Các chức năng khác của Port D: Chân Chức năng PD7 OC2 (Ngõ ra so sánh của Timer/Counter2) PD6 ICP1 (Chân bắt mẫu của Timer/Counter1) PD5 OC1A (Ngõ ra so sánh A của Timer/Counter1) PD4 OC1B (Ngõ ra so sánh B của Timer/Counter1) PD3 INT1 (Ngõ vào ngắt ngoài 1) PD2 INT0 (Ngõ vào ngắt ngoài 0) PD1 TXD (Ngõ ra USART) PD0 RXD (Ngõ vào USART) - Reset: Chân ngõ vào. Khi đặt vào chân này điện áp mức thấp trong thời gian xác định (xem trong datasheet) thì sẽ reset chương trình. Nếu thời gian ngắn hơn thì việc reset không thành công. - XTAL1: ngõ vào khuếch đại dao động đảo và cũng là ngõ vào mạch tạo xung nội. - XTAL2: ngõ ra của mạch khuếch đại dao động đảo. - AVCC: là chân nguồn cấp cho Port A và bộ chuyển đổi A/D. Nên nối chân này với chân VCC ngay cả khi không sử dụng ADC. Nếu dùng ADC thì nên nối chân này với chân VCC qua 1 tụ lọc thông thấp. - AREF: chân tham chiếu điện áp analog của bộ chuyển đổi A/D. 2.3. Động cơ DC servo motor Hình 2.11-Động cơ DC 2.3.1. Khái Niệm động cơ điện 1 chiều[6] Động cơ điện một chiều thuộc về máy điện một chiều là loại máy hoạt động với nguồn điện một chiều. Chúng có thể vận hành theo chế độ máy phát điện hay chế độ động cơ điện. Nghĩa là máy điện một chiều có thể chuyển hóa cơ năng thành điện năng một chiều hoặc là biến đổi điện năng một chiều thành cơ năng. 2.3.2. Cấu tạo chung của động cơ DC Cấu tạo của động cơ gồm stator, rotor và hệ thống chổi than-vành góp.Stator bao gồm vỏ máy cực từ chính, cực từ phụ, dây quấn phần cảm(dây quấn kích thích) bao gồm các bối dây được đặt trong rãnh của lõi sắt. Đối với các động cơ có công suất nhỏ người ta có thể kích từ bằng nam châm vĩnh cửu. Hình 2.12-Cấu tạo của Rotor Rotor(còn gọi là phần ứng) gồm các lá thép kỹ thuật cách điện lại có rãnh để đặt các phần tử của dây quấn phần ứng. Lõi thép có hình trụ tạo thành từ việc ghép nhiều lá thép kỹ thuật điện đã phủ lớp vecni cách điện để giảm tổn hao gây bởi dòng điện xoáy. Chung quanh lá thép được dập các rãnh để khi ghép lại sẽ tạo thành rãnh của phần ứng để đặt bộ dây quấn. Giữa lá thép có dập lỗ để lắp trục và chốt chêm dọc. Ngoài ra, trên lá thép còn được dập một số lỗ thông gió để làm mát. Thân máy, cực từ và lõi thép phần ứng hợp thành mạch từ của máy điện một chiều. Dây quấn được tạo thành từ nhiều phần tử dây quấn, mỗi phần tử gồm nhiều vòng dây được xếp trong các rãnh của lõi thép. Hai đầu phần tử nối với với 2 phiến góp, 2 cạnh tác dụng của mỗi phần tử được xếp trong 2 rãnh nằm dưới 2 cực khác tên. Phần ứng được bắt chặt trên trục thép, hai đầu trục có gắn bạc đạn. Nắp máy giữ cố định hai bạc đạn và được bắt chặt vào thân máy bằng bulông xuyên. Hình 2.13- Stator của động cơ điện một chiều Stator còn gọi là phần cảm có nhiệm vụ tạo ra từ thông chính trong máy, thường được chế tạo bằng gang hay thép đúc. Stator là mạch từ cũng vừa là vỏ máy bao bọc các bộ phận bên trong. Phía mặt trong của stator có gắn các cực từ, phần cuối cực từ được làm loe ra tạo thành đầu cực từ, trên thân cực từ có gắn cuộn dây quấn kích từ. Hình 2.14- Cổ góp và chổi than Cổ góp tạo thành từ việc ghép nhiều phiến góp bằng đồng thành một hình trụ tròn, sau đó gắn vào trục rotor, giữa các phiến góp có cách điện với nhau và được cách điện với trục bằng lớp mica mỏng. Một đầu phiến góp được xẻ rãnh để hàn với đầu dây của phần tử dây quấn phần ứng. Chổi than còn gọi là chổi điện làm từ than graphit và được đặt trong giá đỡ hình hộp. Chổi than có thể di chuyển dọc theo trục giá đỡ, giá đỡ được cách điện và bắt chặt vào nắp máy. Một đầu chổi than tì sát lên bề mặt cổ góp, đầu còn lại có lò xo ép chặt. Chức năng của chổi than – vành góp là để đưa điện áp một chiều vào cuộn dây phần ứng và đổi chiều dòng điện trong cuộn dây phần ứng.Số lượng chổi than bằng số lượng cực từ(một nửa có cực tính dương, một nửa có cực tính âm). b)Encoder của động cơ điện 1chiều[7] Trong bài này chúng ta sử dụng Incremental Optical encoder (encoder quang tương đối). Encoder thường có 3 kênh (3 ngõ ra) bao gồm có 3 kênh A, kênh B và kênh I(index). Trong hình trên chúng ta thấy 1 lỗ nhỏ ở trong của đĩa quay và có 1 cặp phát–thu hồng ngoại dành riêng cho lỗ này, đó là kênh I của encode. Cứ mỗi vòng quay của đĩa thì lỗ nhỏ sẽ 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, khi đó sẽ có 1 tín hiệu xuất hiện trên cảm biến. Như thế kênh I sẽ xuất hiện 1 xung trong 1 vòng quay của motor. Bên ngoài đĩa đượ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 tương tự như kênh I, điểm khác nhau là trong 1 vòng quay của motor thì có N “xung” xuất hiện trên kênh A với N là số rãnh trên đĩa và cũng là độ phân giải(resolution) của encoder.Mỗi loại động cơ khác nhau thì sẽ có độ phân giải là hoàn toàn khác nhau Ngoài ra trên encoder còn 1 cặp thu phát khác được đặt trên cùng đường tròn với kênh A nhưng mà lệch một chút(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 mà lệch pha 90o. Bằng cách phối hợp 2 kênh A và B thì người đọc sẽ biết được chiều quay của động cơ Hình 2.15-Hai kênh A và B lệch pha nhau trong encoder Hình trên cùng trong ba hình thể hiện sự bố trí của 2 cảm biến 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 theo chiều kim đồng hồ, tín hiệu đi từ trái qua phải. Ta thấy rằng lúc tín hiệu từ kênh A chuyển từ mức cao xuống thấp(cạnh thấp) thì tín hiệu của kênh B đang ở mức cao.Như vậy bằng cách phối hợp 2 kênh A và B thì chúng ta có thể xác định đượ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). 2.3.3. Nguyên lý làm việc của động cơ 1 chiều Khi đặt lên dây cuốn kích từ một điện áp Uk nào đó thì trong dây cuốn kích từ sẽ xuất hiện một dòng ik và từ đó mạch từ của máy sẽ xuất hiện một từ thông . Tiếp đó đặt một giá trị điện áp U lên mặt phần ứng thì trong dây cuốn sẽ xuất hiện một dòng điện i chạy qua . Tương tác giữa dòng điện phần ứng và từ thông kích thích sẽ tạo ra mômen điện từ.Giá trị của mô men điện từ được tính bởi công thức sau. Trong đó p: Số đôi cực của động cơ n: Số thanh dẫn phần ứng dưới một cực từ a: Số mạch nhánh song song của dây cuốn phần ứng k: Số kết cấu của máy Và mômen điện từ này kéo phần ứng quay quanh trục Hình 2.17- Nguyên lý hoạt động của động cơ một chiều 2.4. Khối hiển thị LCD 16x2(2 dòng 16 cột) LCD làm việc ở chế độ 8 bit ghép nối với PortC của vi điều khiển trung tâm Bảng sơ lược chức năng LCD 2x16 CHƯƠNG III: THỰC NGHIỆM 3.1 Mạch nguyên lý 3.1.1 Khối hiển thị Hình 3.1- Khối hiển thị của mạch AVR Atmega32 phát PWM(Pulse Width Modulation) điều chỉnh vận tốc động cơ bằng cách thay đổi độ rộng của xung PWM ta sẽ có thể thay đổi được vận tốc của động cơ.Tốc độ sẽ được hiển thị thông qua LCD 16x2 3.1.2 Khối driver IC L298N được tích hợp gồm có 2 mạch cầu H, ngoài chức năng dùng để đảo chiều quay của động cơ thì L298N còn dùng để điều khiển vận tốc động cơ bằng PWM Hình 3.2- Khối Driver L298 3.1.3. Khối logic Hình 3.3- Khối logic của mạch Các đường kích cầu trong IC L298N là IN1 và IN2 phải được đặt trong các trạng thái ngược nhau.Bằng cách này chúng ta có thể tránh được trường hợp khi mà 2 transistor ở cùng một bên được kích cùng lúc(ngắn mạch). Vì vậy chúng ta sẽ thiết kế một mạch logic phụ với 2 ngõ vào là PWM và DIR.Trong đó PWM dùng để điều khiển vận tốc còn DIR dùng để điều khiển hướng của động cơ.Hai ngõ ra là hai đường điều khiển IN1 và IN2.Vì vậy khối logic được thiết kế như trên. 3.1.4. Khối nguồn Hình 3.4-Khối nguồn Chúng ta sử dụng IC7805 dùng để chuyển nguồn từ +12V sang +5V 3.2. Thực Nghiệm Động cơ mà chúng ta sử dụng là loại dùng với điện áp +12V và độ phân giải là 300 xung/vòng. Việc điều khiển vận tốc của động cơ sẽ được thực hiện thông qua các button trên mạch. Dưới đây là hình ảnh về các trạng thái vận tốc đạt được. Hình 3.5 – Hình ảnh mạch thực tế. Hình 3.6 – Động cơ đạt tốc độ 2xung/25ms Hình 3.8 – Động cơ đạt tốc độ 7xung/25ms Hình 3.9 – Động cơ đạt tốc độ 10xung/25ms Hình 3.10 – Động cơ đạt tốc độ 15xung/25ms Với mạch thiết kế như trên chúng ta có thể đạt được 15 mức vận tốc khác nhau. Vận tốc ở đây là Desired: số xung/25ms.Từ đó ta có thể suy ra được số vòng mà động cơ quay được trong 1s. - Gọi số vòng mà động cơ đạt được trong 1s là V. - Gọi số xung/25ms mà động cơ đạt được là A Như vậy số vòng mà động cơ đạt được trong 1s được tính bởi công thức (vòng/s) Từ đó ta có thể tính được số vòng/1s của động cơ Với 7 xung/25ms thì số vòng/1s của động cơ sẽ là Với 10 xung/25ms thì số vòng/1s đạt được sẽ là Với 15xung/25ms thì số vong/1s đạt được sẽ là Như vậy động cơ của ta có tốc độ tối thiểu khi ở tần số là 133.33 Hz và tốc độ tối đa khi ở tần số là 2 kHz. KẾT LUẬN Sau quá trình học tập và nghiên cứu, dưới sự giúp đỡ, chỉ bảo tận tình của thầy hướng dẫn cùng các thầy cô trong bộ môn Vật Lý Vô Tuyến, với mục tiêu của đề tài là “Điều khiển động cơ DC motor với giải thuật PID”, kết quả thu được của em đã hoàn thành mục tiêu đề ra với các nội dung sau: - Tìm hiểu cơ bản về lý thuyết điều khiển tự động và thuật toán PID. - Tìm hiểu về và viết chương trình chạy thành công cho vi điều khiển Atmega32 - Thực hiện được việc chạy mô phỏng và thiết kế thành công phần mạch thực nghiệm Kết quả đạt được thỏa mãn yêu cầu của bài toán là khả năng đáp ứng nhanh và chính xác trong khoảng tần số từ 133.33 – 2kHz. Ý nghĩa quan trọng của đề tài là việc ứng dụng thành công giải thuật PID vào thực tế trong việc điều khiển động cơ điện một chiều, với nhiều ứng dụng thực tế như trong các dây chuyền sản xuất, ô tô điện, tàu thủy, máy bay…. Tuy nhiên, hạn chế của đề tài là chỉ đáp ứng được một số mức vận tốc đã đặt trước mà thôi, với vận tốc bất kỳ thì chưa đáp ứng được. Các vấn đề tiếp theo cần được thực hiện để phát triển thêm đề tài là: - Phần cứng Mạch thực nghiệm sẽ sử dụng kết nối với máy tính qua cổng COM hoặc cổng USB để khống chế tốc độ điều khiển. Mạch thực nghiệm hiển thị được tốc độ thực tế trên LCD - Phần mềm Viết lại chương trình cho vi điều khiển để có thể thực hiện được kết nối với máy tính và hiển thị được tốc độ thực tế TÀI LIỆU THAM KHẢO [1]. Phạm Xuân Minh, “Giáo trình lý thuyết điều khiển tự động”,NXB Giáo Giục, 2008 [2]. Lê Vũ Hà, “Kỹ thuật điều khiển”, NXB ĐHQG Hà Nội, 2006 [3]. Khoa điện, ĐHBK Hà Nội, “Lý thuyết điều khiển tự động” [4]. Học Viện Công Nghệ Bưu Chính Viễn Thông, “Cơ sở điều khiển tự động” , 2006 [5]. www.atmel.com/atmel/acrobat/doc2503.pdf [6]. [7]. PHỤ LỤC P1. Code chương trình: Điều khiển động cơ DC với giải thuật PID #include #include #include #include #include #include "myLCD.h" #ifndef cbi #define cbi(port, bit) (port) &= ~(1 << (bit)) #endif #ifndef sbi #define sbi(port, bit) (port) |= (1 << (bit)) #endif //Dinh nghia cac duong dieu khien motor #define MOTOR_DDR DDRD #define MOTOR_PORT PORTD #define MOTOR_DIR 6 #define MOTOR_EN 7 #define Sampling_time 25 //thoi gian lay mau (ms) #define inv_Sampling_time 40 // 1/Sampling_time #define PWM_Period 8000 //8000 cycles = 1ms, f=8MHz volatile long int Pulse, pre_Pulse; volatile long int rSpeed, Err, pre_Err, Kp=8, Kd=10, Ki=1; //for speed control volatile long int pPart=0, iPart=0, dPart=0; //PID gains volatile long int Ctrl_Speed=5; //van toc can dieu khien (desired speed) volatile long int Output; volatile unsigned char sample_count=0; //dieu khien van toc bang PID void Motor_Speed_PID(long int des_Speed){ rSpeed=Pulse-pre_Pulse; //tinh van toc (trong sampling time) pre_Pulse=Pulse; //luu lai gia tri Pulse: so xung Err=des_Speed-abs(rSpeed); //tinh error (loi) //cac thanh phan cua PID pPart=Kp*Err; dPart=Kd*(Err-pre_Err)*inv_Sampling_time; iPart+=Ki*Sampling_time*(Err+pre_Err)/1000; Output +=pPart+dPart+iPart; //cong thuc duoc bien doi vi la dieu khien van toc //saturation if (Output >=PWM_Period) Output=PWM_Period-1; if (Output <=0) Output=1; OCR1A=Output; //gan duty cycle cho OCR1A: update PWM pre_Err=Err; //luu lai gia tri error } int main(void){ unsigned char dis[5]; //bien tam, hien thi LCD Pulse=0; //Encoder va cac chan nhap toc do DDRB=0x00; //set PORTB as a input port to use the T0 input pin and INT2 PORTB=0xFF; //dien tro keo len (nhat la encoder) //Motor MOTOR_DDR=0xF0; sbi(MOTOR_PORT, MOTOR_DIR); //ngat ngoai, cho encoder-------------------------------------------------------------- MCUCSR|=(0<<ISC2); //ngat INT2 la ngat canh xuong - Falling Edge GICR |=(1<<INT2); //Enable INT2 //--------------------------------------------------------------------------------- //dung timer 2 lam bo dinh thi 25ms, sampling time-------------------------------- TCCR2=(1<<CS22)|(1<<CS21)|(1<<CS20); //CS22=1, CS21=1, CS20=1: chon Prescaler=1024 (trang 125 datasheet) TCNT2=60; //gan gia tri khoi tao cho T/C2 de duoc 25ms (truong hop f=8MHz) TIMSK=(1<<TOIE2); // cho phep ngat khi co tran o T/C2 //-------------------------------------------------------------------------------- //dung timer1 lam PWM generator, Fast PWM mode 14: ICR1 chua time period TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); TCCR1B=(1<<WGM13) |(1<<WGM12) |(1<<CS10) ; //-------------------------------------------------------------------------------- //**********LCD************************* init_LCD(); clr_LCD(); move_LCD(2,1); print_LCD("DC Servo Motor"); _delay_ms(1000); clr_LCD(); print_LCD("Actual : /25ms"); move_LCD(2,1); print_LCD("Desired: /25ms"); //**********LCD************************* //---khoi dong gia tri PWM---------- OCR1A=1; ICR1=PWM_Period; sbi(MOTOR_PORT, MOTOR_EN); //khoi dong motor sei(); //---------------------------------- while (1){ if (sample_count>=10){ //hien thi moi 250ms Ctrl_Speed=(PINB>>4) & 0x0F; //doc switches //------in van toc hien tai (tinh tren 25ms) sprintf(dis,"%i", rSpeed); move_LCD(1,9); print_LCD(" "); move_LCD(1,9); print_LCD(dis); //------in van toc mong muon (tinh tren 25ms) sprintf(dis,"%i", Ctrl_Speed); move_LCD(2,9); print_LCD(" "); move_LCD(2,9); print_LCD(dis); sample_count=0; } } } ISR (TIMER2_OVF_vect ){ //update sampling time--------------- TCNT2=60; //gan gia tri khoi tao cho T/C2 sample_count++; Motor_Speed_PID(Ctrl_Speed); } ISR(INT2_vect){ if (bit_is_set(PINB,0)) Pulse++; else Pulse--; }

Các file đính kèm theo tài liệu này:

  • dockhoa luan-anh tien.doc
  • docBang tom tat-nguyễn văn tiến.doc
Luận văn liên quan