Thiết kế mạch điều phần cứng có thể thực hiện ở nhiều phương pháp khác nhau tùy thuộc vào yêu cầu của đề tài, ở đề tài “ Thiết kế mạch điều khiển tốc độ động cơ DC, đo và hiển thị tốc độ hiển thị lên LCD “, chúng em xác định được các linh kiện phần cứng cần có trong mạch và mỗi chi tiết phần cứng đều phải đáp ứng yêu cầu bài toán : Nguồn cung cấp : Mạch điều khiển cần có một nguồn cung cấp điện ổn định để cung cấp năng lượng cho động cơ và các linh kiện điện tử khác ở trong mạch, đặc biệt là bộ xử lý trung tâm. Sử dụng bộ nguồn hạ áp ACDC phù hợp cho động cơ DC. Bộ xử lý trung tâm : Đóng vai trò quan trọng nhất trong mạch. Bộ xử lý trung tâm sử dụng những vi điều khiển có thể thực hiện được những thuật toán điều khiển tốc độ, đo tốc độ động cơ và đảm bảo sự tương thích giữa các linh kiện trong mạch. Bộ công suất : Cần có một bộ gia tăng công suất bởi vì đầu ra của bộ xử lý trung tâm không thể trực tiếp điều khiển động cơ do dòng điện và điện áp không đủ đáp ứng. Bộ công suất sử dụng các linh kiện điện tử liên quan đến mạch khuếch đại công suất để cung cấp lượng điện năng phù hợp cho động cơ hoạt động. Phần mềm Thiết kế phần mềm, xây dựng thuật toán điều khiển tốc động động cơ và đo tốc độ động cơ, mang tính tương đối. Ứng dụng lập trình C và các phần mềm chuyên dụng để tạo ra một chương trình hoàn thiện với đầy đủ các yêu cầu của bài toán đặt ra : Điều khiển tốc độ : Chương trình điều khiển tốc độ động cơ DC sử dụng thuật toán phù hợp như điều khiển PWM ( Pulse Width Modulation) hoặc các phương pháp khác. Đo tốc độ và hiển thị : Ứng dụng các công thức liên quan đến việc điều khiển tốc độ động cơ khi đã được biết một vài thông số. Tiến hành gửi dữ liệu lên màn hình hiển thị các thông số liên quan đến tốc độ, tần số và chu kỳ xung. Đọc giá trị điện áp : Sử dụng cấu trúc phần cứng từ đó cấu hình các giá trị, các thông số phù hợp để từ đó ứng dụng vào điều khiển tốc độ động cơ. Các thành phần của mạch điện Bộ điều khiển tốc độ động cơ một chiều, đo và hiển thị tốc độ lên màn hình LCD bao gồm các khối chức năng, các thành phần cơ bản như mạch điều khiển , mạch nguồn, mạch hiển thì và mạch công suất. Động cơ DC và cảm biến xác định tốc độ và chiều quay của động cơ
CƠ SỞ LÝ THUYẾT
Tổng quan về vi điều khiển PIC16F877A
Hình 2.1 Vi điều khiển PIC16F877A
PIC16F877A là một Vi điều khiển PIC 40 chân và được sử dụng hầu hết trong các dự án và ứng dụng lập trình nhúng Với thiết kế tích hợp 5 cổng vào/ra bắt đầu từ cổng A đến cổng E
PIC16F877A có ba bộ định thời trong đó có 2 bộ định thời 8 bit và 1 bộ định thời là
16 Bit Hỗ trợ nhiều giao thức truyền thông như giao thức truyền thông nối tiếp, giao thức truyền thông song song
PIC16F877A hỗ trợ cả ngắt chân phần cứng và ngắt bộ định thời.
- Thông số kỹ thuật PIC16F877A
Tần số hoạt động tối đa: 20 MHz
Bộ nhớ chương trình (Flash): 14 KB
Số chân ngõ vào tín hiệu Analog (ADC): 8
Độ phân giải ADC: 10 bit
Số ngoại vi: 5 Timer/Counter, 1 Capture/Compare/PWM (CCP), 1 USART, 1 MSSP (I2C/SPI), 1 EEPROM
Dòng tiêu thụ tối đa: 75 mA
- Sơ đồ khối của vi điều khiển PIC16F877A :
Khối ALU – Arithmetic Logic Unit
Khối bộ nhớ chứa chương trình – Flash Program Memory
Khối bộ nhớ chứa dữ liệu EEPROM – Data EPROM
Khối bộ nhớ thanh ghi RAM -RAM file resistor.
Khối giải mã lệnh và điều khiển – Instruction Decode Control
Khối thanh ghi đặc biệt
Khối giao tiếp nối tiếp
- Sơ đồ chân của vi điều khiển PIC16F877A
Hình 2.2 Sơ đồ chân của PIC16F877A
Cấu hình Timer trong PIC16F877A
- PIC16F877A có tất cả 3 timer : timer0 (8 bit), timer1 (16 bit) và timer2 (8 bit).
2.2.1 Timer 0 a Là bộ định thời hoặc bộ đếm có những ưu điểm sau:
8 bit cho bộ định thời hoặc bộ đếm.
Có khả năng đọc và viết.
Có thể dùng đồng bên trong hoặc bên ngoài.
Có thể chọn cạnh xung của xung đồng hồ.
Có thể chọn hệ số chia đầu vào (lập trình bằng phần mền).
Ngắt tràn. b Hoạt động của Timer 0:
Timer 0 có thể hoạt động như một bộ định thời hoặc một bộ đếm.Việc chọn bộ định thời hoặc bộ đếm có thể được xác lập bằng việc xoá hoặc đặt bít TOCS của thanh ghi OPTION_REG
Nếu dùng hệ số chia xung đầu vào thì xoá bit PSA của thanh ghi OPTION_REG
Trong chế độ bộ định thời được lựa chọn bởi việc xoá bit T0CS Nó sẽ được tăng giá trị sau một chu kỳ lệnh nếu không chọn hệ số chia xung đầu vào.Và giá trị của nó được viết tới thanh ghi TMR0.
Khi dùng xung clock bên ngoài cho bộ định thời Timer0 và không dùng hệ số chia clock đầu vào Timer0 thì phải đáp ứng các điều kiện cần thiết để có thể hoạt động đó là phải bảo đảm xung clock bên ngoài có thể đồng bộ với xung clock bên trong (TOSC).
Hệ số chia dùng cho Timer 0 hoặc bộ WDT Các hệ số nay không có khả năng đọc và khả năng viết Để chọn hệ số chia xung cho bộ tiền định của Timer0 hoặc cho bộ WDT ta tiến hành xoá hoặc đặt bít PSA của thanh ghi OPTION_REG
Những bít PS2, PS1, PS0 của thanh ghi OPTION_REG dùng để xác lập các hệ số chia.
Bộ tiền định có giá trị 1:2 chẳng hạn, có nghĩa là : bình thường không sử dụng bộ tiền định của Timer0 (đồng nghĩa với tiền định tỉ lệ 1:1) thì cứ khi có tác động của 1 xung clock thì timer0 sẽ tăng thêm một đơn vị Nếu sử dụng bộ tiền định 1:4 thì phải mất 4 xung clock thì timer0 mới tăng thêm một đơn vị Vô hình chung, giá trị của timer0 (8 bit) lúc này không còn là 255 nữa mà là 255*420. c Ngắt của bộ Timer0
- Ngắt của bộ Timer 0 được phát sinh ra khi thanh ghi TMR0 bị trμn tức từ FFh quay về 00h.Khi đó bít T0IF của thanh ghi INTCON sẽ được đặt Bít nμy phải được xóa bằng phần mềm nếu cho phép ngắt bit T0IE của thanh ghi INTCON được set.Timer0 bị dừng hoạt ở chế độ SLEEP ngắt Timer 0 không đánh thức bộ xử lý ở chế độ SLEEP. d Các thanh ghi liên quan đến Timer0 bao gồm:
- Thanh ghi OPTION_REG : điều khiển hoạt động của Timer0
Bit 5 TOCS lựa chọn nguồn clock
1=Clock ngoại từ chân T0CKI 0=Clock trong Focs/4
Bit 4 T0SE bit lựa chon sườn xung clock
1=Timer 0 tăng khi chân T0CKI tử cao xuống thấp(sườn xuống) 0=Timer 0 tăng khi chân T0CKI tử thấp lên cao(sườn xuống)
Bit 3 PSA bit gán bộ chia xung đầu vào
1=gán bộ chia Prescaler cho WDT 0=gán bộ chia Prescaler cho Timer 0
Bit 2:0 PS2:PS1 lựa chọn hệ số chia hệ số xung theo bảng sau:
Hình 2.3 Cấu trúc thanh ghi điều khiển hoạt động của Timer0
- Thanh ghi TMR0 đại chỉ 01h và 101h : chứa giá trị của bộ định thời Timer0
- Thanh ghi INTCON : cho phép ngắt hoạt động
Thanh ghi chứa các bit điều khiển và các bít cờ hiệu khi timer0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrupt_on_change tại các chân của PORTB.
Bit 7 GIE Global Interrupt Enable bit
GIE = 1 cho phép tất cả các ngắt.
GIE = 0 không cho phép tất cả các ngắt.
Bit 6 PEIE Pheripheral Interrupt Enable bit
PEIE = 1 cho phép tất cả các ngắt ngoại vi.
PEIE = 0 không cho phép tất cả các ngắt ngoại vi.
Bit 5 TMR0IE Timer0 Overflow Interrupt Enable bit
TMR0IE = 1 cho phép ngắt Timer0.
TMR0IE = 0 không cho phép ngắt Timer0.
Hình 2.4 Cấu trúc thanh ghi INTCON cho phép ngắt Timer0 hoạt động
Bit 4 RBIE RB0/INT External Interrupt Enable bit
RBIE = 1 cho phép tất cả các ngắt ngoại vi RB0/INT RBIE = 0 không cho phép tất cả các ngắt ngoại vi RB0/INT
Bit 3 RBIE RB Port change Interrupt Enable bit
RBIE = 1 cho phép ngắt RB Port change RBIE = 0 không cho phép ngắt RB Port change
Bit 2 TMR0IF Timer0 Interrupt Flag bit
TMR0IF = 1 thanh ghi TMR0 bị tràn (phải xóa cờ hiệu bằng chương trình). TMR0IF = 0 thanh ghi TMR0 chưa bị tràn.
Bit 1 INTF BR0/INT External Interrupt Flag bit
INTF = 1 ngắt RB0/INT xảy ra (phải xóa cờ hiệu bằng chương trình).
INTF = 0 ngaột RB0/INT chửa xaỷy ra.
Bit 0 RBIF RB Port Change Interrupt Flag bit
RBIF = 1 ít nhất có một chân RB7:RB4 có sự thay đổi trạng thái Bít này phải được xóa bằng chương trình sau khi đã kiểm tra lại các giá trị chân tại PORTB. RBIF = 0 không có sự thay đổi trạng thái các chân RB7:RB4.
Là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanh ghi 8 bit TMR1H:TMR1L Cờ ngắt của Timer1 là bit TMR1IF, bit điều khiển của Timer1 là TRM1IE.Cặp thanh ghi của TMR1 sẽ tăng từ 0000h lên đến FFFFh rồi sau đó tràn về 0000h. Nếu ngắt được cho phép, nó sẽ xảy ra khi khi giá trị của TMR1 tràn từ FFFFh rồi về 0000h, lúc này TMR1IF sẽ bật lên. b Timer1 có 3 chế độ hoạt động :
Chế độ hoạt động định thời đồng bộ: Chế độ được lựa chọn bởi bit TMR1CS Trong chế độ này xung cấp cho Timer1 là Fosc/4, bit T1SYNC không có tác dụng.
Chế độ đếm đồng bộ: trong chế độ này, giá trị của timer1 sẽ tăng khi có xung cạnh lên vào chân T1OSI/RC1 Xung clock ngoại sẽ được đồng bộ với xung clock nội, hoạt động đồng bộ được thực hiện ngay sau bộ tiền định tỉ lệ xung (prescaler).
Chế độ đếm bất đồng bộ:chế độ này xảy ra khi bit T1SYNC được set Bộ định thời sẽ tiếp tục đếm trong suốt quá trình ngủ (Sleep) của vi điều khiển và có khả năng tạo một ngắt khi bộ định thời tràn và làm cho vi điều khiển thoát khỏi trạng thái ngủ. c Các thanh ghi liên quan đến Timer1:
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (2 bit GIE và PEIE). PIR1 (địa chỉ 0Ch): chứa cờ ngắt Timer1 (TMR1IF).
PIE1 (địa chỉ 8Ch): cho phép ngắt Timer1 (TMR1IE).
Ba thanh ghi vừa nêu trên sẽ được trình bày ở phần chương trình ngăt của PIC
TMR1L (địa chỉ 0Eh): chứa giá trị 8 bít thấp của bộ đếm Timer1.
TMR1H (địa chỉ 0Eh): chứa giá trị 8 bít cao của bộ đếm Timer1.
Hai thanh ghi TMR1L và TMR1H là 2 thanh ghi chứa dữ liệu 16 bit (lần lượt chứa 4 bit thấp và 4 bit cao) của bộ đếm Timer1
T1CON (địa chỉ 10h): xác lập các thông số chi Timer
Hình 2.5: Cấu trúc thanh ghi T1CON điều khiển hoạt động của Timer1
- Bit 5,4 T1CKPS1: T1CKPS0 lựa chọn hệ số chia xung vào.
- Bit 3 T1OSCEN bit điều khiển bộ dao động Timer1
1= Bộ dao động hoạt động 0= Bộ dao động không hoạt động
- Bit 2 bit điều khiển xung clock ngoμi đồng bộ
- Bit2=0 có đồng clock ngoai
1: không đồng bộ clock ngoài Khi TMR1CS=0 bit này không có tác dụng
- Bit 1 TMR1CS bit lựa chọn nguồn xung clock vào
TMR1CS=1 clock từ chân RC0/T1OSO/T1CKI (sườn lên) TMR1CS=0 clock trong Fosc/4
- Bit 0 bit bật tắt Timer
Là bộ định thời 8 bit bao gồm một bộ tiền định (prescaler), một bộ hậu định Postscaler và một thanh ghi chu kỳ viết tắt là PR2 Việc kết hợp timer2 với 2 bộ định tỉ lệ cho phép nó hoạt
11 1:8 động như một bộ đinh thời 16 bit Module timer2 cung cấp thời gian hoạt động cho chế độ điều biến xung PWM nếu module CCP được chọn. b Hoạt động của bộ Timer2
Timer2 được dùng chủ yếu ở phần điều chế xung của bộ CCP, thanh ghi TMR2 có khả năng đọc và viết, nó có thể xóa bằng việc reset lại thiết bị Đầu vào của xung có thể chọn các tỷ số sau; 1:1; 1:4 hoặc 1:16 việc lựa chọn các tỷ số này có thể điều khiển bằng các bit sau T2CKPS1 và bit T2CKPS0.
Ngắt ngoài (interrupt)
PIC16F877A có đến 14 nguồn tạo ra hoạt động ngắt được điều khiển bởi thanh ghi INTCON (bit GIE) Bên cạnh đó mỗi ngắt còn có một bit điều khiển và cờ ngắt riêng Các cờ ngắt vẫn được set bình thường khi thỏa mãn điều kiện ngắt xảy ra bất chấp trạng thái của bit GIE, tuy nhiên hoạt động ngắt vẫn phụ thuôc vào bit GIE và các bit điều khiển khác Bit điều khiển ngắt RB0/INT và TMR0 nằm trong thanh ghi INTCON, thanh ghi này còn chứa bit cho phép các ngắt ngoại vi PEIE Bit điều khiển các ngắt nằm trong thanh ghi PIE1 và PIE2.Cờ ngắt của các ngắt nằm trong thanh ghi PIR1 và PIR2
Trong một thời điểm chỉ có một chương trì nh ngắt được thực thi, chương trình ngắt được kết thúc bằng lệnh RETFIE Khi chương trình ngắt được thực thi, bit GIE tự động được xóa, địa chỉ lệnh tiếp theo của chương trình chính được cất vào trong bộ nhớ Stack và bộ đếm chương trình sẽ chỉ đến địa chỉ 0004h Lệnh RETFIE được dùng để thoát khỏi chương trình ngắt hoạt động trở lại Các cờ hiệu được dùng để kiểm tra ngắt nào đang xảy ra và phải được xóa bằng chương trình trước khi cho phép ngắt tiếp tục hoạt động trở lại để ta có thể phát hiện được thời điểm tiếp theo mà ngắt xảy ra. Đối với các ngắt ngoại vi như ngắt từ chân INT hay ngắt từ sự thay đổi trạng thái các pin của PORTB (PORTB Interrupt on change), việc xác định ngắt nào xảy ra cần 3 hoặc 4 chu kì lệnh tùy thuộc vào thời điểm xảy ra ngắt.
Cần chú ý là trong quá trình thực thi ngắt, chỉ có giá trị của bộ đếm chương trình được cất vào trong Stack, trong khi một số thanh ghi quan trọng sẽ không được cất và có thể bị thay đổi giá trị trong quá trình thực thi chương trình ngắt.Điều này nên được xử lí bằng chương trình để tránh hiện tượng trên xảy ra.
Các nguồn ngắt của PIC 16F877A:
1) RTCC hoặc TIMER0: ngắt tràn Timer0.
2) RB: ngắt khi có sự thay đổi trạng thái 1 trong các chân từ RB4 đến RB7 của PORTB.
3) EXT: (External Interrupt) ngắt ngoài khi có sự thay đổi trạng thái ở chân RB0 cùa PORTB.
4) AD: ngắt khi bộ chuyển đổi tính hiệu tương tự sang tính hiệu số chuyền đổi hoàn tất 1 tính hiệu.
5) TBE: ngắt khi bộ đệm của cổng RS232 rỗng.
6) RDA: ngắt khi cổng RS232 nhận tính hiệu.
7) TIMER1: ngắt khi timer1 bị tràn.
8) TIMER2: ngắt khi timer2 bị tràn.
9) CCP1; CCP2: ngắt khi bộ capture hoặc bộ Compare (bộ so sánh điện áp) hoạt động; ở kênh 1 hoặc 2.
10) SSP: ngắt khi SPI hoặc I2C hoạt động.
11) PSP: ngắt khi truyền nhận dữ liệu song song.
12) BUSCOL: ngắt khi xung đột đường truyền.
13) EEPROM: ngắt khi ghi xong dữ liệu.
14) COMP: ngắt sau khi thực hiện so sánh tính hiệu.
Với đề tài “Điều khiển tốc độ động cơ DC” chúng em sử dụng hai loại nguồn ngắt là ngắt ngoài khi có sự thay đổi trạng thái ở chân RB0 của PORTB và ngắt tràn Timer1, vì thế chúng em sẽ trình bày cụ thể hơn về nguyên lí hoạt động và các cài đặt của hai loại ngắt này trong phần dưới đây: a Ngắt ngoài (External Interrupt):
Ngắt này dựa trên sự thay đổi trạng thái của pin RB0/INT Cạnh tác động gây ra ngắt có thể là cạnh lên hay cạnh xuống và được điều khiển bởi bit INTEDG (thanh ghi OPTION REG ) Khi có cạnh tác động thích hợp xuất hiện tại pin RB0/INT, cờ ngắt INTF được set bất chấp trạng thái các bit điều khiển GIE và PEIE Ngắt này có khả năng đánh thức vi điều khiển từ chế độ sleep nếu bit cho phép ngắt được set trước khi lệnh SLEEP được thực thi
Thanh ghi OPTION_REG: địa chỉ 81h, 181h
Thanh ghi này cho phép điều khiển chức năng pull-up của các pin trong PORTB, xác lập các tham số về xung tác động, cạnh tác động của ngắt ngoại vi RB0 (External Interrupt) và bộ đếm Timer0
Hình 2.8: Sơ đồ hoạt động ngắt của PIC
Bit 7 PORTB pull-up enable bit
= 1 không cho phép chức năng pull-up của PORTB
= 0 cho phép chức năng pull-up của PORTB
Bit 6 INTEDG Interrupt Edge Select bit
INTEDG = 1 ngắt xảy ra khi cạnh dương chân RB0/INT xuất hiện.
INTEDG = 0 ngắt xảy ra khi cạnh âm chân BR0/INT xuất hiện.
Bit 5 TOCS Timer0 Clock Source select bit
TOSC = 1 clock lấy từ chân RA4/TOCK1.
TOSC = 0 dùng xung clock bên trong (xung clock này bằng với xung clock dùng để thực thi lệnh).
Bit 4 TOSE Timer0 Source Edge Select bit
TOSE = 1 tác động cạnh lên.
TOSE = 0 tác động cạnh xuống.
Bit 3 PSA Prescaler Assignment Select bit
PSA = 1 bộ chia tần số (prescaler) được dùng cho WDT
PSA = 0 bộ chia tần số được dùng cho Timer0
Bit 2:0 PS2:PS0 Prescaler Rate Select bit
Các bit này cho phép thiết lập tỉ số chia tần số của Prescaler.
Cặp thanh ghi TMR1H và TMR1L chứa giá trị đếm của Timer1, chúng tăng từ gía trị 0000h đến gía trị FFFFh đến giá trị này tiếp tục tăng thì timer1 tràn và quay lại giá trị 0000h.Và ngắt xuất hiện khi tràn quá giá trị FFFFh khi này cờ ngắt TMR1IF sẽ được đặt.Ngắt có thể hoạt động hoặc không hoạt động nhờ việc đặt hoặc xóa bít TMR1IE.
Thanh ghi điều khiển Timer1 T1CON:
Hình 2.10 Cấu trúc thanh ghi T1CON
Bit 5,4 T1CKPS1:T1CKPS0 lựa chọn hệ số chia xung vào
T1CKPS1:T1CKPS0 Tỷ lệ chia đầu vào
Bit 3 T1OSCEN bit điều khiển bộ dao động Timer1
1= Bộ dao động hoạt động 0= Bộ dao động không hoạt động
Bit 2 bit điều khiển xung clock ngoài đồng bộ khi TMR1CS=1
Bit2 = 0 có đồng clock ngoài Bit2 = 1 không đồng bộ clock ngoài
Khi TMR1CS=0 bit này không có tác dụng
Bit 1 TMR1CS bit lựa chọn nguồn xung clock vào
TMR1CS=1 clock từ chân RC0/T1OSO/T1CKI (sườn lên) TMR1CS=0 clock trong Fosc/4
Bit 0 bit bật tắt Timer
Phương pháp điều chế xung PWM
Để điều khiển tốc độ động cơ DC người ta có thể dùng nhiều phương pháp khác nhau trong đó có một phương pháp hết sức quan trọng và thông dụng là phương pháp điều chế độ rộng xung kích (PWM).
2.4.1 Điều chế PWM là gì?
Phương pháp điều chế độ rộng xung PWM (Pulse Width Modulation) là phương pháp điều chỉnh điện áp ra tải hay nói cách khác là phương pháp điều chế dựa trên sự thay đổi độ rộng của chuỗi xung kích để điều khiển linh kiện đóng ngắt (SCR hay Transistor) dẫn đến sự thay đổi điện áp ra tải. Đồ thị dạng xung điều chế PWM
2.4.2 Nguyên lí của PWM: Hình 2.11 Đồ thị dạng xung điều chế PWM Đây là phương pháp được thực hiện theo nguyên tắc dóng ngắt nguồn có tải một cách có chu kì theo luật điều chỉnh thời gian đóng ngắt Phần tử thực hiện nhiệm vụ đóng ngắt là các van bán dẫn.
Trong khoảng thời gian 0 – t0 ta cho van Q1 mở toàn bộ điện áp nguồn Ud được đưa ra tải Cũn trong khoảng thời gian từ t0 đến T cho van Q1 khóa, cắt nguồn cung cấp cho tải.Vì vậy với thời gian t0 thay đổi từ 0 cho đến T ta sẽ cung cấp toàn bộ , một phần hay khóa hoàn toàn điện áp cung cấp cho tải.
Công thức tính giá trị trung bình của điện áp ra tải là:
Trong đó Ud: là điện áp trung bình ra tải.
Umax: là điện áp nguồn. t0: là thời gian xung ở sườn dương (van khóa mở)
T: thời gian cả thời gian xung sươn dương và sườn âm.
D = t0/T: hệ số điều chỉnh hay PWM được tính bằng %
Hình 2.12: Sơ đồ nguyên lí dùng PWM điều khiển điện áp tải (trái)
Sơ đồ xung van điều khiển và đầu ra (phải)
Ví dụ: Điện áp nguồn là 12V.
Nếu hệ số điều chỉnh là 20% => Ud = 12.20% = 2.4 V
Nếu hệ số điều chỉnh là 50% => Ud = 12.50% = 6 V
Vì vậy, trong đề tài: “Điều khiển tôc độ động cơ DC” chúng em sử dụng phương pháp điều chế độ rộng xung PWM để thay đổi điện áp DC cấp cho động cơ từ đó thay đổi tốc độ của động cơ DC Đối với PIC16F877A để sử dụng phương pháp này ta có thể sử dụng bộ điều chế độ rộng xung (PWM) tích hợp sẵn bên trong PIC với 2 ngõ ra xung tại hai chân CCP1 (17) và CCP2 (16).Tại các chân này khi hoạt động sẽ xuất chuỗi xung vuông với độ rộng điều chỉnh được dễ dàng.Xung ra này dùng để tạo tín hiệu đóng ngắt Trasistor trong mạch động lực, với độ rộng xác định sẽ tạo ra một điện áp trung bình xác định
2.4.3 Cách thiết lập chế độ PWM cho PIC16F877A
Khi hoạt động ở chế độ PWM (Pulse Width Modulation -khối điều chế độ rộng xung tính hiệu sau khi điều chế sẽ được đưa ra các pin của khối CCP (cần ấn định các pin này là output)) Để sử dụng chức năng điều chế này trước tiên ta cần tiến hành các bước cài đặt sau: Thiết lập thời gian của 1 chu kì của xung điều chế cho PWM (period) bằng cách đưa giá trị thích hợp vào thanh ghi PR2.
Thiết lập độ rộng xung cần điều chế (duty cycle) bằng cách đưa giá trị vào thanh ghi CCPRxL và các bit CCP1CON. Điều khiển các pin của CCP là output bằng cách clear các bit tương ứng trong thanh ghi TRISC.
Thiết lập giá trị bộ chia tần số prescaler của Timer2 và cho phép Timer2 hoạt động bằng cách đưa giá trị thích hợp vào thanh ghi T2CON
Cho phép CCP hoạt động ở chế độ PWM.
Trong đó giá trị 1 chu kì (period) của xung điều chế được tính bằng công thức: Độ rộng cảu xung điều chế (duty cycle) được tính theo công thức:
PWM period = [(PR2) +1]*4*TOSC*(giá trị bộ chia tần số của
PWM duty cycle = (CCPRxL:CCPxCON)*TOSC*(giá trị bộ chia tần số
Khi giá trị thanh ghi PR2 bằng với giá trị thanh ghi TMR2 thì quá trình sau xảy ra:
Thanh ghi TMR2 tự động được xóa
Pin của khối CCP được set
Giá trị thanh ghi CCPR1L (chứa giá trị ấn định độ rộng xung điều chế duty cycle) được đưa vào thanh ghi CCPRxH
Đối tượng điều khiển
2.5.1 Động cơ sử dụng trong đề tài:
Hình 1.3.3 Sơ đồ khối CCP (PWMmode)
Và tham số của PWM
Hình 2.13 Động cơ một chiều kèm encoder Động cơ có gắn một encoder đồng trục với nó dùng để xác định tốc độ và vị trí của động cơ
Các thông số của động cơ như sau:
+ Điện áp DC cấp cho động cơ: 12VDC
+ Tốc độ tối đa 6000 vòng/phút với trục quay motor, 130 vòng / phút với trục giảm tốc.
+ Số xung của encoder 11 xung/vòng, sử dụng encoder từ, xác định số xung nhờ 2 cảm biến từ gắn cạnh trục quay.
+ Điện cảm L2mH Động cơ có tất cả 6 dây ra:
+ 2 dây cung cấp nguồn 12 V cho đông cơ
+ 2 dây nguồn 3,3V cung cấp nguồn cho encoder
+ 2 dây tín hiệu đưa xung encoder ra ngoài
Trong những năm gần đây, màn hình tinh thể lỏng LCD (Liquid Crystal Display) ngày càng được sử dụng rộng rãi và đang dần thay thế các đèn LED (7 đoạn và nhiều đoạn) Đó là vì các nguyên nhân sau:
Màn hình LCD có giá thành phù hợp.
Khả năng hiển thị số, ký tự và đồ hoạ tốt hơn nhiều so với đèn LED (đèn LED chỉ hiển thị được số và một số ký tự).
Sử dụng thêm một bộ điều khiển tương phản của LCD và như vậy giải phóng CPU khỏi công việc này Còn đối với đèn LED luôn cần CPU ( hoặc bằng cách nào đó) để duy trì việc hiển thị dữ liệu.
Dễ dàng lập trình các ký tự và đồ hoạ
Hình 2.14 Sơ đồ chân LCD 1602A
* Chức năng và nhiệm vụ của các chân :
STT chân Kí hiệu Chức năng chân
1 Vss Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của mạch điều khiển
2 Vdd Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với VCC=5V của mạch điều khiển
3 Vee Lựa chọn độ tương phản của màn hình
4 RS Chân chọn thanh ghi (Register select) Nối chân RS với logic “0” (GND) hoặc logic “1” (VCC) để chọn thanh ghi.
+ Logic “0”: Bus DB0-DB7 sẽ nối với thanh ghi lệnh IR của LCD (ở chế độ “ghi” - write) hoặc nối với bộ đếm địa chỉ của LCD (ở chế độ “đọc” - read) + Logic “1”: Bus DB0-DB7 sẽ nối với thanh ghi dữ liệu
5 R/w Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/
W với logic “0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc.
6 E Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E.
+ Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E.
+ Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0- DB7 khi phát hiện cạnh lên (low-to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp.
Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU Có 2 chế độ sử dụng 8 đường bus này
+ Chế độ 8 bit : Dữ liệu được truyền trên cả
8 đường, với bit MSB là bit DB7.
+ Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7
15 Vdd Nguồn dương cho đèn nền
16 Vss GND cho đèn nền
Bảng 2.3 Chức năng và nhiệm vụ của các chân của LCD 1602A
THIẾT KẾ CHẾ TẠO
Sơ đồ khối
Hình 3.1 Sơ đồ khối của mạch
Khối nguồn : Cung cấp nguồn điện cho toàn mạch hoạt động Mạch sử dụng 2 nguồn 5VDC và 12VDC Nguồn 5V cung cấp cho bộ xử lý trung tâm và 12V cung cấp cho mạch công suất và động cơ hoạt động.
Bộ xử lý trung tâm : Nhận tín hiệu đầu vào, sau đó thực hiện chương trình điều khiển tín hiệu đầu ra, điều khiển hiển thị thông tin lên màn hình.
Khối công suất : Tín hiệu điều khiển từ bộ xử lý trung tâm cho qua bộ khuếch đại công suất để điều khiển động cơ.
Cảm biến : Sử dụng Encoder xác định số vòng quay của động cơ qua các chuỗi xung gửi
Sơ đồ nguyên lý
Hình 3.2 Sơ đồ nguyên lý toàn mạch
Mạch điều khiển tốc độ động cơ một chiều , đo và hiển thị tốc độ động cơ hiển thị lên màn hình LCD 16x2.
Mạch sử dung vi điều khiển PIC 16F877A lập trình tạo xung PWM ( Pulse WidthModulation), độ rộng xung ở đầu ra thay đổi từ 0 – 100%(với tần số hoạt động nằm trong dải đáp ứng của động cơ ), chuyển đổi theo giá trị đọc được từ đầu vào biến trở Ngoài ra, vi điều khiển còn nhận tín hiệu xung từ encoder gửi về để tính toán tốc độ vòng/ phút Sau đó,điều khiển hiển thị thông số độ rộng xung và tốc độ lên LCD.
Tín hiệu xung PWM ở đầu ra ( chân CCP2 của PIC16F877A) đưa qua phototransistor để cách ly chân điều khiển với mạch công suất.
Mạch công suất sử dụng MOSFET, nhận tín hiệu xung sau khi được đưa qua cách ly,điều khiển tốc độ của động cơ bằng cách thay đổi độ rộng xung và giữ nguyên tần số, độ rộng xung càng lớn thì điện áp trung bình ở đầu ra càng tăng và ngược lại độ rộng xung càng nhỏ thì điện áp trung bình ở đầu ra giảm.
Nguồn sử dụng nguồn 12VDC để cấp cho động cơ và 5VDC cấp cho mạch điều khiển.
Nguyên lý hoạt động của mạch :
Cấp nguồn 12V và 5V cho mạch, màn hình hiển thị thông số độ rộng xung và tốc độ động cơ Khi vặn biến trở, giá trị điện áp đặt vào thay đổi, vi điều khiển nhận tín hiệu điện áp đọc được ở đầu vào và xử lý sau đó đưa ra xung PWM có độ rộng thay đổi tương ứng với giá trị thay đổi điện áp ở đầu vào đồng thời điều khiển màn hình LCD hiển thị dữ liệu Xung PWM đưa tới khối công suất để khuếch đại công suất phù hợp để điều khiển động cơ
Khi động cơ quay, cảm biến sẽ gửi xung về cho vi điều khiển, vi điều khiển tiến hành tính toán tốc độ và hiển thị tốc độ lên màn hình LCD
3.2.3 Tính toán thông số a) Mạch điều khiển :
Về phần xử lý trung tâm, chúng em chọn vi điều khiển PIC16F877A để điều khiển, thạch anh sử dụng 20MHz, phần hiển thị thông số sử dụng màn hình LCD 16x2 b) Mạch công suất :
- Thông số động cơ sử dụng :
Khi động cơ hoạt động sẽ sinh ra nhiễu điện từ gây ảnh hưởng tới các thiết bị điện tử, gây ra sai số hoặc trực tiếp làm hư hỏng mạch điều khiển Ngoài ra, mạch công suất gặp sự cố cũng gây nguy hiểm cho mạch điều khiển, nó có thể gây chập cháy giữa chân điều khiển và nguồn, thậm chí làm hỏng vi điều khiển
Vì vậy, tín hiệu xung PWM sau khi lấy từ vi điều khiển, chúng em đưa tới phần tử cách ly trước khi tới mạch công suất để đảm bảo sẽ giảm thiểu những rủi ro hay hư hại bên phía mạch công suất sẽ không tác động nhiều về phía mạch điều khiển, dễ dàng trong việc xác định lỗi và sửa chữa.
Tính chọn thông số mạch công suất để đáp ứng với động cơ :
Do động cơ thuộc loại có hộp số giảm tốc nên công suất của động cơ được giảm thiểu, công suất hoạt động duy trì không lớn ( theo thông số của nhà sản suất ), do đó việc lựa chọn phần tử công suất trong mạch cũng sẽ thoải mái hơn Mạch công suất sử dụng MOSFET, nhận tín hiệu xung sau khi qua cách ly để điều khiển đóng ngắt động cơ
Với công suất của động cơ khi có tải là 600 mA ở điện áp 12VDC, tần số mạch chuyển đổi khoảng 1Khz , chúng em lựa chọn MOSFET có dòng điện, điện áp, tần số chuyển đổi phù hợp với thông số trên
Lựa chọn mosfet IRF3205, dòng điện 110A, điện áp tối đa 55V và có thể hoạt động ở tần số cao, có các tính năng bảo vệ quá nhiệt và quá dòng, thực sự an toàn với mục đích sử dụng với mạch công suất c) Mạch nguồn :
Nguồn cung cấp đảm bảo đủ dòng điện và điện áp để cung cấp cho mạch và động cơ hoạt động.
Mạch điều khiển sử dụng nguồn 5VDC, nguồn cung cấp cho ENCODER là 3,3VDC và nguồn cấp cho động cơ là 12VDC.
Chúng em lựa chọn nguồn tổng là nguồn tổ ong có điện áp vào 220VAC và điện áp ra12VDC/2A và sử dụng mạch chuyển đổi nguồn để tạo ra mức nguồn 5V cung cấp cho vi điều khiển và 3,3V cho encoder Do dùng chung nguồn vào nên cần có giải pháp chống nhiễu nguồn cho mạch điều khiển phù hợp để mạch hoạt động ổn định và chính xác
Hình 3.3: Nguồn tổ ong 12V/2A d) Tạo xung PWM :
- Để vi điều khiển PIC16F877A hoạt động ở chế độ PWM, cần phải o Cấu hình các chân I/O thành chế độ đầu ra. o Cấu hình bộ định thời (Timer) để tạo ra xung PWM với tần số và chu kỳ phù hợp. o Cấu hình module CCP để hoạt động ở chế độ PWM và thiết lập các thông số cần thiết. o Bật module PWM bằng cách cài đặt các cờ và thanh ghi liên quan. o Gán giá trị thời gian trễ (duty cycle) tương ứng với mức PWM mong muốn.
- Trong mạch điều khiển, chúng em cấu hình modul CCP2 hoạt động ở chế độ PWM và tính chọn giá trị mode, period và prescale
- Mạch sử dụng thạch anh 20Mhz
- Lựa chọn tần số xung ra PWM là 1,2 KHz
PWM (period) = ( period +1 ) * T lệnh *mode
Value = duty * 4*(period +1) ( Với duty = 100% và Value là tham số truyền vào hàm setup_pwm2_duty(*value) )
- Lựa chọn adc có độ phân giải 10 bit ( tương ứng với 2 10 −1= 1023 mức )
- Mà tham số truyền vào Value khi duty đạt 100% là :
- Vậy khi đọc giá trị adc và chuyển đổi về giá trị tham số truyền vào, do độ phân giải adc lên tới 1024 mà giá trị Value từ 0 – 1000 nên cần phải giảm độ phân giải đi 24 mức để đảm bảo xung ra hoạt động ổn định.
Value = ( read_adc() – 23) e) Tính toán tốc độ động cơ :
- Số xung của encoder : 11 xung / vòng
- Số xung khi qua hộp giảm tốc : 374 xung
- Để tính toán tốc độ động cơ khi biết số xung của encoder, cần xác định được số xung mà encoder gửi về trong một khoảng thời gian tương ứng khi động cơ quay, tốc độ quay của động cơ sẽ được xác định qua công thức sau :
RPM = (Số xung * 60) / (Thời gian * Xung/vòng) ( vòng/ phút )
- Trong đó : o RPM : là tốc độ của động cơ ( đơn vị : vòng / phút ) o Số xung : là số xung đếm được trong khoảng thời gian đo o Thời gian : Khoảng thời gian đo o Xung / vòng : Số xung mà encoder tạo ra trên 1 vòng quay
- Chọn khoảng thời gian để đếm xung từ encoder là 100 mS, encoder tạo được 11 xung/ vòng
RPM = (Số xung * 60) / (0,1 * 11)( vòng/ phút )
Số xung đếm được từ encoder là 10 trong khoảng thời gian 100 mS
3.3.1 Sơ đồ bố trí linh kiện :