3.2.3.1 Mạch đảo chiều động cơ
Hình 3.3 Phần mạch đảo chiều động cơ.
Để điều khiển chiều quay của động cơ điện 1 chiều, ta có thể dùng mạch cầu H, hoặc có thể dùng Relay. Vì dùng relay chi phí thấp hơn nên trong đồ án này chúng tôi đã lựa chọn giải pháp này. Nguyên lý của mạch này như sau:
Khi chân dir ở mức thấp, BJT Q2 tắt, tiếp điểm 3 nối đến 4, tiếp điểm 6 nối đến 8, khi đó Vcc nối tới chân 2 của CON2, cực D của FET nối tới chân 2 của CON2 động cơ chạy theo chiều thuận (chiều quy ước). Khi có tín hiệu kích 5V tại chân dir, BJT Q2 dẫn, tiếp điểm 3 nối đến 5, tiếp điểm 6 nối đến 7, lúc đó nguồn cung cấp cho động cơ đảo ngược so với trường hợp trên, do đó động cơ quay theo chiều ngược lại.
Ta tính chọn với dòng cực đại qua động cơ là 5A, Chọn Relay 10A.
Công suất của relay 530mW, -> dòng qua relay 0.530/12 = 44mA. Công suất tổn hao trên BJT Q2 chủ yếu là công suất dẫn: P = Vcesat xIcsat = 0.25x44mA = 11mW.
Vậy chọn BJT 2SC1815 có: Ic = 150mA, Vce = 50V, công suất 400mW, hfemin = 70.
Chương 3: Thiết kế và thi công phần cứng
Chọn dòng qua R13 khoảng 0.7mA, => R13 = 0.7V/0.7mA = 1k. Chọn dòng Ib ~ 1.5Ibmin => chọn Ib = 1mA
Dòng qua R11 = Ib + IR13 = 1.7mA
R11 = (5V-0.7V)/1.7 = 2.53k =>chọn R11 = 2k2.
3.2.3.2 Tính toán cho FET
Tính dòng tối đa qua động cơ:
Ta có phương trình của động cơ ở trạng thái xác lập:
a m L e T B K I T = + ω = φ φ ω m L a K B T I = +
Ứng với tải cụ thể ta có thể xác định được TL từ đó ta có thể xác định được dòng Ia cực đại qua động cơ.
Giả sử ta tính với dòng tối đa qua động cơ là 5 A
Ta phải chọn MOSFET có VDS >2Vđộng cơ, dòng >1.5 -> 2lần Imax, khoảng10A, công suất tiêu tốn trên MOSFET tùy thuộc vào từng loại FET, ở đây ta chọn các thông số của IRF540 để tham khảo sau đó kiểm tra lại công suất có đảm bảo hay không..
Công suất tiêu tán trên MOSFET bao gồm 2 thành phần: công suất tiêu tán khi FET dẫn và công suất chuyển mạch:
Ptt = Pd + Psw
Công suất tiêu tán khi FET dẫn được tính theo công thức:
T T R I P on DSon d = 2. .
Theo datasheet của IRF540, RDsonMax = 2.5Ω (Tj=150oC), Imax = 2.5 A,
T Ton
max = 1
Pdmax = 52x2.5 = 62.5W
Chương 3: Thiết kế và thi công phần cứng
Hình 3.4 Dạng sóng VDS và VGS khi FET chuyển mạch. Tổn hao trong quá trình chuyển từ off sang on
E1 = cc DS r tr r DS DS DS tr ds ds t dt V I t t V V I dt t i t v . . 2 1 ). .( . ) ( ). ( =∫ − = ∫
Tương tự như trên tổn hao khi từ on sang off:
E2 = cc DS f tf ds ds t i t dt V I t v . . 2 1 . ) ( ). ( == ∫ Psw = Vcc.IDS.(tr tf ).fsw 2 1 +
Chương 3: Thiết kế và thi công phần cứng
Tần số điều xung được sử dụng ở đây là 24khz, trong phần mềm sử dụng 2000 mức điều xung, tuy nhiên, ta chỉ cần mạch đáp ứng 100 mức điều xung (vì thời gian đáp ứng càng nhanh thì giá trị dòng đỉnh nạp cho tụ ngõ vào của FET càng lớn, ta không muốn dòng đỉnh này quá lớn). Thời gian của 1 mức điều xung lúc này là: 1/(24.1000.100) = 0.417µs =417ns. Tổng thời gian nạp và xả tụ ngõ vào tại cực G phải nhỏ hơn giá trị này. Ta chọn tr + tf =200ns
Psw = 30.5. 200.10-9.24.103 = 720 mW. Trong đó fsw là tần số chuyển mạch. Công suất tổng cộng lớn nhất: 63.2W
Vậy MOSFET IRF540 có các thông số: VDSS = 100V, IDS = 33A, Pmax = 130W thỏa mãn các yêu cầu đề ra.
3.2.3.3 Tính toán mạch lái cho FET
Sơ đồ mạch Driver:
Hình 3.5 Mạch lái cho FET.
Mạch lái được mắc theo kiểu totem-pole gồm 2 BJT 2SD414 và 2SB548 để đảm bảo tần số chuyển mạch nhanh cho FET.
Chương 3: Thiết kế và thi công phần cứng
Ta tính dựa vào điện tích cần nạp cho tụ CGS. PDRI = V.QG.fsw = 12.72.10-9.24.3 = 21mW.
QG :tổng điện tích nạp hoặc xả cho cực G. Theo datasheet, QG = 72nC Mà: tx = QG/IG => IG = QG/tx
Tx thời gian nạp hoặc xả tụ ngõ vào, 2.tx =200ns=(tr + tf) IG > 72.2/200 = 720mA
Chọn BJT Q3,Q4: có Vce > 2Vcc, P>2.21mW. Chọn BJT 2SD414 và 2SB548.
Tính R14: R14 = (24V-0.7V).60/720mA = 1.94k -> chọn 1k8 Tính chọn Q6:
Dạng sóng chuyển mạch của BJT có dạng như sau:
Hình 3.6 Dạng sóng chuyển mạch trên Q6.
Công suất tổn hao trong BJT ở chế độ chuyển mạch gồm công suất tổn hao khi dẫn bão hòa và công suất tổn hao chuyển mạch.
P = Psw + Pdẫn Ton es.Icsat. T Pon Vc= T T I V P on CEs CEs dan = (1)
Dựa vào đồ thị ta thấy : trong quá trình chuyển đổi trạng thái làm việc, dòng điện cực góp ic(t) và thời gian t có quan hệ tuyến tính :
Chương 3: Thiết kế và thi công phần cứng
Ic = Kt Với K=Icsat-Icoff
Tsw
Icoff có thể bỏ qua => K=Icsat
Tsw
=> ic=Icsat
Tsw t
Trong quá trình của mỗi lần chuyển đổi trạng thái làm việc, năng lượng tiêu hao của BJT có thể tính theo công thức :
Tsw Tsw 0 0 Icsat w.Icsat.Vcc E= icVc tVc Tsw 2 Ts cdt= cdt= ∫ ∫
Trong mỗi chu kỳ, BJT chuyển đổi trạng thái làm việc 2 lần, trong 2 lần chyển đổi đó, năng lượng tiêu hao là như nhau. Như vậy năng lượng tiêu hao trong quá trình chuyển mạch là :
Esw= 2E =Tsw.Icsat.Vcc Công suất tiêu tán trong quá trình chuyển mạch :
Psw=Icsat.Vcc. w T Ts (2) Từ (1) và (2) ta có : Ptt= es.Icsat.Ton T Vc + Icsat.Vcc. w T Ts
Yêu cầu thời gian chuyển mạch Tsw của BJT phải nhỏ hơn thời gian chuyển mạch của khóa điện tử.
Thời gian tsw của BJT thông thường khoảng vài chục đến vài trăm ns, ở đây ta lấy tsw=100ns.
Với BJT Q5, icsat = Vcc/R14 = 12/1k8= 6.7mA.
Ton/T max =1, 1/T = f =24kHz thay vào công thức trên ta được : Pttmax = 0.2x6.7 + 6.7x12x100x10-9x24x10-3 = 1.36mW.
Chọn BJT Q6 có Vce > 12x2 =24V, Ic>6.7x2, Ptt>1.36mW, chọn BJT Q6 là C1815.
Chương 3: Thiết kế và thi công phần cứng Chọn ibQ6 = 0.2mA.
R15 có tác dụng giảm thời gian tắt của BJT. Chọn dòng qua R15 khoảng 0.7mA.
R15 = Vbe/Ir15 = 0.7V/0.7mA =1k.
R6 = (5V-0.7V)/(0.7mA+0.2mA) = 4k78. Chọn R6 = 4k7.
3.3.4 Layout và thi công mạch
Layout và sơ đồ nguyên lý được thiết kế bằng phần mềm Orcad của hãng Cadence. Mạch in được thiết kế như hình 3.7. Mạch in được thi công bằng phương pháp ủi mạch lên board đồng và hàn gắn các linh kiện theo sơ đồ nguyên lý. Hình ảnh mạch hoàn chỉnh được thể hiện trong hình 3.8.
Chương 3: Thiết kế và thi công phần cứng
Hình 3.8 Mạch điều khiển sau khi thi công xong.
1.9. Kết chương
Trong chương này, phần cứng đã được mô tả, thiết kế và tính toán một cách chi tiết. Các IC được sử dụng là PIC16F887, LM324, MAX232, LCD16x2. Ngoài ra còn có các linh kiện khác như tụ, điện trở, relay, nút nhấn, cổng DB9, BJT, FET, cầu diode và các connector.
Chương 4: Thiết kế phần mềm
Chương 4 : Thiết kế phần mềm
1.10. Mở chương
Việc thiết kế phần mềm là công đoạn khó nhất của đồ án này bởi hệ thống yêu cầu xử lý phức tạp. Do đó, em quyết định chọn ngôn ngữ bậc cao C để thiết kế phần mềm. Phần mềm được biên soạn và biên dịch trên phần mềm CCS. Phần mềm được chia thành hai phần:
- Thiết kế phần mềm cho vi điều khiển PIC16F887.
- Thiết kế phần mềm trên máy vi tính giao tiếp với mạch điều khiển. Phần mềm này được viết bằng Visual Basic.
Cuối chương sẽ là phần nhận xét về đề tài và định hướng phát triển đề tài.
1.11. Nội dung
4.2.1 Phần mềm cho vi điều khiển PIC16F887
Phần này trình bày những thuật toán chính của chương trình nạp cho PIC16F887 gồm những lưu đồ thuật toán sau:
- Lưu đồ thuật toán tổng quát. - Lưu đồ chương trình xử lý phím.
- Lưu đồ chương trình đo tốc độ động cơ. - Lưu đồ chương trình ngắt nhận UART.
4.2.1.1 Thuật toán chương trình chính
Thuật toán chương trình chính được thể hiện trong hình 4.1 (trang 33).
Chương trình khai báo các biến toàn cục là Ki, Kp, Kd, Sp. Các biến Ki, Kp, Kd đóng vai trò là các tham số của bộ xử lý PID. Biến Sp là biến chứa vận tốc thực của động cơ đo được nhờ đếm xung encoder.
Sp: vận tốc của động cơ. Ki: hệ số tích phân. Kp: hệ số tuyến tính. Kd: hệ số vi phân.
Tiếp theo ta khởi tạo các thiết bị ngoại vi cho PIC16F887: - Cài đặt bộ timer2 hoạt động ở chế độ PWM.
Chương 4: Thiết kế phần mềm
- Cấu hình chân RB1 hoạt động ở chế độ PWM.
- Thiết lập thanh ghi Trisa là 0xFF. Với thiết lập này thì porta sẽ được cấu hình là port nhập. Porta được sử dụng để kết nối với các phím.
- Thiết lập thanh ghi Trisd là 0. Với thiết lập này thì portd là port xuất. Portd được sử dụng để kết nối với 8 chân dữ liệu của LCD.
- Thiết lập thanh ghi Trise là 0. Với thiết lập này thì porte là port xuất. Porte được sử dụng để kết nối với 3 chân điều khiển của LCD.
- Cài đặt cho bộ UART hoạt động ở tốc độ Baud 9600kbits/s.
- Bộ UART được sử dụng để giao tiếp nối tiếp không đồng bộ với máy tính, cho phép mạch điều khiển truyền dữ liệu lên máy tính, và nhận dữ liệu từ máy tính. Ở đây, bộ UART truyền hoạt động ở chế độ thăm dò. Còn bộ UART nhận hoạt động ở chế độ ngắt.
- Cho phép ngắt timer1. Bộ timer1 kết hợp với ngắt ngoài trên chân RB0 được sử dụng để đo tốc độ động cơ.
- Cho phép ngắt sườn lên trên chân RB0, chân RB0 kết nối với chân tín hiệu của encoder. Khi có sườn lên tại chân RB0, ngắt RB0 sẽ xảy ra. Sau khi khởi tạo cho các thiết bị ngoại vi, chương trình sẽ thực hiện vòng lặp vô hạn. Bắt đầu vòng lặp, chương trình gọi hàm quét phím. Thuật toán nhận phím của hàm quét phím sẽ kiểm tra phím nhấn, loại bỏ quá trình rung của phím. Tiếp theo chương trình sẽ kiểm tra có phím nhấn hay không. Nếu không có, chương trình sẽ quay trở về đầu vòng lặp. Nếu có, chương trình sẽ gọi hàm xử lý phím nhấn. Sau đó quay trở về đầu vòng lặp.
Như vậy, chương trình chính sẽ khởi tạo cho các thiết bị ngoại vi, sau đó kiểm tra phím nhấn. Khi xảy ra các ngắt, chương trình sẽ thực hiện chương trình phục vụ ngắt của ngắt tương ứng.
Chương trình phục vụ ngắt timer1 được phân tích trong mục 4.2.1.3. Chương trình phục vụ ngắt nhận UART được phân tích trong mục 4.2.1.4. Chương trình phục vụ ngắt RB0 chỉ làm một nhiệm vụ là tăng biến đếm xung encoder. Chương trình này sẽ không được phân tích trong đề tài.
Chương 4: Thiết kế phần mềm
Do tính phổ biến, các thuật toán của các hàm giao tiếp LCD sẽ không được phân tích trong đề tài.
Hình 4.1 Lưu đồ thuật toán chương trình chính. Bắt đầu
Khai báo các biến toàn cục Kp, Ki, Kd, SP
Cài đặt Timer2 ở chế độ PWM Cài đặt UART tốc độ Baud 9600kbits/s Chọn chân RB1 hoạt động ở chế độ PWM
Thiết lập thanh ghi TRISA là 0xFF.(porta là port nhập, kết nối với phím) Thiết lập thanh ghi TRISD là 0 (portd là port xuất, kết nối với chân dữ liệu LCD) Thiết lập thanh ghi TRISE là 0(porte là port xuất, kết nối với chân điều khiển LCD)
Cho phép ngắt nhận UART
Cho phép ngắt timer1. Timer1 được dùng để đo tốc độ. Cho phép ngắt ngoài trên chân RB0
Có phím nhấn? Gọi hàm quét phím
Gọi hàm xử lý phím nhấn Đúng
Chương 4: Thiết kế phần mềm
4.2.1.2 Thuật toán chương trình xử lý phím
Thuật toán hàm xử lý phím được thể hiện trong hình 4.2
Sau khi hàm quét phím xác nhận có phím nhấn, hàm xử lý phím sẽ gán giá trị porta cho biến phim. Biến phim được so sánh với các giá trị để xác định phím nào được nhấn.
Chương trình định nghĩa các macro cho được sử dụng cho các phím như sau: #define INC 0x3E //Phím tăng (increase)
#define DEC 0x3D //Phím giảm (decrease)
#define SHIFT 0x3B //Phím dịch thông số cài đặt (increase) #define OK 0x37 //Phím chấp nhận giá trị cài đặt
#define CANCEL 0x2F //Phím không chấp nhận giá trị cài đặt #define ON_OFF 0x1F //Phím tắt mở động cơ
#define INV_DIR 0x3C //Phím đảo chiều, kết hợp nhấn cả hai //phím INC và DEC cùng lúc.
Chương trình sẽ tùy vào phím nào nhấn mà xử lý các tác vụ tương ứng, sau đó kết thúc chương trình.
Với phím OK: chương trình sẽ gán giá trị vừa nhập cho biến tương ứng với thông số đang cài đặt. Sau đó hiển thị ra LCD dòng chữ “setup” ở vị trí 0x80 và thông số vừa cài đặt ở vị trí 0xC8.
Với phím CANCEL: chương trình sẽ Hiển thị ra LCD dòng chữ “setup” ở vị trí 0x80 và “cancel” ở vị trí 0xC8.
Với phím INC: chương trình sẽ tăng biến nhap_value lên một đơn vị. Biến này chứa giá trị đang cài đặt.
Với phím DEC: chương trình sẽ giảm biến nhap_value một đơn vị. Với phím ON_OFF: nếu động cơ đang mởtắt động cơ và ngược lại.
Với phím SHIFT: chương trình sẽ dịch chuyển thông số cài đặt theo vòng sau: Kp Ki Kd Sp. Sau đó gán thông số muốn thay đổi cho biến nhap_value .
Chương 4: Thiết kế phần mềm
Với phím INV_DIR: chương trình sẽ đảo chân RB3. Sau đó hiển thị ra LCD dòng chữ “INV_DIR” ở vị trí 0xC8.
Chương 4: Thiết kế phần mềm
Hình 4.2 Lưu đồ thuật toán chương trình xử lý phím. Bắt đầu
Gán giá trị porta cho biến phim
Phím OK?
Gán giá trị vừa nhập cho biến tương ứng với thông số đang
cài đặt.. Hiển thị ra LCD dòng chữ “setup” ở vị trí 0x80 và thông số vừa cài đặt ở vị trí 0xC8. Phím Cancel? Hiển thị ra LCD dòng chữ “setup” ở vị trí 0x80 và “cancel” ở vị trí 0xC8 Phím INC?
Tăng biến nhap_value lên một đơn vị Phím
DEC?
Giảm biến nhap_value đi một đơn vị Phím ON/OFF? Động cơ đang mở? tắt PWM để dừng động cơ Mở PWM để bật động cơ Phím Shift?
Dịch chuyển thông số cài đặt theo vòng sau: Kp,
Ki, Kd, Sp.
Gán thông số muốn thay đổi cho biến nhap_value Phím INV? Đảo chân RB3. Hiển thị ra LCD dòng chữ “INV_DIR” ở vị trí 0xC8. Kết thúc Đúng Sai Đúng Đúng Đúng Đúng Đúng Đúng Sai Sai Sai Sai Sai Sai Đúng Sai
Chương 4: Thiết kế phần mềm
4.2.1.3 Thuật toán chương trình đo tốc độ động cơ
Chương trình đo tốc độ động cơ được đặt trong hàm phục vụ ngắt timer1. Thuật toán chương trình phục vụ ngắt timer1 được thể hiện trong hình 4.3. Timer1 được cài đặt tràn sau mỗi 2.5ms. Như vậy chương trình phục vụ ngắt timer1 được thực thi sau mỗi 2.5ms. Nhiệm vụ chính của hàm này là tính tốc độ hiện tại của động cơ rồi so sánh với tốc độ cài đặt, tính toán độ rộng xung theo thuật toán PID sau đó cập nhật độ rộng xung vừa tính cho bộ PWM.
Ban đầu, hàm sẽ dừng bộ timer1 và không cho phép ngắt trên chân RB0. Gán biến pulse_count cho biến Sp, biến pulse_count được dùng để đếm số xung từ encoder đưa về chân RB0 trong khoảng thời gian 2.5ms. Biến này được tăng lên một đơn vị trong chương trình phục vụ ngắt chân RB0. Sau khi gán, biến