b Phân loại động cơ DC Dựa vào hình thức kích từ, người ta chia động cơ điện một chiều thành các loại sau: Động cơ điện một chiều kích từ độc lập: Dòng điện kích từ được lấy từ nguồn r
Trang 1ỨNG DỤNG ĐO, ĐIỀU KHIỂN VÀ GIÁM SÁT TỐC ĐỘ ĐỘNG CƠ
ENCODER SỬ DỤNG VI ĐIỀU KHIỂN PIC 16F877A
I TÌM HIỂU THIẾT BỊ
1) Pic 16F877A
Đây là vi điều khiển thuộc họ PIC16Fxxx với tập lệnh gồm 35 lệnh có độ dài 14 bít.Mỗi lệnh đều được thực thi trong một chu kỳ xung clock.Tốc độ hoạt động tối đa cho phép là 20MHz với một chu kỳ lệnh là 200ns.Bộ nhớ chương trình 8Kx14 bít, bộ nhớ dữ liệu 368x8 byte RAM và bộ nhớ dữ liệu EEPROM với
Trang 2dung lượng 256x8 byte.Số PORT I/O là 5 với 33 pin I/O - Các đặc tính ngoại vi bao gồm các khối chức năng sau:
+ Timer0: bộ đếm 8 bít với bộ chia tần số 8 bít + Timer1: bộ đếm 16 bít với bộ chia tần số, có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep + Timer2: bộ đếm 8 bít với bộ chia tần số, bộ postcaler + Hai bộ
Capture/ so sánh/ điều chế độ rộng xung + Các chuẩn giao tiếp nối tiếp SSP, SPI và I2C + Chuẩn giao tiếp nối tiếp USART với 9 bít địa chỉ + Cổng giao tiếp song song PSP với các chân điều khiển RD, WR,
CS ở bên ngoài - Các kênh Analog: + 8 kênh chuyển đổi ADC 10 bít.Hai bộ so sánh - Bên cạnh đó là một vài đặc tính khác của vi điều khiển như: + Bộ nhớ flash với khả năng ghi xóa được 100.000 lần +
Bộ nhớ EEPROM với khả năng ghi xóa được 1.000.000 lần + Dữ liệu
bộ nhớ EEPROM có thể lưu trữ trên 40 năm + Khả năng tự nạp
chương trình với sự điều khiển của phần mềm + Watchdog Timer với
bộ dao động trong + Chức năng bảo mật mã chương trình + Chế độ Sleep + Có thể hoạt động với nhiều dạng Oscillator khác nhau
2) IC L293D điều khiển động cơ
Trang 3Nguồn cấp Vs (chân 10) : max là 36V , min bằng Vss
- Nguồn cấp logic Vss ( chân 20 ) : max là 36V, min là 4.5 V
- Dòng làm việc bình thường 600 mA
- Dòng đỉnh 1.2 A
-L293D là IC cầu H điều khiển động cơ Gồm 4 kênh điều khiển có thể điều khiển 2 động cơ DC hoặc 1 động cơ bước 4 pha (5 dây) Để điều khiển động cơ
DC, bạn sẽ sử dụng 2 kênh của L293D cho 1 động cơ
-L293D đã được tích hợp sẵn đi ốt bảo vệ vi điều khiển chống lại dòng cảm ứng khi động cơ khởi động hoặc tắt Vì vậy, bạn chỉ cần gắn motor vào L293D và các chân của vi điều khiển tương ứng, là có thể làm cho động cơ chạy ngay Dòng L293 có 2 loại: L293B/E và L293D, dòng L293B có khả năng chịu tải cao hơn (1A so với 600mA của L293D) nhưng không có đi ốt bảo vệ vi điều khiển -Với mỗi motor, bạn cần 3 chân từ vi điều khiển kết nối với L293D, trong đó có
1 chân điều khiển tốc độ đông cơ dùng xung PWM, 2 chân còn lại là logic 0 hoặc 1 dùng điều chỉnh chiều quay của motor
-Tín hiệu điều khiển được xử lý độc lập với nhau với từng đầu ra Ví dụ: bạn có thể điều khiển 2 động cơ DC chạy với tốc độ khác nhau, hướng khác nhau, 1 động cơ dừng còn 1 động cơ chạy
-Mỗi kênh của L293D chịu được tải 600mA và dòng đỉnh là 1A
-Để sử dụng các động cơ công suất cao hơn, bạn chỉ việc gắn song song 2 hoặc nhiều L293 lại với nhau Với 2 IC L293, bạn sẽ có tải chịu được là 1.2A và tải đỉnh là 2A
-L293D có chức năng tự động ngắt khi bị nóng quá mức nhằm bảo vệ IC
3) Động cơ DC
a) Nguyên lí hoạt động
Giống như các loại động cơ điện khác, động cơ điện một chiều cũng gồm có stator và rotor….Động cơ điện một chiều gồm có stator, rotor, cổ góp và chổi điện
Trang 4- Stator: còn gọi là phần cảm, gồm dây quấn kích thích được quấn tập trung trên các cực từ stator Các cực từ stator được ghép cách điện từ các lá thép kỹ 7 thuật điện được dập định hình sẵn có bề dày 0,5-1mm, và được gắn trên gông từ bằng thép đúc, cũng chính là vỏ máy
- Rotor: còn được gọi là phần ứng, gồm lõi thép phần ứng và dây quấn phần ứng lõi thép phần ứng có hình trụ, được ghép từ các lá thép kỹ thuật điện ghép cách điện với nhau Dây quấn phần ứng gồm nhiều phần tử, được đặt vào các rãnh trên lõi thép rotor Các phần tử dây quấn rotor được nối tiếp nhau thông qua các lá góp trên cổ góp Lõi thép phần ứng và cổ góp ñược cố định trên trục rotor Cổ góp và chổi điện: làm nhiệm vụ đảo chiều dòng điện trong dây quấn phần ứng
b) Phân loại động cơ DC
Dựa vào hình thức kích từ, người ta chia động cơ điện một chiều thành các loại sau:
Động cơ điện một chiều kích từ độc lập: Dòng điện kích từ được lấy từ nguồn riêng biệt so với phần ứng Trường hợp đặc biệt, khi từ thông kích từ được tạo ra bằng nam châm vĩnh cữu, người ta gọi là động cơ điện một chiều kích thích vĩnh cửu
Trang 5Động cơ điện một chiều kích từ song song: Dây quấn kích từ được nối song song với mạch phần ứng
Động cơ điện một chiều kích từ nối tiếp: Dây quấn kích từ được mắc nối tiếp với mạch phần ứng
Động cơ điện một chiều kích từ hỗn hợp: Dây quấn kích từ có hai cuộn, dây quấn kích từ song song và dây quấn kích từ nối tiếp Trong đó, cuộn kích từ song song thường là cuộn chủ đạo
4) ENCODER
Để điều khiển số vòng quay hay vận tốc động cơ thì chúng ta nhất thiết phải đọc được góc quay của motor Một số phương pháp có thể được dùng để xác định góc quay của motor bao gồm tachometer (thật ra tachometer đo vận tốc quay), dùng biến trở xoay, hoặc dùng encoder Trong đó 2 phương pháp đầu tiên là phương pháp analog và dùng optiacal encoder (encoder quang) thuộc nhóm phương pháp digital
Trang 6- CẤU TẠO , NGUYÊN LÍ HOẠT ĐỘNG
Hệ thống optical encoder bao gồm một nguồn phát quang (thường là hồng ngoại – infrared), một cảm biến quang và một đĩa có chia rãnh Optical encoder lại được chia thành 2 loại: encoder tuyệt đối (absolute optical encoder) và encoder tương đối (incremental optical encoder) Trong đa số các DC Motor, incremental optical encoder được dùng và mô hình động cơ servo trong bài này cũng không ngoại lệ
Encoder thường có 2 kênh bao gồm kênh A, kênh B Bên ngoài đĩa quay được chia thành các rãnh nhỏ và một cặp thu-phát 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 như sau : khi tia hồng ngoại từ nguồn phát xuyên qua rãnh của encoder đến cảm biến quang ,1 tính hiệu xuất hiện trên cảm biến,kênh A xuất hiện 1 xung.Như vậy trong 1 vòng quay của motor, có N
“xung” xuất hiện trên kênh A N là số rãnh trên đĩa và được gọi là độ phân giải (resolution) của encoder Mỗi loại encoder có độ phân giải khác nhau, có khi trên mỗi đĩa chĩ có vài rãnh nhưng cũng có trường hợp đến hàng nghìn rãnh được chia Để điều khiển động cơ, ta phải biết độ phân giải của encoder đang dùng Độ phân giải ảnh hưởng đến độ chính xác điều khiển và cả phương pháp điều khiển Trên các encoder còn có một cặp thu phát khác được đặt trên cùng đường tròn với kênh A nhưng lệch một chút (lệch 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 lệch pha 90o Bằng cách phối hợp kênh A và B người đọc sẽ biết chiều quay của động cơ Hãy quan sát hình
Trang 7Hình trên thể hiện sự bộ trí của 2 cảm biến kênh 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 cùng chiều kim đồng hồ, tín hiệu “đi” từ trái sang phải Bạn hãy quan sát lúc tín hiệu A chuyển từ mức cao xuống thấp (cạnh xuống) thì kênh B đang ở mức thấp Ngược lại, nếu động cơ quay ngược chiều kim đồng hồ, tín hiệu “đi” từ phải qua trái Lúc này, tại cạnh xuống của kênh A thì kênh B đang ở mức cao Như vậy, bằng cách phối hợp 2 kênh A và B chúng ta không những xác định được góc quay (thông qua số xung) mà còn biết đượ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)
5) LCD
- LCD pinout - Sơ đồ nối chân của LCD
Trang 81 VSS: tương đương với GND - cực âm
2 VDD: tương đương với VCC - cực dương (5V)
3 Constrast Voltage (Vo): điều khiển độ sáng màn hình
4 Register Select (RS): điều khiển địa chỉ nào sẽ được ghi dữ liệu
5 Read/Write (RW): Bạn sẽ đọc (read mode) hay ghi (write mode) dữ liệu?
Nó sẽ phụ thuộc vào bạn gửi giá trị gì vào
6 Enable pin: Cho phép ghi vào LCD
7 D0 - D7: 8 chân dư liệu, mỗi chân sẽ có giá trị HIGH hoặc LOW nếu bạn đang ở chế độ đọc (read mode) và nó sẽ nhận giá trị HIGH hoặc LOW nếu đang ở chế độ ghi (write mode)
8 Backlight (Backlight Anode (+) và Backlight Cathode (-)): Tắt bật đèn màn hình LCD
Trang 9+ Có thể ghép nối với VĐK hay PLC
+ Cho phép nối mạng
+ Có thể tháo lắp thiết bị trong lúc máy tính đang làm việc
+ Có thể cung cấp nguồn cho các mạch điện đơn giản
- Các thiết bị ghép nối chia làm 2 loại:
+ DCE: là các thiết bị trung gian như MODEM
+ DTE: là các thiết bị tiếp nhận hay truyền dữ liệu như PC, PLC, VĐK
+ Việc trao đổi tín hiệu thông thường qua 2 chân RDX (nhận) và RTX (gửi)
Tín hiệu truyền theo chuẩn RS232:
+ Chuẩn RS232 truyền tín hiệu với các tốc độ thông dụng là: 1200 bps, 4800 bps, 9600 bps, 19200 bps
+ Định dạng khung truyền chuẩn RS232: Khi không truyền dữ liệu, đường truyền sẽ ở trạng thái mark ( điện áp -• 10V) Khi bắt đầu truyền, DTE sẽ đưa ra xung Start ( space :10V ) và sau đó• truyền lần lượt từ D0 -> D7 và Parity, cuối cùng là xung Stop ( mark: - 10V ) để khôi phục lại trạng thái đường truyền.Ví
dụ truyền ký tự A:
Trang 10Các đặc tính kỹ thuật của chuẩn RS232:
b/ IC MAX 232
IC MAX 232 là IC chuyên dùng trong giao tiếp nối tiếp với PC Nó có 2 bộ đệm
và 2 bộ nhận.Đường dẫn điều khiển lối vào CTS, điều khiển việc xuất dữ liệu ở cổng nối tiếp khi cần thiết, được nối với chân 9.Chân RTS (chân 10) được nối với đường dẫn bắt tay để điều khiển với quá trình nhận.Thường thì các đường dẫn bắt tay được nối với cổng nối tiếp qua các cầu nối, để khi không dùng đến
Trang 11nữa có thể để hở mạch các cầu này.Cách truyền dữ liệu đơn giản nhất là chỉ dùng 3 chân RTX, RDX và GND
Tuy nhiên hiện nay để giao tiếp máy tính với vi điều khiển người ta đã tích hợp sẵn trong 1 modul đảm nhận tất cả các công việc trên đó là modul USB to TTL PL2303
Cách kết nối Chân 5V nối với VCC của vi điều khiển GND nối với GND của vi điều khiển
TXD nối với RX (chân 26) của vi điều khiển RXD nối với TX (chân 25) của vi điều khiển
Trang 127) Một số linh kiện khác
Trang 13II LẬP TRÌNH CCS, SƠ ĐỒ NGUYÊN LÝ, TRUYỀN THÔNG
MÁY TÍNH BẰNG C#
1) Lập trình bằng CCS
a) Giới thiệu về Bộ định thời Timer
Định thời là tạo một khoảng thời gian giữa 2 sự kiện
Trong các ứng dụng của vi điều khiển trong thực tế, việc định thời là việc
thường xuyên xảy ra Để thực hiện việc này, ta có 2 cách:
- Dùng các lệnh thực hiện các vòng lặp để tạo ra khoảng thời gian Nguyên tắc tạo ra khoảng thời gian này đơn giản như sau: nếu vi điều khiển mất một khoảng thời gian x để thực hiện một lệnh, việc lặp lại một lệnh n lần sẽ mất n*x thời gian
- Dùng các bộ định thời Timer để tạo ra khoảng thời gian trễ
Trong bài này, ta sẽ đi vào nguyên cứu các bộ timer
Một chế độ quan trọng nữa của Timer là khi ta cài đặt cho nó hoạt động như bộ đếm Trong ứng dụng này, timer hoạt động như một bộ đếm, có nhiệm vụ đếm
số các xung đi vào một chân cụ thể trên vi điều khiển (Đối với timer0 chân đầu vào của tín hiệu xung là RA4, với timer1 là RC0
Chế độ bộ đếm này có nhiều ứng dụng trong thực tế như đếm số vòng quay của động cơ (phản hồi từ bộ đo tốc độ động cơ- encoder), đếm số sản phẩm trên một dây chuyền v.v
Vi điều khiển PIC16F877A có 3 bộ Timer:
- Timer0: 8 bit (số đếm tối đa của nó là 255), hoạt động ở 2 chế độ định thời và
Trang 14Chế độ định thời:
Mỗi bộ timer có một hoặc nhiều thanh ghi chứa giá trị đếm của nó (tùy thuộc vào độ dài của timer), ta giả sử tên thanh ghi là TMR có độ dài là n byte (n=1 với timer0, n=2 với timer1), hay giá trị đếm tối đa là 0 (Chuyển từ 2^8n-1 về 0) Khi giá trị của TMR đạt đến giá trị này, vi điều khiển sẽ set bit cờ của bộ timer
đó lên mức 1 Người dùng sẽ biết được thời điểm này bằng cách kiểm tra bit cờ Khi được cài đặt hoạt động trong chế độ định thời:
- Giá trị của thanh ghi TMR sẽ tự động tăng lên 1 đơn vị sau mỗi chu kì lệnh của vi điều khiển: TMR=TMR+1
- Khi giá trị của TMR đạt đến giá trị tối đa (Đối với timer0: từ 255 cộng thêm 1 chuyển về 0, đối với timer1: từ 65535 cộng 1 chuyển về 0) , bit cờ của Timer (Đối với Timer0, tên bit cờ là TMR0IF, vị trí là bit số 2 của thanh ghi INTCON; Đối với Timer1, tên bit cờ là TMR1IF, vị trí là bit số 0 của thanh ghi PIR1) sẽ được set lên mức 1
* Trong bài này cứ 25ms ta lại tính toán tốc độ động cơ 1 lần dựa vào số xung encoder đo được Vậy cần dùng timer1 để định 1 khoảng thời gian là 25 ms
Sử dụng tần số thạch anh 20MHz, dùng bộ chia 8
1 chu kì xung Tx= 1/20(us)
1 chu kì lệnh = 4 chu kì xung
Trang 15b) Bộ tạo xung PWM
Nguyên lí hoạt động
setup_timer_2 (mode, period, postscale)
Ta có công thức tính chu kì xung PWM:
Trang 16duty = giatriphantram * (4 * (period +1) )
- Thực hiện nốt lệnh đang thực hiện
- Dừng chương trình đang thực hiện
- Lưu lại địa chỉ của lệnh kế tiếp trong chương trình đang thực hiện vào bộ nhớ stack
- Nhảy tới địa chỉ 0x04 trong bộ nhớ chương trình
- Tại đây,vi điều khiển sẽ thực hiện chương trình con phục vụ ngắt do người lập trình đã lập trình từ trước
- Sau khi thực hiện xong chương trình con phục vụ ngắt, vi điều khiển lấy lại địa chỉ của lệnh kế tiếp đã được lưu và thực hiện tiếp chương trình đang thực hiện dở lúc chưa có ngắt
Tới đây ta tổng hợp lại các thuật ngữ dùng cho xử lý ngắt trong vi điều khiển:
- Nguồn ngắt: nguồn ngắt là nguyên nhân gây ra ngắt Như trong ví dụ trên, nguồn ngắt có thể là điện thoại gọi hoặc bạn gọi
- Sự kiện ngắt: khi nguồn ngắt xảy ra
- Chương trình con phục vụ ngắt: là chương trình vi điều khiển xử lý khi có sự kiện ngắt xảy ra do người lập trình lập trình ra Ví dụ như ta trả lời hoặc chạy ra khỏi phòng gặp bạn
- Vecto ngắt: tức địa chỉ 0x04 nơi vi điều khiển chạy tới sau khi lưu địa chỉ trả
về
- Bit cho phép ngắt: tức việc cho phép vi điều khiển chạy chương trình con phục vụ ngắt khi có sự kiện ngắt xảy ra Trong vi điều khiển PIC, mỗi ngắt có
Trang 17bit cho phép của nó Bit này tận cùng bằng chữ E (enable), nằm trong các thanh ghi chuyên dụng Muốn cho phép ngắt đó, ta phải đưa bit cho phép ngắt tương ứng lên giá trị 1 Ngắt chỉ thực sự được cho phép ngắt khi ta cho bit cho phép ngắt toàn cục GIE (Global Interrupt Enable) lên mức 1 Ta hình dùng như sau: khi có sự kiện ngắt- điện thoại gọi, nếu ta cho phép mình nghe điên thoại (tức bit cho phép ngắt của ngắt đó được set lên 1) đồng thời thầy giáo cho phép (bit cho phép ngắt toàn cục GIE được lên mức 1) thì ta mới nghe điện thoại (cho chương trình con phục vụ ngắt hoạt động)
- Một số các ngắt khác, như các ngắt ngoại vi bao gồm ADC, PWM v.v Muốn cho phép nó còn phải đưa bit cho phép ngắt ngoại vi lên mức 1
Cờ ngắt: là bit phản ánh trạng thái của sự kiện ngắt Mỗi ngắt có một bit cờ Khi bit cờ này bằng 1 nghĩa là sự kiện ngắt tương ứng với cờ đó xảy ra Ta hình dung như tiếng chuông của điện thoại là cờ ngắt, chuông rung báo có sự kiện ngắt- có điện thoại xảy ra Các bit này tận cùng bằng từ F (Flag- cờ) Lưu ý là dù một ngắt có được cho phép hay không thì cờ ngắt vẫn được set lên 1 khi có sự kiện ngắt xảy ra (Dù ta có được phép nghe điện thoại hay không thì chuông điện thoại vẫn cứ reo)
Các ngắt trong vi điều khiển PIC16F877A:
Vi điều khiển PIC16F877A có 15 nguồn ngắt Được chia làm 2 lớp ngắt:
- Lớp ngắt cơ bản: bao gồm các ngắt cơ bản như ngắt tràn timer 0, ngắt ngoài, ngắt thay đổi trạng thái của các chân PortB (RB4-RB7) Bit cho phép ngắt và bit
cờ tương ứng là TMR0IE,TMR0IF; INTE, INTF; RBIE và RBIF Để ý là để cho phép ngắt thực sự xảy ra phải có bit cho phép ngắt toàn cục GIE
- Lớp ngắt ngoại vi: bao gồm các ngắt ngoại vi như ngắt tràn timer 1
(TMR1IE, TMR1IF), ngắt tràn Time2(TMR2IE, TMR2IF), ngắt hoàn thành việc chuyển đổi ADC (ADCIE, ADCIF), ngắt hoàn thành việc nhận kí tự trong truyền thông RS232 (RCIE, RCIF), ngắt hoàn thành việc truyền kí tự trong truyền thông RS232 (TXIE, TXIF) v.v Để ý là muốn thực sự cho phép các ngắt này ngoài bit cho phép ngắt toàn cục được set phải set cả bỉt cho phép ngắt
ngoại vi PEIE
Trong bài này ta sử dụng ngắt ngoài để đếm xung encoder
Hoạt động của ngắt ngoài
Nguồn ngắt: là xung đi vào chân RB0 của vi điều khiển PIC