Để viết chương trình điều khiển theo thuật toán điều khiển đã xác định, có thể dùng nhiều cách và có nhiều công cụ phần mềm hỗ trợ khác nhau. Trong đề tài này sử dụng ngôn ngữ lập trình C để viết trên phần mềm hỗ trợ CCS PIC.
Hình 2.18 Giao diện phần mềm CCS PIC
Phần mềm CCS PIC là phần mềm hỗ trợ việc lập dự án, phát triền và kiểm tra các ứng dụng được viết cho các vi xử lý PIC, bao gồm cả vi xử lý PIC 16F887. Phần mềm giúp quá trình triển khai ý tưởng nhanh chóng, trực quan và ổn định.
- Mô tả chương trình.
Chương trình điều khiển đèn pha tích cực sử dụng các khối ADC, Timer, In/Out để tiến hành xác định góc quay vành lái, vị trí ban đầu của đèn pha và điều khiển vị trí này liên tục theo các quãng thời gian.
- Vi xử lý hoạt động ở tần số 4Mhz. Bộ Timer1 của vi xử lý dùng để tạo ra các quãng thời gian tiến hành đo đạc và điều khiển. Cụ thể, vi xử lý sẽ tiến hành đo góc quay vành lái, vị trí đèn pha và tiến hành điều khiển vị trí đèn pha theo chu kỳ 0,02 giây.
Chu kỳ dao động thạch anh: 6 6 1 0, 25.10 ( ) 4.10 o t s
Với Prescale = 4, chu kỳ đếm của biến Timer1 là: 6
6 4.10 4 1 4 4.10 ( ) t s
Khi đó để xác định được chu kỳ 0,02s thì số lần phải đếm là:
1 6
0, 02
5000 4.10
n
Giá trị của biến TMR1 ứng với chu kỳ 0,02s là:
R1 5000
TM
Chức năng ADC dùng để đo cảm biến vị trí ban đầu cả đèn pha, từ tín hiệu cảm biến Hall chuyển về. Bộ ADC đước xử sử dụng với các tham số:
Thiết lập chân E0 là đầu vào.
Tín hiệu chân E0 ở dạng Analog.
Chọn khối ADC 5.
Căn lề phải.
Điện áp dương Vss.
Điện áp âm Vdd.
Chức năng In sử dụng để đọc mã BCD gửi về từ Encoder đo góc đánh lái. Từ mã BCD này vi xử lý sẽ biết được góc đánh lái, kết hợp với góc quay hiện tại của động cơ bước để điều khiển vị trí đèn pha sang góc quay thích hợp.
Các chương trình con trong chương trình điều khiển bao gồm. Chương trình thiết lập Timer1:
Tần số của Timer: OS 4 F C Tỉ lệ chia: 1:4. Giá trị đếm: TMR15000. Kích hoạt Timer1. Kích hoạt ngắt tràn Timer1.
Chương trình thiết lập các cổng vào ra:
PORT B là input. PORT D là input. PORT C là output. PORT A là output.
Chương trình thiết lập ADC:
Thiết lập chân E0 là đầu vào. Tín hiệu chân E0 ở dạng Analog. Chọn khối ADC 5.
Căn lề phải.
Điện áp dương Vss. Điện áp âm Vdd.
Chương trình điều khiển động cơ bước:
Nếu động cơ bước quay cùng chiều kim đồng hồ:
Nếu số bước động cơ bằng 4, thì đặt số bước động cơ bằng 0. Nếu không số bước động cơ cộng thêm 1.
Điều khiển PORT A và bật đèn led đỏ. Nếu không:
Nếu số bước động cơ bằng 0,thì đặt số bước động cơ bằng 4. Nếu không số bước động cơ trừ đi 1.
Tạm dừng 20ms.
Điều khiển PORT A ngắt dòng điều khiển.
Hàm xác định vị trí ban đầu đèn pha:
Đọc giá trị ADC từ cảm biến Hall.
Nếu giá trị từ ADC còn lớn hơn giá trị ngưỡng:
Điều khiển động cơ bước quay ngược chiều kim đồng hồ. Đo lại giá trị ADC.
/*---Mo ta vi xu ly---*/ // Device : 16f887 // Speed : 4Mhz #define _XTAL_FREQ 4000000L // 4Mhz #define CW 0 #define CCW 1
/*---Khai bao cac thu vien---*/ #include <pic.h> //Thu vien cua vi xư ly #include <stdio.h> //Thu vien cac ham In/Out #include <stdlib.h> //Cac thu vien chuan
#include <uart.h> //Thu vien giao tiep uart /*---Cac thiet lap ban dau---*/
__CONFIG (FOSC_XT & WDTE_OFF & PWRTE_ON & MCLRE_ON & CP_OFF & BOREN_OFF & LVP_OFF & DEBUG_OFF);
const char Step[4] = {0b0001, 0b0100, 0b0010, 0b1000}; // Dieu khien Step Motor
#define GREEN 4 #define RED 5
#define THRESHOLD 500 volatile unsigned int iMotor; int iDesire_POS = 0;
/*---Cac chuong trinh con---*/ void init_Timer1(void) // Thiet lap Timer1
TMR1CS = 0; // FOSC/4
T1CKPS0 = 0; T1CKPS1 = 1; // Prescale 1:4 TMR1 = 5000;
TMR1ON = 1; // Enable Timer1
TMR1IE = 1; // Kich hoat ngat tran cua timer1 void init_PORT(void) // Setup I/O ports
ANSEL = 0b11100000; // PORTA 0:5 Digital TRISB = 0xff; // PORTB la Input
TRISD = 0xff; // PORTD la Input TRISC = 0x00; // PORTC la Output TRISA = 0x00; // PORTA la Output
void LED(char cLED, char cSwitch) //Chuong trinh dieu khien LED if (cSwitch == 1) PORTA |= (1 << cLED);
else PORTA &= ~(1 << cLED);
void init_ADC(void) //Chuong trinh thiet lap ADC TRISE0 = 1; // E0 input
ANS5 = 1; // E0 analog
ADCON0 = 0b11010100; // Frc, AN5 selected ADFM = 1; // Right justified
VCFG1 = 0; // V+ = Vss VCFG0 = 0; // V- = Vdd ADON = 1; // Enable ADC
unsigned int read_adc(void) //Chuong trinh doc ADC unsigned int result;
GO = 1; while(GO);
return result;
void motor_Move(char cDir) //Ham dieu khien dong co if (cDir == CW)
if (iMotor == 4) iMotor = 0; else iMotor++;
PORTA = Step[iMotor]|(1 << RED); else
if (iMotor == 0) iMotor = 4; else iMotor = iMotor - 1;
PORTA = Step[iMotor]|(1 << GREEN); __delay_ms(20);
PORTA &= 0b11110000;
void init_POS(void) //Ham vị tri ban dau cua den pha unsigned int iMag = read_adc();
while(iMag > THRESHOLD) motor_Move(CCW); iMag = read_adc();
unsigned int Position(unsigned int iPORT1, unsigned int iPORT2) //Ham vi tri cua den pha
unsigned char cD, cC, cT, cN; unsigned int result;
cD = (iPORT1 & 0b00001111); cC = (iPORT1 >> 4); cT = (iPORT2 & 0b00001111); cN = ((iPORT2 >> 4)& 0b0001); result = cN*1000 + cT*100 + cC*10 + cD; return result;
/*---Chuong trinh chinh---*/ void main(void)
// Init peripherals init_PORT(); init_ADC(); init_UART();
// Thiet lap vi tri ban dau cua den init_POS();
// Dat timer dieu khien den init_Timer1();
PEIE = 1; ei();
// Main loop while(1)
// Dieu khien vi tri cua den phu hop voi vi tri vanh lai if (iCurrent_POS > iDesire_POS)
motor_Move(CW); iCurrent_POS--;
else if (iCurrent_POS < iDesire_POS) motor_Move(CCW);
iCurrent_POS++; /*---Chuong trinh ngat---*/ void interrupt isr(void)
if (TMR1IF) // Timer1 ngat TMR1IF = 0;
TMR1 = 5355;
// Cap nhap vi tri moi cua truc lai
iDesire_POS = Position(PORTB, PORTD); printf("P=%i\r",read_adc());
CHƯƠNG 3: MÔ PHỎNG HỆ THỐNG ĐÈN PHA TÍCH CỰC (AFS) 3.1 XÂY DỰNG MÔ HÌNH
- Sơ đồ cấu trúc hệ thống
- Công tắc AFS OFF khi được khích hoạt thì chữa AFS sáng lên, khi không được kích hoạt thì chữa OFF sáng, công tắc có nhiệm vụ bật hoặc tắt hệ thống đèn pha tích cực. AFS ECU được lập trình để nhận biết góc quay của vành lái để điều khiển motor bước quay sang trái hay sang phải, cảm biến Encoder dùng để nhận biết góc quay của vô lăng, motor bước dung để quay chóa đèn.
Hình 3.1 Bản thiết kế mô hình
A Cụm đèn pha, B - Vành lái, C - Giá đở, D. Chân đế, E – ECU của đèn pha Tích cực, 1 - 1’. Cặp bánh răng truyền động giới hạn góc lái của vành lái, 2 - 2’.
Cặp bánh răng truyền động cho cảm biến góc lái của vành lái. M Đ 1 2 3 4 5 4' 3'
Hình 3.2 Sơ đồ truyền động quay đèn pha
Bánh răng số 1: Z1 = 13 răng. Bánh răng số 2: Z2 = 37 răng. Bánh răng số 3: Z3 = 53 răng. Bánh răng số 3’: Z3’ = 11 răng. Bánh răng số 4’: Z4’ = 60 răng. Bánh răng số 4: Z4 = 11 răng.
Bánh răng số 5: bánh răng rẽ quạt, được nối liền với trục để nối với chóa đèn. Công thức tỷ số truyền bánh răng i (1)
Từ công thức (1) ta có
(2) Với n1, n2, là số vòng quay của bánh răng số 1 và số 2, Giả sử bánh răng số 1 quay được 1 vòng từ (2) ta có
(2’) Từ (1) ta có
(3) Với n3 là số vòng quay của bánh răng số 3.
(4)
Số vòng quay của bánh răng số 3 và 3’ là bằng nhau vì 2 bánh răng này được gắn liền trên một trục vậy ta có
n3’ (4’)
n3’ là số vòng quay của bánh răng số 3’. Từ (1) ta có
(5) n4’ là số vòng quay của bánh răng số 4’
Từ (4’) và (5) ta có
(6)
Số vòng quay của bánh răng số 4 và số vòng quay của bánh răng số 4’ là bằng nhau vì chúng được gắn trên một trục vậy ta có n4’ = n4 (6’) (n4 là số vòng quay của bánh răng số 4)
(vòng)
Nếu motor bước quay được 1 vòng thì trục của đèn quay được vòng Một vòng của motor bước có 3600 thì trục của đèn sẽ quay x5 độ
Vậy ta có
Vậy motor bước mà quay đi một vòng thì đèn pha sẽ lệch đi 2,470.
- Phía trên của cụm đèn pha có gắn một bảng chia độ, lấy tâm của trục đèn là tâm và mỗi vạch cách nhau 50.
Hình 3.3 Thước đo góc quay của đèn pha
- Vành lái, phía dưới vành lái có một vòng tròn chia độ. Được gắn trên bảng pane, lấy tâm là tâm của trục vành lái và chia độ mỗi vạch cách nhau là 50.
3.2 CHẾ TẠO MÔ HÌNH
AFS là một hoạt động an toàn của hệ thống chiếu sáng, đểtăng cường khảnăng hiển thị
vào ban đêm bằng cách thay đổi sự phân bố ánh sáng theo con đường và điều kiện lái xe.
Trong mặt phẳng nằm ngang, chùm ánh sáng phía trước có khả năng xoay theo chiều ngang tuân theo góc lái và tốc độ xe. Trong mặt phẳng dọc chùm ánh sáng phía trước có thể xoay theo chiều dọc theo độ dốc của xe mà nhận được từ cảm biến thân xe và tốc độ
xe. Do sự phân bố ánh sáng tự động di chuyển tùy thuộc vào môi trường, phạm vi của các chùm tia thấp sẽđược mở rộng trong các con đường cong và ở ngã tư. Vì vậy, AFS
là hệ thống đèn pha tích cực nhất của hệ thống chiếu sáng có thể làm cho lái xe có cái
nhìn rõ ràng hơn khi lái xe vào ban đêm và có nhiều thời gian để đối phó với tình trạng
khẩn cấp. Qua đó sự an toàn được cải thiện rất nhiều.
Nghiên cứu này giới thiệu một nền tảng mô phỏng cơ điện tử được ứng dụng trong các xe ôtô hiện đại. Vì điều kiện không cho phép nên tác giả đề tài này chỉ sử dụng một chiếc đèn pha bên phải và chỉ mô phỏng phần xoay theo chiều ngang.
3 - Vành lái, 2 - ECU của đèn pha tích cực, 1 - Cụm đèn pha (cụm đèn pha bên phải), 4 - Cảm biến góc lái của vô lăng (cảm biến encoder), 5 - 5’ - Cặp bánh răng truyền động cho cảm biến góc lái, 6 - 6’ Cặp bánh răng truyền động giới hại góc lái của vô lăng, 7 - Thanh giới hạn số vòng quay của vô lăng, 8 - Lò xo hồi vị của vô lăng, 9 - 9’ - Dây xích.
- Cặp bánh răng truyền động giới hại góc lái của vô lăng số 6 - 6’, với tỷ số truền là 3,42 và được dẫn động bằng dây xích, bánh răng số 6’ được bắt chặt vào trục của vô lăng, bánh răng số 6 được bắt vào giá và được quay quanh trục của nó, trên bánh răng số 6 có gắn một dây thép số 7 và một lò xo số 8, dây thép một đầu được bắt vào con ốc trên giá, dây thép này chỉ cho bánh răng số 6 quay sang mỗi phía 3,44 vòng, còn lò xo thì một đầu được bắt vào giá và nó có nhiệm vụ hồi vị khi vô lăng quay ra khỏi vị trí cân bằng khi người lái bỏ tay khỏi vô lăng, dây xích số 9 để nối truyền động giữa hai bánh răng số 6’ và số 6. Dẫn động bằng dây xích để khi hai bánh răng truyển động không có độ trượt hoặc bị sai lệch.
Hình 3.6 Cặp bánh răng số 6’ – 6
Bánh răng số 6’ được bắt chặt vào trục của vành lái. Bánh răng số 6 được quay trơn trên trục của nó.
Dây thép số 7 một đầu quay quanh trục ở trên giá và một đầu truyển động trên con ốc gá trên bánh răng số 6.
Ló xo số 8 một đầu được bắt cố định trên gá và một đầu bắt vào bánh răng số 6
thông qua dây xích số 9’. Bánh răng số 5’ được bắt chặt trên trục của vô lăng, bánh răng số 5 được bắt chặt trên trục của cảm biến encoder. Bánh răng số 5 lớn hơn bánh răng số 5’ là 3,44 lần, kích thước bánh răng số 5 là 8,6 cm, bánh răng số 5’ là 2,5 cm. khoảng cách gữa hai tâm bánh răng số 5 và 5’ là 18 cm.
Hình 3.7 Cặp bánh răng số 5 - 5’
- Cảm biến encoder số 4, dùng để nhận biết chiều quay của vô lăng và góc quay của
vô lăng với loại Encoder EP50S8 – 1042 - 1F - P, là loại Encoder tuyệt đối.
Hình 3.8 Cảm biến Encoder
Phía trên đầu encoder được gắn với bánh răng để nhận chuyền động từ trục của vành lái.
Cảm biến Encoder là thiết bị cơ điện có thể phát hiện sự chuyển động hay vị trí của vật. Cảm Encoder sử dụng các cảm biến quang để sinh ra chuổi xung, từ đó có thể chuyển sang phát hiện sự chuyển động, vị trí hay hướng chuyển động của vật thể.
Hình 3.9 Sơ đồ hoạt động đĩa quang mã hóa
- Khi đĩa cảm biến quay sao cho ánh sáng từ đèn phát ra xuyên qua lỗ hoặc phản xạ vào phần tử nhận áng sáng và được tạo ra xung vuông. Loại này được ứng dụng trong các thời kỳ đầu nhưng do hạn chế các số lượng của lỗ trên đĩa kim loại đã giới hạn độ chính xác của nó nhưng khi có nhiều lỗ được khắc trên đĩa nó trở nên dễ vở trong quá trình hoạt động.
- Encoder với một bộ xung sẽ không có nhiều ứng dụng do nó không thể phát hiện được hướng quay của vật chuyển động. Hầu hết các Encoder mã hóa đều có bộ xung thứ hai lệch pha 900 so với bộ xung thứ nhất, và một xung xác định thời gian Encoder quay một vòng.
Hình 3.10 Dạng sóng ra Encoder hai bộ xung
thay đổi vị trí pha tương đối giữa bộ xung thứ nhất và bộ xung thứ hai. Xung thứ nhất gọi là xung A, và xung thứ hai gọi là xung B. Nguồn sáng thứ ba sử dụng để phát hiện xung đơn bào đã quay một vòng.
Thông thường các bộ cảm biến quang tốc độ còn kèm theo khả năng xử lý sườn các xung tín hiệu và trên cơ sở đó cho phép tăng số lượng vạch đếm trong một vòng đĩa lên bốn lần. Chuỗi xung A hoặc B được đưa tới cửa vào của khâu đếm tiến, biết số xung trên một chu kỳ, ta tìm được tốc độ quay của động cơ.