3.4.1. Lắp đặt hệ thống treo trước Audi B8
Hình 3. 7: Cấu tạo bầu hơi phía trước Audi B8 1. Đai ốc trên.
2. Vòng đệm trên. 3. Cao su ngăn cách. 4. Giá đỡ thanh chống trên. 5. Bu lông trên bầu hơi. 6. Tấm đệm nhôm.
7. Bàu hơi.
8. Tấm đệm nhôm dưới. 9. Tấm ngăn.
10. Mặt bích dưới.
11. Bu lông dưới bầu hơi. 12. Bu lông mặt bích. 13. Khớp nối ống dẫn khí. 14. Thanh chống.
Bước 1: Lắp khớp nối ống dẫn khí cho bầu hơi.
Bước 3: Thay bầu hơi khí nén vào.
3.4.2. Lắp đặt hệ thống treo sau Audi B8
Hình 3. 8: Cấu tạo bầu hơi phía sau Audi B8 1. Bu lông mặt bích.
2. Mặt bích. 3. Vòng ngăn. 4. Đoạn chống.
5. Bu lông trên bầu hơi. 6. Khớp nối ống khí nén. 7. Tấm đệm dưới. 8. Bu lông tấm đệm dưới. 9. Bầu hơi khí nén. 10. Tấm đệm trên. 11. Cam định vị. 12. Bu lông tấm đệm. 13. Bu lông bầu hơi. 14. Bu lông cam.
3.4.3. Lắp đặt cảm biến chiều cao phía trước
3.4.4. Lắp đặt cảm biến chiều cao phía sau
Bước 2: Lắp cảm biến lên xe.
3.4.5. Lắp bình chứa khí nén
3.4.6. Lắp máy nén khí
3.4.7. Lắp remote điều khiển
Chương 4: Thiết kế mô hình mô phỏng hệ thống treo điện tử 4.1. Ý tưởng thiết kế
Mục đích để xây dựng một mô hình mô phỏng các tính năng cơ bản của hệ thống treo khí nén điện tử đã được đề cập ở các phần trên. Hệ thống cung cấp sự ổn định và khả năng kiểm soát độ cao của phương tiện trong quá trình làm việc, giúp tăng sự an tòan và thoải mái cho hành khách trên xe. Dựa vào định luật Biot – Savart dòng điện không đổi chạy qua dây dẫn sẽ tạo ra từ trường, bằng cách thay đổi cường độ dòng điện qua cuộn dây làm thay đổi từ trường dẫn đến sự thay đổi khoảng cách giữa hai nam châm đặt trong xy lanh mô phỏng hệ thống treo của ô tô.
Hình 4. 1: Mô tả ý tưởng thiết kế
Chế tạo một mô hình xe thử nghiệm để chứng minh hiệu quả của hệ thống, với nam châm làm bộ phận giảm chấn. Đầu trên của ống giảm chấn sử dụng nam châm điện để thay đổi từ trường. Mỗi nam châm sẽ được điều khiển riêng biệt thông qua chương trình điều khiển do mạch Arduino xử lý.
4.2. Chuẩn bị tài nguyên thiết kế
Bảng 4. 1: Bảng các phần tử mô hình
Tên Số lượng Hình ảnh
Arduino Mega 2560 1
Module Bluetooth HC06 1
Module điều khiển động
cơ L298N 2
Module điều khiển động
cơ L298P 1
Motor DC 5V 4
Dây đồng cách điện 2
4.3. Triển khai mô hình
4.3.1. Các phần mềm thiết kế
4.3.1.1. Arduino IDE
Arduino là môi trường phát triển tích hợp mã nguồn mở, cho phép người dùng dễ dàng viết code và tải nó lên board mạch.
Hình 4. 2: Phần mềm Arduino IDE
Khi người dùng viết mã và biên dịch, Arduino IDE sẽ tạo file .hex cho mã. File .hex là các file thập phân Hexa được Arduino hiểu và gửi nó đến các bo mạch bằng cáp USB. Mỗi bo mạch Arduino đều được tích hợp một vi điều khiển, bộ vi điều khiển sẽ nhận file .hex và chạy theo mã được viết.
Arduino IDE sử dụng ngôn ngữ lập trình C/C++ rất phổ biến, tích hợp hơn 700 thư viện được viết và chia sẻ bởi nhà phát hành Arduino Software và cộng đồng Arduino toàn thế giới.
4.3.1.2. Proteus 8 Professional
Hình 4. 3: Proteus 8 Professional
Proteus là phần mềm mô phỏng mạch điện tử của Labcenter Electronics, mô phỏng cho hầu hết các linh kiện điện tử thông dụng. Phần mềm bao gồm hai mảng chính là ISIS cho phép mô phỏng mạch điện tử và ARES dùng để vẽ mạch in.
4.3.2. Nguyên lý hoạt động
Khi được cấp nguồn mạch sẽ hoạt động theo chương trình được thiết lập trên Arduino.
Hình 4. 5: Sơ đồ nguyên lý hoạt động
Mạch bắt đầu hoạt động khi nhận được tính hiệu từ chương trình điều khiển. Các tín hiệu được trung tâm xử lý và truyền các lệnh tương ứng cho mô tơ và nam châm điện thực hiện đúng yêu cầu.
Ở trạng thái “Suspension mode” ON, Arduino Mega chỉ điều khiển các nam châm điện hoạt động, lúc này xe không thể di chuyển. Các nam châm điện sẽ được điều khiển đồng bộ hoặc độc lập tùy theo tín hiệu nhận được từ chương trình điều khiển. Tốc độ và chiều của nam châm được điều khiển bằng các chân “ENA”, “ENB”, “PWM” của mạch L298N thông qua quá trình điều chế độ rộng xung.
Khi cường độ và chiều dòng điện qua nam châm thay đổi sẽ làm thay đổi độ lớn và chiều lực từ tác dụng lên nam châm vĩnh cửu cố định ở pít tông, nam châm vĩnh cửu sẽ bị đẩy hoặc hút kéo theo pít tông di chuyển tương ứng với quá trình nâng hoặc hạ hệ thống
Hình 4. 6: Mô hình
Sau khi điều chỉnh chiều cao hệ thống treo thích hợp, tắt trạng thái “Suspension mode” để điều khiển xe di chuyển. Các mô tơ bánh xe cũng được điều khiển bằng mạch L298N. Mô hình chủ yếu mô phỏng hệ thống treo, nên các mô tơ bánh xe chỉ thực hiện các nhiệm vụ cơ bản là tiến, lùi, rẻ trái, rẻ phải.
4.3.3. Lưu đồ giải thuật
4.3.4. Chương trình điều khiển
#include <SoftwareSerial.h> #include <AFMotor.h> // PINS
// Motor A for Wheels
int const ENA_WHEEL = 10; int const INA_WHEEL = 12;
// Motor B for Wheels
int const ENB_WHEEL = 11; int const INB_WHEEL = 13;
// Motor A for Suspension
int const ENA_SUSP = 9; int const IN1 = 8;
int const IN2 = 7;
// Motor B for Suspension
int const ENB_SUSP = 3; int const IN3 = 5;
int const IN4 = 4;
// CONSTANTS
int const MIN_SPEED = 10; // Dat toc do min cho cac motor
int const ACCEL_DELAY = 50; // Dat buoc dung giua cac lan nang ha int const inc_dec_amount = 2;
// VARIABLES char bluetooth; bool suspension_mode; // Suspension char susp_curr_direction_right; char susp_curr_direction_left; int susp_curr_speed_right; int susp_curr_speed_left; // Wheels int wheel_speed; //============================================================ =================== // Initialization //============================================================ =================== void setup() { // Wheels pinMode(ENA_WHEEL, OUTPUT); pinMode(ENB_WHEEL, OUTPUT); pinMode(INA_WHEEL, OUTPUT); pinMode(INB_WHEEL, OUTPUT);
pinMode(ENA_SUSP, OUTPUT); // Dat tat ca cac chan motor la output pinMode(ENB_SUSP, OUTPUT); pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT);
// Turn off motors - Initial state digitalWrite(INA_WHEEL, LOW); digitalWrite(INB_WHEEL, LOW); digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
// Default selections for Suspension suspension_mode = false;
susp_curr_direction_right = 'F'; // forward susp_curr_direction_left = 'F'; // forward susp_curr_speed_right = 0; // stop susp_curr_speed_left = 0; // stop
// Default selections for Wheels wheel_speed = 0;
Serial.begin(9600); } //============================================================ =================== // Main //============================================================ =================== void loop() { if (Serial.available()>0) { bluetooth = Serial.read(); Serial.println(bluetooth); } // mode selection if (bluetooth == 'X') suspension_mode = true; else if (bluetooth == 'x') suspension_mode = false; if (suspension_mode) { switch (bluetooth)
case 'F':
// set preference using bluetooth input
setDirAndSpeed('F', susp_curr_direction_right, susp_curr_speed_right); setDirAndSpeed('F', susp_curr_direction_left, susp_curr_speed_left); break;
case 'B':
// set preference using bluetooth input
setDirAndSpeed('B', susp_curr_direction_right, susp_curr_speed_right); setDirAndSpeed('B', susp_curr_direction_left, susp_curr_speed_left); break;
// forward-right & back-right respectively case 'I':
setDirAndSpeed('F', susp_curr_direction_right, susp_curr_speed_right); break;
case 'J':
setDirAndSpeed('B', susp_curr_direction_right, susp_curr_speed_right); break;
// forward-left & back-left respectively case 'G':
setDirAndSpeed('F', susp_curr_direction_left, susp_curr_speed_left); break;
break; // stop case 'W': case 'w': susp_curr_direction_right = 'F'; // forward susp_curr_speed_right = 0; // stop susp_curr_direction_left = 'F'; // forward susp_curr_speed_left = 0; // stop break; default: break; }
// apply selected state
DriverMotor('A', susp_curr_direction_right, susp_curr_speed_right); DriverMotor('B', susp_curr_direction_left, susp_curr_speed_left); }
else {
// wheel speed selection switch (bluetooth)
wheel_speed = 0; break; case '1': wheel_speed = 10; break; case '2': wheel_speed = 20; break; case '3': wheel_speed = 30; break; case '4': wheel_speed = 40; break; case '5': wheel_speed = 50; break; case '6': wheel_speed = 60; break; case '7': wheel_speed = 70; break; case '8':
break; case '9': wheel_speed = 90; break; case 'q': wheel_speed = 100; break; default: break; } switch (bluetooth) { case 'S': ShieldMotor('C', 'F', 0); break; case 'F': ShieldMotor('C', 'F', wheel_speed); break; case 'B': ShieldMotor('C', 'R', wheel_speed); break;
case 'I': ShieldMotor('B', 'F', wheel_speed); break; case 'J': ShieldMotor('B', 'R', wheel_speed * 8 / 10); break;
// left, forward-left & back-left respectively case 'L': case 'G': ShieldMotor('A', 'F', wheel_speed); break; case 'H': ShieldMotor('A', 'R', wheel_speed); break; default: break; } } delay(10); }
// remap the speed from range 0-100 to 0-255 int newspeed;
if (speed == 0) newspeed = 0; else
newspeed = map(speed, 1, 100, MIN_SPEED, 255);
switch (mot) {
case 'A': // Controlling Motor A if (dir == 'F') { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); } else if (dir == 'R') { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); } analogWrite(ENA_SUSP, newspeed); break;
{ digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } else if (dir == 'R') { digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH); } analogWrite(ENB_SUSP, newspeed); break;
case 'C': // Controlling Both Motors if (dir == 'F') { digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW); } else if (dir == 'R') { digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH);
digitalWrite(IN4, HIGH); } analogWrite(ENA_SUSP, newspeed); analogWrite(ENB_SUSP, newspeed); break; } }
void ShieldMotor(char mot, char dir, int speed)
{
// remap the speed from range 0-100 to 0-255 int newspeed;
if (speed == 0) newspeed = 0; else
newspeed = map(speed, 1, 100, MIN_SPEED, 255);
switch (mot) {
case 'A': // Controlling Motor A if (dir == 'F')
{
{
digitalWrite(INB_WHEEL, LOW); }
analogWrite(ENA_WHEEL, newspeed); break;
case 'B': // Controlling Motor B if (dir == 'F') { digitalWrite(INB_WHEEL, HIGH); } else if (dir == 'R') { digitalWrite(INA_WHEEL, LOW); } analogWrite(ENB_WHEEL, newspeed); break;
case 'C': // Controlling Both Motors if (dir == 'F')
{
digitalWrite(INA_WHEEL, HIGH); digitalWrite(INB_WHEEL, HIGH); }
{ digitalWrite(INA_WHEEL, LOW); digitalWrite(INB_WHEEL, LOW); } analogWrite(ENA_WHEEL, newspeed); analogWrite(ENB_WHEEL, newspeed); break; } }
void setDirAndSpeed(char requested_dir, char &curr_direction, int &curr_speed)
{
switch (requested_dir) {
case 'F':
if (curr_direction == 'F' && 100 - inc_dec_amount < curr_speed) curr_speed = 100;
else if (curr_direction == 'F' && 0 <= curr_speed) curr_speed += inc_dec_amount;
else if (curr_direction == 'R' && curr_speed <= MIN_SPEED + inc_dec_amount) {
}
else
curr_speed -= inc_dec_amount; break;
case 'B':
if (curr_direction == 'R' && 100 - inc_dec_amount < curr_speed) curr_speed = 100;
else if (curr_direction == 'R' && 0 <= curr_speed) curr_speed += inc_dec_amount;
else if (curr_direction == 'F' && curr_speed <= MIN_SPEED + inc_dec_amount) { curr_direction = 'R'; // forward curr_speed = 0; } else curr_speed -= inc_dec_amount; break; default: break; }
4.4. Đánh giá mô hình và hướng phát triển đề tài 4.4.1. Đánh giá kết quả đạt được 4.4.1. Đánh giá kết quả đạt được
Mô hình cơ bản thực hiện được các yêu cầu cơ bản như nâng hạ đồng bộ cũng như độc lập. Tương đối ổn định nhưng tốc độ còn chậm. Quá trình di chuyển và thay đổi độ cao xe không thể diễn ra đồng thời. Cơ cấu láy chưa tối ưu, dẫn động các bánh xe đơn giản nhưng sử dụng khá nhiều động cơ làm tăng khối lượng xe. Mô hình chưa mô phỏng được tính năng tự động thay đổi độ cao theo điều kiện đường xá.
4.4.2. Hướng phát triển của đề tài
Bố trí cơ cấu láy và hệ thống truyền lực tối ưu hơn, sử dụng ít động cơ hơn nhằm giảm trọng lượng xe cải thiện tốc độ. Phát triển chương trình điêu khiển để xe có thể thay đổi độ cao trong quá trình di chuyển mà không cần dừng xe. Có thể bố trí thêm cảm biến khoảng cách để xe tự động thay đổi độ cao phù hợp với điều kiện môi trường di chuyển.
Chương 5: Kết luận
Sau thời gian thực hiện Luận văn tốt nghiệp với đề tài: “ Khai thác hệ thống treo khí nén điện tử của Accuair. Thiết kế mô hình mô phỏng hệ thống treo điện tử sử dụng mạch Arduino” đến nay em đã cơ bản hoàn thành với sự giúp đỡ tận tình của thầy giáo hướng dẫn cũng như các thầy trong khoa.
Trong đề tài này em đi sâu tìm hiểu tính năng hoạt động và cấu tạo các phần tử của hệ thống treo khí nén điện tử Accuair. Ở chương 1 của Luận văn em đã giới thiệu tổng quan về hệ thống treo điều khiển khí nén nói chung và Accuair nói riêng. Chương 2 và chương 3 là chương trọng tâm của Luận văn, em phân tích cấu tạo cũng như nguyên lý hoạt động của từng phần tử trong hệ thống Accuair. Đồng thời cũng ở phần này em đi sâu nghiên cứu nguyên lý làm việc của hệ thống và khảo sát các hư hỏng của hệ thống trong quá trình sử dụng. Cuối cùng, ở chương 4 em trình bày về mô hình mô phỏng hệ thống điều khiển bằng mạch Arduino, nguyên lý làm việc, lưu đồ giải thuật, chương trình điều khiển và đánh giá kết quả mô hình.
Thông qua báo cáo này giúp em hiểu sâu hơn về tầm quan trọng của hệ thống treo và điều đó cũng được các nhà nghiên cứu chuyên môn luôn nghiên cứu và nâng cao tính nâng để phục vụ cho nhu cầu đời sống. Do thời gian còn hạn chế, nhiều phần kiến thức mới, tài liệu tham khảo còn hạn chế và chưa cập nhật đủ thông tin và cần phải hoàn thiện thêm.
Qua đề tài này đã bổ sung cho em thêm nhiều kiến thức về chuyên ngành cấu tạo ô tô, hiều biết thêm về hệ thống treo khí nén điện tử đặc biệt là hệ thống treo khí nén điện tử của Accuair. Ngoài ra, em còn được học hỏi thêm được các kiến thức về lập trình mạch điều khiển Arduino. Sau cùng em rất mong nhận được sự góp ý và chỉ bảo của quý thầy cô để em được hoàn thiện hơn về kiến thức cũng như đề tài này.
Tài liệu tham khảo
[1] Fuel Curve. https://www.fuelcurve.com/accuair-story/ , 20/9/2017. [2] Mike Burroughs. https://stanceworks.com/2011/02/accuair/ , 3/2/2011. [3] Wikipedia. https://en.wikipedia.org/wiki/Air_suspension , 27/11/2021.
[4] ISO 2631-1. Mechanical vibration and shock-Evanluation of human exposure to whole-body vibration, Part I: General requirements, The International Organization for Standardization , 1997.
[5] Mitschke M. Effect of road roughness on vehicle vibration. IFF Report , pp.334 – 340, 2010.
[6] AccuAir. https://accuair.com/pages/document-library , 2022. [7] BagRiders. https://www.bagriders.com/tech/ , 2022.