Thiết kế và thi công bộ nghich lưu 12vVDC sang 220VAC

Điện trở là đại lượng vật lý đặc trưng cho tính chất cản trở dòng điện của một vật thể dẫn điện. Nó được định nghĩa là tỉ số của hiệu điện thế giữa hai đầu vật thể đó với cường độ dòng điện đi qua nó: R = U/I

doc89 trang | Chia sẻ: lvcdongnoi | Lượt xem: 3271 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Thiết kế và thi công bộ nghich lưu 12vVDC sang 220VAC, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Q6A – L1 - Tai – L2 – Q6B – 0V. Với càng nhiều cấp điện áp, các bậc thang càng bé lại, chất lượng dong điện càng được càng được nâng cao hơn, hiệu suất cũng tăng lên. Đến khi đạt mức lý tưởng với n cấp điện áp ( n → ∞) thì dòng điện sẽ là hình sin. Nhưng rất khó để thực hiện được điều đó. Vì càng tăng cấp điện áp thì tính phức tạp của mạch càng cao, Các tín hiệu điều khiển đòi hỏi tăng lên. Vì vậy các mức điện áp chỉ có thể tăng đến một giá trị nhất định. Ưu Điểm: Do sóng ra sau khi đã qua bộ lọc đã tương đối giống sóng sin vì vậy đã có khả năng chại các tải cảm như quat, máy bơm, các động cơ nhỏ. Hiệu suất cao hơn so với 2 loại trước. Nhược điểm: Giá thành tương đối cao, mạch tương đối phức tạp đòi hỏi phải có kiến thức chác mới có thể tìm hiểu và thi công láp đặt được. CHƯƠNG IV: THIẾT KẾ VÀ THI CÔNG BỘ NGHỊCH LƯU TỪ 12 VDC SANG 220 VAC/ 500W Sơ đồ khối của bộ nghịch lưu Sơ đồ khối Hiển thị Phím ấn Nguồng Hồi tiếp Bộ điều khiển trung tâm Tải Ắc quy Chuyển Mạch Chuyển đổi DC - AC 220 VAC Điện lưới Chức năng các khối Nguồn Tạo ra nguồn ổn áp 5 VDC cấp cho khối điều khiển trung tâm. Hạn dòng từ ác quy để cấp cho khối chuyển mạch Bộ điều khiển trung tâm. Tạo dao động 50Hz đưa tới điều khiển khối chuyển đổi DC – AC Kiểm tra các phím điều khiển và truyền dữ liệu cần hiển thị tới LCD ( giá trị điện áp của Ắc quy, giá trị điện áp cấp cho tải, giá trị điện áp nguồng điện khi nạp, chế độ hiện hành). Mã hóa dữ liệu nhận về từ khối hồi tiếp. Điều khiển khối chuyển mạch. Khối Hiển thị và phím ấn Khối thực hiện giao tiếp giữ bộ nghịch lưu và người sử dụng, khối này cho người sử dụng biết về các thông số đang hoạt động. Nhận các yêu cầu điều khiển của người dùng sau đó chuyền về bộ sủ lý trung tâm để thực hiện yêu cầu đó Khối chuyển đổi DC – AC Thực hiện chuyển đổi tín hiệu một chiều từ Ắc quy thành tín hiệu soay chiều, có tần số là tần số là tần số cấp tới từ bộ điều khiển chung tâm Thực hiện lọc tín hiệu đầu ra. Chuyển mạch Thực hiện chuyển mạch bằng các Role để thực hiện thay đôi của các quá trình ( nghịch lưu hoặc nạp điện). Khối hồi tiếp Thực hiện lấy mẫu điện áp cấp cho tải và điện áp từ nguồn điện đưa về khối sử ly trung tâm. Các linh kiện sử dụng trong bộ nghịch lưu Vi điều khiển ATmega 16 Giới thiệu tổng quan Giới thiệu AVR: - Vi điều khiển AVR do hãng Atmel ( hoa kỳ ) sản xuất được giới thiệu lần đầu tiên năm 1996. AVR có rất nhiều dòng khác nhau bao gồm dòng Tiny ( như At tiny 13, At tiny 22…) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi , rồi đén dòng AVR ( chẳng hạn AT90S8535, AT90S8515…) co kích thước bộ nhớ vào loại trung bình và manh hơn là dòng Mega ( như ATmega 16, Atmega 32, ATmega 128…..) với bộ nhớ có kích thước vài Kbyte đến vài trăm Kb cùng với bộ ngoại vi đa dạng được tích hợpcả bộ LCD trên chip ( dòng LCD AVR). Tốc độ của dòng Mega cũng cao hơn so với các dòng khác. Sự khác nhau cơ bản giữa các đòng chính là cấu trúc ngoại vi, còn nhân thì vẫn như nhau - ATmega16 là một lọai Vi điều khiển có nhìều tính năng đặc biệt thích hợp cho việc giải quyết những bài tóan điều khiển trên nền vi xử lý. +Các lọai vi điều khiển AVR rất phổ biến trên thị trừơng Việt Nam nên không khó khăn trong việc thay thế và sửa chữa hệ thống lúc cần. +Giá thành của dòng Vi Điều Khiển này khá phải chăng +Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng.Các thiết kế demo nhiều nên có nhiều gợi ý tốt cho người thiết kế hệ thống. - ATmega16 là vi điều khiển 8bit dựa trên kiến trúc RISC. Với khả năng thực hiện mỗi lệnh trong vong một chu kỳ xung clock, Atmega16 có thể đạt được tốc độ 1MIPS trên mỗi MHz( 1triệu lệnh/s/MHz),các lệnh được xử lý nhanh hơn,tiêu thụ năng lượng thấp. Chức năng của ATmega 16 Hình 4.1 Sơ đồ chân Atmega 16 * Atmega16 có cấu trúc RISC với: +131 lệnh,hầu hết được thực thi trong 1 chu kì xung nhịp. +32x8 thanh ghi đa dụng +Full static operation +Tốc độ làm việc 16MPIS,với thạch anh 16MHz +Trong chip co 2 chuc nang ho tro go roi va lap trinh saon chuong trinh - Bộ nhớ: +16 KB ISP Flash với khả năng 10.000lần ghi/xóa +512Byte EEROM +1KB SRAM ngọai * Giao tiếp JTAG +Khả năng quét toàn diện theo chuẩn JTAG +Hỗ trợ khả năng gỡ rối +Hỗ trợ lập trình Flash,EEROM,fuse… +Lock bit qua giao tiếp JTAG * Ngọai vi: +2 timer/counter 8 bit với các mode :so sánh và chia tần số +1 timer/counter 16 bit với các mode:so sánh,chia tần số,capture,PWM +1 timer thời gian thực(Real time clock) với bộ dao động riêng biệt +4 kênh PWM(họăc nhiều hơn trong các VĐK khác thuộc họ này) +8 kênh biến đổi ADC 10bit +Hỗ trợ giao tiếp I2C +Bộ giao giao tiếp nối tiếp lập trình được USART +Giao tiếp SPI +Watch_dog timer với bộ dao động on-chip riêng biệt * Những thuộc tính đặc biệt: +Power On reset và Brown-out detection +chế độ hiệu chỉnh bộ sai số cho bộ dao động RC On-chip +Các chế độ ngắt ngòai và trong đa dạng +6 mode sleep:Idle,ADC noise reduction,tiết kiệm năng lượng,power-down, standby,extended standby * I/O port: +32 chân I/O(Atmega16) và 21 chân I/O (Atmega8) lập trình được +vỏ 40 chaân (Atmega16) ,28 chân(Atmega8),64 chân(AT90can128); * Nguồn cấp: 2,7->5.5 V với ATmega16L 4.5->5.5V với ATmega16H * Tiêu hao năng lượng: +Khi họat động tiêu thụ dòng 1,1mA +Ở mode Idle tiêu thụ dòng 0.35mA +Ở chế độ Power_down tiêu thụ dòng nhỏ hơn 1uA * Đây là những chức năng cơ bản thường thấy trong các Vi điều khiển AVR,ngòai ra trong các vi điều khiển khác thuộc dòng vi điều khiển này thì thường được hỗ trợ thêm những chức năng đặc biệt.Ví dụ AT90can128 hỗ trợ thêm bộ giao tiếp mạng Can bus on-chip * Các phần mềm lập trình cho AVR: + AVRStuido (free), Code Vision. Các phần mềm này có hỗ trợ phần nạp và debug on chip + Ngoài ra có thể dùng chương trình nạp PonyProg2000, Winpic800... Một số modul của Atmega 16 Cổng vào ra I/O - Vi điều khiển ATmega16 có 32 đuờng vào ra chia làm bốn nhóm 8bit một. Các cổng vào ra của AVR là cổng vào ra 2 chiều có thể định hướng, tức có thể chọn hướng của cổng là hướng vào ( input ) hay hướng ra ( out put ). Tất cả các cổng vào ra của AVR đều có tính năng Đọc- Chỉnh sửa- Ghi ( Read- Modify-Write ) khi sử dụng chúng như là các cổng vào ra số thong thường. Điều này có nghĩa là khi tat hay đổi hướng của 1 chân nào đó thì nó không ảnh hưởng tới hướng của các chân khác, Tất cả các chân của các các cổng ( Port ) đều có điện trở kéo lên (Pull-up ) riêng, ta có thể cho phếp hay không cho phép điện trở léo lên này hoat động. - Điện trở kéo lên ( pull- up ): là 1 điện trở được dung khi thiết kế các mạch điện tử logic. Nó có 1 đầu được nói với nguồn điện áp dương ( thường là Vcc hoặc Vdd) và đầu còn lại được nối với tín hiệu lối vào/ra của 1 mạch logic chức năng, Điện trở kéo lên có thể được nắp đặt tại các lối vào ra của các khôíi mạch logic để thiết lập mức logic của khối mạch khi không có thiết bị ngoài nối với lối vào. Điện trở kếo lên cũng có thể nắp đặt tại các gaio diện giữa 2 khối mạch logic không cùng loại logic, đặc biệt là khi 2 khối mạch này được cấp nguồn khác nhau. - Khi khảo sát các cổng như là các cổng vào ra số thong thường thì tính chất của các cổng ( Port A, PortB, PortC ) là tương tự nhau, nên ta chỉ cần lkhảo sát 1 cổng nào đó trong 3 cổng của vi điều khiển là đủ - Mỗi 1 cổng vào ra của vi điều khiển được lien kết với 3 thanh ghi : PORTx, DDRx, PINx (ở đây x là thay thé cho A, B, C ). Ba thanh ghi này sẽ được phối hợp với nhau đẻ điều khiển hoạt động của cổng, chẳmg hạn thiết lạp cổng thành lối vào có sử dụng điện trở pull-up… Sau đây là vai trò của 3 thanh ghi trên. Thanh ghi DDRx Đây là thanh ghi 8bit( ta có thể đọc và ghi ở các thanh ghi này) có tác dụng điều khiển hướng cổng PORTx( tức là cổng vào hay cổng ra). Nếu như một bit trong thanh ghi này được set thì bit tương ứng đó trên PORTx đuệoc định nghĩa như một cổng ra. Ngược lại nếu như bit đó không được set thi bit tương úng trên PORTx được định nghĩa là cổng vào Thanh ghi PORTx Đây cũng là thanh ghi 8bit ( các bit có thể đọc và được ghi) nó là thanh ghi dữ liệu của cổng Px và trong trường hợp nếu cổng được định nghĩa là cổng ra thì khi tag hi một môtl bit lên thanh ghi này thì chân tương ứng trên port đó cùng có mức logic. Trong trường hợp đó mà cổng được định nghĩa là cổng vào thì thanh ghi này mang dữ liệu điều khiển cổng. Cụ thể là nếu bit nào đó của thanh ghi này được set (đưa lên mức 1 ) thì điện trở kéo lên pull up của chân tương ứng của port đó sẽ được kích hoạt. Ngược lại nó sẽ ở trạng thái. Thanh ghi này sau khi khởi động Vi điều khiển sẽ có giá trị là 0x00 Thanh ghi PINx Đây là thanh ghi 8bit chứa dữ liệu vào của PORTx ( trong trường hợp PORTx được thiết lập là cổng vào) và nó chỉ có thể đọc mà không ghi vào được Bộ nhớ AVR ATmega16 - AVR có 2 không gian bộ nhớ chính là bộ nhớ dữ liệu vào bộ nhớ chương trình. Ngoài ra ATmega16 còn có them bộ nhớ EEPROM để lưu trữ dữ liệu Bộ nhớ chương trình( bộ nhớ Flash) bộ nhớ Flash 16Kb của ATmega16 dùng để lưu trữ chương trình. Do các lẹnh của AVR có độ dài 16 hoặc 32 bit nên bộ nhớ Flash được sắp xếp théo kiểu 8Kx16. Bộ nhớ Flash được chia làm 2 phần, phần dành cho chương trình boot và phần dành cho chương trinh ứng dụng Bộ nhớ dữ liệu SRAM 1120 ô nhớ dữ liệu đinh địa chỉ cho file thanh ghi, bộ nhớ I/O và bộ nhớ dữ liệu SRAM nội. Trong đó 96 ô nhớ đầu tiên định địa chỉ cho file thanh ghi và bộ nhớ I/O và 1024 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội Hình 4.2 Cấu trúc bộ nhớ Bộ nhớ dữ liệu EEPROM Đây là bộ nhớ dữ liệu có thể ghi xoá ngay trong lúc vi điều khiẻn hoạt động và không bị mất dữ liệu khi nguồn điện cung cấp bị mất. Có thể ví bộ nhớ dữ liệu EEPROM giống như ổ cứng của máy tính. Với vi điều khiển ATmega16 chứa bộ nhớ dữ liệu EEPROM dung lượng 512byte, và được sắp xếp theo từng byte, cho phép các thao tác đọc/ ghi từng byte một . EEPROM được xem như là 1 bộ nhớ vào ra được đánh địa chỉ độc lập với SRAM , điều này có nghĩa ta cần sử dụng cá lệnh in , out… khi muốn truy xuất tới EEPROM. Để điều khiển vào ra dữ liệu với EEPROM ta sử dụng 3 thanh ghi sau: Thanh ghi EEAR (EEARH và EEARL ) EEAR là thanh ghi 16 bit lưu giữ địa chỉ của các ô nhớ của EEPROM, thanh ghi EERA được kết hợp từ 2 thanh ghi 8 bit là EEARH và thanh ghi EEARL. Thanh ghi EECR Đây là thanh ghi điều khiển EEPROM, ta chỉ sử dụng 4 bit đầu chảu thanh ghi này,4 bit cuối là dự trữ. Sau đây là chức năng của từng bit. Bit 3- EERIE : EEPROM ( Ready Interrup Enable) : Đây là bit cho phép EEPROM ngắt CPU, khi bit này được set thành 1 và ngắt toàn cục dược cho phép ( bằng cách set bit 1 trong thanh ghi SREG lên 1) thì EEPROM sẽ tạo ra 1 ngắt với CPU khi bit EEWE được xoá, điều này có nghĩa là khi các ngắt được cho phép ( bit 1 trong thanh ghi SREG và bit EERIE tronh thanh ghi EECR được set thành 1) với quá trình ghi vào ROM vừa xong thì sẽ tạo ra 1 ngắt với CPU , chương trình sẽ nháy với vectơ ngắt có địa chỉ là 002C để thực hiện chương trình phục vụ ngắt (ISR ). Khi bit EERIE là 0 thì ngắt không được cho phép. Bit 2- EEMWE : EEPROM Master Write Enable : Khi bit EEMWE và bit EEWE là 1 sẽ ra lệnh cho CPU ghi dữ liệu từ thanh ghi EEDR vào EEPROM, địa chỉ của ô nhớ cần ghi trong EEPROM dược lưu trong thanh ghi EEAR. Khi bit này là 0 thì không cho phép ghi vào EEPROM. Bit EEMWE sẽ được xoá bởi phần cứng sau 4 chu kỳ máy. Bit1- EEWE : EEPROM (Write Enable ) Bit này vừa đong vai trò như 1 bit cờ, vừa là bit điều khiển việc ghi dữ liệu vào EEPROM. Ở vai trò của 1 bit điều khiển nếu bit EEMWE đã được set lên 1 thì khi ta set bit EEWE lên 1 thì sẽ bắt đầu quá trình ghi dữ liệu vào EEPROM. Trong suốt quá trình ghi dữ liệu vào EEPROM bit EEWE luôn giữ là 1. Ở vai trò của 1 bit cờ khi quá trình ghi dữ liệu vào EEPROM hoàn tất , phần cứng sẽ tự động xoá bit này về 0. Trước khi dữ liệu vào EEPROM ta cần phải biết chắc là khong có qú trình ghi EEPROM nào khác đang xảy ra , đẻ biết được điều này ta cần kiểm tra bit EEWE. Để ý là sau khi quá trình đọc dữ liẹu từ EEPROM hoàn tất, bit EERE sẽ được tự động xoá bởi phần cứng. Nếu EEPROM đang được ghi thì ta không thể đọc được dữ liệu từ EEPROM. Khi bắt đầu quá trình đọc dữ liệu từ EEPROM , CPU sẽ tạm nghỉ 4 chu kỳ máy trước khi thực hiện lếnh kế tiếp. - Tóm lại để ghi vào EEPROM ta cần thực hiện các bước sau: + Chờ cho bit EEWE về 0 + Cấm tất cả các ngắt + Ghi địa chỉ vào thanh ghi EEAR + Ghi dữ liệu mà ta cần ghi vào EEPROM vào thanh ghi EEDR + Set bit EEMWE thành 1 + Set bit EEWE thành 1 + Cho phép các ngắt trở lại - Nếu 1 ngắt xảy ra giữa bước 5 và 6 sẽ làm hỏng quá trình ghi vào EEPROM bởi vì bit EEMWE sau khi set lên 1 chỉ được giữ trong 4 chu kỳ máy, chương trình ngắt sẽ làm hết thời gian ( Time out ) duy trì bit này ở mức 1. - Một ngắt xuất hiện ở cuối bước 4 cũng có thể làm cho địa chỉ và dữ liệu cần ghi vào EEPROM trở lên không chính xác nếu trong vhương trình phục vụ ngắt có chỉnh sửa lại các thanh ghi EEAR và EEDR. Đó là lý do ta cần cấm các ngắt trước khi thực hiện tiếp các bước 3, 4, 5, 6 Quá trình ghi dữ liệu vào EEPROM cũng có thể không an toàn nếu điện thé nguồn nuôi (Vcc) quá thấp. Đọc dữ liệu từ EEPROM :Việc đọc dữ liệu từ EEPROM đơn giản hơn ghi dữ liệu vào EEPROM, để đọc dữ liệu từ EEPROM ta thực hiện các bước sau: Chờ cho bit EEWE về 0. Ghi địa chỉ vào thanh ghi EEAR . Set bit EERE lên 1 Bộ Định thời (Timer/ Counter ) - là một modum định thời/đếm 8bit, có đặc điểm sau: + Bộ đếm một kênh. + Xoá bộ định thời khi trong mode so sánh( tự động nạp) + PWM + Tạo tần số + Bộ đếm sự kiẹn ngoài + Bộ chia tần 10 bit + Nguồn ngắt tràn bộ đếm và so sánh - Các thanh ghi : TCNT0 và OCR0 là các thanh ghi 8 bit. Các tín hiệu yêu cầu ngắt đều nằm trong thanh ghi TIFR. Các ngắt có thể được che bởi thanh ghi TIMSK. - Bộ định thời có thể sử dụng xung clock nội thong qua bộ chia hoặc xung clock ngoài trên chân T0. Khối chọn xung clock điều khiển việc bộ định thời/bộ đếm sẽ dung nguồn xung nào để tăng giá trị của nó. Ngõ ra của khối chọn xung clock được xem là xung clock của bộ định thời. - Đơn vị đếm - Phần chính của bộ định thời 8 bit là 1 đơn vị song hướng có thể lập trình được Hình 4.3 Đơn vị đếm Count: tăng hay giảm TCNT01. Direction: lựa chọn giữa đếm lên và đếm xuống. Clear: xoá thanh ghi TCNT0. Clkto : xung clock của bộ định thời. TOP: báo hiệu bộ định thời đã tăng đến giá trị lớn nhất. BOTTOM: báo hiệu bộ đinh thời đã giảm đến giá trị nhỏ nhất(0). * Đơn vị so sánh ngõ ra Bộ sa sánh 8 bit lien tục so sánh giá trị TCNT0 với giá trị trong thanh ghi so sánh ngõ ra(OCR0). Khi giá trị TCNT0 băng với OCR0, bộ so sánh sẽ tạo một báo hiệu. Báo hiệu này sẽ đặt giá trị cờ so sánh ngõ ra (OCF0 ) lên 1 vào chu kỳ xung clock tiếp theo. Nếu được kích hoạt ( OCIE0=1 ), cờ OCF0 sẽ tạo ra 1 ngắt được thực thi. Cờ OCF0 cũng có thể được xoá bằng phần mềm. Hình 4.4 Sơ đồ đơn vị so sánh ngõ ra - Mô tả các thanh ghi Thanh ghi điều khiển bộ định thời/bộ đếm TCCR0 + Bit 7- FOC0 : so sánh ngõ ra bắt buộc Bit này chỉ tích cực khi bit WGM00 chỉ định chế độ làm việc không có PWM. Khi đặt bit này lên 1, một báo hiệu so sánh bắt buộc xuất hiện tại đơn vị tạo dạng song + Bit 6, 3- WGM01, WGM00 : chế độ tạo dang song Các bit này điều khiển đếm thứ tự của bộ đếm, nguồn cho giá trị lón nhất của bộ đếm ( TOP ) và kiểu tạo dạng song sẽ được sử dụng. + Bit 5, 4- COM01, COM00 : chế độ báo hiệu so sánh ngõ ra Các bit này điều khiển hoạt động của chân OC0. Nếu 1 hoặc cả 2 bit COM01 và COM00 được đặt lên 1, ngõ ra OC0 sẽ hoạt động. + Bit 2, 0- CS02, CS00 : chọn sung đồng hồ Ba bit này dung để lựa chọn nguồn xung cho bộ định thời/ bộ đếm Thanh ghi bộ định thời/ bô đếm - Thanh ghi bộ định thời/ bộ đếm cho phép truy cập trực tiếp ( cả đọc và ghi) vào bộ đếm 8 bit Thanh ghi so sánh ngõ ra- OCR0 - Thanh ghi này chứa 1 giá trị 8 bit và lien tục được so sánh với giá trị của bộ đém - Thanh ghi mặt nạ ngắt + Bit 1- OCIE0: cho phép ngắt báo hiệu so sánh + Bit 0- TOIE0 :cho phép ngăt tràn bộ đếm Thanh ghi cờ ngắt bộ định thời + Bit 1- OCF0 : cờ so sánh ngõ ra 0 + Bit 0- TOV0 : cờ tràn bộ đếm Bit TOV0 được đặt lên 1 khi bộ đếm bị tràn và đựoc xoá bởi phần cứng khi vectơ ngắt tương ứng được thực hiện . Bit này cũng có thể xoá bằng phần mềm. Ngắt ( Interrup) Khái niệm về ngắt : Ngắt là sự kiện bên trong hay bên ngoài làm ngắt bộ vi điều khiển để báo cho nó biết rằng thiết bị cần dịch vụ của nó. - Một bộ vi điều khiển có thể phục vụ một vài thiết bị, có 2 cách để thực hiện điều này đó là sử dụng các ngắt Interrup và thăm dò ( polling). Trong phương pháp sử dụng các ngắt thì mỗi khi có thiết bị bất kỳ cần đến dịch vụ của nó thì nó báo cho bộ vi điều khiển bằng cách gửi 1 tín hiệu ngắt. Khi nhận được tín hiệu ngắt thì bộ vi điều khiển ngắt tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị. Chương trình đi cùng ngắt được gọi là dịch vụ ngắt ISR hay còn gọi là chương trình quản lý ngắt. Còn trong phương pháp thăm dò thì bộ vi điều khiển hiển thị lien tục tình trạng của 1 thiết bị đã cho và điều khiển thỏa mãn thì nó phục vụ thiết bị. Sau đó chuyển sang hiển thị tình trạng của thiết bị kế tiếp cho đến khi tất cả đều được phục vụ - Điểm mạnh của phương pháp ngắt là bộ vi điều khiển là phục vụ rất nhiều thiết bị( tất nhiên là không cùng tại một thời điểm. Trình phục vụ ngắt - Đối với mỗi ngắt thì phải có 1 trình phục vụ ngắt ISR hay trình ngắt. Khi 1 ngăt được gọi thì bộ vi điều khiển phục vụ ngắt. Đối với mỗi ngắt thì có 1 vị trí cố định trong bộ nhớ giữa địa chỉ ISR của nó. Nhóm các vị trí nhớ được dành riêng để gửi các địa chỉ của các ISR được gọi là bảng vectơ ngắt. - Khi kích hoạt 1 ngắt bộ vi điều khiển đi qua các bước sau : + Vi điều khiển kết thúc lênh đang thực hiện và lưu trữ đia chỉ của lệnh kế tiếp ( PC ) vào ngăn xếp. + Nó nhảy đến 1 vị trí cố định trong bộ nhớ được gọi là bảng vectơ ngắt nơi lưu giữ địa chỉ của 1 trình phục vụ ngắt + Bộ vi điều khiển nhận địa chỉ ISR từ bảng vectơ ngắt và nhảy tới đó. Nó bắt đầu thực hiện trình phục vụ ngắt cho đến lệnh cuối cùng của ISR và RETI ( trở về từ ngắt ) + Khi thực hiện lệnh RETI bộ vi điều khiển quay trở về nơi nó đã bị ngắt. Trước hết nó nhận địa chỉ của bộ đếm chương trình PC từ ngăn xếp bằng cách kéo 2 byte trên đỉnh của ngăn xếp vào PC. Sau đó bắt đầu thực hiện các lệnh từ địa chỉ đó. Bảng vectơ ngắt của Atmega 16 USART -USART : Bộ truyền nhận nối tiếp đồng bộ và bất đồng bộ phổ dụng . Đây là khối chức năng dung cho việc truyền thong giữa vi điều khiển với các thiết bị khác. Trong vấn đè truyền dữ liệu só, có thể phân chia cách thức(method) truyền dữ liệu ra 2 chế độ mode cơ bản là : chế độ nhận Đồng Bộ (shynchronous) và chế độ nhận Bất đồng bộ (Asynchronous). Ngoài ra , nếu có góc độ phần cứng thì có thể phân chia theo cách khác đó là : Truyền nhận dữ liệu theo kiểu Nối Tiếp ( serial) và song song (paralen) Truyền đồng bộ: là kiểu truyền dữ liệu trong đó bộ truyền (Transmitter) và bộ nhận(Receiver) sử dụng chung mọt xung đồng hồ (clock).Do đó hoạt động truyền và nhận dữ liệu diễn ra đồng thời. Xung clock có vai trò là tín hiệu đồng bộ cho hệ thống ( gồm khối truyền và khối nhận). Ưu điểm của kiểu ctuyền đồng bộ là tốc độ nhanh, thích hợp khi truyền dữ liệu khôí block). Truyền bất đồng bộ : là kiểu truyền dữ liệu trong đó mỗi bộ truyền (transmitter) và bộ nhận (receiver) có tạo bộ xung (lock) riêng, tốc độ xung clock ở 2 khối này có thể khác nhau, nhưng thưòng khong quá 10%. Do không dung chung xung clock, nên để đồng bộ quá trình truyền và nhận dữ liệu, người ta phải truyền các bit đồng bộ (Start, stop,…) đi kèm với các bit dữ lieu. Các bộ truyền và bộ nhận sẽ dựa vào các bit đồn bộ này quyết định khi nào sẽ thực hiện hay kết thúc quá trình truyền hoặc nhận dữ liệu. Do đó, hệ thống truyền không đồng bộ còn được gọi là hệ thống truyền “ tự đồng bộ “ -Từ 2 kiểu truyền dữ liệu cơ bản trên,người ta dưa ra nhiều giao thức truyền khác nhau như : SPI (đồng bộ ), USRT (đồng bộ ), UART ( bất đồng bộ ) Hình 4.5 Sơ đồ khối bộ USART - Sơ đồ khói bộ USART được chia làm ba phần chính khối tạo xung Bộ truyền Bộ nhận - Bộ tạo xung clock : có chức năng thiết lập tốc đọ Baud. Bộ truyền bao gồm 1 thanh ghi đệm và một thanh ghi dịch, việc ghi dữ liệu vào bộ đếm cho phép quá trình truyền lien tục mà khong có độ trẽ giữa các khung. Bộ nhận có cấu tạo phức tạpnó bao gồm việc kiểm tra chẵn lẻ, điều khiển logic, thanh ghi dich, đồng thới nó có 2 cấp độ trong bộ đếm nhận . Ngoài việc đinh dạng khung như bộ truyền thì bộ nhận có khả năng phát hiện lỗi khung, lỗi chẵn lẻ, lỗi tràn dữ liệu Đơn vị tạo xung clock Txclk : xung đồng hồ bộ truyền Rxclk : xung đồng hồ bộ nhận Xcki : tín hiệu vào từ chân XCK, sử dụng cho truyền đồng bộ Master XCKO : tín hiệu cung clock ngõ ra tới chân XCK, sử dụng cho hoạt động truyền đồng bộ slave Fose: tần số tử chân XTAL -Định dạng khung: Trong ché độ truyền không đồng bộ, khung dữ liệu truyền đi không có 1tín hiệu clock để đồng bộ hoá dữ liêu ( vì thế mà gọi là không đồng bộ) , quá trình đông bộ hoá giữa bộ thu và bộ phát được thực hiện nhờ các bit đồng bộ là start bit và stop bit . Một khung nối tiếp bao giờ cũng được đinh dạn theo thứ tự 1 start bit , các bit giữ liệu (data bit ) 1 bit pairty tuỳ chọn phục vụ lỗi kiếm lỗi và kết thúc bằng 1 hoặc 2 stop bit Hình 4.6 Định dạng khung truyền St : bit start ( mức thấp ) (n) : bit dữ liệu ( 0 đến 8 ) P: bit chẵn lẻ Sp: bit stop ( mức cao ) IDLE : không có dữ liệu truyền ( mức cao trong suốt thời gian idle ) - USART chấp nhận các định dạng khung sau: 1 start bit (luôn có mức logic thấp, gọi là space) . 5, 6, 7, 8 hoặc 9 data bits. Không có, hoặc 1 bit parity chẵn/lẻ. 1 hoặc 2 stop bit (luôn có mức lôgic cao, gọi là mark). - Quá trình truyền USART: Việc truyền dữ liệu nối tiếp ra ngoài thông qua chân TxD.Một quá trình truyền dữ liệu từ MCU đi được khởi tạo bằng việc viết dữ liệu vào thanh ghi đệm dữ liệu UDR, sau đó dữ liệu được chuyển tới thanh ghi dịch bộ phát khi thanh ghi dịch đã sẵn sàng truyền một byte mới. Các bit start và stop được bổ sung vào khung dữ liệu trong thanh ghi này với thiết đặt từ thanh ghi điều khiển bộ phát. Cũng như vậy bit thứ 9 (nếu có) có thể được thêm vào TXB8 trong thanh ghi UCSRB trước khi byte thấp của ký tự được viết vào UDR. Khi thanh ghi dịch dịch hết dữ liệu (đã được điều chế) ra thế giới bên ngoài thông qua chân TxD, nó sẽ sẵn sàng nhận dữ liệu mới nếu nó đang ở trạng thái rỗi hoặc ngay lập tức sau khi bit stop cuối cùng của khung trước đó được truyền đi. Lưu ý rằng dữ liệu được dịch ra ngoài với bit LSB trước, cuối cùng là MSB. - Quá trình nhận USART: Phần mềm cho phép thanh ghi dịch nhận dữ liệu nối tiếp từ thế giới bên ngoài thông qua chân RxD (PD0). Bộ thu bắt đầu tiếp nhận dữ liệu khi dò được một bit Start. Sau khi dò được bit Stop đầu tiên (end of the frame), dữ liệu được chuyển đến thanh ghi UDR (bộ đệm dữ liệu bộ thu) không có các Start và Stop bits theo dạng song song để vào CPU. - USART có 5 thanh ghi + Thanh ghi vào/ra dữ liệu (UDR). Các thanh ghi đệm dữ liệu của bộ thu và bộ phát của USART cùng chia sẻ vùng địa chỉ I/O được tham chiếu là thanh ghi dữ liệu UDR. Khi viết vào UDR thì nó thể hiện như là một bộ đệm truyền, còn khi đọc dữ liệu từ UDR thì nó lại thể hiện như một bộ đệm nhận. Đối với các bit 5,6 và 7, các bit không dùng sẽ bị bỏ qua bởi bộ đệm truyền và được đọc là 0 bởi bộ đệm nhận. Bộ đệm truyền chỉ có thể được viết khi cờ UDRE trong thanh ghi UCSRA được set. Dữ liệu viết vào UDR khi cờ UDRE không được set sẽ bị bỏ qua. Khi dữ liệu được viết vào bộ đệm truyền và bộ đệm truyền được enable thì nó sẽ tải dữ liệu vào thanh ghi dịch truyền nếu nó rỗng. Bộ đệm thu gồm hai mức FIFO. Hai thanh ghi đệm hoạt động như một bộ đệm vòng FIFO. FIFO sẽ thay đổi trạng thái của nó bất cứ khi nào bộ đệm nhận được truy cập. Quan trọng là các cờ lỗi (FE và DOR), và bit dữ liệu thứ 9 (RXB8) được đệm cùng với dữ liệu trong bộ đệm nhận. Vì vậy các bit trạng thái luôn phải được đọc trước khi thanh ghi UDR được đọc. + Thanh ghi điều khiển và trạng thái A (UCSRA). Bit 7 – RXC: USART Receive Complete. Bit này được set khi có dữ liệu không đọc được vào bộ đệm nhận, hay bộ đệm nhận đ• đầy và nó bị xoá khi bộ đệm nhận là rỗng. Cờ RXC có thể sử dụng để phát ra một ngắt báo Receive Complete. Bit 6 – TXC: USART Transmit Complete: Bit này được set nếu quá trình truyền hoàn thành, đó là tại lúc kết thúc một khung gửi đi. Cờ TXC có thể dùng phát ra một ngắt Transmit Complete. Bit 5 – UDRE: USART Data Register Empty. Bit này được set nếu thanh ghi dữ liệu phát (bộ đệm truyền) là rỗng và sẵn sàng nhận dữ liệu mới. Cờ này cũng có thể dùng để phát ra một ngắt. Thanh ghi điều khiển và trạng thái B (UCSRB). Thanh ghi điều khiển và trạng thái C (UCSRC). Bit 7 – URSEL: Register Select. Bit này chọn việc truy nhập vào UCSRC hoặc UBRRH. Nếu URSEL = 1 thì sẽ chọn làm việc với UCSRC, URSEL phải được viết là 1 khi thực hiện viết UCSRC. Bit 6 – UMSEL: USART Mode Select. Bít này dùng để chọn giữa chế độ hoạt động đồng bộ (UMSEL = 1) hay không đồng bộ (UMSEL= 0). Thanh ghi tốc độ Baud (UBRRL và UBLLH).: Bit 15 – URSEL: Register Select . Làm việc với UBRRH.àURSEL = 0 Bit 14:12 – Reserved Bits. Các bit này dành cho các ứng dụng tương lai. Bit 11:0 – UBRR11:0: USART Baud Rate Register. Đây là thanh ghi 12 bit chứa tốc độ baud của USART, UBRRH chứa 4 bit cao nhất và UBBRRL chứa 8 bit thấp còn lại Giới thiệu màn hình hiển thị LCD Hình 4.7 Hình dạng LCD Hoạt động LCD Trong những năm gần đây LCD đang ngày càng được sử dụng rộng rãi thay thế dần cho các đèn LED (các đèn LED 7 đoạn hay nhiều đoạn). Đó là vì các nguyên nhân sau: Các LCD có giá thành hạ. Khả năng hiển thị các số, các ký tự và đồ hoạ tốt hơn nhiều so với các đèn LED (vì các đèn LED chỉ hiển thị được các số và một số ký tự). Nhờ kết hợp một bộ điều khiển làm tươi vào LCD làm giải phóng cho CPU công việc làm tươi LCD. Trong khi đèn LED phải được làm tươi bằng 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 cho các ký tự và đồ hoạ. Chức năng các chân của LCD LCD được nói trong mục này có 14 chân, chức năng của các chân được cho trong bảng 12.1. Vị trí của các chân được mô tả trên hình 12.1 cho nhiều LCD khác nhau. Chân VCC, VSS và VEE: Các chân VCC, VSS và VEE: Cấp dương nguồn - 5v và đất tương ứng thì VEE được dùng để điều khiển độ tương phản của LCD. Chân chọn thanh ghi RS (Register Select). Có hai thanh ghi rất quan trọng bên trong LCD, chân RS được dùng để chọn các thanh ghi này như sau: Nếu RS = 0 thì thanh ghi mà lệnh được chọn để cho phép người dùng gửi một lệnh chẳng hạn như xoá màn hình, đưa con trỏ về đầu dòng v.v… Nếu RS = 1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD. Chân đọc/ ghi (R/W). Đầu vào đọc/ ghi cho phép người dùng ghi thông tin lên LCD khi R/W = 0 hoặc đọc thông tin từ nó khi R/W = 1. Chân cho phép E (Enable). Chân cho phép E được sử dụng bởi LCD để chốt thông tin hiện hữu trên chân dữ liệu của nó. Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được áp đến chân này để LCD chốt dữ liệu trên các chân dữ liêu. Xung này phải rộng tối thiểu là 450ns. Chân D0 - D7. Đây là 8 chân dữ liệu 8 bít, được dùng để gửi thông tin lên LCD hoặc đọc nội dung của các thanh ghi trong LCD. Để hiển thị các chữ cái và các con số, chúng ta gửi các mã ASCII của các chữ cái từ A đến Z, a đến f và các con số từ 0 - 9 đến các chân này khi bật RS = 1. Cũng có các mã lệnh mà có thể được gửi đến LCD để xoá màn hình hoặc đưa con trỏ về đầu dòng hoặc nhấp nháy con trỏ. Bảng 4.2 liệt kê các mã lênh. Chúng ta cũng sử dụng RS = 0 để kiểm tra bít cờ bận để xem LCD có sẵn sàng nhân thông tin. Cờ bận là D7 và có thể đượcđọc khi R/W = 1 và RS = 0 như sau: Nếu R/W = 1, RS = 0 khi D7 = 1 (cờ bận 1) thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kỳ thông tin mới nào. Khi D7 = 0 thì LCD sẵn sàng nhận thông tin mới. Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất kỳ dữ liệu nào lên LCD. Bảng 4.2: Mô tả các chân của LCD. Chân Ký hiệu I/O Mô tả 1 VSS - Đất 2 VCC - Dương nguồn 5v 3 VEE - Cấp nguồn điều khiển phản 4 RS I RS = 0 chọn thanh ghi lệnh. RS = 1 chọn thanh dữ liệu 5 R/W I R/W = 1 đọc dữ liệu. R/W = 0 ghi 6 E I/O Cho phép 7 DB0 I/O Các bít dữ liệu 8 DB1 I/O Các bít dữ liệu 9 DB2 I/O Các bít dữ liệu 10 DB3 I/O Các bít dữ liệu 11 DB4 I/O Các bít dữ liệu 12 DB5 I/O Các bít dữ liệu 13 DB6 I/O Các bít dữ liệu 14 DB7 I/O Các bít dữ liệu Bảng 4.3: Các mã lệnh LCD. Mã (Hex) Lệnh đến thanh ghi của LCD 1 Xoá màn hình hiển thị 2 Trở về đầu dòng 4 Giả con trỏ (dịch con trỏ sang trái) 6 Tăng con trỏ (dịch con trỏ sang phải) 5 Dịch hiển thị sang phải 7 Dịch hiển thị sang trái 8 Tắt con trỏ, tắt hiển thị A Tắt hiển thị, bật con trỏ C Bật hiển thị, tắt con trỏ E Bật hiển thị, nhấp nháy con trỏ F Tắt con trỏ, nhấp nháy con trỏ 10 Dịch vị trí con trỏ sang trái 14 Dịch vị trí con trỏ sang phải 18 Dịch toàn bộ hiển thị sang trái 1C Dịch toàn bộ hiển thị sang phải 80 Ép con trỏ Vũ đầu dòng thứ nhất C0 Ép con trỏ Vũ đầu dòng thứ hai 38 Hai dòng và ma trận 5 x 7 IC ổn áp nguồn 7805 Hình 4.8 hình dạng và cấu tạo của 7805 Chân 1 : ngõ vào Chân 2: GND (mass) Chân 3: ngõ ra ổn áp 7805 là IC ổn áp. Ngõ ra OUT luôn ổn định ở 5V dù điện áp từ nguồn cung cấp thay đổi tùy theo từng loại . IRF 3205 Linh kiện bán dẫn này là MOSFET ( Metal – oxit semiconductor field – Effect transistor), được thiết kế bởi hãng International Rectifier. Sơ đồ cấu tạo hình 4.9 Hình 4.9 hình dạng và cấu tạo IRF3205 Các chân của IRF3205: G ( Gate) : Cực cửa. D ( Drain) : Cực máng. S ( Source) : Cực nguồn. Đặc tính kỹ thuật: Điện áp chịu đựng lớn nhất giữa cực D và S là VDS =55V Điện trở nội khi đẫn là RDS(on) = 8.0 mΩ Dong ID Tại Tc=25oC và VGS = 10V thì ID(max) = 110 A. Tại Tc=100oC và VGS = 10V thì ID(max) = 80 A. Ở chế độ xung ID(Max) = 390 A. Nhiệt độ hoạt động từ -55oC đến 175oC Parameter Max. Units ID @ TC = 25°C Continuous Drain Current, VGS @ 10V 110 © A ID @ TC = 100°C Continuous Drain Current, VGS @ 10V 80 IDM Pulsed Drain Current D 390 PD @TC = 25°C Power Dissipation 200 W Linear Derating Factor 1.3 W/°C VGS Gate-to-Source Voltage ± 20 V IAR Avalanche CurrentD 62 A EAR Repetitive Avalanche EnergyD 20 mJ dv/dt Peak Diode Recovery dv/dt 5.0 V/ns TJ TSTG Operating Junction and Storage Temperature Range -55 to + 175 °C Soldering Temperature, for 10 seconds 300 (1.6mm from case ) Mounting torque, 6-32 or M3 srew 10 lbf•in (1.1N•m) Diode Hinhf 4.10 hình dạng và cấu tạo của diode Điốt bán dẫn là các linh kiện điện tử thụ động và phi tuyến, cho phép dòng điện đi qua nó theo một chiều mà không theo chiều ngược lại, sử dụng các tính chất của các chất bán dẫn. Có nhiều loại điốt bán dẫn, như điốt chỉnh lưu thông thường, điốt Zener, LED. Chúng đều có nguyên lý cấu tạo chung là một khối bán dẫn loại P ghép với một khối bán dẫn loại N. Khối bán dẫn loại P chứa nhiều lỗ trống tự do mang điện tích dương nên khi ghép với khối bán dẫn N (chứa các điện tử tự do) thì các lỗ trống này có xu hướng chuyễn động khuếch tán sang khối N. Cùng lúc khối P lại nhận thêm các điện tử (điện tích âm) từ khối N chuyển sang. Kết quả là khối P tích điện âm (thiếu hụt lỗ trống và dư thừa điện tử) trong khi khối N tích điện dương (thiếu hụt điện tử và dư thừa lỗ trống). Ở biên giới hai bên mặt tiếp giáp, một số điện tử bị lỗ trống thu hút và khi chúng tiến lại gần nhau, chúng có xu hướng kết hợp với nhau tạo thành các nguyên tử trung hòa. Quá trình này có thể giải phóng năng lượng dưới dạng ánh sáng (hay các bức xạ điện từ có bước sóng gần đó). Dòng điện thuận qua điốt không được lớn hơn giá trị tối đa cho phép (do nhà sản xuất cung cấp, có thể tra cứu trong các tài liệu của hãng sản xuất để xác định). Điện áp phân cực ngược (tức UKA) không được lớn hơn VBR (ngưỡng đánh thủng của điốt, cũng do nhà sản xuất cung cấp). Ví dụ điốt 1N4007 có thông số kỹ thuật do hãng sản xuất cung cấp như sau: VBR=1000V, IFMAX = 1A, VF¬ = 1.1V khi IF = IFMAX. Những thông số trên cho biết: Dòng điện thuận qua điốt không được lớn hơn 1A. Điện áp ngược cực đại đặt lên điốt không được lớn hơn 1000V. Điện áp thuận (tức UAK)có thể tăng đến 1.1V nếu dòng điện thuận bằng 1A. Cũng cần lưu ý rằng đối với các điốt chỉnh lưu nói chung thì khi UAK = 0.6V thì điốt đã bắt đầu dẫn điện và khi UAK = 0.7V thì dòng qua điốt đã đạt đến vài chục mA. Transistor Transistor là một linh kiện bán dẫn thường được sử dụng như một thiết bị khuếch đại hoặc một khóa điện tử. Tranzitor là khối đơn vị cơ bản xây dựng nên cấu trúc mạch ở máy tính điện tử và tất cả các thiết bị điện tử hiện đại khác. Vì đáp ứng nhanh và chính xác nên các tranzitor được sử dụng trong nhiều ứng dụng tương tự và số, như khuếch đại, đóng cắt, điều chỉnh điện áp, điều khiển tín hiệu, và tạo dao động.Tranzitor cũng thường được kết hợp thành mạch tích hợp (IC),có thể tích hợp tới một tỷ tranzitor trên một diện tích nhỏ. Cũng giống như điốt, tranzito được tạo thành từ hai chất bán dẫn điện. Khi ghép một bán dẫn điện âm nằm giữa hai bán dẫn điện dương ta được một PNP tranzito. Khi ghép một bán dẫn điện dương nằm giữa hai bán dẫn điện âm ta được một NPN tranzito hình 4.11. Mỗi tranzito đều có ba cực: Cực gốc (base) Cực góp (collector) Cực phát (emitter) Hình 4.11 transitor C1815 Để phân biệt PNP hay NPN tranzito ta căn cứ vào ký hiệu linh kiện dựa vào mũi tên trên đầu phát. Nếu mũi tên hướng ra thì tranzito là NPN, và nếu mũi tên hướng vào thì tranzito đó là PNP. Với Transistor C1815 Dặc tính của C1815 Công suất tiêu tán P = 0,4 W Dòng Collector I = 0,15 A Diện áp Collector-base V(BR)CBO: = 60 V Hệ số khuếch đại (VCE= 6V, IC= 2mA); hfe =70 Điện trở ( Resistor ) Điện trở là đại lượng vật lý đặc trưng cho tính chất cản trở dòng điện của một vật thể dẫn điện. Nó được định nghĩa là tỉ số của hiệu điện thế giữa hai đầu vật thể đó với cường độ dòng điện đi qua nó: R = trong đó: U : là hiệu điện thế giữa hai đầu vật dẫn điện, đo bằng vôn (V). I : là cường độ dòng điện đi qua vật dẫn điện, đo bằng ampe (A). R : là điện trở của vật dẫn điện, đo bằng Ohm (Ω). Hình 4.12 điện trở Hệ Thống Vạch Màu giá trị của điện trở Cách Tính Giá Trị Điện Trở Vạch màu thứ nhứt : cho biết giá trị thứ nhứt của Điện Trở Vạch màu thứ hai : cho biết giá trị thứ hai của Điện Trở Vạch màu thứ ba : cho biết cấp số nhân của lủy thừa mười Vạch màu cuối : cho biết sự thay đổi giá trị của điện trở theo nhiệt độ Thí Dụ: Điện Trở có các vạch màu: Nâu, Đen, Đỏ, Vàng Kim . Giá trị điện trở sẻ là 1 0 X 102 10% = 1000 Ω + 10% = 1 kΩ + 10% 4.2.8 Tụ điện Tụ điện là linh kiện điện tử thụ động được sử dụng rất rộng rãi trong các mạch điện tử, chúng được sử dụng trong các mạch lọc nguồn, lọc nhiễu, mạch truyền tín hiệu xoay chiều, mạch tạo dao động Cấu tạo: Tụ điện gồm hai bản cực đặt song song, ở giữa có một lớp cách điện gọi là điện môi. Người ta thường dùng giấy, gốm , mica, giấy tẩm hoá chất làm chất điện môi và tụ điện cũng được phân loại theo tên gọi của các chất điện môi này như Tụ giấy, Tụ gốm, Tụ hoá. Hình 4.13 Tụ điện Thiết kế và thi công Sơ đồ mạch nguyên lý, mạch in của khối trong mạch 4.3.1.1 Sơ đồ mạch nguyên lý Khối nguồn Khối điều khiển trung tâm Khối chuyển mạch Khối hồi tiếp Khối chuyển đổi DC - AC Mạch công suất Sơ đồ ghép biến áp Khối hiển thị, Phím ấn 4.3.1.2 Sơ đồ mạch in Khối nguồn, khối điều khiển trung tâm, khối hồi tiếp và khối chuyển mạch Sơ đồ mạch 3D Khối chuyển đổi DC - AC 4.3.2 Lưu đồ thật toán sử lý của chương trình 4.3.2.1 Lưu đồ chương trình chính Chương trình Nạp Chương trình Hiển thị Chương trình Nghịch lưu Mode =0 Mode =1 Mode =2 Chương trình Dừng Begin Thiết lập ban đầu Chương trình Phím ấn end Đ S Đ S Đ S 4.3.2.2 Lưu đồ chương trình phím ấn begin N_D = 0 N_NL = 0 Mode = 0 N_NA = 0 Mode = 0 Mode = 0 Mode = 1 Mode = 2 end Đ Đ Đ S S S Trong đó: N_D: Nút điều khiển dùng N_NL: Nút điều khiển nghịch lưu N_NA: Nút điều khiển nạp 4.3.2.3 Lưu đồ chương trình dừng begin Điều khiển dùng bộ tạo xung điều khiển cấp cho khối công suất Tắt tín hiệu điều khiển khối chuyển mạch Điều khiển đền báo và gửi dữ liệu tới khối hiển thị LCD end 4.3.2.4 Lưu đồ chương trình nghịch lưu begin Cho phép bộ tạo xung hoạt dộng Điều khiển role cấp nguồn cho tải Hiển thị đèn báo và gửi dư liệu tới khối hiển thị LCD end 4.3.2.5 Lưu đồ chương trình nạp bigin Khiểm tra diện áp nguồng điện lưới để chọn chế độ nạp Kiểm tra điện áp ác quy Hiển thị đèn báo và gửi dư liệu tới khối hiển thị LCD end Nguyên lý hoat động của bộ nghịch lưu Khi mới được cấp nguồn bộ nghịch lưu được mặc định o chế độ dùng. Chế độ dùng Mạch ở chế độ chờ tín hiệu điều khiển để thay đôi chế độ sang chế độ nghịch lưu hoặc nạp điện. Chương trinh sẽ quét liên tục các phím ấn điều khiển. khi có tín hiệu từ phím cấp về mạch sẽ thay đổi chế độ. ở chế độ dừng thì màn lcd sẽ hiển thị giá trị điện áp hiện thời của ác quy. Và dòng chữ “ BO NGHICH LƯU ” Chế độ nghịch lưu Cho phép timer0 hoạt động để tạo dao động cấp cho khối công suất Điều khiển role chuyển nguồn cấp từ biến áp tới tải Thực hiện đọc giá trị điện áp cấp cho tải về bộ điều khiển để kiểm soat quá trình nghịch lưu. Nếu điện áp cấp cho tải nhỏ hơn giới hạn điện áp dưới (195VAC) thì bộ vi điều khiển sẽ điều chỉnh tăng độ rộng xung điều khiển khối công suất. Điện áp cấp cho tải được tăng lên lớn hơn giới hạn điện áp dưới . Khi tăng độ rộng xung tới một giá trị tói hạn mà điện áp tại tải vẫn nhỏ hơn giới hạn điện áp dưới thì lúc đó đã sẩy ra quá tải. bộ vi điều khiển sẽ dừng chế độ và thông báo lỗi lên màn lcd. Nếu điện áp cấp cho tải lớn hơn giới hạn điện áp trên (230VAC) thì bộ vi điều khiển sẽ điều chỉnh giam độ rộng xung điều khiển khối công suất. Điện áp cấp cho tải được giảm xuống nhỏ hơn giới hạn điện áp trên. Chế độ nạp Bộ điều khiển sẽ kiểm tra điện áp tại ác quy để có thê lụa trọn phương thức nạp với dòng cao hay thấp. và đảm bảo theo các bước: Bước 1: Thực hiện nạp áp Bước 2: Thực hiện nạp dòng. Trong quá trình nạp bộ điều khiển sẽ liên tục kiểm tra điện áp tại ác quy để kiểm soát được quá trình. Khi ac quy đã đạt đến mức điện áp đạt trước bộ điều khiển sẽ tự động dùng quá trình nạp. Chương trình điều khiển Project : chuong trinh INVETER 12V-220V Version : 1.1.0 Date : 4/1/2011 Author : NGUYEN HUY HUNG Company : lop Dien Tu 1K3 Comments: Chip type : ATmega16L Program type : Application Clock frequency : 4.000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include #include #define Role_nguon PORTA.2 #define Role_10V PORTA.3 #define Role_230V PORTA.4 #define Role_220V PORTA.5 #define kenh1 PORTA.6 #define kenh2 PORTA.7 #define quat PORTC.5 #define Role_200V PORTC.6 #define Role_240V PORTC.7 #define dk_kich PIND.0 #define dk_dung PIND.1 #define dk_nap PIND.2 #define db_nap PORTD.3 #define db_kich PORTD.4 #define db_dung PORTD.5 #define db_acquy PORTD.6 #define db_qua_tai PORTD.7 bit k_nap=1; bit k_dung=1; bit k_kich=1; bit co_ht; bit co2=0; bit co_loi=0; unsigned char ma_loi=0; unsigned char MODE=0; unsigned long int dap_acquy=0; unsigned long int dap_nguon=0; unsigned char dap_acquy_max; unsigned char dap_acquy_min; unsigned char dap_nguonchuan; unsigned char pwm=10; unsigned char bien_kiemtra=0; unsigned char giai_doan=1; unsigned char cap_nap=1; unsigned char co_n=0; long int tgian1; long int tgian2; long int tgian3; // Alphanumeric LCD Module functions #asm .equ __lcd_port=0x18 ;PORTB #endasm #include // Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here static unsigned char i_t=0; // Reinitialize Timer 0 value TCNT0=0xE6; // Place your code here if(i_t<pwm) { // thuc hien dieu khien IRF3205 if(co2==1) { kenh1=0; kenh2=1; }; if(co2==0) { kenh1=1; kenh2=0; }; } else { // thuwc hien ngat IRF3205 kenh1=1; kenh2=1; }; i_t++; if(i_t>19) { if(bien_kiemtra<29)bien_kiemtra++; i_t=0; co2=~co2; }; } #define FIRST_ADC_INPUT 0 #define LAST_ADC_INPUT 1 unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1]; #define ADC_VREF_TYPE 0x20 // ADC interrupt service routine // with auto input scanning interrupt [ADC_INT] void adc_isr(void) { static unsigned char input_index=0; // Read the 8 most significant bits // of the AD conversion result adc_data[input_index]=ADCH; // Select next ADC input if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0; ADMUX=(FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff))+input_index; // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA|=0x40; } // Declare your global variables here // Declare your global variables here void ct_kich(void); // Declare your global variables here void ct_dung(void); // Declare your global variables here void ct_nap(void); // Declare your global variables here void ct_kiem_tra(void); // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=In Func0=In // State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=T State0=T PORTA=0xFC; DDRA=0xFC; // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00; DDRB=0x00; // Port C initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out // State7=1 State6=1 State5=1 State4=0 State3=0 State2=0 State1=0 State0=0 PORTC=0xE0; DDRC=0xFF; // Port D initialization // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=In // State7=0 State6=0 State5=0 State4=0 State3=0 State2=P State1=P State0=P PORTD=0x07; DDRD=0xF8; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 62.500 kHz // Mode: Normal top=FFh // OC0 output: Disconnected TCCR0=0x03; TCNT0=0xe4; OCR0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer 1 Stopped // Mode: Normal top=FFFFh // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=FFh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off // INT2: Off MCUCR=0x00; MCUCSR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC Clock frequency: 31.250 kHz // ADC Voltage Reference: AREF pin // ADC Auto Trigger Source: None // Only the 8 most significant bits of // the AD conversion result are used ADMUX=FIRST_ADC_INPUT | (ADC_VREF_TYPE & 0xff); ADCSRA=0xCF; // LCD module initialization lcd_init(16); // Global enable interrupts #asm("sei") Role_nguon=1; Role_10V=1; Role_200V=1; Role_220V=1; Role_240V=1; Role_230V=1; k_nap=1; k_dung=1; k_kich=1; co_n=0; co_ht=0; pwm=14; ma_loi=0; db_kich=1; // tat den bao kich db_nap=1; db_dung=1; dap_acquy_max=185; // dien ap toi da la 16.5 V dap_acquy_min=95; // dien ap toi thieu la 9.5 V dap_nguonchuan=150; // dien ap toi tieu nguon ra 150 V tgian1=0; tgian2=0; tgian3=0; cap_nap=1; MODE=0; while (1) { ct_kiem_tra(); if(dk_kich==0&k_kich==1&ma_loi==0&MODE==0) { MODE=1; co_ht=1; delay_ms(200); }; k_kich=dk_kich; if(dk_dung==0&k_dung==1) { MODE=0; giai_doan=1; ma_loi=0; co_loi=0; co_ht=1; delay_ms(200); }; k_dung=dk_dung; if(dk_nap==0&k_nap==1&MODE==0) { MODE=2; co_ht=1; delay_ms(200); }; k_nap=dk_nap; if(MODE==0) { ct_dung(); }; if(MODE==1) { ct_kich(); }; if(MODE==2) { ct_nap(); }; if(MODE==3) { if(co_loi==0)lcd_clear(); co_loi=1; lcd_gotoxy(2,0); delay_us(100); lcd_putsf("BAO LOI"); delay_us(100); lcd_gotoxy(1,1); delay_us(100); if(ma_loi==1) lcd_putsf("AC QUY YEU DIEN"); delay_us(100); if(ma_loi==2) lcd_putsf(" QUA TAI"); delay_us(100); if(ma_loi==3) lcd_putsf(" QUA AP"); delay_us(100); }; if(MODE>3)MODE=0; }; } // Declare your global variables here void ct_kich(void) { static char co_qua_ap=0; static char co_thap_ap=0; if(co_ht==1)lcd_clear(); lcd_gotoxy(0,0); lcd_putsf("CONG SUAT"); lcd_gotoxy(12,0); lcd_number(pwm*5,0); lcd_putsf(" %"); lcd_gotoxy(0,1); lcd_number(dap_acquy,1); lcd_putsf(" VDC"); lcd_gotoxy(9,1); lcd_number(dap_nguon,0); lcd_putsf(" VAC"); db_kich=0; // Bat den bao kich db_dung=1; // Tat den bao dung db_nap=1; if(co_ht==1) // thuc hien hien thi { Role_nguon=0; Role_240V=0; //Cap dien cho role quat=0; delay_ms(1000); TIMSK=0x01; co_ht=0; delay_ms(1000); } if(dap_nguon>230) { delay_ms(100); co_qua_ap++; if(co_qua_ap>20) { co_qua_ap=0; pwm--; }; }; if(dap_nguon<195) { delay_ms(100); co_thap_ap++; if(co_thap_ap>80) { co_thap_ap=0; pwm++; if(pwm>19)pwm=19; }; }; if(dap_acquy<dap_acquy_min) { ma_loi=1; MODE=3; db_acquy=0; // Bat den bao thap ap }; } // Declare your global variables here void ct_dung(void) { TIMSK=0x00; // dugn kich kenh1=1; // tat kenh 1 kenh2=1; // tat kenh 2 bien_kiemtra=0; db_kich=1; // tat den bao kich db_nap=1; db_dung=0; // bat den bao dung Role_nguon=1; Role_10V=1; Role_200V=1; Role_220V=1; Role_240V=1; Role_230V=1; quat=1; if(dap_acquy>dap_acquy_max) { MODE=3; ma_loi=3; db_acquy=0; // Bat den bao qua ap }; if(co_ht==1) { delay_ms(1000); lcd_clear(); co_ht=0; }; lcd_gotoxy(2,0); lcd_putsf("BO KICH DIEN"); lcd_gotoxy(8,1); lcd_gotoxy(4,1); lcd_number(dap_acquy,1); lcd_putsf(" VDC"); } void ct_nap(void) { if(co_ht==1)lcd_clear(); db_kich=1; db_dung=1; db_nap=0; quat=0; lcd_gotoxy(0,0); lcd_putsf("DANG NAP..."); lcd_gotoxy(0,1); lcd_number(dap_acquy,1); lcd_putsf(" VDC"); lcd_gotoxy(9,1); lcd_number(dap_nguon,0); lcd_putsf(" VAC"); if(co_ht==1) // kiem tra dien ap vao { Role_240V=0; delay_ms(1000); ct_kiem_tra(); if(dap_nguon>200)cap_nap=1; if(185<dap_nguon&dap_nguon<200)cap_nap=2; if(dap_nguon<185)cap_nap=3; Role_240V=1; delay_ms(2000); co_ht=0; } if(giai_doan==1) { lcd_gotoxy(12,0); lcd_putsf("CAP1"); if(cap_nap==1) { Role_240V=0; delay_ms(2000); }; if(cap_nap==2) { Role_230V=0; delay_ms(2000); }; if(cap_nap==3) { Role_220V=0; delay_ms(2000); }; if(dap_acquy>130) { Role_240V=1; Role_230V=1; Role_220V=1; Role_200V=1; Role_10V =1; delay_ms(4000); lcd_clear(); giai_doan=2; }; }; if(giai_doan==2) { lcd_gotoxy(12,0); lcd_putsf("CAP2"); if(cap_nap==1) { Role_230V=0; delay_ms(2000); }; if(cap_nap==2) { Role_220V=0; delay_ms(2000); }; if(cap_nap==3) { Role_10V =0; delay_ms(2000); Role_220V=0; delay_ms(2000); }; if(dap_acquy>145) // ac lon hon 15,5v { Role_240V=1; Role_230V=1; Role_220V=1; Role_200V=1; Role_10V =1; delay_ms(4000); lcd_clear(); giai_doan=3; }; }; if(giai_doan==3) { lcd_gotoxy(12,0); lcd_putsf("CAP3"); if(cap_nap==1) { Role_240V=0; delay_ms(2000); }; if(cap_nap==2) { Role_10V =0; delay_ms(2000); Role_240V=0; delay_ms(2000); }; if(cap_nap==3) { Role_220V=0; delay_ms(2000); }; }; } // chuong trinh kiem tra tin hieeu tu cac sensor void ct_kiem_tra(void) { static unsigned int bien_tg1,du1,nguyen1; static unsigned int bien_tg2,du2,nguyen2; static unsigned char i_kt,tg_acquy,tg_nguon; tgian1=adc_data[0]; tgian2=adc_data[1]; bien_tg1=bien_tg1+tgian1; bien_tg2=bien_tg2+tgian2; i_kt++; if(i_kt==10) { nguyen1=bien_tg1/i_kt; du1=bien_tg1%i_kt; if( du1>8)tg_acquy=nguyen1+1; else tg_acquy=nguyen1; bien_tg1=0; nguyen2=bien_tg2/i_kt; du2=bien_tg2%i_kt; if( du2>8)tg_nguon=nguyen2+1; else tg_nguon=nguyen2; bien_tg2=0; i_kt=0; }; dap_acquy=tg_acquy*28.75*10/384+16; dap_nguon=tg_nguon*503.75/384; } // Declare your global variables here CHƯƠNG V: KẾT LUẬN Sau quá trình thực hiện bản đồ án chúng em đã thu được một số kết quả như sau: - Giới thiệu một số ứng dụng và đặc điểm của mạch nghịch lưu một pha - Phân tích nguyên lý làm việc và các thông số trong mạch nghịch lưu một và ba pha. - Giới thiệu một số ứng dụng và đặc điểm của mạch nghịch lưu một pha. -Đặc biệt là chúng em đã hoàn thiện sản phẩm của mình theo yêu cầu đã đặt ra cụ thể: Thiết kế bộ nghịch lưu chuyển đổi từ 12VDC sang 220VDC Hiển thị bằng màn hình LCD16X2 Có chế độ hoạt động thông minh Một lần nữa em xin gửi lời cảm ơn tới các thầy cô trong khoa Điện Tử, đặc biệt là cô th.s Nguyễn Thị Minh Tâm đã trực tiếp hướng dẫn chúng em trong việc hoàn thành đồ án này. Do thời gian và trình độ có hạn lên đề tài của em còn nhiều vấn đề thiếu sót, mong các thầy cô và các bạn đọc cho ý kiến bổ sung để đề tài được hoàn thiện hơn. Em xin chân thành cảm ơn!

Các file đính kèm theo tài liệu này:

  • docThiết kế và thi công bộ nghich lưu 12vVDC sang 220VAC.doc