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
79 trang |
Chia sẻ: lvcdongnoi | Lượt xem: 2497 | Lượt tải: 4
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:
- Thiết kế, chế tạo bộ khởi động mềm điều khiển số.doc