Đề tài Thiết kế, chế tạo bộ khởi động mềm điều khiển số

MỤC LỤC Chương 1 1 CÁC PHƯƠNG PHÁP KHỞI ĐỘNG ĐỘNG CƠ KHÔNG ĐỒNG BỘ 1.1. Nguyên lý làm việc của động cơ không đồng bộ 1 1.2. Các phương trình cơ bản của động cơ không đồng bộ 2 1.3. Quá trình mở máy của động cơ điện không đồng bộ 3 1.4. Các phương pháp mở máy động cơ không đồng bộ 4 1.4.1. Mở máy trực tiếp động cơ điện rotor lồng sóc 5 1.4.2. Hạ điện áp mở máy 6 1.4.3. Mở máy bằng cách thêm điện trở phụ vào rotor 10 Chương 2 12 BỘ ĐIỀU ÁP XOAY CHIỀU 2.1. Bộ điều áp xoay chiều một pha 12 2.1.1. Các sơ đồ 12 2.1.2. Điều áp xoay chiều một pha tải thuần trở 14 2.1.3. Điều áp xoay chiều một pha khi tải mang tính trở cảm 15 2.2. Bộ điều áp xoay chiều ba pha 17 2.2.1. Các sơ đồ 17 2.2.2. Bộ điều áp xoay chiều ba pha bằng cặp Thyristor mắc song song ngược, tải đấu sao không có dây trung tính. 19 2.3. Sơ đồ bộ điều áp xoay chiều động cơ không đồng bộ rotor lông sóc 23 2.4. Nguyên lý hoạt động của mạch động lực 23 Chương 3 25 VI ĐIỀU KHIỂN VÀ CÁCH LẬP TRÌNH CHO VI ĐIỀU KHIỂN 3.1 Giới thiệu chung về vi điều khiển AVR ATmega16 25 3.2 Ngôn ngữ lập trình C cho vi điều khiển AVR 32 3.3 Giới thiệu phần mềm CodevisionAVR, dùng để lập trình và nạp chương trình cho vi điều khển AVR 37 3.3.1. Cách tạo một project mới 37 3.3.2. Cách sử dụng CodeWizardAVR lập trình tự động 38 3.3.3. Nạp chương trình cho vi điều khiển 42 Chương 4 46 THIẾT KẾ BỘ KHỞI ĐỘNG MỀM ĐIỀU KHIỂN SỐ A.Thiết kế mạch động lực 46 4.1. Tính toán chọn van động lực 46 4.1.1. Tính chọn van động lực theo dòng điện 46 4.1.2. Tính chọn van động lực theo điện áp 46 4.1.3. Thông số của van bán dẫn 47 4.2. Bảo vệ các linh kiện bán dẫn 47 4.2.1. Thiết bị bảo vệ ngắn mạch 47 4.2.2. Thiết bị dùng để đóng cắt tải thường xuyên 47 4.2.3. Thiết bị bảo vệ quá nhiệt 48 4.2.4. Bảo vệ xung điện áp từ lưới 48 4.2.5. Bảo vệ xung điện áp do chuyển mạch van 48 B. Thiết kế mạch điều khiển 49 4.3. Thuật toán điều khiển cho vi điều khiển 49 4.4. Tính toán mạch điều khiển 51 4.4.1. Thiết kế biến áp xung 51 4.4.2. Tính toán khâu khuếch đại 54 4.4.3. Chọn cổng AND 55 4.4.4. Chọn R1 và C1 55 4.4.5. Tính toán khâu đồng pha 55 4.4.6. Tạo nguồn nuôi 56 4.4.7. Tính chọn diode cho bộ chỉnh lưu nguồn nuôi 59 4.4.8. Tính toán mạch Reset và mạch dao động cho vi điều khiển 59 Chương 5 61 CHẾ TẠO VÀ THỬ NGHIỆM BỘ KHỞI ĐỘNG MỀM ĐIỀU KHIỂN SỐ 5.1. Chế tạo mạch điều khiển 61 5.1.1. Mạch nguyên lý 61 5.1.2. Mạch in 62 5.2. Chế tạo mạch lái 63 5.2.1. Mạch nguyên lý 63 5.2.2. Mạch in 64

doc79 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2372 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Đề tài Thiết kế, chế tạo bộ khởi động mềm điều khiển số, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
, phát xung đệm X1-6 cho T1 (xung mở thứ hai của T1) và xung chính X6 để mở T6, pha B đang dẫn do cuộn dây đang xả năng lượng nên T4 dẫn đến thời điểm t’2. Điện áp trên tải sẽ trùng với điện áp pha A (udA = ua). Tại thời điểm t’2, cuộn dây đã xả hết năng lượng nên T4 khóa (pha B không dẫn), điện áp trên tải bằng ½ điện áp dây uac (udA = ½ uac). Tại thời điểm t3, pha B dương nhất, pha C âm nhất. Phát xung chính X3 để mở T3, đồng thời phát xung đệm X6-3 cho T3 (xung mở thứ hai của T3), pha A dẫn do cuộn dây đang xả năng lượng nên T1 dẫn đến thời điển t’3. Điện áp trên tải trùng với điện áp pha A (udA = ua). Tượng tự như vậy: tại thời điểm t4, phát xung chính X2 mở T2 và xung đệm X3-2 cho T3. Tại thời điểm t5, phát xung chính X5 mở T5 và xung đệm X2-5 cho T2. Tại thời điểm t6, phát xung chính X4 cho T4 và xung đệm X5-4 cho T5. Nhận xét: Khi góc mở a nhỏ thì xung đệm chỉ có ý nghĩa ở chu kỳ đầu, ngay sau khi đóng điện. Khi góc mở a lớn, điện áp gián đoạn nhiều thì bắt buộc phải có xung đệm mới hoạt động được. Do đó, bộ điều áp xoay chiều ba pha phải có các góc mở a bằng nhau (mỗi van lần lượt mở cách nhau 60°) và độ rộng xung mở mỗi van là 120° để đảm bảo lượng sóng hài tối thiểu và mở chắc chắn. Khả năng điều chỉnh điện áp chỉ có thể xảy ra khi góc dẫn của Thyristor j < a £ 150°. Chương 3 VI ĐIỀU KHIỂN VÀ CÁCH LẬP TRÌNH CHO VI ĐIỀU KHIỂN Giới thiệu chung về vi điều khiển AVR ATmega16 Tổng quan về vi điều khiển AVR Atmega16 Ngày nay công nghệ số đã và đang được ứng dụng rộng rãi trong mọi ngành của khoa học kỹ thuật. Ở các nước công nghiệp, truyền động điện đã ứng dụng rất thành công công nghệ này với những ưu việt hơn so với phương pháp điều khiển tương tự truyền thống như: Mềm dẻo trong việc thay đổi cấu trúc và tham số của hệ thống tự động. Độ chính xác cao. Có khả năng chống nhiễu tốt. Dễ dàng tự động hóa. Việc ứng dụng công nghệ số, sử dụng vi điều khiển trong việc thiết kế và chế tạo bộ khởi động mềm là hoàn toàn phù hợp với điều kiện thực tế và xu thế chung. Sử dụng công nghệ số trong thiết kế, chế tạo bộ khởi động mềm có thể giúp ta dễ dàng tạo dáng đường đặc tính khởi động theo ý muốn mà bằng mạch điều khiển tương tự để làm được việc này thì sẽ gặp nhiều khó khăn. Vi điều khiển ATmega16 là vi điều khiển thuộc họ AVR của hãng Atmel, là một dòng vi điều khiển tích hợp cao với những chức năng cơ bản nhưng rất cần thiết trong những ứng dụng cụ thể. Vi điều khiển ATmega16 cung cấp những tính năng sau: 16K bytes bộ nhớ chương trình dạng flash có thể Read-While-Write . 512 bytes EEPROM. 1K byte RAM tĩnh (SRAM). 32 đường kết nối I/O mục đích chung. 32 thanh ghi làm việc mục đích chung được nối trực tiếp với đơn vị xử lý số học và logic (ALU). Một giao diện JATG cho quét ngoại vi. Lập trình và hỗ trợ gỡ rối trên chip. 3 Timer/Counter linh hoạt với các chế độ so sánh. Các ngắt ngoài và ngắt trong (21 nguyên nhân ngắt). Chuẩn truyền dữ liệu nối tiếp USART có thể lập trình. Một ADC 10 bit, 8 kênh với các kênh đầu vào ADC có thể lựa chọn bằng cách lập trình. Một Watchdog Timer có thể lập trình với bộ tạo dao động bên trong. Một cổng nối tiếp SPI ( serial peripheral interface). 6 chế độ tiết kiệm năng lượng có thể lựa chọn bằng phần mềm. Lựa chọn tần số hoạt động bằng phần mềm. Đóng gói 40 chân kiểu PDIP. Tần số tối đa 16MHz. Điện thế 4,5 – 5,5V Vi điều khiển ATmega16 được hỗ trợ lập trình với ngôn ngữ lập trình bậc cao như ngôn ngữ lập trình C. Điều này giúp cho người sử dụng rất tiện lợi trong việc lập trình cho vi điều khiển. Hình 19: Sơ đồ chân Atmega 16 Mô tả các chân vi điều khiển ATmega16 VCC: chân cấp nguồn một chiều GND: chân nối đất Port A (PA7..PA0): Cổng A được dùng làm lối vào analog của bộ chuyển đổi A/D. Cổng A cũng được dùng như một cổng I/O 8 bit hai chiều trực tiếp nếu bộ chuyển đổi A/D không được sử dụng. Các chân của port được cung cấp điện trở kéo lên bên trong (được chọn cho từng bit). Port B(PB7..PB0): Cổng B là một cổng I/O 8 bit hai chiều trực tiếp có các điện trở kéo lên bên trong (được chọn cho từng bit). Ngoài ra Port B còn được sử dụng cho các chức năng đặc biệt khác: Port Pin Alternate Functions PB7 SCK (SPI Bus serial Clock) PB6 MISO (SPI Bus Master Input/Slave Output) PB5 MOSI (SPI Bus Master Output/Slave Input) PB4 (SPI Slave Select Input) PB3 AIN1 (Analog Comparator Negative Input) OC0 (Timer/Counter) Output Compare Match Output) PB2 AIN0 (Analog Comparator Positive Input) INT2 (External Interrupt 2 Input) PB1 T1 (Timer/Couter 1 External Counter Input) PB0 T0 (Timer/Counter 0 External Counter Input) XCK (USART External Clock Input/Output) Port C(PC7..PC0): Port C cũng là một cổng I/O 8 bit hai chiều trực tiếp với các điện trở kéo lên bên trong (được chọn cho từng bit). Khi giao diện JTAG được phép hoạt động, các điện trở kéo lên của các chân PC5(TDI), PC3(TMS), và PC2(TCK) sẽ vẫn hoạt động cả khi xảy ra reset. Port C được sử dụng cho giao diện JTAG và các chức năng đặc biệt khác như trong bảng: Port D(PD7..PD0): là một cổng I/O 8 bit hai chiều trực tiếp có các điện trở kéo lên bên trong (được chọn cho từng bit). Port D cũng được dùng cho các chức năng đặc biệt khác của ATmega16 như trong bảng: : Là đầu vào reset. Một tín hiệu mực thấp đặt vào chân này trong khoảng thời gian dài hơn độ dài xung nhỏ nhất sẽ phát ra một reset, ngay cả khi xung nhịp không hoạt động. Xung ngắn hơn thì không đảm bảo để phát ra một reset. XTAL1: đầu vào cho bộ khuếch đại đảo dao động và đầu vào đến mạch hoạt động đồng hồ xung nhịp bên trong. XTAL2: đầu ra cho bộ khuếch đại đảo dao động AVCC: là chân cấp nguồn áp cho Port A và bộ chuyển đổi A/D. Chân này nên được nối với VCC cả khi ADC không được sử dụng. nếu ADC được sử dụng, chân AVCC nên được nối với VCC qua bộ lọc thông thấp. AREF: chân điện áp tham chiếu của bộ chuyển đổi A/D Hình 20: Sơ đồ cấu trúc vi điều khiển Atmega16 Cấu trúc bộ nhớ Để tăng tối đa hiệu suất và tính tương thích, vi điều khiển AVR sử dụng kiến trúc Havard tức là bộ nhớ dữ liệu và bộ nhớ chương trình tách biệt nhau cả về vùng nhớ và đường bus. Bộ nhớ chương trình của AVR là bộ nhớ Flash có dung lượng 128 Kb. Bộ nhớ chương trình có độ rộng bus là 16 bit. Những địa chỉ đầu tiên của bộ nhớ chương trình được dùng cho bảng vecto ngắt. Bộ nhớ chương trình Flash được chia thành 2 phần, phần chương trình khởi động và phần chương trình ứng dụng. Cả hai phần đều dành những bit khóa cho việc bảo vệ ghi và đọc/ghi. Lệnh SPM dùng ghi vào phần bộ nhớ chương trình Flash ứng dụng phải ở một nơi nhất định trong phần bộ nhớ chương trình khởi động. Bộ nhớ dữ liệu của AVR chia làm 2 phần chính là bộ nhớ SRAM và bộ nhớ EEPROM. Tuy cùng là bộ nhớ dữ liệu nhưng hai bộ nhớ này lại nằm tách biệt nhau và được đánh địa chỉ riêng. Các câu lệnh trong bộ nhớ chương trình được thực hiện với một cấp ống dẫn riêng. Khi một lệnh được thực hiện thì lệnh tiếp theo được mang về sẵn từ bộ nhớ chương trình. Ý tưởng này cho phép mỗi lệnh được thực hiện trong chỉ một chu kỳ xung nhịp. Bộ nhớ chương trình trong hệ thống là bộ nhớ Flash có thể lập trình lại. Truy cập nhanh tệp thanh ghi chứa 32 thanh ghi 8 bit làm việc mục đích chung với thời gian truy cập trong một chu kỳ xung nhịp. Điều này cho phép đơn vị xử lý số học và logic (ALU) hoạt động trong một chu kỳ đơn. Một hoạt động điển hình của ALU là hai toán hạng được lấy ra từ tệp thanh ghi, hoạt động thực hiện tính toán giữa các toán hạng, sau đó kết quả lại được lưu vào tệp thanh ghi, tất cả các công việc đó được thực hiện trong một chu kỳ xung nhịp. Có 6 trong 32 thanh ghi có thể được sử dụng như 3 con trỏ thanh ghi địa chỉ gián tiếp 16 bit cho việc ghi địa chỉ vùng nhớ dữ liệu, cho phép có thể tính toán địa chỉ. Một trong số những con trỏ địa chỉ này có thể dược dùng như một con trỏ địa chỉ để tra bảng trong bộ nhớ chương trình Flash. Các thanh ghi này là các thanh ghi 16 bit X, Y và Z. ALU hỗ trợ các phép tính số học và logic giữa các thanh ghi hoặc giữa hằng số với một thanh ghi. Các phép tính với 1 thanh ghi riêng lẻ có thể cũng được thực hiện trong ALU. Sau mỗi phép tính số học thanh ghi trạng thái được cập nhật để phản ánh thông tin về kết quả của phép tính. Dòng chương trình được qui định bởi các lênh nhảy có điều kiện và không điều kiện và các lệnh gọi, có thể trực tiếp địa chỉ trong toàn bộ không gian địa chỉ. Hầu hết các lệnh của AVR có dạng 1 từ 16 bit. Mỗi địa chỉ của bộ nhớ chương trình chứa một lệnh 16 hoặc 32 bit. Trong suốt thời gian phục vụ ngắt hoặc gọi chương trình con, địa chỉ của bộ đếm chương trình được cất vào ngăn xếp (stack). Ngăn xếp thực tế được đặt trong vùng dữ liệu chung SRAM, do đó kích thước của ngăn xếp chỉ bị giới hạn bởi tất cả kích thước SRAM và cách sử dụng SRAM. Tất cả người sử dụng chương trình phải khai báo vị trí ban đầu của SP (stack pointer: con trỏ ngăn xếp) trong chương trình reset (trước khi thực hiện các chương trình con hay thực hiện ngắt). Con trỏ ngăn xếp SP được đọc/ghi có thể truy nhập vào vùng nhớ I/O. Bộ nhớ dữ liệu SRAM có thể truy nhập dễ dàng thông qua 5 chế độ địa chỉ khác nhau được hỗ trợ trong kiến trúc của AVR. Đơn vị ngắt linh hoạt có các thanh ghi điều khiển riêng của nó trong vùng nhớ I/O với một bit cho phép ngắt toàn cục trong thanh ghi trạng thái. Tất cả các ngắt đều có các vector ngắt riêng biệt trong bảng vector ngắt. Các ngắt có quyền ưu tiên ngắt khác nhau tùy thuộc vào vị trí của vector ngắt. Vector ngắt có địa chỉ càng thấp có mức ưu tiên càng cao. Vùng nhớ I/O chứa 64 địa chỉ cho các chức năng ngoại vi như các thanh ghi điều khiển, SPI, và các chức năng I/O khác. Vùng nhớ I/O có thể truy cập trực tiếp hoặc như các vị trí trong vùng nhớ dữ liệu theo địa chỉ trong tệp thanh ghi từ $20 đến $5F. Ngôn ngữ lập trình C cho vi điều khiển AVR Ngôn ngữ lập trình C là ngôn ngữ khá mạnh và được nhiều người sử dụng. Lập trình bằng ngôn ngữ cấp cao như C giúp xây dựng các ứng dụng nhanh chóng và dễ dàng hơn. Sau đây sẽ giới thiệu một cách cơ bản nhất về cách viết chương trình cho AVR sử dụng ngôn ngữ C. Một chương trình C cho AVR thường bao gồm những thàn phần cơ bản như: chú thích (comments), biểu thức (expressions), câu lệnh (statements), khối (blocks), các toán tử, cấu trúc điều khiển (flow controls), hàm (function)…. Chú thích (comments): Chú thích là những đoạn trong chương trình dùng để giải thích hay bình phẩm những gì ta làm trong chương trình, phần chú thích không được biên dịch vì vậy nó không có bất kỳ ảnh hưởng nào dến hoạt động của chương trình. Có hai cách để tạo phần chú thích trong C là chú thích theo từng dòng bằng cách đặt ở đầu dòng chú thích dấu “//” và chú thích block bằng cách kẹp đoạn cần chú thích vào giữa /*…*/. Tiền xử lý (preprocessor): là một tiện ích của ngông ngữ C, các preprocessor được trình biên dịch xử lý trước tất cả các phần khác. Các preprocessor được bắt đầu bằng dấu “#”, trong ngôn ngữ C có hai preprocessor được sử dụng phổ biến nhât đó là #include và #define. Preprocessor #include dùng để chỉ định 1 file được đính kèm trong quá trình xử lý, và #define dùng để định nghĩa một chuỗi thay thế hoặc 1 macro. Biểu thức (expressions): là một phần của các câu lệnh, biểu thúc có thể bao gồm các biến, các toán tử, gọi hàm…. Biểu thức trả về một giá trị đơn. Biểu thức không phải là một câu lệnh hoàn chỉnh. Câu lệnh (statements): là một dòng lệnh hoàn chỉnh có thể bao gồm các từ khóa (key words), các biểu thức các câu lệnh khác và được kết thúc bằng dấu “;”. Khối (blocks): là sự kết hợp của nhiều câu lệnh để cùng thực hiện một nhiệm vụ nào đó. Khối được kẹp giữa hai dấu mở khối “{” và đóng khối “}”. Toán tử (operators): là những ký hiệu báo cho trình biên dịch biết nhũng nhiệm vụ cần thực hiện. Các toán tử đại số Toán tử Ý nghĩa * Phép nhân / Phép chia % Phép chia lấy phần dư + Phép cộng _ Phép trừ + + Tăng _ _ Giảm _ Dấu âm Các toán tử logic và quan hệ Toán tử Ý nghĩa > Lớn hơn >= Lớn hơn hoặc bằng < Nhỏ hơn <= Nhỏ hơn hoặc bằng == So sánh bằng != So sánh không bằng ! Phép tính logic NOT && Phép tính logic AND || Phép tính logic OR Các toán tử truy nhập và kích thước Toán tử Ý nghĩa [ ] Phần tử của mảng . Chọn phần tử (vd: PORTD.5) * Địa chỉ gián tiếp & Địa chỉ trực tiếp Các toán tử thao tác bit Toán tử Ý nghĩa ~ Phép NOT bit & Phép AND bit | Phép OR bit ^ Phép XOR bit >> Dịch bit sang trái << Dịch bit sang phải Cấu trúc điều khiển (flow controls): Các cấu trúc điều khiển cho phép chương trình thực hiện đúng theo ý tưởng của người viết chương trình. Các cấu trúc điều khiển thường dùng trong lập trình C: “If (điều kiện) câu lệnh;” Nếu điều kiện là đúng thì thực hiện câu lệnh tiếp theo sau, câu lệnh có thể được viết cùng dòng hay dòng sau từ khóa if. Điều kiện là một biểu thức bất kỳ có thể là sự kết hợp của nhiều điều kiện thông qua các toán tử quan hệ AND(&&), OR(||), … Điều kiện được cho là đúng khi nó khác 0 Trong trường hợp cần thực thi nhiều câu lệnh khi một điều kiện nào đó thỏa mãn ta có thể đặt các câu lệnh đó trong một khối: If (điều kiện) { Câu lệnh 1; Câu lệnh 2; … } “If (điều kiện) câu lệnh 1; else câu lệnh 2;”: Nếu điều kiện đúng thì thực hiện câu lệnh 1, nếu không đúng thì thực hiện câu lệnh 2. Việc đặt else và các câu lệnh trên cùng 1 dòng hay khác dòng không làm thay đổi ý nghĩa của cấu trúc; Nếu cần thực hiện nhiều câu lệnh thì các câu lệnh cần được dặt trong 1 khối: If (điều kiện) { Câu lệnh 1; Câu lệnh 2; … } Else { Câu lệnh 1; Câu lệnh 2; … } Trong trường hợp có nhiều khả năng xảy ra cho 1 biểu thức (hay một biến) với mỗi khả năng lại cần thực hiện một công việc nào đó, ta có thể sử dụng cấu trúc switch: Switch (biểu thức) { Case hằng _số_1: Các câu lệnh 1; Break; Case hằng_số_2: Các câu lệnh 2; Break; Defaul: Các câu lệnh khác; } Cấu trúc switch hoạt động theo cách thức sau: Đầu tiên chương trình tính giá trị của biểu thức sau đó lần lượt dem so sánh với các giá trị hằng số đặt phía sau từ khóa case. Biểu thức có giá trị bằng hằng số nào thì thực hiện các câu lệnh trong case đó dến khi tìm thấy từ khóa break. Có thể đặt bao nhiêu case tùy ý. Nếu giá trị của biểu thức không tương ứng với các hằng số thì chương trình thực hiện các câu lệnh trong phần defaul: (nếu có phần này). Cấu trúc lặp While: “while (điều kiện) câu lệnh 1”. Ý nghĩa của cấu trúc lặp while là thực hiện câu lệnh 1 (hoặc 1 khối câu lệnh đặt trong dấu “{}”) khi điều kiện còn đúng. Cấu trúc lặp for : “for (biểu thức 1; biểu thức 2; biểu thức 3) câu lệnh”. Trong đó biểu thức 1 là biểu thức khởi tạo, biểu thức 2 là điều kiện, biểu thức 3 là biểu thức thực hiện sau. Biểu thức 1 được thực hiện 1 lần sau đó chương trình kiểm tra điêu kiện qua biểu thức 2, nếu điều kiện đúng câu lệnh được thực hiện, sau đó thực hiện biểu thức 3 rồi lại quay lại kiểm tra điều kiện. Cứ như vậy tới khi điều kiện không còn đúng nữa thì chương trình thoát khỏi vòng lặp. Chú ý khi sử dụng vòng lặp for là các biểu thức trong cấu trúc for có thể không có nhưng các dấu “;” thì bắt buộc phải có. Hàm (functions): Trong C có rất nhiều hàm, mỗi hàm dùng để thực hiện một chức năng cụ thể. Các hàm trong C thường được thiết kế nhỏ gọn, để có những hàm phức tạp người dùng cần tự tạo ra. Các từ khóa (key words): Từ khóa là những từ quy định của ngôn ngữ C như tên các kiểu dữ liệu (char, int, unsigned int, …); tên các cấu trúc điều khiển (if, while, for,…). Cần chú ý không được đặt tên biến trùng với từ khóa. Các kiểu dữ liệu thường dùng khi lập trình C cho vi điều khiển: Tên kiểu dữ liệu Số byte Khoảng dữ liệu Char 1 - 127 đến 127 hoặc 0 đến 255 Unsigned char 1 0 đến 255 Signed char 1 - 127 đến 127 Int 2 - 32767 đến 32767 Unsigned int 2 0 đến 65353 Singed int 2 - 32767 đến 32767 Short int 2 - 32767 đến 32767 Unsigned short int 2 0 đến 65353 Singed short int 2 - 32767 đến 32767 Long int 4 - 2147483647 đến 2147483647 Unsigned long int 4 0 đến 4294967295 Singed long int 4 - 2147483647 đến 2147483647 Long long int 8 - (263 – 1) đến (263 – 1) Unsigned long long int 8 0 đến (264 – 1 ) Signed long long int 8 - (263 – 1) đến (263 – 1) Giới thiệu phần mềm CodevisionAVR, dùng để lập trình và nạp chương trình cho vi điều khển AVR Phần mềm codevisionAVR là một phần mềm rất tiện lợi dùng để lập trình và nạp cho AVR, nó hỗ trợ tối đa cho người sử dụng trong việc lập trình cho AVR, giúp người sử dụng có thể nhanh chóng nắm bắt cách sử dụng, các chức năng và các chế độ làm việc của vi điều khiển. Cách tạo một project mới Cài đặt trình biên dịch CoddeVision AVR C trong thư mục mặc định C:/Cvavr. Chạy file cvavr.exe trong thư mục C:/Cvavr/bin Tạo một project mới bằng cách chọn File/New trong bảng chọn (menu option), cửa sổ trong hình vẽ hiện ra: Chọn “Project” sau đó ấn “OK”. Cửa số sau hiện ra: Ấn “yes” để sử dụng CodeWizardAVR viết chương trình tự động. Cách sử dụng CodeWizardAVR lập trình tự động CodeWizardAVR làm đơn giản hóa việc viết những đoạn code mở đầu cho những loại vi điều khiển AVR khác nhau. Sau khi ấn “yes” trong cửa số “confirm” ở trên sẽ hiện ra cửa sổ để chọn lựa: Trong bài toán điều khiển bộ khởi động mềm này ta chọn chip ATmega16 với tần số xung nhịp là 16MHz. Định dạng các cổng vào/ra phù hợp với mục đích sử dụng bằng cách chọn tab “Ports” Cài đặt mặc định của tất cả các cổng I/O là các đầu vào (input). Nếu muốn sử dụng bit nào làm nơi xuất dữ liệu ta cần cài đặt cho bit đó thành đầu ra (output) bằng cách click vào vào bit đó. Định dạng các Timer bằng cách chọn tab “Timer” Chọn tần của timer phù hợp với giá trị tần số xung nhịp, chọn chế độ hoạt động và các ngắt timer định sử dụng. Ngoài ra có thể định dạng cho các chức năng khác như ngắt ngoài, ADC,… bằng cách lựa chọn các tab tương ứng. Sau khi đã lựa chọn hết các chức năng cần sử dụng của vi điều khiển ta lưu project bằng cách chọn File/Generate, Save and Exit trong menu option. CodeWizardAVR sẽ tạo ra một phần khung chương trình bằng ngôn ngữ C với các chế độ, các ngắt chính xác như đã lựa chọn ở trên. Sau khi chọn File/Generate, save and exit trong menu option cửa sổ trong hình hiện ra để giúp người lập trình lưu project: Nhấn nút “Create New Folder” để tạo một file mới chưa tất cả các file trong project, sau đó dặt tên file và nhấn nút “Save” để lưu file nguồn trình biên dịch C (C compiler source file) dưới dạng file *.c , một hộp hội thoại nữa hiện ra: Trong hộp hội thoại này ta phải xác định rõ tên của project và lưu dưới dạng file *.prj trong cùng một thư mục với C compiler source file đã lưu ở trên. Cuối cùng, một hộp hội thoại nữa hiện ra nhắc chúng ta lưu CodeWizard project file Ta nhập tên file rồi nhấn “save” file sẽ được lưu dưới dạng *.cwp. Cửa sổ soạn thảo hiện ra, ta viết chương trình cho vi điều khiển trong cửa sổ soạn thảo. Viết chương trình xong ta tiến hành biên dịch chương trình và lưu dưới dạng file *.hex bằng cách chọn make trong tab project hoặc ấn tổ hợp phím shift+F9. Khi đó cửa sổ thông tin sẽ hiện ra thông báo lỗi và các cảnh báo nếu có, nếu không có lỗi và cảnh báo thì ta hoàn toàn có thể nạp chương trình vào vi điều khiển Nạp chương trình cho vi điều khiển Dùng mạch nạp AVR910 USB Programmer, là mạch nạp ISP dùng để lập trình cho tất cả dòng vi điều khiển AVR. Từ giao diện chính của CodeVision AVR, ta vào menu Setting → Programmer, xuất hiện hộp thoại Programmer Settings: Lựa chọn các thông số như hình trên, lưu ý cổng COM được chọn phải là cổng đã được gán tương ứng với mạch nạp (Sau khi cài đặt driver cho AVR910 USB Programmer thì AVR910 USB sử dụng cổng COM ảo để kết nối với phần mềm máy tính ). Nhấn OK để hoàn tất quá trình thiết lập thông số. Ở đây, CodeVision có thể được sử dụng như một chương trình nạp độc lập để nạp một file HEX có sẵn, hoặc sử dụng như một phần tích hợp để nạp chính Project đang được biên dịch bởi CodeVisionAVR, tất cả thông qua hộp thoại Chip Programmer (menu Tools ® Chip Programmer hoặc tổ hợp phím tắt Shift + F4). Quá trình lập trình cho chip AVR được chia làm 3 thao tác cơ bản bao gồm Program (nạp xuông), Read (đọc lên), và Compare (so sánh), cá thao tác trên được đặt trên hệ thống menu của hộp thoại Programmer, các thao tác trên được áp dụng cho các thành phần sau trên chip: Bộ nhớ chương trình (Flash). Bộ nhớ không mất nội dung (EEPROM). Các bit lưu cấu hình hoạt động (Fuse bits). Các bít lưu cấu hình bảo vệ (Lock bits). Ngoài ra còn một số mục liên quan như Signature byte, Caliblation Byte… Tham khảo chi tiết trong Datasheet của Atmega16 Trên hộp thoại Programmer có các nút cơ bản bao gồm Program All và Reset Chip: Nút Program All được sử dụng để nạp tất cả các thành phần đã được thiết lập xuống chíp. Bao gồm Flash, EEPROM, Fuse bits và Lock bits. Cần đặc biệt chú ý điều này, khuyến cáo là không nên sử dụng tới nút Program All khi bạn chưa hiểu hết tác dụng của Fuse bits, Lock bits, hơn nữa với nhu cầu thông thường là nạp chương trình vào bộ nhớ Flash, sử dụng nút này sẽ làm kéo dài thời gian lập trình do nạp cả các thành phần không cần thiết. (Nút Program All rất có tác dụng khi cần nạp sản xuất một lượng lớn chíp, giúp làm giảm các thao tác thiết lập). Nút Reset Chip sẽ kích hoạt tín hiệu Reset trên mạch đích. Một thành phần quan trọng khác là hộp thoại chọn chíp, cần chọn đúng loại AVR trong danh sách trước khi tiến hành các thao tác nạp. Phía bên phải là phần Fuse bits, liệt kê danh sách các Fuse tương ứng với loại AVR đã chọn (tên và số lượng các fuse này khác nhau với từng dòng AVR). Mặc định CodeVisionAVR để trống các bit này ( giá trị 1), điều đó không có nghĩa rằng các Fuse bits thực tế trên Chip cũng có giá trị 1, những người mới sử dụng thường hay nhấn nút Program All mà không biết rằng các Fuse bits không được thiết lập đúng. Vô tình thay đổi Fuse bits mặc định trong AVR dẫn tới việc là Chip hoạt động sai lệch mà không rõ nguyên nhân. Vì vậy, cần tham khảo kỹ các tài liệu về Fuse bits dành cho AVR, đặc biệt là Datasheet của dòng AVR đang sử dụng. Cấu hình sai fuse bits sẽ dẫn đến các sai lệnh không lường trước trong quá trình hoạt động của AVR. Để đọc về các Fuse bits của Chip, vào menu Read ® Fuse bit(s). Nhấn Yes trên hộp thoại Information, các Fuse bits sẽ được sau chép vào phần cấu hình Fuse trong hộp thoại Programmer. Trong quá trình sử dụng, nếu sau khi nạp Flash mà xuất hiện thông báo lỗi khi Verify: Thì cần xóa toàn bộ Flash bằng cách vào menu Program chọn Erase Chip. Sau khi Erase Flash, ta có thể tiến hành nạp bình thường mà không còn xuất hiện thông báo lỗi. Chương 4 THIẾT KẾ BỘ KHỞI ĐỘNG MỀM ĐIỀU KHIỂN SỐ A.Thiết kế mạch động lực Tính toán chọn van động lực Tính chọn van động lực theo dòng điện Dòng điện hiệu dụng chạy qua van khi tải đấu Y: (A) Trong đó: Pđm : công suất định mức của động cơ. Uf : điện áp pha. cosj : hệ số công suất của động cơ. h : hiệu suất của động cơ. Ihd : dòng điện hiệu dụng của động cơ. Dòng điện làm việc của van là: (A) Chọn điều kiện tỏa nhiệt của van là làm mát bằng không khí tự nhiên. Dòng điện định mức của van: Iđmv = kI.Ivlv = 1,1.10 = 11 (A) kI: hệ số dự trữ dòng điện của van. Chọn KI = 10. Tính chọn van động lực theo điện áp Điện áp làm việc cực đại Ulv của van bán dẫn: (V) Điện áp của van bán dẫn được chọn: Uv = kdt.Ulv = 1,6.539 » 863 (V) kdt: hệ số dự trữ điện áp của van. Chọn kdt = 1,6. Thông số của van bán dẫn Thyristor mắc vào lưới xoay chiều 50Hz nên thời gian chuyển mạch của Thyristor không ảnh hưởng lớn đến việc chọn Thyristor. Từ các thông số trên ta chọn loại Thyristor có các thông số sau: Ký hiệu: BTM92 – 1000R Điện áp ngược cực đại : Unmax = 1000 V Dòng điện làm việc cực đại : Iđmmax = 20 A Dòng điện dỉnh cực đại : Ipicmax = 400 A Dòng điện xung điều khiển : Ig = 10 mA Điện áp xung điều khiển : Ug = 3,5 V Dòng điện duy trì : Ih = 200 mA Dòng điện rò : Ir = 5 mA Sụt áp trên tiristor ở trạng thái dẫn : DUmax = 2,3 V Đạo hàm điện áp : du/dt = 300 V/s Thời gian chuyển mạch (mở và khóa) : tcm = Nhiệt độ làm việc cực đại : Tmax = 125°C Bảo vệ các linh kiện bán dẫn Thiết bị bảo vệ ngắn mạch Để bảo vệ ngắn mạch và đóng cắt ta dùng Aptomat. Aptomat có các thông số sau: Chọn Aptomat 3 cực Dòng điện định mức : IđmATM = 1,2.Iđm = 1,2.2,2 = 2,64 (A) Dòng điện ngắn mạch : InmATM = 5.Iđm = 5. 2,2 = 11 (A) Điện áp điện mức : UđmATM = Uđm = 380 (V) Thiết bị dùng để đóng cắt tải thường xuyên Dùng công tắc tơ xoay chiều ba pha, gồm 3 cặp tiếp điểm động lực và 2 cặp tiếp điểm thường đóng và thường mở. Dòng điện định mức : IđmCTT = 1,2.Iđm = 1,2.2,2 = 2,64 (A) Điện áp định mức: UđmCTT = Uđm = 380 (V) Thiết bị bảo vệ quá nhiệt Dùng rơle nhiệt (RLN) loại ba pha 2 phần tử h Dòng điện chỉnh định IRLN = Iđm = 2,2 (A) Bảo vệ xung điện áp từ lưới Dùng mạch RC để bảo vệ. R = (5 ¸ 20) W; C = 4mF Þ Chọn R = 20 W; C = 4mF Bảo vệ xung điện áp do chuyển mạch van Dùng mạch RC để bảo vệ. R = (5 ¸ 30) W; C = (0,5 ¸ 4)mF Þ Chọn R = 20 W và C = 4mF ~ 380 Aptomat Công tắc tơ Bộ khởi động mềm RLN ĐC B. Thiết kế mạch điều khiển Sơ đồ khối mạch điều khiển Khâu đồng pha Vi điều khiển Khâu khuếch đại Biến áp xung Uf ĐK tiristor Trong đó, khâu đồng pha sử dụng khuếch đại thuật toán: Khâu khuếch đại sử dụng mạch khuếch đại Darlington Để tính toán các thông số của mạch điều khiển ta dựa vào các yêu cầu của xung mở thyristor: Điện áp điều khiển : Uđk = 3,5(V) Dòng điện điều khiển : Iđk = 0,01(A) Độ rộng xung điều khiển : tx = 2tm = 100(ms) Tần số xung điều khiển : fx = 3(KHz) Điện áp nguồn nuôi mạch điều khiển : U = 12(V) và 5V Mức sụt biện độ xung : sx = 0,15 Thuật toán điều khiển cho vi điều khiển Từ tín hiệu đồng pha được đưa vào chân ICP của vi điều khiển, vi điều khiển phải tính toán thời gian để phát xung điều khiển cho thyristor theo yêu cầu : Tạo xung điều khiển có độ rộng xung điều khiển bằng 120o Xung điều khiển thay đổi phù hợp để thay đổi góc mở, giảm dần góc mở từ a = 90o đến a = 0o trong thời gian khởi động Tạo xung chùm với tần số xung chùm f = 5KHz Để đáp ứng những yêu cầu trên: Về phần cứng, ta sử dụng các tài nguyên của vi điều khiển ATmega16 như sau: Timer 1 Đế tính thời gian tạo xung điều khiển sử dụng timer 16 bit (Timer1) ở chế độ hoạt động bình thường tức là timer đếm liên tục từ 00h đến FFh sau khi tràn timer tiếp tục đếm từ 00h. Chọn prescaler cho timer 1 là 1/1024 tức là sau 1024 chu kỳ xung nhịp thì thanh ghi TCNT1 mới tăng một giá trị. Chọn tần số xung nhịp là 16MHz. Như vậy, mỗi giá trị của thanh ghi TCNT1 ứng với khoảng thời gian tu = 1024.1/16 = 64(ms) Nửa chu kỳ bằng 10ms (180o) ứng với giá trị của timer1 là (dec) = 9C(hex) Ta lập một bảng số chứa các giá trị ứng với các góc mở a từ 30o đến 135o (từ 1Ah đến 74h) được sắp xếp thích hợp. Thanh ghi ICR1 Sử dụng ngắt input capture ngắt theo sườn lên, đưa tín hiệu đồng pha vào chân icp. Khi bắt đầu một chu kỳ (sườn lên của tín hiệu đồng pha) giá trị của thanh ghi TCNT1(thanh ghi giá trị đếm của timer 1) sẽ được ghi vào thanh ghi ICR1, và giá trị này sẽ được sử dụng để tính toán phát xung điều khiển. Timer 0 Sử dụng timer0 để tạo xung chùm với tần số f = 5KHz. Dùng timer 0 ở chế độ CTC mode, prescaler là 1/1024, tần số xung nhịp là 16 MHz PORT C: PORT C được sử dụng để xuất tín hiệu điều khiển, 6 xung điều khiển cho 6 thyristor được đưa ra trên cùng PORT C (từ PC.0 đến PC.5) Chân PD.0: Được dùng để phát tín hiệu xung chùm. Chân PD.1: dùng để phát tín hiệu điều khiển rơ le trung gian khi hoàn tất quá trình khởi động để đóng công tăc tơ và ngắtt bộ khởi động mềm ra khỏi hệ thống, Về phần mềm, sử dụng ngôn ngữ lập trình C và phần mềm CodeVision AVR dể lập trình cho vi điều khiển, chương trình gồm chương trình chính và các chương trình con phuc vụ ngắt: Chương trình chính gồm: Định nghĩa chiều vào ra cho các PORT Đặt các chế độ cho các timer Cho phép ngắt Vòng lặp vô tận: trong vòng lặp vô tận ta liên tục so sánh giá trị của thanh ghi TCNT1 với các giá trị ứng với các thời điểm cách đều nhau 60o tính từ thời điểm ứng với góc mở a. Tại các thời điểm đó lần lượt xuất ra PORT C các số hexa 0x09, 0x21, 0x24, 0x06, 0x12, 0x18 nhằm tạo nên các xung điều khiển có độ rộng xung điều khiển bằng 120o. Giản đồ xung trên các chân vi điều khiển Ngắt input capture Xác định góc mở bằng cách tra bảng Lưu giá trị của TCNT1 vào thanh ghi ICR1 Từ đó có thể tính được khi thời điểm ứng với góc mở a là khi TCNT1 = ICR1 + bang[i] (với bang[i] là giá trị trong bảng ứng với góc mở a, giá trị này được thay đổi để giảm dần góc mở trong quá trình khởi động ) Kiểm tra nếu góc mở đã giảm đến giá trị thấp nhất, thì set PD.1 lên 1 làm tín hiệu điều khiển rơ le Ngắt timer 0 Thay đổi giá trị của PD.0 nhằm tạo ra xung chùm Tính toán mạch điều khiển Thiết kế biến áp xung Chọn vật liệu làm lõi là sắt ferit HM. Lõi co dạng hình xuyến, làm việc trên một phần của đặc tính từ hóa có: DB = 0,3(T); DH = 30(A/m), không có khe hở không khí Tỷ số biến áp xung, thường m = 23, chọn m = 3 Điện áp cuộn thứ cấp biến áp xung: U2 = Uđk = 3,5(V) Điện áp đặt lên cuộn sơ cấp biến áp xung: U1 = m.U2 = 3.3,5 = 10,5(V) Dòng điện thứ cấp biến áp xung: I2 = Iđk = 0,01(A) Dòng điện sơ cấp biến áp xung: Độ từ thẩm trung bình tương đối của lõi sắt: Trong đó m0 = 1,25.10-6 (H/m) là độ từ thẩm của không khí Thể tích của lõi thép cần có: Thay số vào ta có: Chọn lõi thép có thể tích V = 0,123(cm3=333333), có các kích thước: Loại lõi thép Kích thước (mm) Số liệu cần tra cứu d a b D Q (cm2) l (cm) Qcs (cm2) P (g) Q.Qcs (cm4) OA-12/14-3 12 1 3 14 0,03 4,1 1,13 0,96 0,034 d a b D Hình 21: Hình chiếu lõi biến áp xung Số vòng dây quấn sơ cấp biến áp xung: Theo định luật cảm ứng điện từ: (vòng) Số vòng dây thứ cấp (vòng) Tiết diện dây quấn sơ cấp Chọn mật độ dòng điện J1 = 6(A/mm2) Đường kính dây quấn sơ cấp Chọn dây có đường kính d1 = 0,1(mm) Tiết diện dây quấn thứ cấp Chọn mật độ dòng điện J2 = 4(A/mm2) Đường kính dây quấn thứ cấp Chọn dây có đường kính d2 = 0,1(mm) Kiểm tra hệ số lấp đầy: Vậy cửa sổ đủ diện tích cần thiết. C1 R1 D1 Dxung +12V Thyristor D2 T1 Từ chân của 4081 Tính toán khâu khuếch đại Hình 22: Sơ đồ tầng khuếch đại - Chọn trazitor darlington TIP 112 làm việc ở chế độ xung, có các thông số sau: Trazitor Darlington loại NPN Điện áp giữa colector và bazo khi hở mạch emitor : UCBO = 100(V) Điện áp giữa emitor và bazo khi hở mạch colector : UEBO = 5(V) Dòng điện lớn nhất ở colector có thể chịu đựng : ICmax = 5(A) Dòng điện lớn nhất ở bazơ có thể chịu đựng : IBmax = 0,12(A) Công suất tiêu tán ở colector : PC = 2(W) Nhiệt độ lớn nhất ở mặt tiếp giáp : T1 = 15oC Hệ số khuếch đại : b = 50 Dòng làm việc của colector : IC = 0,0033(A) Dòng làm việc của bazo : IB = IC/b = 0,066mA - Các diod trong mạch điều khiển đều cùng loại 1N4009, có thông số Dòng điện định mức : Iđm = 1(A) Điện áp ngược lớn nhất : UN = 25(V) Điện áp để diod mở thông : Um = 1(V) - Chọn diod xung loại: RU2B, có thông số: Dòng điện định mức : Iđm = 2(A) Điện áp ngược lớn nhất : UN = 800(V) Điện áp để diod mở thông : Um = 1,5 (V) Chọn cổng AND Toàn bộ mạch điều khiển cần dùng 6 cổng AND nên ta chọn hai IC 4081, mỗi IC 4081 có 4 cổng AND. Các thông số: Nguồn nuôi IC :Vcc = 39(V) Nhiệt độ làm việc : - 40oC 80oC Điện đáp ứng với mức logic 1: 2 4,5(V) Dòng điện : < 1mA Công suât tiêu thụ : P = 2,5nW/1 cổng Chọn R1 và C1 Điện trở R1 và C1 dùng để hạn chế dòng điện đưa và bazơ của Tranzitor Tr, chọn R1 thỏa mãn điều kiện: ; Chọn R1 = 6,8 kW Trong đó: U = 12V; Ib3 = IAND = 2mA; Chọn C1.R1 = tx = 100ms Þ mF ; Chọn C1 = 0,022 mF Tính toán khâu đồng pha ~220V ~7V R2 D3 D4 m741 -5V +5V R3 D5 ICP Hình 23: Sơ đồ khâu đồng pha Khuếch đại thuật toán chọn IC mA741 có các thông số: Điện áp nguồn nuôi : VCC =22(V), chọn VCC = ±5V Hiệu điện thế giữa hai đầu vào : 30(V) Nhiệt độ làm việc : T = - 40 105(oC) Công suất tiêu thụ : Ptot = 500(mW) = 0,5(W) Chọn điện áp xoay chiều đồng pha Udph = 7(V) Điện trở R2 dùng để hạn chế dòng vào khuếch đại thuật toán, chọn R sao cho dòng vào khuếch đại thuật toán Iv < 1mA. Do đó: R2 > UA/Iv = 7/1.10-3 = 7(kW) chọn R2 = 10 kW Tạo nguồn nuôi Ta cần tạo nguồn điện áp 12V để cấp cho máy biến áp xung và nguồn điện 5V để nuôi vi điều khiển và các IC. ~220V ~15V ~7V 7812 C2 C5 C8 C3 7805 7905 C4 C6 C7 C10 C9 +5V -5V +12V Hình 24: Sơ đồ nguyên lý tạo nguồn nuôi cho vi điều khiển và biến áp xung Ta chọn mạch chỉnh lưu cầu 1 pha dùng diod, điện áp thứ cấp máy biến áp: chọn U2 = 15(V) Để ổn định điện áp ra của nguồn nuôi, ta dùng hai vi mạch ổn áp 7812 và 7805 Ta thiết kế máy biến áp tạo nguồn nuôi. Chọn kiểu máy biến áp một pha ba trụ, có hai cuộn dây 1 cuộn sơ cấp và 1 cuộn thứ cấp có 2 đầu ra. Điện áp thứ cấp máy biến áp: U2 = 15(V) Công suất nguồn nuôi IC mA741: PIC = 0,5 (W) Công suất cho vi điều khiển: PVĐK = 3(W) Công suất cuộn dây rơ le: PR = 0,69(W) (sử dụng rơ le NG8QN của Ningbo Forward Relay Corp. Ltd có thông số: Công suất cuộn dây : 0,69W Điện áp định mức : 12V) Công suất biến áp xung cấp cho cực điều khiển thyristor: Px = 6.Uđk.Iđk = 6.3,5.0,01 = 0,21(W) Công suât cần có của máy biến áp: P =PIC + PVĐK + PR + Px = 0,5 + 3 + 0,69 + 0,21= 4,4(W) Công suất của máy biến áp có kể đến 5% tổn thất trong máy: S = 1,05.P = 1,05.4,4 = 4,62(VA) Dòng điện thứ cấp máy biến áp: Dòng điện sơ cấp máy biến áp Tiết diện trụ của máy biến áp được tính theo công thức kinh nghiệm: Trong đó: kQ = 6 là hệ số phụ thuộc phương thức làm mát m = 3 là số trụ của máy biến áp f = 50 Hz là tần số điện áp lưới Chuẩn hóa tiết diện trụ ta có: QT = 1,63cm2 Kích thước mạch từ: Lá thép dày d = 0,5(mm) Số lượng lá thép 68 lá a = 12mm b = 16mm h = 30mm Hệ số ghép chặt kc = 0,85 Hình 25: Kích thước mạch từ máy biến áp Chọn mật độ từ cảm trong trụ B = 1T, ta có số vòng dây sơ cấp (vòng) Chọn mật độ dòng điện J1 = J2 = 2,75(A/mm2) Tiết diện dây quấn sơ cấp: Đường kính dây quấn sơ cấp: Chọn d1 = 0,1mm để đảm bảo độ bền cơ. Đường kính kể cả cách điện là d1cđ = 0,12mm Số vòng dây quấn thứ cấp: Đầu ra 15V: (vòng) Đầu ra 9V: (Vòng) Đường kính dây cuộn thứ cấp vì kích thước nhỏ không đáng kể chọn d2 = 0,38mm; đường kính kể cả cách điện d2cđ = 0,42mm Chọn hệ số lấp đầy klđ = 0,7 Với: Suy ra: Chọn c = 10mm Chiều dài mạch từ: L = 2.c + 3.a = 2.10 + 3.12 = 56(mm) Chiều cao mạch từ: H = h + 2.a = 30 + 2.12 = 54(mm) Tính chọn diode cho bộ chỉnh lưu nguồn nuôi Dòng điện hiệu dụng qua diod IDhd = I2 = 0,308(A) Điện áp ngược lớn nhất mà diod phải chịu UNmax = .U2 = 1,41.15 = 21,2(V) Chọn diode có dòng định mức Iđm ki.IDhd = 10.0,308 = 3,08(A) Chọn diode có điện áp ngược lớn nhất UN kU.UNmax = 2.21,2 = 42,4(V) Chọn diode cầu KBP 302G có các thông số sau: Dòng điện định mức: Iđm = 3A Điện áp ngược cực đại: UN = 70V Tính toán mạch Reset và mạch dao động cho vi điều khiển Các CPU cần có một xung reset sau khi điện áp nguồn nuôi đạt đến giá trị ổn định. Yêu cầu này được đặt ra để khởi tạo các thanh ghi bên trong và mạch điều khiển. Sau một khoảng thời gian xác định nào đó, gọi là chu kỳ reset khi bật nguồn thì bộ xử lý bắt đầu thực thi các lệnh trong bộ nhớ chương trình. Nút nhấn cho phép reset lại mạch bằng tay khi cần. R2 và C có nhiệm vụ tạo thời gian trễ cho tín hiệu Reset đặt vào chân Reset cho đến khi điện áp nguồn đã đạt giá trị ổn định. (Hình 26a) Bộ dao động cộng hưởng thạch anh dùng để tạo ra tần số dao động hay tín hiệu giữ xung nhịp. Tần số giữ xung nhịp cho bộ xử lý quy định tốc độ mà chương trình sẽ thực hiện lệnh.Hai tụ điện C2 và C3 có nhiệm vụ bảo đảm cho mạch chắc chắn dao động. (Hình 26b) Thaïch anh C2 C3 b) +5V R2 R1 Nút nhấn C a) RESET XTAL1 XTAL2 Hình 26: Sơ đồ mạch reset và mạch dao động cho vi điều khiển Chương 5 CHẾ TẠO VÀ THỬ NGHIỆM BỘ KHỞI ĐỘNG MỀM ĐIỀU KHIỂN SỐ Chế tạo mạch điều khiển Mạch nguyên lý +5V -5V +5V +5V +5V -5V +5V +5V -5V +5V +5V +5V T3 T2 T5 T4 T6 T1 T4 T1 T6 T3 T2 T5 chum chum port1.3 port1.4 port1.2 chum chum port1.5 port1.3 chum chum port1.1 port1.5 port1.6 port1.6 port1.4 port1.1 port1.2 chum relay adc adc icp icp chum relay sck miso mosi miso mosi sck U19 IC 4081 1 2 3 4 7 5 6 8 9 10 11 12 13 14 1.1 2.1 out1 out2 GND 5.2 6.2 8.3 9.3 out3 out4 12.4 13.4 Vcc J16 CON6 1 2 3 4 5 6 U18 IC 4081 1 2 3 4 7 5 6 8 9 10 11 12 13 14 1.1 2.1 out1 out2 GND 5.2 6.2 8.3 9.3 out3 out4 12.4 13.4 Vcc C5 22pF Y1 CRYSTAL/16M C4 22pF D8 1N1199 1 2 D6 1 2 D5 1 2 J14 CON3 1 2 3 J12 CON3 1 2 3 J13 CON2 1 2 R4 R J8 CON2 1 2 R6 R U12 uA741 1 2 3 4 5 6 7 8 null1 - + -Vcc null2 output +Vcc NC U14 7912 2 1 3 IN GND OUT - + D4 BRIDGE 1 4 3 2 C9 C J11 CON2 1 2 R3 220 D2 LED U13 7812 1 2 3 IN GND OUT C11 C C13 C C14 C C10 C C12 C U11 ATMEGA16 9 13 12 40 39 38 37 36 35 34 33 1 2 3 4 5 6 7 8 22 23 24 25 26 27 28 29 14 15 16 17 18 19 21 10 11 30 32 31 20 RESET* XTAL1 XTAL2 PA0/ADC0 PA1/ADC1 PA2/ADC2 PA3/ADC3 PA4/ADC4 PA5/ADC5 PA6/ADC6 PA7/ADC7 PB0 (XCK/T0) PB1 (T1) PB2 (INT2/AIN0) PB3 (OC0/AIN1) PB4 (SS*) PB5 (MOSI) PB6 (MISO) PB7 (SCK) PC0 (SCL) PC1 (SDA) PC2 (TCK) PC3 (TMS) PC4 (TDO) PC5 (TDI) PC6 (TOSC1) PC7 (TOSC2) PD0/RxD PD1/TxD PD2/INT0 PD3/INT1 PD4/OC1A PD5/OC1B PD7/OC2 VCC GND AVCC AREF GND PD6/ICP1 J6 CON10AP 1 3 5 7 9 2 4 6 8 10 + + + + + + + + + + SW1 RESET 1 2 R1 10K R2 100 C6 1uF D10 1N1199 1 2 dong pha Mạch in Chế tạo mạch lái Mạch nguyên lý Mạch in KẾT LUẬN Như vậy trong đồ án chúng em đã trình bày những tìm hiểu của mình về các phương pháp khởi động động cơ không đồng bộ, bộ điều áp xoay chiều dùng để tăng dần điện áp khi khởi động động cơ, vi điều khiển ATmega16 cùng với cách lập trình cho vi điều khiển. Từ nhũng tìm hiểu đó chúng em đã thiết kế và chế tạo thành công mạch thử nghiệm cho “BỘ KHỞI ĐỘNG MỀM ĐIỀU KHIỂN SỐ”. Do kinh nghiệm còn non nớt cộng với thời gian chuẩn bị gấp gáp, đồ án của chúng em chắc chắn không tránh khỏi những thiếu sót. Chúng em rất mong nhận được ý kiến góp ý chỉ bảo từ các thầy cô và bạn bè đồng nghiệp. Một lần nữa em xin chân thành cảm ơn sự giúp đỡ, hướng dẫn hết sức tận tình của thầy HÀ XUÂN HÒA, cùng toàn thể các thầy cô trong bộ môn Thiết bị điện – điện tử, đã giúp đỡ trong quá trình chúng em hoàn thành đồ án này. Chúng em xin chân thành cảm ơn ! TÀI LIỆU THAM KHẢO Máy điện 1 - Vũ Gia Hanh Kỹ thuật vi điều khiển AVR – Ngô Diên Tập. Tính toán thiết kế thiết bị điện tử công suất – Trần Văn Thịnh. Điện tử công suất tập 1 – Lê Văn Doanh. Điện tử công suất – Võ Minh Chính. Tự động hóa thiết bị điện – Trần Văn Thịnh. PHỤ LỤC Chương trình cho vi điều khiển viết bằng ngôn ngữ lập trình C, sử dụng phần mềm lập trình CodevisionAVR /************************************************************************ This program was produced by the CodeWizardAVR V1.24.8d Professional Automatic Program Generator © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l. Project : Do an tot nghiep Version : Date : 5/21/2009 Author : Nguyen Thi Ha Thu va Do Viet Lon Company : Dai Hoc Bach Khoa Ha Noi Comments: Chip type : ATmega16 Program type : Application Clock frequency : 16.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 ************************************************************************/ // Khai bao thu vien su dung chip ATmega16 #include /************************************************************************ Khai bao cac bien su dung trong chuong trinh y: bien tuong duong voi goc mo alpha j: chi so cua mang i: bien dem so chu ky a: dung de luu gia tri thanh ghi TCNT1 khi goc mo lon ************************************************************************/ unsigned int y=0x74,a,i,j=1000; /************************************************************************ bang tra cac gia tri ung voi cac goc mo, thoi gian khoi dong la 20s ************************************************************************/ flash unsigned char bang[]={ 0x1A, 0x1A, 0x1A, 0x1A,0x1A, 0x1A, 0x1A, 0x1A,0x1A, 0x1A, 0x1A, 0x1A,0x1A, 0x1A, 0x1A, 0x1B, 0x1B,0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1B, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1D, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x20, 0x20, 0x20, 0x20,0x20, 0x20, 0x20, 0x20,0x20, 0x20, 0x20, 0x20,0x20, 0x20, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x25, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x29, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2B, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2C, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x32, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x37, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3A, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3B, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3C, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3D, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x43, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x45, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x46, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x47, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x48, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4A, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4D, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4E, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x4F, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x51, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x52, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x53, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x56, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x57, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x59, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5A, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5B, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5C, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5D, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5E, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x5F, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x64, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x69, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6A, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6B, 0x6C, 0x6C, 0x6C, 0x6C,0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6C, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6D, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6E, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x6F, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x71, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74 }; /************************************************************************ CHUONG TRINH PHUC VU NGAT INPUTCAPTURE (TIMER1) ************************************************************************/ interrupt [TIM1_CAPT] void timer1_capt_isr(void) { i++; if (j==0) { PORTD.1=0x01;y=0x1A;} else {j=j-1; y=bang[j];} } /************************************************************************ CHUONG TRINH PHUC VU MGAT SO SANH (TIMER0) (xay ra khi TCNT0 = OCR0) ************************************************************************/ interrupt [TIM0_COMP] void timer0_comp_isr(void) { PORTD.0^=1; } /************************************************************************ CHUONG TRINH CHINH ************************************************************************/ void main(void) { /************************************************************************ DAT CHE DO HOAT DONG CHO CAC CONG VAO - RA PORTA: Dat la cac dau vao (khong su dung) PORTB: Dat la cac dau vao (khong su dung) PORTC: Dat la cac dau ra (xuat xung dieu khien) PORTD: - PORTD.6: dat lam dau vao (nhan tin hieu dong pha) - PORTD.0: dat lam dau ra (phat tin hieu xung chum) - PORTD.1: dat lam dau ra (phat tin hieu dieu khien ro le) ************************************************************************/ PORTC=0x00; DDRC=0xFF; PORTD=0x00; DDRD=0x03; /************************************************************************ DAT CHE DO HOAT DONG CHO TIMER0 - che do hoat dong CTC top = OCR0 - xung nhip la xung nhip hoat dong cua chip - prescaler = 1/1024 - OCR0 = 0x02 ************************************************************************/ TCCR0=0x0D; TCNT0=0x00; OCR0=0x02; /*********************************************************************** DAT CHE DO HOAT DONG CHO TIMER1 - che do hoat dong normal top = 0xFFFF - xung nhip la xung nhip hoat dong cua chip - prescaler = 1/1024 - ngat input capture khi co suon len o chan ICP (PORTD.6) ************************************************************************/ TCCR1A=0x00; TCCR1B=0x45; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; /***********************************************************************/ CHO PHEP XAY RA NGAT ************************************************************************/ TIMSK=0x22; #asm("sei") /************************************************************************ VONG LAP VO TAN so sanh gia tri cua thanh ghi TCNT1 de phat xung ra PORTC ************************************************************************/ while (1) { if (TCNT1==ICR1+y){PORTB=0x09;PORTC=0x09;} if (TCNT1==ICR1+y+0x34){PORTB=0x21;PORTC=0x21;} if (TCNT1==ICR1+y+0x68) {PORTB=0x24;PORTC=0x24;} if (TCNT1==ICR1+y+0x9C) {PORTB=0x06;a=TCNT1;PORTC=0x06;} if (TCNT1==ICR1+y+D0) {PORTB=0x12;PORTC=0x12;} if (TCNT1==ICR1+y+104) {PORTB=0x18;PORTC=0x18;} if (i>=1) { if (TCNT1==a+0x34){PORTB=0x12;PORTC=0x12;} if (TCNT1==a+0x68){PORTB=0x18;PORTC=0x18;} if (TCNT1==ICR1+y){PORTB=0x09;PORTC=0x09;} if (TCNT1==ICR1+y+0x34){PORTB=0x21;PORTC=0x21;} if (TCNT1==ICR1+y+0x68) {PORTB=0x24;PORTC=0x24;} if (TCNT1==ICR1+y+0x9C) {PORTB=0x06;a=TCNT1;PORTC=0x06;} if (TCNT1==ICR1+y+0xD0) {PORTB=0x12;PORTC=0x12;} if (TCNT1==ICR1+y+0x104) {PORTB=0x18;PORTC=0x18;} } }; } MỤC LỤC

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

  • docThiết kế, chế tạo bộ khởi động mềm điều khiển số.doc