Trong lĩnh vực điều khiển động cơ điện một chiều, ta có thể sử dụng kết hợp với vi điều khiển nhằm đơn giản hóa mạch điều khiển và đơn giản hóa việc điều khiển.. Thông thường động cơ đi
Trang 2Ngành đào tạo : Kỹ thuật Điện tử
Tên đề tài: Thiết kế , chế tạo mạch điều khiển động cơ điện một chiều
Thời lượng: 02 TC
Thời gian thực hiện: 05 tuần
Điều kiện tiên quyết: Đã học các môn: Vật lý, Kỹ thuật số, Kỹ thuật cảm
biến, Điện tử cơ bản, ĐTCS&TĐĐ, Vi điều khiển
Số liệu cho trước:
- Thông số của các loại linh kiện điện tử chuyên dụng
- Các tài liệu, giáo trình chuyên môn
Nội dung cần hoàn thành:
1 Tìm hiểu về ứng dụng của động cơ điện một chiều, vi điều khiển PIC16F877A
2 Phân tích, xác định yêu cầu của đề tài
3 Phân tích, lựa chọn kết cấu cho mô hình, thiết kế và chế tạo mạch điều khiển động cơ điện một chiều
4 Lập kế hoạch và thực hiện các báo cáo theo đúng tiến độ
Trang 3Quyển thuyết minh và các bản vẽ, file mô tả đầy đủ nội dung của đề tài
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Hưng Yên, ngày tháng năm 2009
Giảng viên hướng dẫn
Trang 4PHẠM XUÂN HIỂN
LỜI NÓI ĐẦU
Ngày nay, các bộ vi điều khiển đang có ứng dụng ngày càng rộng rãi, thâm nhập ngày càng nhiều vào trong các lĩnh vực của kĩ thuật cũng như đời sống xã hội Hầu hết các thiết bị từ đơn giản như các thiết bị trong gia đình cho đến các thiết bị tinh vi như máy tính hay máy công nghiệp đều có sự xuất hiện của các bộ vi điều khiển
Động cơ điện một chiều là loại động cơ được sử dụng rất phổ biến trong các ứng dụng thông thường cũng như các ứng dụng phức tạp Để một động cơ làm việc một cách hiệu quả thì đòi hỏi phải có cách điều khiển tốt
Xuất phát từ thực tế đó chúng em đã tập chung nghiên cứu về ứng
dụng của vi điều khiển, động cơ điện một chiều và cách “điều khiển động cơ
điện một chiều” dưới sự hướng dẫn của thầy Phạm Xuân Hiển
Do kinh nghiệm chưa nhiều, kiến thức chuyên môn chưa thực sự sâu nên đồ án của chúng em không thể tránh khỏi những thiếu xót Chúng em rất mong được sự đóng góp của thầy cô cùng các bạn sinh viên để đề tài của chúng em được hoàn thiện hơn
Hưng yên tháng 12 năm 2009
Nhóm sinh viên thự hiện
Trang 5Chương 1: GIỚI THIỆU ĐỀ TÀI
Động cơ điện một chiều là một loại thiết bị được sử dụng rất nhiều trong sinh hoạt thường ngày Chúng có những ứng dụng rất lớn, từ những chiếc radio đến vô tuyến rồi đến những thiết bị hiện đại như máy tính đều có
sự hiện diện của động cơ điện một chiều Nhưng nếu không điều khiển được thì chúng sẽ không thể phát huy được hết chức năng của nó Vì vậy việc điều khiển động cơ điện một chiều là hết sức quan trọng
Trong lĩnh vực điều khiển động cơ điện một chiều, ta có thể sử dụng kết hợp với vi điều khiển nhằm đơn giản hóa mạch điều khiển và đơn giản
hóa việc điều khiển
1.2 Đặc điểm, yêu cầu của đồ án
Với khẳ năng có hạn cũng như thời gian hạn chế, hơn nữa là chỉ đi sâu vào nghiên cứu một loại vi điều khiển đang có ứng dụng thực tế cao và phổ biến là vi điều khiển PIC 16F877A, vì vậy đồ án phải đạt được các yêu cầu
Từ những yêu cầu, đặc điểm của đề tài, chúng em đã chọn ra phương
án thực hiện như sau:
i Tham khảo ý kiến của giáo viên hướng dẫn, bạn bè và thu thập
những tài liệu liên quan
Trang 6ii Đề ra phương án thi công có tính khả thi xét trên các mặt kinh
tế và kĩ thuật
iii Thực hiện theo phương án và kế hoạch dưới sự chỉ đạo của giáo
viên hướng dẫn
1.4 Phương pháp thu thập dữ liệu
- Sử dụng những tài liệu, những vấn đề do giáo viên hướng dẫn cung cấp
- Tham khảo những ý kiến của các giáo viên trong khoa và của bạn bè
- Thu thập những thông tin cần thiết trên mạng internet (một số trang web điển hình như: diendandientu.com; dientuvietnam.net; PICvietnam.com; )
Vì đây chỉ giới hạn là một đồ án môn học nên trong quá trình thực hiện,
đề tài vẫn gặp phải một số hạn chế như chưa điều khiển được vòng kín, chưa hiển thị được tốc độ động cơ,
Vì vậy hướng mở rộng đề tài của chúng em đó là thiết kế một bộ điều khiển hoàn chỉnh, có phản hồi vòng kín, có hiển thị tốc độ động cơ, tự động điều khiển tốc độ,
Trang 7Chương 2 CƠ SỞ LÝ THUYẾT
tự và tương tự sang số, Ở máy tính thì các mô đun thường được xây dựng bởi các chíp và mạch ngoài
Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng Nó xuất hiện khá nhiều trong các dụng cụ điện tử, thiết bị điện, máy giặt, lò vi sóng, điện thoại, đầu đọc DVD, thiết bị đa phương tiện, dây chuyền tự động, v.v
1.2 Mô tả
Hầu hết các vi điều khiển ngày nay được xây dựng dựa trên kiến trúc Havard, kiến trúc này định nghĩa bốn thành phần cần thiết của một hệ thống nhúng Những thành phần này là lõi CPU, bộ nhớ chương trình (thông thường là ROM hoặc bộ nhớ Flash), bộ nhớ dữ liệu (RAM), một hoặc vài bộ định thời và các cổng vào/ra để giao tiếp với các thiết bị ngoại vi và các môi trường bên ngoài - tất cả các khối này được thiết kế trong một vi mạch tích hợp Vi điều khiển khác với các bộ vi xử lý đa năng ở chỗ là nó có thể hoạt động chỉ với vài vi mạch hỗ trợ bên ngoài
1.3 Các họ vi điều khiển thông dụng
1.3.1 Họ vi điều khiển AMCC (do tập đoàn "Applied Micro
Circuits Corporation" sản xuất) Từ tháng 5 năm 2004, họ vi điều khiển này được phát triển và tung ra thị trường bởi IBM
403 PowerPC CPU
PPC 403GCX
405 PowerPC CPU
Trang 81.3.2 Họ vi điều khiển Atmel
Dòng Atmel AT91 (Kiến trúc ARM THUMB)
Dòng AT90, Tiny & Mega – AVR (Atmel Norway design)
Dòng Atmel AT89 (Kiến trúc Intel 8051/MCS51)
Dòng MARC4
1.3.3 Họ vi điều khiển Cypress MicroSystems
CY8C2xxxx (PSoC)
1.3.4 Họ vi điều khiển Freescale Semiconductor Từ năm 2004,
những vi điều khiển này được phát triển và tung ra thị trường bởi Motorola
Dòng 8-bit
68HG05 (CPU05) 68HG08 (CPU08) 68HG11 (CPU11)
Dòng 16-bit
68HC12 (CPU12) 68HC16 (CPU16) Freescale DSP56800 (DSP controller)
Dòng 32-bit
Freescale 683XX (CPU32) MPC500 MPC 860 (PowerQUICC) MPC 8240/8250 (PowerQUICC II) MPC 8540/8555/8560 (PowerQUICC III)
1.3.5 Họ vi điều khiển Fujitsu
F²MC Family (8/16 bit)
Trang 9 FR Family (32 bit)
FR-V Family (32 bit RISC)
1.3.6 Họ vi điều khiển Inlel
Dòng 8-bit
8Xc42 MCS8 MCS51
8061 8xC261
Dòng 16-bit
80186/88 MCS96
MXS296
Dòng 32-bit
386EX I960
1.3.7 Họ vi điều khiển Microchip
12-bit instruction PIC
14-bit instruction PIC
Trang 102 Động cơ điện một chiều
Động cơ điện một chiều là động cơ điện hoạt động với dòng điện một chiều Động cơ điện một chiều ứng dụng rộng rãi trong các ứng dụng dân dụng cũng như công nghiệp Thông thường động cơ điện một chiều chỉ chạy
ở một tốc độ duy nhất khi nối với nguồn điện, tuy nhiên vẫn có thể điều khiển tốc độ và chiều quay của động cơ với sự hỗ trợ của các mạch điện tử cùng
Cấu tạo của động cơ gồm có 2 phần: stato đứng yên và rôto quay so với
stato Phần cảm (phần kích từ-thường đặt trên stato) tạo ra từ trường đi trong
mạch từ, xuyên qua các vòng dây quấn của phần ứng (thường đặt trên rôto)
Khi có dòng điện chạy trong mạch phần ứng, các thanh dẫn phần ứng sẽ chịu
tác động bởi các 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 Chính xác hơn, lực điện từ trên một đơn vị chiều dài thanh dẫn là
tích có hướng của vectơ mật độ từ thông B và vectơ cường độ dòng điện I
Một phần quan trọng của động cơ điện một chiều là bộ phận chỉnh lưu,
nó có nhiệm vụ là đổi chiều dòng điện trong cuộn rotor trong khi chuyển động quay của rotor là liên tục Thông thường bộ phận này là bộ phận gồm
có một bộ cổ góp và một bộ chổi than tiếp xúc với cổ góp Đây cũng chính là nhược điểm chính của động cơ điện một chiều: cổ góp làm cho cấu tạo phức tạp, đắt tiền, kém tin cậy và nguy hiểm trong môi trường dễ nổ, khi sử dụng phải có nguồn điện một chiều kèm theo hoặc bộ chỉnh lưu
Trang 112.2 Nguyên lý hoạt động
Trên hình 2 mô tả nguyên lý làm việc của động cơ một chiều Khi cho điện áp một chiều U vào hai chổi điện A và B, trong dây quấn phần ứng có dòng điện Các thanh dẫn ab và cd mang dòng điện nằm trong từ trường sẽ chịu lực tác dụng tương hổ lên nhau tạo nên momen tác dụng lên rotor, làm rotor quay Chiều lực tác dụng được xác định theo qui tắc bàn tay trái (hình 2a)
Khi phần ứng quay được nữa vòng, vị trí thanh dẫn ab, cd đổi chỗ nhau, nhờ có phiến góp đổi chiều dòng điện, nên dòng điện một chiều biến đổi thành dòng điện xoay chiều đưa vào dây quấn phần ứng, giữ cho chiều lực tác dụng không đổi, do đó lực tác dụng lên rotor cũng theo một chiều nhất định, đảm bảo động cơ có chiều quay không đổi (hình 2b)
Trang 12K : hằng số, phụ thuộc cấu trúc động cơ
2.3 Phương pháp điều khiển tốc độ động cơ
Thông thường, tốc độ quay của một động cơ điện một chiều tỷ lệ với điện áp đặt vào nó, và ngẫu lực quay tỷ lệ với dòng điện Điều khiển tốc độ của động cơ có thể bằng cách điều khiển các điểm chia điện áp của bình ắc quy, điều khiển bộ cấp nguồn thay đổi được, dùng điện trở hoặc mạch điện tử Chiều quay của động cơ có thể thay đổi được bằng cách thay đồi chiều nối dây của phần kích từ, hoặc phần ứng, nhưng không thể được nếu thay đổi
cả hai Thông thường sẽ được thực hiện bằng các bộ công tắc tơ đặc biệt (Công tắc tơ đổi chiều)
Điện áp tác dụng có thể thay đổi bằng cách xen vào mạch một điện trở nối tiếp hoặc sử dụng một thiết bị điện tử điều khiển kiểu chuyển mạch lắp bằng Thyristor, transistor hoặc loại cổ điển hơn nữa bằng các đèn chỉnh lưu
hồ quang Thủy ngân Trong một mạch điện gọi là mạch băm điện áp, điện áp trung bình đặt vào động cơ thay đổi bằng cách chuyển mạch nguồn cung cấp thật nhanh Khi tỷ lệ thời gian "on" trên thời gian "off" thay đổi sẽ làm thay đổi điện áp trung bình Tỷ lệ phần trăm thời gian "on" trong một chu kỳ chuyển mạch nhân với điện áp cấp nguồn sẽ cho điện áp trung bình đặt vào động cơ
Trang 13Phương pháp PWM
Như vậy với điện áp nguồn cung cấp là 100V, và tỷ lệ thời gian ON là 25% thì điện áp trung bình là 25V Trong thời gian "Off", điện áp cảm ứng của phần ứng sẽ làm cho dòng điện không bị gián đoạn, qua một diode gọi là diode phi hồi, nối song song với động cơ Tại thời điểm này, dòng điện của mạch cung cấp sẽ bằng không trong khi dòng điện qua động cơ vẫn khác không và dòng trung bình của động cơ vẫn luôn lớn hơn dòng điện trong mạch cung cấp, trừ khi tỷ lệ thời gian "on" đạt đến 100% Ở tỷ lệ 100% "on" này, dòng qua động cơ và dòng cung cấp bằng nhau Mạch đóng cắt tức thời này ít bị tổn hao năng lượng hơn mạch dùng điện trở Phương pháp này gọi là phương pháp điều khiển kiểu điều biến độ rộng xung (pulse width modulation, or PWM), và thường được điều khiển bằng vi xử lý Đôi khi người ta còn sử dụng mạch lọc đầu ra để làm bằng phẳng điện áp đầu ra và giảm bớt tạp nhiễu của động cơ
Vì động cơ điện một chiều kiểu nối tiếp có thể đạt tới mô men quay cực đại từ khi vận tốc còn nhỏ, nó thường được sử dụng để kéo, chẳng hạn đầu máy xe lửa hay tàu điện Một ứng dụng khác nữa là để khởi động các loại động cơ xăng hay động cơ điezen loại nhỏ Tuy nhiên nó không bao giờ dùng trong các ứng dụng mà hệ thống truyền động có thể dừng (hay hỏng), như băng truyền Khi động cơ tăng tốc, dòng điện phần ứng giảm (do đó cả trường điện cũng giảm) Sự giảm trường điện này làm cho động cơ tăng tốc cho tới khi tự phá hủy chính nó Đây cũng là một vấn đề với động cơ xe lửa trong trường hợp mất liên kết, vì nó có thể đạt tốc độ cao hơn so với chế độ làm việc định mức Điều này không chỉ gây ra sự cố cho động cơ và hộp số,
Trang 14mà còn phá hủy nghiêm trọng đường ray và bề mặt bánh xe vì chúng bị đốt nóng và làm lạnh quá nhanh Việc giảm từ trường trong bộ điều khiển điện tử được ứng dụng để tăng tốc độ tối đa của các phương tiện vận tải chạy bằng điện Dạng đơn giản nhất là dùng một bộ đóng cắt và điện trở làm yếu từ trường, một bộ điều khiển điện tử sẽ giám sát dòng điện của động cơ và sẽ chuyển mạch, đưa các điện trở suy giảm từ vào mạch khi dòng điện của động
cơ giảm thấp hơn giá trị đặt trước Khi điện trở được đưa vào mạch, nó sẽ làm tăng tốc động cơ, vượt lên trên tốc độ thông thường ở điện áp định mức Khi dòng điện tăng bộ điều khiển sẽ tách điện trở ra, và động cơ sẽ trở về mức ngẫu lực ứng với tốc độ thấp
Một phương pháp khác thường được dùng để điều khiển tốc độ động cơ một chiều là phương pháp điều khiển theo kiểu Ward-Leonard Đây là phương pháp điều khiển động cơ một chiều (thường là loại kích thích song song hay hỗn hợp) bằng cách sử dụng nguồn điện xoay chiều, mặc dù nó không được tiện lợi như những sơ đồ điều khiển một chiều Nguồn điện xoay chiều được dùng để quay một động cơ điện xoay chiều, thường là một động
cơ cảm ứng, và động cơ này sẽ kéo một máy phát điện một chiều Điện áp ra của phần ứng máy phát một chiều này được đưa thẳng đến phần ứng của động cơ điện một chiều cần điều khiển Cuộn dây kích từ song song của cả máy phát điện và động cơ điện một chiều sẽ được kích thích độc lập qua các biến trở kích từ Có thể điều khiển tốc độ động cơ rất tốt từ tốc độ = 0 đến tốc
độ cao nhất với ngẫu lực phù hợp bằng cách thay đổi dòng điện kích thích của máy phát và động cơ điện một chiều Phương pháp điều khiển này đã được xem là chuẩn mực cho đến khi nó bị thay thế bằng hệ thống mạch rắn
sử dụng Thyristor Nó đã tìm được chỗ đứng ở hầu hết những nơi cần điều khiển tốc độ thật tốt, từ các hệ thống thang nâng hạ người trong các hầm mỏ, cho đến những máy công nghiệm cà các cần trục điện Nhược điểm chủ yếu của nó là phải cần đến ba máy điện cho một sơ đồ (có thể lên đến 5 trong các ứng dụng rất lớn vì các máy DC có thể được nhân đôi lên và điều khiển bằng các biến trở chỉnh đồng thời) Trong rất nhiều ứng dụng, hợp bộ động cơ - máy phát điện thường được duy trì chạy không tải, để tránh mất thời gian khởi động lại
Trang 15Mặc dù các hệ thống điều khiển điện tử sử dụng Thyristor đã thay thế hầu hết các hệ thống Ward Leonard cỡ nhỏ và trung bình, nhưng một số hệ thống lớn (cỡ vài trăm mã lực) vẫn còn đắc dụng Dòng điện kích từ nhỏ hơn nhiều so với dòng điện phần ứng, cho phép các Thyristor cỡ trung bình có thể điều khiển một động cơ lớn hơn rất nhiều, so với điều khiển trực tiếp Thí dụ, trong một ứng dụng, một bộ Thyristor 300 A có thể điều khiển một máy phát điện Dòng điện ngõ ra của máy phát này có thể lên đến 15.000 A, với cùng dòng này, nếu điều khiển trực tiếp bằng thyristor thì có thể rất khó khăn và giá thành cao
3 Cách ly quang (opto)
Opto hay còn gọi là cách ly quang là linh kiện tích hợp có cấu tạo gồm 1
led và 1 photo diot hay 1 photo transitor Được sử dụng đẻ các ly giữa các khối chênh lệch nhau về điện hay công suất nhu khối có công suất nhỏ với khối điện áp lớn
Đầu vào của opto là 5V (Dòng nhỏ khoảng 100mA-500mA) tùy loại Opto còn đầu ra của nó điến áp lớn hơn nhiều! Opto có tác dụng cách ly hoàn toàn hai khối công suất để 2 khối này không ảnh hưởng đến nhau Và hay được dùng trong các mạch điều khiển dùng Vi xử lý
Nguyên tắc hoạy động : Khi được cung cấp đủ dòng và áp thì LED sẽ phát sáng Ánh sáng này được chiếu tới một transistor quang hay một photo diode và làm cho photo transistor (hay photo diode) được kích mở
Trang 16II Cơ sở phần mềm – ngôn ngữ lập trình C
1 Giới thiệu
C là một ngôn ngữ cấp cao do Dennis Richie thiết kế tại phòng thí nghiệm Bell Telephone vào năm 1972, khi viết hệ điều hành Unix C có nguồn gốc sâu sa từ ngôn ngữ BCPL do Martin Richards đề xuất vào năm
1967 và từ ngôn ngữ B do Ken Thompson phát triển từ ngôn ngữ BCPL vào năm 1970
Lúc đầu, C được thiết kế để lập trình trong môi trường của hệ điều hành Unix nhằm mục đích hỗ trợ cho các công việc lập trình phức tạp Nhưng về sau, với những nhu cầu phát triển ngày một tăng của công việc lập trình, C đã vượt qua khuông khổ của phòng thí nghiệm Bell và nhanh chóng hội nhập vào thế giới lập trình đề rồi được các nhà lập trình sử dụng một cách rộng rãi Sau đó, các công ty sản xuất phần mềm lần lượt đưa ra những phiên bản hỗ trợ cho việc lập trình bằng ngôn ngữ C và chuẩn ANSI C cũng được khai sinh từ đó
Ngôn ngữ C có những đặc điểm cơ bản như sau:
Tính cô đọng: C chỉ có 32 từ khoá chuẩn và 40 toán tử chuẩn
Tính cấu trúc: C có một tập hợp những chỉ thị của lập trình có cấu
trúc: lựa chọn, lặp rõ ràng, dễ hiểu
Tính tương thích: C có bộ tiền xử lí và một thư viện chuẩn vô cùng
phong phú chuyển từ máy này sang máy khác, chương trình viết bằng C vẫn tương thích
Tính linh động: C rất uyển chuyển về ngữ pháp, chấp nhận nhiều
cách thể hiện
Biên dịch: C cho phép biên dịch nhiều tập tin chương trình riêng rẽ
các đối tượng và liện kết các đối tượng lại với nhau Một chương trình thống nhất
2 Các khai báo và một số lệnh cơ bản trong C
2.1 Khai báo
Khai báo hằng: const <kiểu dữ liệu> <tên hằng>=<giá trị>
Khai báo biến: <kiểu dữ liệu> <danh sách biến>
2.2 Một số lệnh cơ bản
i Cấu trúc if else
if <điều kiện>
Trang 17o <biểu thức 1>: Khởi tạo biến đếm
o <biểu thức 2>: Kiểm tra điều kiện của vòng lặp
o <biểu thức 2>: Điều khiển biến đếm của vòng lặp
ii Cấu trúc: while
while <điều kiện>
Trang 18Chương 3 VI ĐIỀU KHIỂN PIC16F877A
PIC là viết tắt của “Programable Intelligent Computer”, có thể tạm dịch
là “máy tính thông minh khả trình” do hãng Genenral Instrument đặt tên cho
vi điều khiển đầu tiên của họ: PIC1650 được thiết kế để dùng làm các thiết bị
ngoại vi cho vi điều khiển CP1600 Vi điều khiển này sau đó được nghiên
cứu phát triển thêm và từ đó hình thành nên dòng vi điều khiển PIC ngày nay.
1 Lý do sử dụng vi điều khiển PIC cho đề tài
Hiện nay trên thị trường có rất nhiều họ vi điều khiển như 8051, Motorola 68HC, AVR, ARM, Ngoài họ 8051 được hướng dẫn một cách căn bản ở môi trường đại học, bản thân người viết đã chọn họ vi điều khiển PIC để mở rộng vốn kiến thức và phát triển các ứng dụng trên công cụ này vì
các nguyên nhân sau:
- Họ vi điều khiển này có thể tìm mua dễ dàng tại thị trường Việt Nam
- Giá thành không quá đắt
- Có đầy đủ các tính năng của một vi điều khiển khi hoạt động độc lập
- Là một sự bổ sung rất tốt về kiến thức cũng như về ứng dụng cho họ vi
điều khiển mang tính truyền thống: họ vi điều khiển 8051
- Số lượng người sử dụng họ vi điều khiển PIC Hiện nay tại Việt
Namcũng như trên thế giới, họ vi điều khiển này được sử dụng khá rộng rãi
Điều này tạo nhiều thuận lợi trong quá trình tìm hiểu và phát triển các ứng
dụng như: số lượng tài liệu, số lượng các ứng dụng mở đã được phát triển
thành công, dễ dàng trao đổi, học tập, dễ dàng tìm được sự chỉ dẫn khi gặp
khó khăn,…
- Sự hỗ trợ của nhà sản xuất về trình biên dịch, các công cụ lập trình,
nạp chương trình từ đơn giản đến phức tạp,…
- Các tính năng đa dạng của vi điều khiển PIC, và các tính năng này
không ngừng được phát triển
Trang 192 Vi điều khiển PIC 16F877A
2.1 Sơ đồ
2.1.1 Sơ đồ chân
Trang 202.1.2 Sơ đồ khối
Trang 212.2 Một vài thông số về vi điều khiển PIC16F877A
Đâ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 bit 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à 20 MHz với một chu kì lệnh là 200ns Bộ nhớ chương trình 8Kx14 bit, bộ nhớ dữ liệu 368x8 byte RAM và bộ nhớ dữ liệu EEPROM với dung 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ồmcác khối chức năng sau:
Timer0: bộ đếm 8 bit với bộ chia tần số 8 bit
Timer1: bộ đếm 16 bit 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 bit 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 (Synchronous Serial Port), SPI
và I2C
Chuẩn giao tiếp nối tiếp USART với 9 bit địa chỉ
Cổng giao tiếp song song PSP (Parallel Slave Port) với các chân
điều khiển RD, WR, CS ở bên ngoài
Các đặc tính Analog:
8 kênh chuyển đổi ADC 10 bit
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
Nạp được chương trình ngay trên mạch điện ICSP (In Circuit
Serial-Programming) thông qua 2 chân
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
Trang 2214-bit) và được phân thành
nhiều trang (từ page0 đến
page 3) Như vậy bộ nhớ
Trang 232.3.2 Bộ nhớ dữ liệu
Bộ nhớ dữ liệu của PIC là bộ nhớ EEPROM được chia ra làm nhiều bank Đối với PIC16F877A bộ nhớ dữ liệu được chia ra làm 4 bank Mỗi
Trang 24bank có dung lượng 128 byte, bao gồm các thanh ghi có chức năng đặc biệt SFG (Special Function Register) nằm ở các vùng địa chỉ thấp và các thanh ghi mục đích chung GPR (General Purpose Register) nằm ở vùng địa chỉ còn lại trong bank Các thanh ghi SFR thường xuyên được sử dụng (ví dụ như thanh ghi STATUS) sẽ được đặt ở tất cà các bank của bộ nhớ dữ liệu giúp thuận tiện trong quá trình truy xuất và làm giảm bớt lệnh của chương trình
Sơ đồ cụ thể của bộ nhớ dữ liệu PIC16F877A như bảng trên:
Dựa trên sơ đồ 4 bank bộ nhớ dữ liệu PIC16F877A ta rút ra các nhận xét như sau :
- Bank0 gồm các ô nhớ có địa chỉ từ 00h đến 77h, trong đó các thanh ghi dùng chung để chứa dữ liệu của người dùng địa chỉ từ 20h đến 7Fh Các thanh ghi PORTA, PORTB, PORTC, PORTD, PORTE đều chứa ở bank0, do đó để truy xuất dữ liệu các thanh ghi này ta phải chuyển đến bank0 Ngoài ra một vài các thanh ghi thông dụng khác ( sẽ giới thiệu sau) cũng chứa ở bank0
- Bank1 gồm các ô nhớ có địa chỉ từ 80h đến FFh Các thanh ghi dùng chung có địa chỉ từ A0h đến Efh Các thanh ghi TRISA, TRISB, TRISC, TRISD, TRISE cũng được chứa ở bank1
- Tương tự ta có thể suy ra các nhận xét cho bank2 và bank3 dựa trên
sơ đồ trên
Cũng quan sát trên sơ đồ, ta nhận thấy thanh ghi STATUS, FSR… có mặt trên cả 4 bank Một điều quan trọng cần nhắc lại trong việc truy xuất dữ liệu của PIC16F877A là : phải khai báo đúng bank chứa thanh ghi đó Nếu thanh ghi nào mà 4 bank đều chứa thì không cần phải chuyển bank
2.3.2.1 Các thanh ghi chức năng đặc biệt SFR
Đây là các thanh ghi được sử dụng bởi CPU hoặc được dùng để thiết lập
và điều khiển các khối chức năng được tích hợp bên trong vi điều khiển Có thể phân thanh ghi SFR làm hai lọai: thanh ghi SFR liên quan đến các chức năng bên trong (CPU) và thanh ghi SRF dùng để thiết lập và điều khiển các khối chức năng bên ngoài (ví dụ như ADC, PWM, …) Phần này sẽ đề cập đến các thanh ghi liên quan đến các chức năng bên trong Các thanh ghi dùng
Trang 25để thiết lập và điều khiển các khối chức năng sẽ được nhắc đến khi ta đề cập
đến các khối chức năng đóThanh ghi STATUS (03h, 83h, 103h, 183h):thanh
ghi chứa kết quả thực hiện phép toán của khối ALU, trạng thái reset và các bit chọn bank cần truy xuất trong bộ nhớ dữ liệu
Thanh ghi OPTION_REG (81h, 181h): thanh ghi này cho
phép đọc và ghi, cho phép điều khiển chức năng pull-up của các chân 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 và bộ đếm Timer0
Thanh ghi INTCON (0Bh, 8Bh,10Bh, 18Bh):thanh ghi cho
phép đọc và ghi, chứa các bit điều khiển và các bit cờ hiệu khi timer0 bị tràn, ngắt ngoại vi RB0/INT và ngắt interrputon- change tại các chân của PORTB
Thanh ghi PIE1 (8Ch): chứa các bit điều khiển chi tiết các ngắt
của các khối chức năng ngoại vi
Thanh ghi PIR1 (0Ch) chứa cờ ngắt của các khối chức năng
ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE1
Thanh ghi PIE2 (8Dh): chứa các bit điều khiển các ngắt của các
khối chức năng CCP2, SSP bus, ngắt của bộ so sánh và ngắt ghi vào bộ nhớ EEPROM
Trang 26 Thanh ghi PIR2 (0Dh): chứa các cờ ngắt của các khối chức
năng ngoại vi, các ngắt này được cho phép bởi các bit điều khiển chứa trong thanh ghi PIE2
Thanh ghi PCON (8Eh): chứa các cờ hiệu cho biết trạng thái
các chế độ reset của vi điều khiển
2.3.2.2 Thanh ghi mục đích chung GPR
Các thanh ghi này có thể được truy xuất trực tiếp hoặc gián tiếp thông qua thanh ghi FSR (File Select Register) Đây là các thanh ghi dữ liệu thông thường, người sử dụng có thể tùy theo mục đích chương trình mà có thể dùng các thanh ghi này để chứa các biến số, hằng số, kết quả hoặc các tham số phục vụ cho chương trình
2.3.3 Stack
Stack không nằm trong bộ nhớ chương trình hay bộ nhớ dữ liệu mà là một vùng nhớ đặc biệt không cho phép đọc hay ghi Khi lệnh CALL được thực hiện hay khi một ngắt xảy ra làm chương trình bị rẽ nhánh, giá trị của bộ đếm chương trình PC tự động được vi điều khiển cất vào trong stack Khi một trong các lệnh RETURN, RETLW hat RETFIE được thực thi, giá trị PC
sẽ tự động được lấy ra từ trong stack, vi điều khiển sẽ thực hiện tiếp chương trình theo đúng quy trình định trước
Bộ nhớ Stack trong vi điều khiển PIC họ 16F87xA có khả năng chứa được 8 địa chỉ và hoạt động theo cơ chế xoay vòng Nghĩa là giá trị cất vào
bộ nhớ Stack lần thứ 9 sẽ ghi đè lên giá trị cất vào Stack lần đầu tiên và giá trị cất vào bộ nhớ Stack lần thứ 10 sẽ ghi đè lên giá tri6 cất vào Stack lần thứ
2
Cần chú ý là không có cờ hiệu nào cho biết trạng thái stack, do đó ta không biết được khi nào stack tràn Bên cạnh đó tập lệnh của vi điều khiển
Trang 27dòng PIC cũng không có lệnh POP hay PUSH, các thao tác với bộ nhớ stack
sẽ hoàn toàn được điều khiển bởi CPU
2.4 Các cổng xuất nhập của PIC16F877A
Cổng xuất nhập (I/O port) chính là phương tiện mà vi điều khiển dùng
để tương tácvới thế giới bên ngoài Sự tương tác này rất đa dạng và thông qua quá trình tương tác đó, chức năng của vi điều khiển được thể hiện một cách
có thêm các chức năng khác để thể hiện sự tác động của các đặc tính ngoại vi nêu trên đối với thế giới bên ngoài Chức năng của từng chân xuất nhập trong mỗi cổng hoàn toàn có thể được xác lập và điều khiển được thông qua các thanh ghi SFR liên quan đến chân xuất nhập đó
Vi điều khiển PIC16F877A có 5 cổng xuất nhập, bao gồm PORTA, PORTB, PORTC, PORTD và PORTE Cấu trúc và chức năng của từng cổng xuất nhập sẽ được đề cập cụ thể trong phần sau
2.4.1 PORT A
PORTA (RA) bao gồm 6 pin I/O (pin 2,3,4,5,6,7) Đây là các chân “hai chiều” (bidirectional pin), nghĩa là có thể xuất và nhập được Chức năng I/O này được điều khiển bởi thanh ghi TRISA (địa chỉ 85h) Muốn xác lập chức năng của một chân trong PORTA là input, ta “set” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA và ngược lại, muốn xác lập chức năng của một chân trong PORTA là output, ta “clear” bit điều khiển tương ứng với chân đó trong thanh ghi TRISA Thao tác này hoàn toàn tương tự đối với các PORT và các thanh ghi điều khiển tương ứng TRIS (đối với PORTA là TRISA, đối với PORTB là TRISB, đối với PORTC là TRISC, đối với PORTD là TRISD vàđối với PORTE là TRISE) Bên cạnh đó PORTA còn là ngõ ra của bộ ADC, bộ so sánh, ngõ vào analog ngõ vào xung clock của Timer0 và ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port) Đặc tính này sẽ được trình bày cụ thể trong phần sau
Các thanh ghi SFR liên quan đến PORTA bao gồm:
Trang 28PORTA (địa chỉ 05h) : chứa giá trị các pin trong PORTA
TRISA (địa chỉ 85h) : điều khiển xuất nhập
CMCON (địa chỉ 9Ch) : thanh ghi điều khiển bộ so sánh
CVRCON (địa chỉ 9Dh) : thanh ghi điều khiển bộ so sánh điện áp
ADCON1 (địa chỉ 9Fh) : thanh ghi điều khiển bộ ADC
2.4.2 PORT B
PORTB (RPB) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tương
ứng là TRISB Bên cạnh đó một số chân của PORTB còn được sử dụng trong
quá trình nạp chương trình cho vi điều khiển với các chế độ nạp khác nhau
PORTB còn liên quan đến ngắt ngoại vi và bộ Timer0 PORTB còn được tích hợp chức năng điện trở kéo lên được điều khiển bởi chương trình
Các thanh ghi SFR liên quan đến PORTB bao gồm:
PORTB (địa chỉ 06h,106h) : chứa giá trị các pin trong PORTB
TRISB (địa chỉ 86h,186h) : điều khiển xuất nhập
OPTION_REG (địa chỉ 81h,181h) : điều khiển ngắt ngoại vi và bộ
Timer0
2.4.3 PORT C
PORTC (RPC) gồm 8 pin I/O Thanh ghi điều khiển xuất nhập tương ứng là TRISC Bên cạnh đó PORTC còn chứa các chân chức năng của bộ so sánh, bộ Timer1, bộ PWM và các chuẩn giao tiếp nối tiếp I2C, SPI, SSP, USART
Các thanh ghi điều khiển liên quan đến PORTC:
PORTC (địa chỉ 07h) : chứa giá trị các pin trong PORTC
TRISC (địa chỉ 87h) : điều khiển xuất nhập
Các thanh ghi liên quan đến PORTD bao gồm:
Thanh ghi PORTD : chứa giá trị các pin trong PORTD
Thanh ghi TRISD : điều khiển xuất nhập
Trang 29Thanh ghi TRISE : điều khiển xuất nhập PORTE và chuẩn giao tiếp PSP
2.4.5 PORT E
PORTE (RPE) gồm 3 chân I/O Thanh ghi điều khiển xuất nhập tương ứng là TRISE Các chân của PORTE có ngõ vào analog Bên cạnh đó PORTE còn là các chân điều khiển của chuẩn giao tiếp PSP
Các thanh ghi liên quan đến PORTE bao gồm:
PORTE : chứa giá trị các chân trong PORTE
TRISE : điều khiển xuất nhập và xác lập các thông số cho chuẩn giao tiếp PSP
ADCON1 : thanh ghi điều khiển khối ADC
2.5 TIMER
2.5.1 TIMER 0
Đây là một trong ba bộ đếm hoặc bộ định thời của vi điều khiển PIC16F877A Timer0 là bộ đếm 8 bit được kết nối với bộ chia tần số (prescaler) 8 bit Cấu trúc của Timer0 cho phép ta lựa chọn xung clock tác động và cạnh tích cực của xung clock Ngắt Timer0 sẽ xuất mhiện khi Timer0 bị tràn Bit TMR0IE (INTCON<5>) là bit điều khiển của Timer0 TMR0IE=1 cho phép ngắt Timer0 tác động, TMR0IF= 0 không cho phép ngắt Timer0 tác động Sơ đồ khối của Timer0 như sau:
Muốn Timer0 hoạt động ở chế độ Timer ta clear bit TOSC (OPTION_REG<5>), khi đó giá trị thanh ghi TMR0 sẽ tăng theo từng chu kì xung đồng hồ (tần số vào Timer0 bằng ¼ tần số oscillator) Khi giá trị thanh ghi TMR0 từ FFh trở về 00h, ngắt Timer0 sẽ xuất hiện
Trang 30Thanh ghi TMR0 cho phép ghi và xóa được giúp ta ấn định thời điểm ngắt Timer0 xuất hiện một cách linh động
Muốn Timer0 hoạt động ở chế độ counter ta set bit TOSC (OPTION_REG<5>) Khi đó xung tác động lên bộ đếm được lấy từ chân RA4/TOCK1 Bit TOSE (OPTION_REG<4>) cho phép lựa chọn cạnh tác động vào bột đếm Cạnh tác động sẽ là cạnh lên nếu TOSE=0 và cạnh tác động sẽ là cạnh xuống nếu TOSE=1
Khi thanh ghi TMR0 bị tràn, bit TMR0IF (INTCON<2>) sẽ được set Đây chính là cờ ngắt của Timer0 Cờ ngắt này phải được xóa bằng chương trình trước khi bộ đếm bắt đầu thực hiện lại quá trình đếm Ngắt Timer0 không thể “đánh thức” vi điều khiển từ chế độ sleep
Bộ chia tần số (prescaler) được chia sẻ giữa Timer0 và WDT (Watchdog Timer) Điều đó có nghĩa là nếu prescaler được sử dụng cho Timer0 thì WDT
sẽ không có được hỗ trợ của prescaler và ngược lại Prescaler được điều khiển bởi thanh ghi OPTION_REG Bit PSA (OPTION_REG<3>) xác định
Trang 31đối tượng tác động của prescaler Các bit PS2:PS0 (OPTION_REG<2:0>) xác định tỉ số chia tần số của prescaler Xem lại thanh ghi OPTION_REG để xác định lại một cách chi tiết về các bit điều khiển trên
Các lệnh tác động lên giá trị thanh ghi TMR0 sẽ xóa chế độ hoạt động của prescaler Khi đối tượng tác động là Timer0, tác động lên giá trị thanh ghi TMR0 sẽ xóa prescaler nhưng không làm thay đổi đối tượng tác động của prescaler Khi đối tượng tác động là WDT, lệnh CLRWDT sẽ xóa prescaler, đồng thời prescaler sẽ ngưng tác vụ hỗ trợ cho WDT
Các thanh ghi điều khiển liên quan đến Timer0 bao gồm:
TMR0 (địa chỉ 01h, 101h) : chứa giá trị đếm của Timer0
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)
OPTION_REG (địa chỉ 81h, 181h): điều khiển prescaler
2.5.2 TIMER 1
Timer1 là bộ định thời 16 bit, giá trị của Timer1 sẽ được lưu trong hai thanh ghi (TMR1H:TMR1L) Cờ ngắt của Timer1 là bit TMR1IF (PIR1<0>) Bit điều khiển của Timer1 sẽ là TMR1IE (PIE<0>) Tương tự như Timer0, Timer1 cũng có hai chế độ hoạt động: chế độ định thời (timer) với xung kích
là xung clock của oscillator (tần số của timer bằng ¼ tần số của oscillator) và chế độ đếm (counter) với xung kích là xung phản ánh các sự kiện cần đếm lấy từ bên ngoài thông qua chân RC0/T1OSO/T1CKI (cạnh tác động là cạnh lên) Việc lựa chọn xung tác động (tương ứng với việc lựa chọn chế độ hoạt động là timer hay counter) được điều khiển bởi bit TMR1CS (T1CON<1>)
Sau đây là sơ đồ khối của Timer1:
Trang 32Ngoài ra Timer1 còn có chức năng reset input bên trong được điều khiển bởi một trong hai khối CCP (Capture/Compare/PWM)
Khi bit T1OSCEN (T1CON<3>) được set, Timer1 sẽ lấy xung clock từ hai chân RC1/T1OSI/CCP2 và RC0/T1OSO/T1CKI làm xung đếm Timer1
sẽ bắt đầu đếm sau cạnh xuống đầu tiên của xung ngõ vào Khi đó PORTC sẽ
bỏ qua sự tác động của hai bit TRISC<1:0> và PORTC<2:1> được gán giá trị
0 Khi clear bit T1OSCEN Timer1 sẽ lấy xung đếm từ oscillator hoặc từ chân RC0/T1OSO/T1CKI
Timer1 có hai chế độ đếm là đồng bộ (Synchronous) và bất đồng bộ (Asynchronous) Chế độ đếm được điều khiển bằng bởi bit điều khiển bởi bit /T1SYNC (T1CON<2>)
Khi /T1SYNC = 1 xung đếm từ bên ngoài sẽ không được đồng bộ hóa
với xung clock bên trong Timer1 sẽ tiếp tục quá trình đếm khi vi điều khiển đang ở chế độ sleep và ngắt do Timer1 tạo ra khi bị tràn có khả năng “đánh thức” vi điều khiển Ở chế độ đếm bất đồng bộ, Timer1 không thể được sử dụng để làm nguồn xung clock cho khối CCP (Capture/Compare/Pulse width modulation)
Khi /T1SYNC = 0, xung đếm vào Timer1 sẽ được đồng bộ hóa với xung clock bên trong Ở chế độ này Timer1 sẽ không hoạt động khi vi điều khiển đang ở chế độ sleep
Các thanh ghi liên quan đến Timer1 bao gồm:
INTCON (địa chỉ 0Bh, 8Bh, 10Bh, 18Bh): cho phép ngắt hoạt động (GIE và PEIE)