Chương trình điều khiển đánh lửa cho ECU

Một phần của tài liệu Nghiên cứu chế tạo thử nghiệm bộ điều khiển tự động động cơ xăng trang bị trên ô tô hiện đại (Trang 103 - 121)

3.4.1. Thuật toán điều khiển đánh lửa

H ìn h 3 .1 7 -S ơ đ thu ật to án đ iề u k h iể n c đá nh lử a s ớm. đúng sai

3.4.2. Viết chương trình

Chương trình được viết theo ngôn ngữ lập trình C. Nội dung cơ bản của chương trình được viết dựa trên các công thức tính toán và thuật toán điều khiển trong phần chương 3.

***************************************************** This program was produced by the

CodeWizardAVR V1.24.6 Standard Automatic Program Generator

© Copyright 1998-2005 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpinfotech.com e-mail:office@hpinfotech.com Project : Version : Date : 6/29/2012 Author : F4CG Company : F4CG Comments:

Chip type : ATmega8L Program type : Application Clock frequency : 8.000000 MHz Memory model : Small

External SRAM size : 0 Data Stack size : 256

*****************************************************/

#include <mega8.h> #include <delay.h>

#define ing1 PORTD.7 #define ing2 PORTD.6 #define ing3 PORTD.5 #define ing4 PORTD.4

int xung, count, dem;

char mang_05[8] ={15, 26, 31, 34, 36, 37, 38, 40 }; char mang_1[8] ={15, 26, 31, 34, 36, 37, 38, 40 }; char mang_15[8] ={15, 26, 31, 34, 36, 37, 38, 40 }; char mang_2[8] ={15, 23, 29, 28, 29, 32, 33, 38 }; char mang_25[8] ={15, 23, 26, 24, 26, 29, 30, 34 }; char mang_3[8] ={18, 17, 23, 24, 31, 27, 26, 30 }; char mang_35[8] ={14, 10, 12, 19, 18, 17, 14, 26 }; char mang_4[8] ={6, 8, 9, 10, 13, 14, 11, 26 }; char mang_5[8] ={6, 8, 9, 10, 13, 14, 11, 24 }; bit cho_phep;

char toc_do, chi_so; char vta, sta;

float t_150, t_hc, phi_hc, t_dtt, t_delay;

// External Interrupt 0 service routine

interrupt [EXT_INT0] void ext_int0_isr(void) { cho_phep=1; xung++; dem++; if(dem==4) dem=0;

}

// Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) {

count++;

if(count>=60) // cu 1/2s kiem tra 1 lan {

toc_do=(xung/4)*120; xung=0;

} }

// Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) {

// Place your code here }

#define ADC_VREF_TYPE 0x20

// Read the 8 most significant bits // of the AD conversion result (adsbygoogle = window.adsbygoogle || []).push({});

unsigned char read_adc(unsigned char adc_input) {

ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion

ADCSRA|=0x40;

// Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10; return ADCH;

} //=========================================================// void kiem_tra_chi_so() { if((toc_do>=1000)&&(toc_do<1500)) chi_so=0; if((toc_do>=1500)&&(toc_do<2000)) chi_so=1; if((toc_do>=2000)&&(toc_do<2500)) chi_so=2; if((toc_do>=2500)&&(toc_do<3000)) chi_so=3; if((toc_do>=3000)&&(toc_do<3500)) chi_so=4; if((toc_do>=3500)&&(toc_do<4000)) chi_so=5; if((toc_do>=4000)&&(toc_do<5000)) chi_so=6; if(toc_do>=5000) chi_so=7; } //=========================================================// void kiem_tra_VTA() { vta=read_adc(4); if((vta>=25)&&(vta<50)) phi_hc=mang_05[chi_so]; if((vta>=50)&&(vta<75)) phi_hc=mang_1[chi_so];

if((vta>=75)&&(vta<100)) phi_hc=mang_15[chi_so]; if((vta>=100)&&(vta<125)) phi_hc=mang_2[chi_so]; if((vta>=125)&&(vta<150)) phi_hc=mang_25[chi_so]; if((vta>=150)&&(vta<175)) phi_hc=mang_3[chi_so]; if((vta>=175)&&(vta<200)) phi_hc=mang_35[chi_so]; if((vta>=200)&&(vta<225)) phi_hc=mang_4[chi_so]; if(vta>=250) phi_hc=mang_5[chi_so]; } //=========================================================// void chon_chan_kich() { if(dem==0) { ing1=1; ing2=0; ing3=0;

ing4=0; } if(dem==1) { ing1=0; ing2=1; ing3=0; ing4=0; } if(dem==2) { ing1=0; ing2=0; ing3=1; ing4=0; } if(dem==3) { ing1=0; ing2=0; ing3=0; ing4=1; } } //=========================================================// void chuong_trinh_delay() { t_150=(60*1000*150)/(toc_do*360) ;

kiem_tra_chi_so(); kiem_tra_VTA(); t_hc=(60*1000*phi_hc)/(toc_do*360); sta=read_adc(3); if(sta<50) t_dtt=2.77+1; else t_dtt=2.77; t_delay=t_150-(t_dtt+t_hc) ; chon_chan_kich(); delay_ms(t_delay); cho_phep=0; } //=========================================================// // Declare your global variables here

void khoi_tao(void) {

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

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

PORTB=0x00; DDRB=0x08;

// Port C initialization

// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // 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 // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;

DDRD=0xFF;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 31.250 kHz TCCR0=0x04;

TCNT0=0x00;

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

// Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: 31.250 kHz // Mode: Fast PWM top=FFh // OC2 output: Non-Inverted PWM ASSR=0x00;

TCCR2=0x6E; TCNT2=0x00; OCR2=0x00;

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

// INT1: Off MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x41; (adsbygoogle = window.adsbygoogle || []).push({});

// Analog Comparator initialization // Analog Comparator: Off

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

SFIOR=0x00; // ADC initialization

// ADC Clock frequency: 125.000 kHz // ADC Voltage Reference: AREF pin // Only the 8 most significant bits of // the AD conversion result are used ADMUX=ADC_VREF_TYPE; ADCSRA=0x86;

// Global enable interrupts #asm("sei") } void main() { khoi_tao(); while (1) { if(cho_phep==1) chuong_trinh_delay(); }; }

3.4. Kết quả và đánh giá

Sau khi thiết kế phần cứng và phần mềm hoàn tất, ta tiến hành chạy thử.

 Địa điểm:

Tại phòng thực hành điện ô tô - bộ môn kỹ thuậ ô tô, phòng thực hành điện,điện tử - bộ môn kỹ thuật điện-điện tử trường đại học Nha Trang.

 Những người theo dõi:

- Sinh viên Đỗ Văn Đắc - người trực tiếp tiến hành chạy thử. - Thầy Trần Ngọc Anh – giảng viên hướng dẫn.

- Cùng với một số bạn sinh viên trong lớp.

3.4.1. Chuẩn bị

 Một mô hình đánh lửa điện tử tại phòng thực hành điện ô tô:

 Tên mô hình: Khảo sát – Kiếm tra hệ thống phun xăng điện tử - TCCS. Mô hình gồm có:

 Các cảm biến:

- Cảm biến vị trí trục cam (G) loại điện từ. - Cảm biến tốc độ động cơ (Ne) loại điện từ. - Cảm biến vị trí bướm ga loại tuyến tính (VTA). - Cảm biến đo gió loại điện áp giảm (Vs).

- Cảm biến nhiệt độ không khí (THA). - Cảm biến nhiệt độ nước làm mát (THW).

 Bộ xử lý trung tâm: ECU

 Cơ cấu chấp hành: Gồm 4 vòi phun, 1 bobbin đánh lửa , 4 bugi và các cơ cấu chấp hành khác.

Một máyhiện sóng Oscilloscope của phòng thực hành điện,điện tử. Kiết nối tín hiệu với máy hiện sóng Oscilloscope để hiển thị dạng xung của IGT.  Kết nối các tín hiệu với bo mạch điều khiển đánh lửa theo sơ đồ hình 3.21.

Hình 3.18-Sơ đồ tổng quát về bo mạch điều khiển đánh lửa

Hình 3.19-Các chân kết nối các tín hiệu của bo mạch điều khiển đánh lửa.

3.4.2. Chạy thử

Tiến hành chạy động cơ trên mô hình đánh lửa điện tử để lấy các tín hiệu đầu vào: G, VTA, STA.

3.4.3. Kết quả

thay đổi tốc độ động cơ. Kết quả hiển thi xung IGT trên máy hiển sóng Oscilloscope thể hiên trên hình 3.20. (adsbygoogle = window.adsbygoogle || []).push({});

Hình 3.20-Xung IGT1 trên máy hiện sóng Oscilloscope.

Hình 3.20 cho chúng ta thấy được thời gian ngậm điện của Bobine là khoảng 2,77ms (Trên hình 3.20 thì trục tung là chỉ giá trị điện áp, ta tùy chỉnh 1 ô ứng với 2,5V. Trục hoàng là chỉ giá trị thời gian, ta tùy chỉnh 1 ô ứng với 1ms). Với thời gian ngậm điện khoảng 2,77ms, theo tính toán thì cường độ dòng điện tăng trưởng trong cuộn sơ cấp bobine sẽ là khoảng 6A. Mặt khác, cũng như theo tính toán thì thời gian ngậm điện khoảng 2,77ms và cường độ thì không quá 6A thì lúc đó chúng ta sẽ có được tia lửa mạnh nhất và cũng không làm nóng bobine.

Như vậy, với mọi tốc động hoạt động của mô hình (n= 500 ÷5000 v/ph) thì thời gian ngậm điện của bobine khoảng 2,77ms.

Chương 4:

KẾT LUẬN VÀ KIẾN NGHỊ

4.1. Kết luận

Sau thời gian thực hiện đồ án tốt nghiệp với đề tài: ― Nghiên cứu chế tạo thử nghiệm bộ điều khiển tự động động cơ xăng trang bị trên xe ô tô hiện đại ”. Có thể nói đây là đề tài khá hay nhưng tài liệu tham khảo lại còn rất nhiều hạn chế. Trong thời gian đầu tiến hành tìm tài liệu và thực hiện đồ án tôi gặp rất nhiều khó khăn, nhưng cùng với sự giúp đỡ và sự động viện tận tình của thầy hướng dẫn Trần Trọng Anh, các quý thầy trong bộ môn và một số bạn trong lớp đến nay nội dung cơ bản của đề tài đã đươc hoàn thành.

Khi thực hiện đề tài này tôi đã thấy được những ưu điểm nổi bật của việc điều khiển tự động động cơ bằng điện tử. Với hệ thống này không những công suất động cơ tăng, điều khiển dễ dàng, ít tiêu hoa nhiên liệu mà còn giải quyết được tình trạng ô nhiểm môi trường do khí thải. Ngoài ra tôi còn tiếp thu được những kiến thức sau:

 Về lý thuyết:

- Hiểu rõ hơn về các hệ thống điều khiển đang được sử dụng trên ô tô. - Nắm được nguyên lý, chức năng, cấu trúc và các chế độ điều khiển của ECU.

- Biết được cấu tạo, cách bố trí, các khối điều khiển trên ECU GEMS- K1

- Kiến thức về điệ tử, tin học được nâng cao.

 Về thực hành:

- Biết được cách vẽ mạch in, chế tạo bo mạch điện tử bằng phương pháp thử công. Kết quả: đã chế tạo được bo mạch thử nghiệm điều khiển đánh lửa lập trình. Tuy bo mạch chỉ là thiết kế chế tạo thử nghiệm mô phỏng nhưng

bước đầu như thế là đã thành công. Đối với tôi: khi làm xong bo mạch này đã có cái nhìn khác về điện điều khiển tự động, đặc biệt là điện điều khiển tự động trên ô tô, một cái nhìn mang tính chất tích cực hơn. Đối với các bạn sinh viên khóa sau: Bo mạch có thể làm mô hình tham khảo cho những bạn sinh viên có niềm đam mê về mảng điện điều khiển tự động trên ô tô.

Tuy nhiên, do kiến thức, kinh nghiệm thực tế còn nhiều hạn chế và thời gian có hạn nên nội dung của đề tài sẽ không tránh khỏi những sai sót, kính mong quý thầy và các bạn góp ý kiến để đề tài bổ sung được hoàn thiện hơn.

4.2. Kiến nghị

Trong quá trình thực hiện đề tài, tôi có một số ý kiếm và kiến nghị sau:

 Nhược điểm của đề tài:

 Thứ nhất: Để nghiên cứu sâu, chi tiết, cụ thể vào từng cấu trúc bên trong của ECU là rất khó khăn vì tất cả các tài liệu của các hãng xe đều mang tính chất bản quyền. Vì vậy nội dung của đề tài còn nhiều thiếu sót và hạn chế.  Thứ hai: Về vấn đề chế tạo bo mạch thử nghiệm. Chỉ là chế tạo thử nghiêm nên sử dụng các tín hiệu cảm biến đầu vào con rất ít, chưa xét vào từng chế độ hoạt động cụ thể của động cơ, chưa tính đến sự chậm trễ xử lí tín hiệu của vi điều khiểm, sai số của các tín hiệu cảm biến,…

Cần phát triển bo mạch điều khiển đánh lửa lập trình lên mức cao và hoàn thiện hơn, đồng thời thiết kết thêm một số mạch điều khiển như: phun xăng điện tử, mạch điều khiển chạy không tải, một số mạch chẩn đoán lỗi,…để bộ điều khiển điện tử động cơ xăng trở lên hoàn thiện hơn. Ngoài ra ứng dụng vi điều khiển không chỉ dừng lại với đề tài của động cơ xăng mà cần phải có những đề tài ứng dụng vi điều khiển trên động cơ diesel và ứng thống phanh, khung gầm, vv…

 Phương án nghiên cứu, tiếp cận:

 Tiếp cận thực tế nhiều hơn.

 Bộ môn cần phải trang bị tốt kiến thức về điện-điện tử, lập trình cho vi điều khiển cho các sinh viên.

 Ngoài ra mỗi bạn sinh viên nên tăng cường sự tự học, trau dồi kiến thức và kinh nghiệm thực tế, cần đề xuất và phát triển những đề tài mang tính khả thi có sự ứng dụng công nghệ thông tin cho ngành ô tô.

dụng vi điều khiển trên một số hệ thống khác của ô tô như: hệ thống lái, hệ

(adsbygoogle = window.adsbygoogle || []).push({});

TÀI LIỆU THAM KHẢO

Tiếng việt

1. PGS.TS Đỗ văn Dũng (2004), Trang bị điện và điện tử trên ôtô hiện

đại, NXB Đại học quốc gia, Tp Hồ chí Minh.

2. Ngô Diên Tập (2006), vi điều khiển với lập trình C, NXB Khoa học kỹ

thuật.

3. Ngô Diên Tập (2003), kỹ thuật vi điều khiển với avr, NXB Khoa học kỹ thuật.

4. Toyota – Hệ thống phun xăng và đánh lửa điều khiển bằng máy tính. 5. Lâm Bá Nha, Nguyễn Khắc Bằng, Ngô Thanh Hà (2011), ―Nghiên cứu

chuyển đổi hệ thống đánh lửa bán dẫn sang hệ thống đánh lửa trực tiếp‖, Tạp chí khoa học công nghệ, số 01 tháng 06/2011.

6. Trần Đăng Long, Vũ Việt Thắng, Đinh Quốc Trí (2009), ―Một giải pháp tăng cường hiệu quả làm việc cho hệ thống đánh lửa kiểu CDI-AC trên xe gắn máy‖, Tạp chí phát triển khoa hoc công nghệ, tập 12, số 14 – 2009.

7. NengHui Zhou (2008), GEMS-K1 ECU hardware design Document, Tianjin University—Infineon Automotive Electronic Joint Laboratory, China.

Website

8. http://www1.hcmute.edu.vn/ckd/HOATDONG/Noisan6.html

9. http://www1.hcmute.edu.vn/ckd/HOATDONG/Noisan12.html 10. http://www.hocavr.com/index.php

Một phần của tài liệu Nghiên cứu chế tạo thử nghiệm bộ điều khiển tự động động cơ xăng trang bị trên ô tô hiện đại (Trang 103 - 121)