Xây dựng mô hình

Một phần của tài liệu Thuyết minh nghiên cứu và mô phỏng hệ thống đánh lửa xe toyota vios (Trang 48)

3.3.1. Khối điều khiển -Vi điều khiển Atmega64

Trong điều khiển tự động nói chung có thể sử dụng nhiều loại vi điều khiển khác nhau như: Atmega8, Atmega16, Atmega32, Atmega64, Atmega128, Atmega1280,MSP430C1101, MSP430C1111, Pic16f1516, Pic16f1517... Mỗi loại vi điều khiển có ưu nhược điểm riêng, tùy theo ứng dụng điều khiển mà lựa chọn cho phù hợp.

Trong nghiên cứu này vi điều khiển được chọn là Atmega16, đây là dòng vi điều khiển 8 bit, các thông số chính của vi điều khiển Atmega16 được thể hiện trong Bảng bên dưới

Đây là loại vi điều điều khiển có tần số làm việc tối đa 16 MHz, có tích hợp các cổng ADC dùng để đọc tín hiệu từ cảm biến nhiệt độ LM35 gửi về, đồng thời vi điều khiển này có sẵn tại thị trường Việt Nam, giá thành phù hợp cho bước tiếp theo là nghiên cứu thiết kế và chế tạo bộ điều khiển quạt làm mát động cơ ô tô dùng ECU với chi phí nhỏ mà vẫn đảm báo tính chính xác trong

Thông số Giá trị Điện áp làm việc 4,5 ÷ 5,5

Tần số làm việc 0 ÷ 16 MHz

Số chân loại PDIP 64

Bộ nhớ chương trình

flash 64 KBytes

Bộ nhớ EEPROM 2 KBytes

Bộ nhớ SRAM 4320 Byte

Bảng 3. 5. Các thông số chính của vi điều khiển Atmega64

- Transistor

Để điều khiển cấp dòng cho động cơ điện một chiều có thể dùng nhiều loại Transistor công suất khác nhau như: 2N6547, 2N3390, 2N6609, 2N1711, 2N1893, 2N2219, 2SA1085, 2SA715 ... Tùy theo yêu cầu về công suất và chi phí... mà lựa chọn chophù hợp. Trong nghiên cứu này lựa chọn Transistor T1 là loại 2N6547 [10] có công suất, điện áp và chi phí phù hợp đồng thời có sẵn tại thị trường Việt Nam. Transistor T1 được dùng để điều khiển cấp dòng cho động cơ điện dẫn động quạt làm mát. Các thông số cơ bản của transistor 2N3390 được thể hiện trong bảng dưới đây:

Thông số Giá trị Công suất lớn nhất 175W Dòng điện lớn nhất cực C 30A Dòng điện lớn nhất cực B 20A

Dải nhiệt độ làm việc -65÷ 200oC

LCD là một màn hình nhiều điểm ảnh, có thể coi là một Led ma trận dạng lớn, tuy nhiên chúng ta không cần đi vào điều khiển từng Pixel hay là từng chấm nhỏ như trong Phần 1 mà chúng ta sẽ điều khiển qua lệnh, con trỏ… để hiển thị thông tin một cách dễ dàng hơn. Có nhiều loại LCD, trong bài này chúng ta dùng loại đơn giản 16×2. Trước tiên chúng ta tìm hiểu về cầu tạo của nó.

Thông số Giá trị

Kích thước 16x2

Số chân điều khiển 3

Số chân bus dữ liệu 8

Chân VSS Nguồn 0V

Chân VDD Nguồn 5V

Chân VEE Độ tương phản

Bảng 3. 7. Các thông số chính màn hình hiển thị LCD 16x2

3.3.3. Khối giả lập cảm biến trục cam và trục khuỷu

Đối với động cơ 4 kỳ thì hai vòng quay trục khuỷu là một chu kỳ, xupap nạp và xả đóng mở 01 lần. Vậy cần thiết kế trục cam quay một vòng và trục khuỷu quay hai vòng ( tỉ số truyền = ½).

INT1 của Atmega64

3.4. Thuật toán và chương trình điều khiển

Thuật toán điều khiển lập trình cho động cơ được nhà chế tạo viết và cài đặt sẵn trong CPU. Tùy thuộc vào chế độ làm việc theo thời gian hay tính năng động cơ mà ECU tính toán dựa trên lập trình có sẵn đó để đưa ra những tín hiệu điều khiển sao cho động cơ hoạt động tối ưu nhất.

Chương trình điều khiển được thực hiện trên phần mềm CodeVisionAVR được viết bằng ngôn ngữ C++, với hàm điều khiển chính sau:

- Hàm điều khiển đánh lửa:

This program was produced by the CodeWizardAVR V2.05.0 Professional Chip type : ATmega64

Program type : Application

AVR Core Clock frequency: 16.000000 MHz Memory model : Small

#include <alcd.h> #include <stdio.h> #include <delay.h> unsigned int xungTK; unsigned int xungTC; unsigned char Chuoi[16];

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void) {

// Place your code here xungTK=xungTK+1; if (xungTK==96) { xungTK=0; } }

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void) {

// Place your code here xungTC = xungTC+1; if (xungTC==48) { xungTC=0; } }

// Declare your global variables here void HienThiXungTK(void)

lcd_gotoxy(0,0); lcd_puts(Chuoi); } void HienThiXungTC(void) { sprintf(Chuoi,"T-Cam :%2d XUNG",xungTC); lcd_gotoxy(0,1); lcd_puts(Chuoi); } void DKdanhlua1(void) { if (xungTK==0) { PORTF=0b00000001; DDRF =0b00000001; delay_ms(5); } else { PORTF=0b00000000; DDRF =0b00000000; } } void DKdanhlua3(void) { if (xungTK==24) { PORTF=0b00000100; DDRF =0b00000100;

} else { PORTF=0b00000000; DDRF =0b00000000; } } void DKdanhlua4(void) { if (xungTK==48) { PORTF=0b00001000; DDRF =0b00001000; delay_ms(5); } else { PORTF=0b00000000; DDRF =0b00000000; void DKdanhlua2(void) { if (xungTK==72) { PORTF=0b00000010; DDRF =0b00000010; delay_ms(5); } else {

DDRF =0b00000000; void main(void)

{

// Declare your local variables here // Input/Output Ports initialization // Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTA=0x00; DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTB=0x00; DDRB=0x00;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTC=0x00; DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

State0=T

PORTD=0x00; DDRD=0x00;

// Port E initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTE=0x00; DDRE=0x00;

// Port F initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T

PORTF=0x00; DDRF=0x00;

// Port G initialization

// Func4=In Func3=In Func2=In Func1=In Func0=In // State4=T State3=T State2=T State1=T State0=T PORTG=0x00;

DDRG=0x00;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected ASSR=0x00;

OCR0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // OC1C output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; OCR1CH=0x00; OCR1CL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock

// Mode: Normal top=0xFF // OC2 output: Disconnected TCCR2=0x00;

TCNT2=0x00; OCR2=0x00;

// Timer/Counter 3 initialization // Clock source: System Clock // Clock value: Timer3 Stopped // Mode: Normal top=0xFFFF // OC3A output: Discon. // OC3B output: Discon. // OC3C output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer3 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off // Compare C Match Interrupt: Off TCCR3A=0x00; TCCR3B=0x00; TCNT3H=0x00; TCNT3L=0x00; ICR3H=0x00; ICR3L=0x00; OCR3AH=0x00; OCR3AL=0x00; OCR3BH=0x00; OCR3BL=0x00;

OCR3CL=0x00;

// External Interrupt(s) initialization // INT0: On

// INT0 Mode: Rising Edge // INT1: On

// INT1 Mode: Rising Edge // INT2: Off // INT3: Off // INT4: Off // INT5: Off // INT6: Off // INT7: Off EICRA=0x0F; EICRB=0x00; EIMSK=0x03; EIFR=0x03;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; ETIMSK=0x00; // USART0 initialization // USART0 disabled UCSR0B=0x00; // USART1 initialization // USART1 disabled UCSR1B=0x00;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

// ADC initialization // ADC disabled ADCSRA=0x00; // SPI initialization // SPI disabled SPCR=0x00; // TWI initialization // TWI disabled TWCR=0x00; // Alphanumeric LCD initialization // Connections specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTE Bit 0 // RD - PORTE Bit 1 // EN - PORTE Bit 2 // D4 - PORTE Bit 4 // D5 - PORTE Bit 5 // D6 - PORTE Bit 6 // D7 - PORTE Bit 7 // Characters/line: 16 lcd_init(16);

// Global enable interrupts #asm("sei")

while (1) {

// Place your code here HienThiXungTK (); HienThiXungTC(); DKdanhlua1();

DKdanhlua4(); DKdanhlua2(); }

}

Chương trình này được biên dịch và nạp vào ECU để điều khiển thời điểm đánh lửa cho động cơ.

3.5. Hiệu chỉnh mô hình

Về hiệu chỉnh mô hình, đầu tiên chúng ta có thể hiệu chỉnh phần chương trình điều khiển, thông số đầu vào, các biến, hàm ở trong con vi điều khiển

Atemega64 bằng cách :

Nháy đúp chụp vào Atemega64, sau đó chọn Program File để hiệu chỉnh phần chương trình điều khiển.

hàm trong đó :

Hình 3. 11. Hiệu chỉnh trong chương trình điều khiển

Ngoài ra có thể điều chỉnh tốc độ trục khuỷu trục cam bằng cách điều chỉnh biến trở RV1.

3.6. Kết quả mô phỏng và kiểm tra đánh giá

hành chạy và kiểm tra. - Nhận xét :

Vi điều khiển đã tính toán được tín hiệu vị trí từ cảm biến trcuj cam và trục khuỷu gửi về các thông số vị trí trục khuỷu và trục cam (được thể hiện bằng số xung ) được hiển thị trên màn LCD. Động cơ đánh lửa theo thứ tự 1-3-4-2 (đèn LED sáng theo thứ tự D1 – D3 – D4 – D2).

- Đánh giá độ chính xác của mô hình :

Mô hình sử dụng vi điều khiển Atemega64 với bộ nhớ cao, bộ vi xử lí được lập trình tính toán nhanh chóng chính xác, sau khi nạp chương trình điều khiển vào đã cho ra kết quả khá chính xác. Khi thông số vị trí trục khuỷu, trục cam được hiển thị trên LCD tương ứng với 24 và 12 xung thì LED D1 sáng, tiếp tục 48 và 24 xung thì LED D3, 72 và 36 xung thì LED D4 sáng, 96 và 48 xung thì LED D2 sáng, đúng kết thúc 1 chu kì 12 xung ở trục cam là 1 kì – 180 °.

So sánh kết quả mô phỏng với thực tế cho thấy độ chính xác khá cao, thứ tự nổ của động cơ cũng là 1-3-4-2.

KẾT LUẬN CHƯƠNG 3

Chương 3 đã xây dựng được mô phỏng mạch đánh lửa trên phần mềm Proteus:

- Giới thiệu về Proteus, các cách cài đặt và sử dụng

- Nêu được những cải tiến của động cơ hiện tại so với thế hệ trước, các thông số kĩ thuật thuật của động cơ và xe Toyota Vios 2020

- Xây dựng được thuật toán, mô hình mô phỏng và chương trình điều khiển hệ thống đánh lửa

giá

CHƯƠNG 4. KIỂM TRA, CHUẨN ĐOÁN, SỬA CHỬA HỆ THỐNG ĐÁNH LỬA

4.1. Quy trình kiểm tra của hệ thống đánh lửa4.1.1. Quy trình kiểm tra 4.1.1. Quy trình kiểm tra

-Bước 1: Kiểm tra rằng giắc nối phía dây điện của cuộn đánh lửa đã được cắm chắc chắn.

Nếu đã cắm chắc chắn thì đi đến bước 2. Nếu giắc nối bị lỏng thì lắp lại cho chắc chắn.

-Bước 2: Tiến hành thử đánh lửa cho mỗi cuộn đánh lửa.

Nếu không có lửa thì thay thế cuộn đánh lửa đó bằng chiếc còn tốt và tiến hành thử lại 1 lần nữa.

Nếu vẫn không có lửa thì đi tới bước 3. -Bước 3: Kiểm tra bugi.

Nếu bugi hỏng thì thay thế.

Nếu bugi còn tốt thì đi đến bước 4.

-Bước 4: Kiểm tra sự cấp nguồn đến cuộn đánh lửa có IC đánh lửa.

Bật khóa điện ON. Kiểm tra rằng có điện áp ắc quy tại cực dương (+) của cuộn đánh lửa. Nếu không có điện áp thì kiểm tra dây điện giữa khóa điện và cuộn dây đánh lửa có IC đánh lửa.

Nếu có điện dương ắc quy thì đi đến bước 5.

-Bước 5: Kiểm tra dây điện và giắc nối cuộn đánh lửa

4.1.2. Kiểm tra hệ thống đánh lửa trực tiếp trên xe

+ Mục đích: để kiểm tra xem động cơ có đánh lửa không. Bước 1: tháo nắp đậy nắp quy lát

Bước 2: ngắt 4 giắc nối vào cuộn đánh lửa Bước 3: tháo 4 bulông và cuộn đánh lửa Bước 4: tháo 4 bugi

Bước 5: lắp bugi vào cuộn dây đánh lửa và nối giắc cuộn đánh lửa Bước 6: ngắt 4 giắc nối vòi phun nhiên liệu

Bước 7: tiếp mát cho bugi

Bước 8: quan sát xem có tia lửa phát ra ở đầu điện cực của bugi hay không + Lưu ý:

Nối mát cho bugi khi kiểm tra.

Thay cuộn đánh lửa khi nó đã bị va đập.

Không được quay khởi động động cơ lâu hơn 2 giây.

4.1.3. Kiểm tra bugi+ Kiểm tra điện cực: + Kiểm tra điện cực:

Dùng Mega ôm kế, đo điện trở của sứ cách điện. Điện trở tiêu chuẩn của phíp cách điện:10 MΩ trở lên

GỢI Ý: Nếu không có Mega Ôm kế, hãy thực hiện phép kiểm tra đơn giản như sau.

- Phương pháp kiểm tra thay thế:

Tăng ga nhanh để đạt tốc độ động cơ 4,000 vòng/phút trong 5 lần. Tháo bugi.

Kiểm tra bằng cách quan sát bugi.

Nếu điện cực khô, bugi hoạt động đúng chức năng. Nếu điện cực bị ướt, hãy đi đến bước tiếp theo.

Nếu có hư hỏng, hãy thay thế bugi. Nếu không bị hư hỏng, hãy lắp lại bugi.

Hình 4. 3. Đo kiểm cực của bugi.

- Kiểm tra khe hở điện cực của bugi.

Khe hở điện cực lớn nhất cho bugi dùng lại: 1.3 mm (0.051 in.) Nếu khe hở điện cực lớn hơn giá trị lớn nhất, hãy thay bugi

Khe hở điện cực của bugi mới: Từ 1.0 đến 1.1 mm (0.039 đến 0.043 in.) CHÚ Ý:

Khi điều chỉnh khe hở điện cực bugi mới, chỉ bẻ cong ở phần dưới của điện cực tiếp mát. Không được chạm vào đầu điện cực. Không được điều chỉnh khe hở của bugi cũ.

+ Làm sạch các bugi.

Nếu điện cực bị bám muội các bon ướt, hãy làm sạch bugi bằng máy vệ sinh bugi sau đó làm khô bugi.

Áp suất khí tiêu chuẩn: 588 kPa (6 kgf/cm2, 85 psi) Thời gian tiêu chuẩn: 20 giây trở xuống

GỢI Ý:

Chỉ dùng máy làm sạch bugi khi điện cực đã sạch dầu. Nếu điện cực có bám dầu, thì hãy dùng xăng để làm sạch dầu trước khi dùng máy vệ sinh bugi.

4.2. Chuẩn đoán những hư hỏng và sửa chửa4.2.1. Chẩn đoán hư hỏng theo tình trạng động cơ 4.2.1. Chẩn đoán hư hỏng theo tình trạng động cơ

Tình trạng Nguyên nhân có thể Kiểm tra hoặc sửa chữa (1) Động cơ quay bình thường nhưng không khởi động được

1. Không có điện áp tới HTĐL. 2. Dây dẫn đến IC đánh lửa bị hở. Nối đất hở hoặc bị mòn.

3. Cuộn dây của bôbin đánh lửa bị hở hoặc ngắn mạch.

4. Các chỗ nối mạch sơ cấp không chặt.

1. Kiểm tra ác quy, dây dẫn, công tắc đánh lửa. 2. Kiểm tra sửa chữa dây dẫn và siết lại cho chặt. 3. Kiểm tra cuộn dây, thay thế nếu hư.

4. Làm sạch và bắt chặt các chỗ nối.

(2) Động cơ cháy nhưng bất thường

1. Các bugi bẩn hoặc hư. 2. Các dây cao áp hư. 3. Bôbin đánh lửa hư.

4. Các chỗ nối tiếp xúc không tốt.

hở hoặc thay thế. 2. Thay thế. 3. Thay thế. 4. Làm sạch và bắt chặt lại. (3) Động cơ chạy nhưng thời điểm cháy sai

1. Thời điểm đánh lửa không đúng. 2. Các bugi dùng không đúng loại nhiệt.

3. Động cơ bị quá nhiệt.

1. Điều chỉnh lại góc đánh lửa. 2. Thay thế các bugi đúng loại. 3. Xem phần (5) (4) Động cơ bị quá nhiệt

1. Thời điểm đánh lửa trễ.

2. Thiếu nước làm mát hoặc hư hỏng

Một phần của tài liệu Thuyết minh nghiên cứu và mô phỏng hệ thống đánh lửa xe toyota vios (Trang 48)