Tải bản đầy đủ (.pdf) (16 trang)

ứng dụng Labview để thu thập tín hiệu từ cảm biến

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (676.76 KB, 16 trang )





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 s
end (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
1
2

Y1
12MHZ
C1
33
C2
33
PVN1
PIC18F4331
RA0/AN0
2
RA1/AN1
3
RA2/AN2/VREF-/CAP1/INDX
4
RA3/AN3/VREF+/CAP2/QEA
5
RA4/AN4/CAP3/QEB
6
RA5/AN5/LVDIN
7
RB0/PWM0
33
RB1/PWM1
34
RB2/PWM2
35
RB3/PWM3
36
RB4/KBI0/PWM5
37

RB5/PGM/KBI1/PWM4
38
RB6/PGC/KBI2
39
RB7/PGD/KBI3
40
RC0/T1OSO/T1CKI
15
RC1/T1OSI/CCP2/FLTA*
16
RC2/CCP1/FLTB*
17
RC3/T0CKI/T5CKI/INT0
18
RC4/INT1/SDI/SDA
23
RC5/INT2/SCK/SCL
24
RC6/TX/CK/SS*
25
RC7/RX/DT/SDO
26
RD0/T0CKI/T5CKI
19
RD1/SDO
20
RD2/SDI/SDA
21
RD3/SCK/SCL
22

RD4/FLTA*
27
RD5/PWM4
28
RD6/PWM6
29
RD7/PWM7
30
OSC1/CLKIN/RA7
13
OSC2/CLKOUT/RA6
14
VDD
32
AVDD
11
VSS
31
AVSS
12
MCLR*/VPP/RE3
1
RE0/AN6
8
RE1/AN7
9
RE2/AN8
10
RST
J1

JACK NAP ICSP
1
2
3
4
5
data
+5V
clock
R1 10K
TXD
D40
1N4148
RXD
CHAN DIEU KHIEN
1
2
3
4
5
6
RST
CHAN DIEU KHIEN
1
2
3
4
5
6
data

clock
C10
+5V
U2
MAX232
C1+
1
C1-
3
C2+
4
C2-
5
V+
2
V-
6
R1OUT
12
R2OUT
9
T1IN
11
T2IN
10
R1IN
13
R2IN
8
T1OUT

14
T2OUT
7
GND
15
+5V
16
C6
+5V
C8
CAM BIEN
1
2
3
4
5
6
RXDRXD
C27
TXDTXD
P1
CONNECTOR DB9
5
9
4
8
3
7
2
6

1
THU TIN HIEU 1
C9
THU TIN HIEU 2
THU TIN HIEU 3
THU TIN HIEU 4
THU TIN HIEU 5
THU TIN HIEU 6
DI EU KHIEN
1
2
3
4
5
6
CHAN DIEU KHIEN 1
CHAN DIEU KHIEN 2
CHAN DIEU KHIEN 3
THU TIN HIEU TOC DO
CHAN DIEU KHIEN 4
CHAN DIEU KHIEN 5
+12V
+5V
C17
104
U10 LM7805C/TO
IN
1
OUT
3

GND
2
+
C3
1000uF
C20
104
+
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
1
2
3

4
5
6
7
8
U12
L297
A
4
HOME
3
GND
2
SYN C
1
Control
11
B
6
Enable
10
D
9
VS
12
SENS2
13
Vref
15
SENS1

14
INH1
5
C
7
INH2
8
OSC
16
CW/CC W
17
CLOCK
18
HALF/ FULL
19
RESET
20
J18
CON4
1
2
3
4
5V
A1
A2
A3
A4
U14
ULN 2803

COM
10
GND
9
IN1
1
IN2
2
IN3
3
IN4
4
IN5
5
IN6
6
IN7
7
IN8
8
OUT1
18
OUT2
17
OUT3
16
OUT4
15
OUT5
14

OUT6
13
OUT7
12
OUT8
11
5V
D29
4007
D30
4007
D31
4007
D32
4007
R28
472
1 2
3
4
5
6
7
8
9
J19
4OPTOPC817
1
2
3

4
5
6
7
8 9
10
11
12
13
14
15
16
J22
MODU L STEPPER
1
2
3
4
5
6
7
8
12V
C VANDIENTU1
C VANVOIPHUN
C VANDIENTU3
C VANDIENTU2
RS297
12V
12V

RS297
12V
12V
D33
LED
D34
LED
D35
LED
12V
D36
LED
DK VANDIENTU 1
DK VANVOIPHUN
DK VANDIENTU 3
DK VANDIENTU 2
C18
102
R30
0.5/2W
VANDIENTU2VANVOIPHU N
VANDI ENTU1
VANDIENTU3
D37
2A
R31
0.5/2W
R32
R2
R33

R2
D38
2A
R34
R2
R35
R2
A5
Q16 IR F3250
Q17 IR F3250
D39
2A
C19
104
Q18 IRF3250
C20 104
Q19 IRF3250
D40
2A
J24
VAN1
1
2
J25
VAN2
1
2
J26
VAN3
1

2
U16
L298
1A1
5
1A2
7
2A1
10
2A2
12
1Y1
2
1Y2
3
2Y1
13
2Y2
14
GND
8
1EN
6
2EN
11
1E
1
2E
15
VCC1

9
VCC2
4
J27
VAN4
1
2
D41
2A
J28
CON8
1
2
3
4
5
6
7
8
5V
D42
2A
R36 22k
D43
2A
D44
2A J29
CON4
1
2

3
4
U17
L297
A
4
HOME
3
GND
2
SYN C
1
Control
11
B
6
Enable
10
D
9
VS
12
SENS2
13
Vref
15
SENS1
14
INH1
5

C
7
INH2
8
OSC
16
CW/CC W
17
CLOCK
18
HALF/ FULL
19
RESET
20
12V
R37 472
12
3
4
5
6
7
8
9
R38 10K
R39
39K
5V
U18
L298

1A1
5
1A2
7
2A1
10
2A2
12
1Y1
2
1Y2
3
2Y1
13
2Y2
14
GND
8
1EN
6
2EN
11
1E
1
2E
15
VCC1
9
VCC2
4

12V
12V
12V
12V
Y5
12V
VANVOIPHUN
VANDIENTU1
VANDIENTU3
VANDIENTU2
VANDIENTU1
VANVOIPHUN
VANDIENTU2
D45
1N4007 R41 3. 9K
VANDIENTU3
Y5
MODULE DIEU KHIEN VOI PHUN
R42 22k
C26
102
C27
104
Q20
B562
Q21
B562
Q22
B562
Q23

B562
Q24
D468
Q25
D468 Q26
D468
Q27
D468
R43
0.5/2W
R44
0.5/2W
5V
MODUL DONG CO BUOC
U20
74HC T244
A1
2
A2
4
A3
6
A4
8
1OE
1
Y1
18
Y2
16

Y3
14
Y4
12
VCC
20
GND
10
A5
11
A6
13
A7
15
A8
17
Y5
9
Y6
7
Y7
5
Y8
3
2OE
19
C VANDI ENTU2
C VANDI ENTU3
C VANDI ENTU1
C VANVOIPH UN

C VANVOIPHU N
C VANDI ENTU1
D47
2A
C VANDI ENTU2
D48
2A
C VANDI ENTU3
D49
2A
D50
2A
R46
470
R47
R48
R49
D51
2A
D52
2A
D53
2A
D54
2A
R50
472
1 2
3
4

5
6
7
8
9

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







×