labview com
DESCRIPTION
labviewTRANSCRIPT
LabVIEW COM
1.Đặt vấn đề
Điều khiển là quá trình thu thập thông tin, xữ lý thông tin và tác động lên hệ
thống để đạt được mục đích. Như vậy quá trình thu thập thông tin quyết định đến việc
điều khiển đối tượng, thông tin trên hệ thống điều khiển nhiên liệu điện tử được xác
định qua tín hiệu tiền định từ các cảm biến như VTG,OXY,n,..vv. Việc ứng dụng
Labview để thu thập tín hiệu từ cảm biến giúp người điều khiển có cái nhìn trực quan
về hệ thống, phát hiện những tín hiệu bất thường trong việc điều khiển từ đó đưa ra
hướng điều khiển.
2. Cơ sở lý thuyết về cảm biến và tín hiệu cảm biến và trên động cơ đốt trong
2.1. Cảm biến trên động cơ đốt trong
Cảm biến là thiết bị dùng để cảm nhận sự biến đối của đại lượng vật lí và đại
lượng không có tính điện thành các đại lượng điện có thể đo và xữ lý.
Cảm biến sử dụng trên động cơ đốt trong có nhiệm vụ thu thập các tín hiệu về
trạng thái các thông số trong động cơ như cảm biến tốc độ trục khuỷu cho biết số vòng
quay của trục khuỷu trên một đơn vị thời gian, cảm biến oxy xác định trạng thái hỗn
hợp nhiên liệu sau khi đốt cháy, cảm biến vị trí ga cho biết phần trăm tải khi chạy trên
đường. Để thu thập tín hiệu từ cảm biến ta cần xác định dạng tín hiệu của cảm biến
Các chỉ tiêu đánh giá cảm biến trên động cơ đốt trong
• Dải đo: Chênh lệch giữa giá trị lớn nhất và giá trị nhỏ nhất của tham số cần
đo.
• Độ phân giải: Thay đổi nhỏ nhất mà cảm biến có thể phân biệt được.
• Độ chính xác: Sai khác giữa giá trị đo được và giá trị thực.
• Tính chính xác: Khả năng lặp lại kết quả đo với độ chính xác cho trước.
• Độ nhạy: Là tỷ số của thay đổi đầu ra trên một đơn vị thay đổi của đầu vào.
• Thời gian đáp ứng: Độ trễ giữa đầu vào và đầu ra.
• Nhiệt độ hoạt động: Khoảng nhiệt độ mà tại đó cảm biến hoạt động được.
• Vùng chết: Dải đầu vào mà trong dải đó sẽ không có đầu ra.
2.2. Tín hiệu từ cảm biến động cơ đốt trong
Tín hiệu là biểu diễn của một đại lượng vật lý chứa đựng tham số thông tin và
truyền dẫn được.
Tín hiệu thường được biểu diễn theo miền thời gian hoặc theo miền tần số. Đối
với những tín hiệu có sự thay đổi tuyến tính, hoặc phi tuyến trong điều khiển như tín
hiệu từ cảm biến vị trí ga, cảm biến nhiệt độ nước làm mát thì thường biểu diễn trên
miền thời gian. Với tín hiệu tuần hoàn như cảm biến kích nổ, cảm biến tốc độ thì được
biểu diễn trong miền tần số
Hình 2.1 Biểu diễn tín hiệu trong miền thời gian và tần số
Cảm biến động cơ đốt trong cho ra hầu hết là tín hiệu tiền định ( dạng tín hiệu
xác định trước). Việc khảo sát các tín hiệu từ cảm biến giúp ta xác định miền làm việc
của tín hiệu các đường đặc tính là cơ sỡ cho việc thay thế các cảm biến, củng như thiết
kế các bộ lọc (bộ lọc thông thấp, bộ lọc dãi, bộ lọc thông cao), các mạch khuếch đại
tín hiệu để phù hợp với chuẩn đầu vào ECU.
3. Thiết kế Card giao tiếp với Labview qua chuẩn RS232 để thu thập tín hiệu
3.1. Giao thức UART và cổng RS232
a) Giao thức UART
UART (Universal Asynchronous Receiver/Transmitter) là vi mạch điện tử được
sử dụng rộng rãi cho việc truyền dữ liệu bits nối tiếp cũng như chuyển đổi song
song/nối tiếp giữa đường truyền và bus máy tính. Việc truyền tải được thực hiện theo
từng kí tự 7 hoặc 8 bits, được bổ sung hai bít dấu đầu cuối và một bít kiễm tra lỗi chẵn
lẽ (parity bit)
Start 0 1 2 3 4 5 6 7 P Stop
0 LSB MSB 1
Bit khởi đầu (Start bit) bao giờ cũng là 0 và bits kết thúc (Stop bit) bao giờ
cũng là 1. Các bit trong một kí tự được được truyền theo thứ tự từ bit thấp (LSB) tới
bit cao (MSB). Bit P (parity) dùng để kiểm tra chẵn lẽ.
b) Cổng RS232
Là một chuẩn phát triển bởi Electronic Industries Asiociation (EIA) và các tổ
chức liên quan khác chỉ ra giao diện nối tiếp giữa thiết bị đầu cuối dữ liệu (DTE) và
thiết bị truyền tin dữ liệu (DCE).
Hình 3.1 Sơ đồ chân DB-9
Số chân Mô tả 1 Data carrier detect (DCD) Tránh tín hiệu mạng dữ liệu
2 Received data (RxD) Dữ liệu được nhận
3 Transmitted data (TxD) Dữ liệu được gửi
4 Data terminal ready (DTR) Đầu dữ liệu sẵn sàng
5 Signal ground (GND) Đất của tín hiệu
6 Data set ready (DSR) Dữ liệu sẵn sàng
7 Request to send (RTS) Yều cầu gửi
8 Clear to send (CTS) Xóa để gửi
9 Ring indicator (RL) Báo chuông
3.2 Giới thiệu về Labview và tính năng giao tiếp qua RS232
a) Giới thiệu về Labview
Giao diện LabView và mã lập trình
Việc lập trình trên Labview chỉ đơn giản là các biểu tượng thay vì các dòng văn
bản để tạo các ứng dụng.Trong LabView việc xây dựng giao diện điều khiển củng như
thu thập tín hiệu rất đơn gian do được hổ trở các thanh công cụ đồ họa mạnh, các hàm
tính toán trong LabView được chuẩn hóa cao
Tính năng giao tiếp giữa LabView với thiết bị ngoại vi được hổ trợ mạnh đặc
biệt truyền thông nối tiếp, trong LabView có các thư viện và các hàm mặt định.
Thư viện truyền thông nối tiếp qua RS232
b) Tính năng giao tiếp qua RS232
Để giao tiếp giữa LabView với thiết bị ngoại vi ta cần thiết lập cấu hình trong
các thư viện truyền thông nối tiếp bao gồm
*Thiết lập cấu hình cổng truyền thông : Với mục đích xác định chế độ baud, số bits
truyền, kiễm tra lỗi.
*Khối ghi dữ liệu : Với mục đích truyền dữ liệu từ máy tính xuống card
*Khối đọc dữ liệu : Với mục đích nhận dữ hiệu từ card đưa lên
3.2. Sơ đồ điều khiển và lưu đồ thuật toán
Sơ đồ kết nối điều khiển thực tế
Hình 3.2 Sơ đồ thuật toán truyền và nhận dữ liệu giữa Card và máy tính
a-Thuật toán trong Card; b-Thuật toán trong máy tính
3.3 Sơ đồ mạch thiết kế
J62
CON2
12
Y1
12MHZ
C133
C233
PVN1
PIC18F4331
RA0/AN02
RA1/AN13
RA2/AN2/VREF-/CAP1/INDX4
RA3/AN3/VREF+/CAP2/QEA5
RA4/AN4/CAP3/QEB6
RA5/AN5/LVDIN7
RB0/PWM033
RB1/PWM134
RB2/PWM235
RB3/PWM336
RB4/KBI0/PWM537
RB5/PGM/KBI1/PWM438
RB6/PGC/KBI239
RB7/PGD/KBI340
RC0/T1OSO/T1CKI15
RC1/T1OSI/CCP2/FLTA*16
RC2/CCP1/FLTB*17
RC3/T0CKI/T5CKI/INT018
RC4/INT1/SDI/SDA23
RC5/INT2/SCK/SCL24
RC6/TX/CK/SS*25
RC7/RX/DT/SDO26
RD0/T0CKI/T5CKI19
RD1/SDO20
RD2/SDI/SDA21
RD3/SCK/SCL22
RD4/FLTA*27
RD5/PWM428
RD6/PWM629
RD7/PWM730
OSC1/CLKIN/RA713
OSC2/CLKOUT/RA614
VDD32AVDD11
VSS31 AVSS12
MCLR*/VPP/RE31
RE0/AN68
RE1/AN79
RE2/AN810
RST
J1
JACK NAP ICSP
12345
data
+5V
clock
R1 10K
TXD
D401N4148
RXD
CHAN DIEU KHIEN
123456
RST
CH
AN
DIE
U K
HIE
N
123456
dataclock
C10+5V
U2
MAX232
C1+1
C1-3
C2+4
C2-5
V+2
V-6
R1OUT12
R2OUT9
T1IN11
T2IN10
R1IN13
R2IN8
T1OUT14
T2OUT7
GN
D15
+5V
16
C6 +5V
C8
CAM BIEN
123456
RXDRXD
C27
TXDTXD
P1
CONNECTOR DB9
594837261
THU TIN HIEU 1
C9
THU TIN HIEU 2THU TIN HIEU 3THU TIN HIEU 4THU TIN HIEU 5THU TIN HIEU 6
DIEU KHIEN
123456
CHAN DIEU KHIEN 1CHAN DIEU KHIEN 2CHAN DIEU KHIEN 3
THU TIN HIEU TOC DOCHAN DIEU KHIEN 4CHAN DIEU KHIEN 5
+12V+5V
C17104
U10 LM7805C/TO
IN1
OUT3
GN
D2
+ C3
1000uF
C20104
+ C4
1000uF
D2
LED
R29 330
CARD GIAO TIEP
Hình 3.3 Sơ đồ mạch nguyên lý CARD TME
Card được thiết kế dùng Vi Điều Khiển (VĐK) PIC18F4331 để thu thập tín
hiệu cảm biến và điều khiển, gồm 9 kênh thu thập tín hiệu, 8 kênh xuất xung PWM
và 20 chân điều khiển số. Nguôn 5V nuôi VĐK được lấy từ IC ổn định nguồn
LM7805. Vì điện áp giữa chuẩn RS232 và VĐK không tương thích nên cần sử
dụng IC Max232 đã chuyển điện áp qua lại tương thích.
J17
CON8
12345678
U12
L297
A4HOME3GND2SYNC1
Control11
B6
Enable10D9
VS12 SENS213
Vref15
SENS114
INH15
C7
INH28
OSC16 CW/CCW17 CLOCK18 HALF/FULL19 RESET20
J18
CON4
1234
5VA1
A2
A3
A4U14
ULN2803
CO
M1
0G
ND
9
IN1
1
IN2
2
IN3
3
IN4
4
IN5
5
IN6
6
IN7
7
IN8
8
OU
T1
18
OU
T2
17
OU
T3
16
OU
T4
15
OU
T5
14
OU
T6
13
OU
T7
12
OU
T8
11
5V
D29
4007
D30
4007
D31
4007
D32
4007
R28
472
1 23456789
J19
4OPTOPC817
1
2
3
4
5
6
7
8 9
10
11
12
13
14
15
16
J22
MO
DU
L S
TE
PP
ER
12345678
12V
C V
AN
DIE
NT
U1
C V
AN
VO
IPH
UN
C V
AN
DIE
NT
U3
C V
AN
DIE
NT
U2
RS297
12V
12V
RS297
12V12V
D33
LED
D34
LED
D35
LED
12V
D36
LED
DK VANDIENTU1
DK VANVOIPHUN
DK VANDIENTU3
DK VANDIENTU2
C18
102
R30
0.5/2W
VANDIENTU2VANVOIPHUN
VANDIENTU1VANDIENTU3
D37
2A
R310.5/2W
R32R2
R33R2
D38
2A
R34R2
R35R2
A5
Q16 IRF3250
Q17 IRF3250
D39
2A
C19104
Q18 IRF3250
C20 104
Q19 IRF3250
D40
2A
J24
VAN1
12
J25
VAN2
12
J26
VAN3
12
U16
L298
1A15
1A27
2A110
2A212
1Y12
1Y23
2Y113
2Y214
GND8
1EN6
2EN11
1E1
2E15
VCC19
VCC24
J27
VAN4
12
D41
2A
J28
CON8
12345678
5V
D42
2A
R36 22k
D43
2A
D44
2A J29
CON4
1234
U17
L297
A4HOME3GND2SYNC1
Control11
B6
Enable10D9
VS12 SENS213
Vref15
SENS114
INH15
C7
INH28
OSC16 CW/CCW17 CLOCK18 HALF/FULL19 RESET20
12V
R37 472
123456789
R38 10K
R3939K
5V
U18
L298
1A15
1A27
2A110
2A212
1Y12
1Y23
2Y113
2Y214
GND8
1EN6
2EN11
1E1
2E15
VCC19
VCC24
12V
12V12V
12V
Y5
12V
VANVOIPHUN
VANDIENTU1
VANDIENTU3
VANDIENTU2
VA
ND
IEN
TU
1
VA
NV
OIP
HU
N
VA
ND
IEN
TU
2
D451N4007 R41 3.9K
VA
ND
IEN
TU
3
Y5
MODULE DIEU KHIEN VOI PHUN
R42 22k
C26
102
C27104
Q20
B562
Q21
B562Q22
B562
Q23
B562
Q24D468
Q25D468 Q26
D468
Q27D468
R430.5/2W
R44
0.5/2W
5V
MODUL DONG CO BUOC
U20
74HCT244
A12
A24
A36
A48
1OE1
Y118
Y216
Y314
Y412
VCC20
GND10
A511
A613
A715
A817
Y59
Y67
Y75
Y83
2OE19
C VANDIENTU2C VANDIENTU3
C VANDIENTU1
C VANVOIPHUN
C VANVOIPHUN
C VANDIENTU1
D47
2A
C VANDIENTU2
D48
2A
C VANDIENTU3
D49
2A
D50
2A
R46
470
R47R48R49
D51
2A
D52
2A
D53
2A
D54
2A
R50
472
1 23456789
Hình 3.3 Sơ đồ mạch nguyên lý module điều khiển động cơ bước và vòi phun
Module điều khiển động cơ gồm hai IC L297 và L298, IC74HCT244 có tác
dụng dụng chuẩn mức High-Low.Module điều khiển vòi phun là mạch khuếch đại
công suất chế độ AB, gồm hai transistor khác loại D468 và B562 kéo, đẩy
IRF3250 dứt khoát.
4. Kết quả trên giao diện Labview và đánh giá
Hình 4.2 Số liệu thu thập từ Card giao tiếp Labview khi xe chạy xăng hoàn toàn
ở tốc độ 2500 (vòng/phút)
Hình 4.3 Số liệu thu thập từ Card giao tiếp Labview khi xe chạy xăng cồn ở tốc
độ 2500 (vòng/phút)
Qua kết quả thu thập card giao tiếp đáp ứng được khả năng nhận tín hiệu từ
cảm biến. Việc truyền dữ liệu qua chuẩn RS232 đáp ứng tốc độ truyền tải dữ liệu lên
máy tính. Tuy nhiên việc sữ dụng card còn hạn chế trong việc đo tốc độ ở động cơ
đánh lữa do nhiễu cao áp, việc thu thập tín hiệu củng khó khăn khi không có băng thử
nên phải mang máy tính chạy trên đường. Do vậy hướng phát triễn của đề tài sẽ tích
hợp KIT KM9260 có nhúng hệ điều hành LINUX cho phép truyền dữ liệu qua mạng
internet 3G.
Chương trình PIC
Master
#include <18f4431.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)
#use rs232(baud=9600,parity=n,xmit=PIN_C6,rcv=PIN_C7)
#include <stdlib.h>
#use i2c(master,SDA=PIN_C4,SCL=PIN_C5)
/////////////////////////////////CHU Y/////////////////////////////////////////////////////
//////////////////////////////MASTER DOC CAC CAM BIEN SAU:
VI_TRI_GA;TOC_DO///////////////////
//////////////////////////////MASTER DIEU KHIEN VOI PHUN
LPG////////////////////////////////////
/////////////////////////////MASTER NHAN TIN HIEU LUU LUONG,KICH
NO,OXY///////////////////////
/////////////////////////////////////////////KHAI BAO BIEN TOAN
CUC//////////////////////////////
INT8 I,A[8],C,LUU_LUONG,vi_tri_ga,kich_no,oxy,DATA,xung,gia_tri=5;
INT16 LPG,LAN_LPG,V,DIESEL,CAN_DIESEL;
#INT_RDA
VOID NHAN_DU_LIEU(){
data=GETC();
////////////////////DIEU KHIEN VOI PHUN/////////////////
IF (DATA=='#'){
FOR (I=1;I<=5;I++) {A[I]=GETC();
IF (A[I]=='$') {IF (I==2){ LPG=(A[1]-0X30);
break;}
IF (I==3) {LPG= (A[1]-0X30)*10+(A[2]-0X30);
break;}
IF (I==4){ LPG= (A[1]-0X30)*100+(A[2]-0X30)*10+(A[3]-0X30);
break;}
IF (I==5){ LPG= (A[1]-0X30)*1000+(A[2]-0X30)*100+10*(A[3]-
0X30)+(A[4]-0X30);
break;}
}
}
}
IF (DATA=='%') {
FOR(I=1;I<=4;I++){A[I]=GETC();
IF (A[I]=='^') {IF (I==2){ CAN_DIESEL=(A[1]-0X30);
break;}
IF (I==3) {CAN_DIESEL=(A[1]-0X30)*10+(A[2]-0X30);
break;}
IF (I==4){ CAN_DIESEL=(A[1]-0X30)*100+(A[2]-0X30)*10+(A[3]-
0X30);
break;}
}
}
}
}
#INT_RTCC
VOID BODEMTIMER()
{C++;
}
#INT_TIMER1
VOID PHUN_LPG()
{SET_TIMER1(65386);
LAN_LPG++;
IF (LAN_LPG==1) OUTPUT_HIGH(PIN_C2);
IF (LAN_LPG==LPG) OUTPUT_LOW(PIN_C2);
IF (LAN_LPG>400) LAN_LPG=0;
}
#INT_TIMER5
VOID DIEU_KHIEN_CAN_DIESEL()
{SET_TIMER5(65386);
CAN_DIESEL++;
IF (CAN_DIESEL==1) OUTPUT_HIGH(PIN_C1);
IF (CAN_DIESEL==DIESEL) OUTPUT_LOW(PIN_C1);
IF (CAN_DIESEL>400) CAN_DIESEL=0;
}
////////////////////////Chuong trinh viet i2c/////////////////////
void write_I2C(int8 value,int8 slave_addr)
{ i2c_start();
delay_ms(10);
i2c_write(slave_addr);
delay_ms(10);
i2c_write(value);
delay_ms(10);
i2c_stop();
}
///////////////////////chuong trinh doc i2c////////////////////////
int8 read_i2c(int8 slave_addr)
{ int8 value_re;
i2c_start();
delay_ms(10);
i2c_write(0xA1);
delay_ms(10);
value_re=i2c_read(0);
delay_ms(10);
i2c_stop();
return value_re;
}
void main(){
const int8 slave_addr=0xA0;
set_tris_b(0x00);
setup_adc(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
setup_uart(9600);
ENABLE_INTERRUPTS(INT_RDA);
//SETUP_TIMER_0(RTCC_DIV_1 |RTCC_EXT_H_TO_L);
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_1);
SETUP_TIMER_5(T5_INTERNAL|T5_DIV_BY_8);
SET_TIMER0(0);
SET_TIMER1(65236);
SET_TIMER5(65386);
ENABLE_INTERRUPTS(INT_RTCC);
ENABLE_INTERRUPTS(INT_TIMER1);
ENABLE_INTERRUPTS(INT_TIMER5);
ENABLE_INTERRUPTS(GLOBAL);
while(true)
{
//write_i2c(gia_tri,slave_addr);
xung=read_i2c(slave_addr);
v=xung;
/////////////DOC CAM VA GUI TIN HIEU VI TRI GA////////////////////////
SET_ADC_CHANNEL(0);
delay_us(50);
vi_tri_ga=read_adc();
delay_ms(7);
putc('g');
delay_ms(7);
printf("%u",vi_tri_ga);
delay_ms(7);
/////////////GUI GIA TRI TOC DO DONG CO///////////////////////////////////////
putc('v');
delay_ms(8);
printf("%lu",v);
delay_ms(6);
///////////DOC CAM VA GUI TIN HIEU CAM BIEN KICH
NO/////////////////////////////////
SET_ADC_CHANNEL(2);
delay_us(50);
KICH_NO=read_adc();
delay_ms(7);
putc('k');
delay_ms(5);
printf("%u",KICH_NO);
/////////////DOC VA GUI TIN HIEU CAM BIEN LUU
LUONG////////////////////////////////////
SET_ADC_CHANNEL(1);
delay_us(10);
LUU_LUONG=read_adc();
delay_ms(5);
putc('y');
delay_ms(10);
printf("%u",luu_luong);
/////////////DOC VA GUI TIN HIEU CAM BIEN OXY////////////////////////////////////
SET_ADC_CHANNEL(3);
delay_us(5);
OXY=read_adc();
delay_ms(5);
putc('o');
delay_ms(7);
printf("%u",oxy);
}
}
Slave
#include <18f4431.h>
#fuses XT,HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)
#include <stdlib.h>
#use i2c(slave,SDA=PIN_C4,SCL=PIN_C5,address=0xA0,force_hw)
int8 V,ga,DIESEL,DIESEL1=10;
int16 c;
///////////////////////////////////KHAI BAO CAC NGAT///////////////////////
#INT_RTCC
VOID BODEMTIMER()
{C++;
}
#INT_TIMER1
VOID TINH_TOC_DO_DONG_CO()
{
DISABLE_INTERRUPTS(INT_RTCC);
DISABLE_INTERRUPTS(INT_TIMER1);
V=(GET_TIMER0());
C=0;
SET_TIMER0(0);
SET_TIMER1(53036);
ENABLE_INTERRUPTS(INT_RTCC);
ENABLE_INTERRUPTS(INT_TIMER1);
}
#INT_SSP
void i2c_isr()
{int8 state;
state=i2c_isr_state();
if (state<=0x80){
i2c_write(V);
}
}
void main()
{setup_adc(ALL_ANALOG);
setup_adc(ADC_CLOCK_INTERNAL);
SETUP_TIMER_1(T1_INTERNAL|T1_DIV_BY_8);
SETUP_TIMER_0(RTCC_DIV_1 |RTCC_EXT_H_TO_L);
SETUP_TIMER_5(T5_INTERNAL|T5_DIV_BY_8);
SET_TIMER0(0);
//SET_TIMER1(65236);
SET_TIMER1(53036);
ENABLE_INTERRUPTS(INT_RTCC);
ENABLE_INTERRUPTS(INT_TIMER1);
ENABLE_INTERRUPTS(INT_TIMER5);
ENABLE_INTERRUPTS(GLOBAL);
enable_interrupts(int_ssp);
enable_interrupts(global);
while(true)
{SET_ADC_CHANNEL(0);
delay_us(10);
ga=read_adc();
}
}
Tài liệu tham khảo
[1] PIC Microcontrollers Programming in C. Milan Verle
[2]William B. Ribbens, Ph.D. Understanding Automotive Electronics
[3] Nguyễn Thị Lan Hương – Phạm Ngọc Yến – Nguyễn Việt Tùng. LABVIEW Thiết bị đo
và giao diện người – máy. NXB khoa học và kỹ thuật
[4] Nguyễn Văn Minh Trí – Lâm Tăng Đức. Bài giảng Ghép nối và điều khiển thiết bị ngoại
vi
[5]Trần Quang Vinh. Nguyên lí phần cứng và kỹ thuật ghép nối máy tính