Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 66 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
66
Dung lượng
1,49 MB
Nội dung
ĐỒ ÁN ĐIỆN TỬ ỨNG DỤNG ĐỂ TÀI: THIẾT KẾ BỘ PID SỐ ĐIỀU KHIỂN TỐC ĐỘ ĐỘNG CƠ DC nguyen dinh tuan HOME Trang -2- PHẦN 1: LÝ THUYẾT CHƯƠNG 1: ĐỘNG CƠ ĐIỆN MỘT CHIỀU 1.1 Giới thiệu động DC: 1.2 Mô hình hóa động DC: 1.3 Phương pháp điều khiển tốc độ động cơ: 1.4 Khảo sát hàm truyền: 1.4.1 Hàm truyền lý tưởng: 1.4.2 Hàm truyền gần tìm thực nghiệm: 1.5 Phương pháp ổn định tốc độ động dùng PID: 1.5.1 Thuật toán PID: 1.5.2 Phương pháp hiệu chỉnh thông số PID Ziegler-Nichols: Chương TỔNG QUAN VỀ PSoC IC CỦA HÃNG CYPRESS 10 2.1 Giới thiệu: 10 2.2 Giới thiệu IC khả trình PSoC hãng CYPRESS 10 2.2.1 Khái niệm PSoC 10 2.2.2 Tổng quan tài nguyên chip PSoC 10 2.2.3 Cấu trúc chi tiết bên chip PSoC .13 3.3 Giới thiệu phần mềm PSoC Designer hãng CYPRESS 27 3.3.1 Tổng quan PSoC Designer 27 3.3.2 Xây dựng kiến trúc phần cứng( Device Editor) 27 3.3.3 Cửa sổ viết ứng dụng(Application Editor) 36 CHƯƠNG 3: LÝ THUYẾT VỀ MOSFET 38 3.1 Giới thiệu MOSFET .38 3.2 Cấu trúc NMOS kiểu tăng cường : .38 3.3 Ưu nhược điểm thông số quan trọng MOSFET: 40 3.3.1 Những ưu điểm mosfet : 40 3.3.2 Các nhược điểm mosfet 40 3.3.3 Các thông số quan trọng mosfet : .40 PHẦN 2: THIẾT KẾ VÀ THI CÔNG 43 CHƯƠNG 4: THIẾT KẾ VÀ THI CÔNG PHẦN CỨNG 43 4.1 Sơ đồ nguyên lý: 43 4.2 Tính toán thông số mạch: 44 4.2.1 Mạch đảo chiều động cơ: 44 4.2.2 Tính toán cho FET: 45 4.2.3 Tính toán mạch Driver cho MOSFET: .47 4.3 Tính toán tham số điều khiển PID số: 49 5.1 Cấu hình bên PSOC: .52 5.2 Giải thuật phần mềm: .57 Trang -3- PHẦN 1: LÝ THUYẾT CHƯƠNG 1: ĐỘNG CƠ ĐIỆN MỘT CHIỀU 1.1 Giới thiệu động DC: Động điện chiều động điện hoạt động với dòng điện chiều Động điện chiều ứng dụng rộng rãi ứng dụng dân dụng công nghiệp Cấu tạo động gồm có phần: stato đứng yên rôto quay so với stato Phần cảm (phần kích từ-thường đặt stato) tạo từ trường mạch từ, xuyên qua vòng dây quấn phần ứng (thường đặt rôto) Khi có dòng điện chạy mạch phần ứng, dẫn phần ứng chịu tác động lực điện từ theo phương tiếp tuyến với mặt trụ rôto, làm cho rôto quay Tùy theo cách mắc cuộn dây roto stato mà người ta có loại động sau: - Động kích từ độc lập: Cuộn dây kích từ (cuộn dây stato) cuộn dây phần ứng (roto) mắc riêng rẽ nhau, cấp nguồn riêng biệt - Động kích từ nối tiếp: Cuộn dây kích từ mắc nối tiếp với cuộn dây phần ứng: Đối với loaj động kích từ độc lập, người ta thay cuộn dây kích từ nam châm vỉnh cữu, ta có loại động điện chiều dùng nam châm vĩnh cữu Đây loại động sử dụng đồ án 1.2 Mô hình hóa động DC: Mô hình tương đương phần ứng động sau: Trang Ia Ra La Ua + A Eg - u a R a i a La dia e g dt e g k v n (1.1) (1.2) Trong Φ từ thông nam châm vĩnh cữu gây n tốc độ động Momen điện từ: Td = Kt Φia (1.3) Phương trình động cơ: Td J d B TL dt (1.4) B: hệ số ma sát T: monen tải Ở chế độ xác lập: u a Ra ia e g (1.5) Td 2nB TL K t ia (1.6) Ta có tốc độ động chế độ xác lập: n U a I a Ra Kv (1.7) 1.3 Phương pháp điều khiển tốc độ động cơ: Đối với loại động kích từ độc lập dùng nam châm vĩnh cữu, để thay đổi tốc độ, ta thay đổi điện áp cung cấp cho roto Việc cấp áp chiều -4- Trang -5- thay đổi thường khó khăn, người ta dùng phương pháp điều xung (PWM): Hình 1.1: PWM Phương pháp điều xung giữ tần số không đổi, thay đổi chu kì nhiệm vụ (Duty cycle) để thay đổi điện áp trung bình đặt lên động Điện áp trung bình: Vdk Ton Vin T Do đặc tính cảm kháng động cơ, dòng qua động dòng liên tục, gợn sóng sau: Udk t Ia t Hình 1.2: Dạng sóng dòng áp động 1.4 Khảo sát hàm truyền: 1.4.1 Hàm truyền lý tưởng: Biến đổi Laplace công thức từ (1.1) – (1.4 ) ta được: Trang U a ( p ) Ra I a ( p ) pLa I a ( p ) E g (a ) (1.9) E g ( p ) k v n( p ) (1.10) Td(p) = Kt ΦIa(p) (1.11) Td ( p ) 2pJn( p ) 2Bn( p ) TL ( p) (1.12) -6- Từ 1.12 tính được: n( p ) Td ( p) TL ( p ) 2B( p m 1) I a ( p) Trong đó: (1.13) U a ( p) E a ( p) Ra ( a p 1) (1.14) a =La/Ra Hằng số thời gian mạch phần ứng m =J/B Hằng số thời gian Vậy ta có mô hình hệ thống sau: Ia(p) Ua(p) Td(p) Ra ( a p 1) TL(p) kt 2B( m p 1) Eg(p ) kv Hình 1.3: Mô hình động điện DC Khi momen tải không đổi, ta có: n( p ) U a ( p ) 2BRa ( a p 1)( m p 1) K v Kt Vậy hàm truyền động lúc có dạng khâu dao động 1.4.2 Hàm truyền gần tìm thực nghiệm: Để tìm hàm truyền thực nghiệm ta tìm đáp ứng xung động Ta đặt áp áp định mức vào động vẽ đồ thị vận tốc theo thời gian Vì thời gian lấy mẫu vận tốc nhỏ ta không thấy điểm uốn đồ thị, ta xấp xỉ hàm truyền động khâu quán tính bậc có dạng sau n(p) Trang G k Tp Đáp ứng xung động cơ: n(p)= kU (Tp 1) p Biến đổi Laplace ngược ta được: n=kU(1-e-t/T) Khi t = T, n = kU(1-e-1)=0.63kU=0.63nmax Vậy đồ thị ta xác định điểm n=0.63nmax sau tìm T Dựa vào đồ thị tìm thực nghiệm ta tìm thông số kU T kU = 150 vòng/s T = 30ms=0.03s Vậy hàm truyền gần đúng: G k 150 / 24 37.5 Tp 0.03 p 0.03 p 1.5 Phương pháp ổn định tốc độ động dùng PID: 1.5.1 Thuật toán PID: G K p K i e( )d K d de( ) d Trong đó: - Kp: Hệ số khâu tỉ lệ (khâu khuếch đại) -7- Trang -8- - Ki: Hệ số tích phân - Kd: hệ số vi phân Luật điều khiển PID: Dựa vào bảng ta thấy luật tỉ lệ (P) có đặc điểm tác động nhanh không triệt tiêu sai lệch, đồng thời làm vọt lố hệ thống tăng Khâu tích phân cho phép triệt tiêu sai lệch tác động chậm Khâu vi phân phản ứng với tốc độ biến thiên sai lệch Ta cần xác định thông số Kp, Ki, Kd để hệ thống có chất lượng mong muốn Thuật toán điều khiển PID số: Khâu tỉ lệ P (Proportional): GP(z) = KP Khâu tích phân I (Integrate): GI ( z ) K I T z 1 kT với k e(t )dt Te(nT ) n 0 Trong T chu kì lấy mẫu vận tốc Công thức tích phân gần theo thuật toán xấp xỉ hình chữ nhật tới Khâu vi phân D (Derivative): Trang GD ( z ) K D -9- z 1 K d (1 z 1 ) với thành phần vi phân xấp xỉ bởi: Tz de(t ) e(nT ) e((n 1)T ) dt T Vậy ta hàm truyền khâu PID rời rạc: G U dk ( z ) K p Ki K d (1 z 1 ) 1 E ( z) 1 z Udk(z)(1-z-1) = E(z)(Kp(1-z-1) + Ki + Kd(1-z-1)2 Suy ra: uk – uk-1 = Kp(ek – ek-1) + Kiek + Kd(ek – 2ek-1 – ek-2) 1.5.2 Phương pháp hiệu chỉnh thông số PID Ziegler-Nichols: Thông thường việc chọn thông số P, I, D xác định thực nghiệm dựa vào đáp ứng xung hệ thống Ziegler – Nichols đưa phương pháp chọn tham số PID cho mô hình quán tính bậc có trễ Ở ta xấp xỉ hàm truyền động để dùng phương pháp này, không hoàn toàn xác cho đáp ứng tương đối tốt Phương pháp đỏi hỏi phải tính giá trị giới hạn của khâu tỉ lệ Kgh chu kì giới hạn hệ kín Tgh Sau tìm thông số khác theo bảng sau: Để tìm Kgh Tgh, ban đầu ta chỉnh Ki, Kd sau tăng từ từ Kp để hệ thống biên giới ổn định (dao động với biên độ chu kì không đổi), ta xác định Kgh Tgh sau tính thông số khác tùy theo điều khiển bảng Ki = Kp/Ti Kd = KxTd Để thuận tiện trình điều chỉnh quan sát đáp ứng động cơ, đồ án xây dựng chương trình viết VB máy tính để giao tiếp với mạch điều khiển Trang - 10 - Chương TỔNG QUAN VỀ PSoC IC CỦA HÃNG CYPRESS 2.1 Giới thiệu: Trong chương giới thiệu chi tiết chip PSoC hãng CYPRESS gồm nội dung sau: Trình bày kiến trúc bên chip PSoC: Tổng quan tài nguyên chip, chi tiết kiến trúc bên chip PSoC Giới thiệu phần mềm thết kế PSoC Designer dành cho chip PSoC hãng CYPRESS, phương pháp lập trình phần cứng (Device Editor) lập trình ứng dụng (Application Editor) Đồng thời giới thiệu tất module (embedded cores) thư viện API mà hãng hỗ trợ 2.2 Giới thiệu IC khả trình PSoC hãng CYPRESS 2.2.1 Khái niệm PSoC PSoC hay PSoC Mixed-Signal Arrays từ viết tắt Programmable system-on-chips PSoC chip mà tích hợp vi điều khiển thành phần tương tự thành phần số xung quanh vi điều khiển nhúng vào hệ thống Một chip đơn PSoC tích hợp lên đến 100 chức ngoại vi với vi điều khiển, làm giảm thời gian thiết kế, không gian board, lượng tiêu hao giảm 5% giá thành sản phẩm 10$ cho hệ thống 2.2.2 Tổng quan tài nguyên chip PSoC PSoC khác với vi điều khiển bit thông thường có khối số khối tương tự lập trình cho phép thực nhiều giao tiếp ngoại vi Khối số gồm có nhiều khối khả trình nhỏ cấu hình cho ứng dụng khác Khối tương tự sử dụng cho công cụ Analog lọc, so sánh tín hiệu tương tự, khuyếch đại đảo, không đảo AD, DA Có số họ PSoC khác mà ta lựa chọn xây dựng cho phù hợp với yêu cầu dự án Điểm khác cá họ PSoC số lượng khối Trang - 52 CHƯƠNG 5: THIẾT KẾ PHẦN MỀM 5.1 Cấu hình bên PSOC: Việc cấu hình cho PSOC gồm bước: - Cấu hình cho tài nguyên toàn cục: điện áp, tần số hoạt động, chia Clock bên Các thông số cấu hình vẽ: Ở chọn CPU_Clock 24Mhz, chia tần sô VC1 VC2 Set để có tần số VC2 1M để phục vụ cho khối định thời điều xung Bộ chia VC3 chọn 26 để chọn tốc độ baud cho khối UART - Cấu hình khối số: Khối điều xung:chọn điều xung PWM 16bit để dễ dàng thay đổi tần số điều xung, đặt block DB00 DB01 Đầu khối PWM nối đến Row_0_output_1 sau nối đến chân P2.5 Trang - 53 - Cấu hình thông số khác cho khối PWM hình vẽ: Tần số clock đầu vào 48MHz, chu kì 2000 xung tương ứng với tần số đầu 48MHz/2000 = 24KHz Khối giao tiếp UART: Khối UART đặt block DCB02 DCB03, khối chức giao tiếp UART, I2C, SPI… phục vụ cho truyền thông ta phải đặt block số DCBxx (khác với DBBxx) Trang - 54 Định tốc độ baud: Tốc độ baud = tần số xung clock/8 Ta cần tốc độ baud 115200, tần số clock là: 8.115200 = 921600 Clock 24MHz, ta dung chia tần để có tần số 921600 Hệ số chia = 24MHz/921600 = 26.04 => chọn VC3 26 Đầu vào nối đến Row_0_Input_2 sau nối đến chân P4.2 Đầu nối đến Row_0_Output_0 -> đến chân P4.4 Kích thước đệm nhận 16byte Kí tự kết thúc lệnh 13 (ứng với Enter, kí tự CR) Kí tự phân cách tham số dòng lệnh 32 (kí tự Space) Các thông số khác hình vẽ: Trang - 55 - Khối định thời: dùng để đinh thời gian lấy mẫu tốc độ Ta chọn đinh thời 16 bit để dễ dàng thay đổi tốc độ lấy mẫu, định thời gian linh hoạt Thiết lập thông số cho khối sau: Trang - 56 - Ở chu kì lấy mẫu vận tốc 50ms, tần số clock đầu vào 1MHz nên chọn chu kì 50000 Khối counter 16 bit: dung để đếm số xung từ Encoder: Khối đặt block DBB20 DBB21 hình vẽ Thiết lập thông số: xung clock ngõ vào tín hiệu từ Encoder, ta nối tới Row_2_Input_1 -> chân P2.1 Đồng thời ta phải thiết lập chân P2.1 ngõ vào, chọn Mode High Z Các thông số khác chọn hình sau: Trang - 57 - Giá trị Period giảm có clock ngõ vào, ta thiêt lập giá trị ban đầu 65535 Khối giao tiếp LCD: Khối thiêt lập phần mềm, không cần block số Để thiêt lập ta cần chọn cổng nối tới LCD Giao tiếp LCD hoạt động theo chế độ bit nên cần đường liệu Chọn Port giao tiếp LCD P3 5.2 Giải thuật phần mềm: Lưu đồ thuật toán chương trình chính: Trang - 58 - Begin Khởi động Modul Ngắt timer? Đọc đếm, Reset đếm Tính giá trị ĐK theo PID Dữ liệu từ PC? Hiển thị Nhận liệu từ PC Gửi vận tốc lên PC Giải thích: - Phần khởi động module bao gồm: o Khởi động Module LCD o Khởi động Module UART o Khởi động khối PWM o Khởi động Timer dùng để định thời gian lấy mẫu vận tốc Counter để đếm xung từ Encoder o Enable ngắt toàn cục ngắt timer - Mỗi lần có ngắt timer (kết thúc chu kì lấy mẫu), VDK đọc giá trị đếm (Counter), Reset đếm để bắt đầu lại từ đầu Sau VDK tính Trang - 59 toán giá trị điều khiển PWM theo thuật toán PID nhờ hàm pid_control() - Chương trình gửi liệu lên PC gửi vận tốc thời lên PC - Nếu có liệu từ PC (các thông số vận tốc, hệ số Ki, Kp,) Chương trình điều khiển PID: Áp dụng thuật toán PID số, thay giá trị uk giá trị điều xung (vì điện áp trung bình tỉ lệ với chu kì nhiệm vụ (Duty Cycle)), ta có chương trình điều khiển sau: void pid_control(){ e1=v_set-save_count; P_Term=(kp*e1)/10; //K'p = 0.1 -> kp = 1-50, tranh truong hop tinhs toan vuot khoi nguong cua integer D_Term=(kd*((e1-e0)))/10; //K'd = 0.1 -> kd = 150 (e1-2*e00 +e0)) e00=e0; e0=e1; I_state=(I_state+e1)/10; I_Term=(ki*I_state)/10;//k'i = 0.01,0.02 PWM_set=PWM_set + P_Term + D_Term + I_Term; if (PWM_set>2000) PWM_set=2000; if (PWM_set trả chuỗi ‘P’ Gọi lần 2: UART_1_szGetParam()-> trả chuỗi ‘10’ Trang - 61 - Begin Đọc giá trị str[0] Str[0]= ’S’ Vân tốc = Dữ liệu từ PC Str[0]= ’P’ Kp = Dữ liệu từ PC Str[0]= ’I’ Ki = Dữ liệu từ PC Str[0]= ’D’ Kd = Dữ liệu từ PC Str[0]= ’D’ Đóng Relaay đảo chiều động End Trang - 62 Chương trình hiển thị: Chương trình hiển thị chuyển đổi giá trị vận tốc, hệ số Ki, Kp, Kd giá trị thích hợp để hiển thị Chương trình hiển thị dùng hàm API: LCD_1_Position(byte i,byte j); Dịch chuyển trỏ tới vị trí hàng I cột j LCD_1_PrHexByte(byte); Hiển thị byte dạng Hexa lên LCD LCD_1_PrString(BYTE *s); hiển thị chuỗi s Chương trình gửi vận tốc lên máy tính void send_data_pc(){ int tem1; tem1=save_count*3; itoa(sp,tem1,10); UART_1_PutString(sp); } Trước gửi liệu lên PC ta convert sang dạng chuỗi dùng hàm itoa(sp,tem1,10) Trang - 63 5.3 Chương trình giao tiếp máy tính: Giao diện chương trình: Mã nguồn chương trình: Dim mang(1 To 50000) As Double Dim i As Double Dim str As String Dim even As Integer Dim direction As Integer Private Sub Command1_Click() MSComm1.Output = "O" MSComm1.Output = Chr(32) MSComm1.Output = "1" MSComm1.Output = Chr(13) End Sub Private Sub Command2_Click() MSComm1.Output = "O" MSComm1.Output = Chr(32) MSComm1.Output = "0" MSComm1.Output = Chr(13) End Sub Private Sub Check1_Click() MSComm1.Output = "R" MSComm1.Output = Chr(32) If (direction = 1) Then 'Neu dang quay theo chieu thuan direction = MSComm1.Output = "1" MSComm1.Output = Chr(13) Else direction = MSComm1.Output = "0" MSComm1.Output = Chr(13) End If Trang - 64 End Sub Private Sub Command3_Click() If MSComm1.PortOpen Then MSComm1.PortOpen = False End If End End Sub Private Sub Command4_Click() MyChart.Series(0).Clear i=1 End Sub Private Sub Command5_Click() frmsetting.Show End Sub Private Sub Exit_Click() End End Sub Private Sub Form_Load() MSComm1.Settings = "115200,N,8,1" MSComm1.CommPort = MSComm1.PortOpen = True ' frmsetting.Show str = "00" i=1 direction = End Sub Private Sub KP_Click() End Sub Private Sub MSComm1_OnComm() If (MSComm1.CommEvent = comEvReceive) Then ' Text2.Text = MSComm1.Input str = MSComm1.Input mang(i) = Val(str) MyChart.Series(0).AddXY i, mang(i), "", vbRed Label8.Caption = str 'Text1.Text = str Trang - 65 'mang(i) = Asc(MSComm1.Input) 'MyChart.Series(0).AddXY i, mang(i), "", vbRed 'MyChart.Series(0).AddXY i, Val(Text6.Text), "", vbGreen i=i+1 End If End Sub Private Sub Setting_Click() frmsetting.Show End Sub Private Sub Slider1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim kp As String kp = Slider1.Value MSComm1.Output = "P" MSComm1.Output = Chr(32) MSComm1.Output = kp MSComm1.Output = Chr(13) End Sub Private Sub Slider1_Scroll() Text3.Text = Slider1.Value End Sub Private Sub Slider2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim ki As String ki = Slider2.Value MSComm1.Output = "I" MSComm1.Output = Chr(32) MSComm1.Output = ki MSComm1.Output = Chr(13) End Sub Private Sub Slider2_Scroll() Text4.Text = Slider2.Value End Sub Private Sub Slider3_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim kd As String Trang - 66 kd = Slider3.Value MSComm1.Output = "D" MSComm1.Output = Chr(32) MSComm1.Output = kd MSComm1.Output = Chr(13) End Sub Private Sub Slider3_Scroll() Text5.Text = Slider3.Value End Sub Private Sub Slider4_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim speed As String speed = Slider4.Value MSComm1.Output = "S" MSComm1.Output = Chr(32) MSComm1.Output = speed MSComm1.Output = Chr(13) 'MSComm1.Output = Chr((Val(speed) \ 6) \ 256) ' MSComm1.Output = Chr((Val(speed) \ 6) Mod 256) '