Nghiên cứu Khoa học

Xe mô tô tự cân bằng

  • 08/01/2016
  • Nghiên cứu Khoa học

CHƯƠNG I. THIẾT KẾ PHẦN CỨNG

1.    THIẾT KẾ CƠ KHÍ

1.1  Khung, bánh và cấu trúc của xe

 

undefined

Hình 1: Mô hình dự kiến

       Đây là mô hình được vẽ bằng phần mềm vẽ chuyên dụng soliwork. Với phần mềm này, mô hình có tính chính xác đến từng mm. Xe được cấu tạo với hai bánh không đồng trục, mang hình dáng của một chiếc môtô thu nhỏ. Giữa phần khung xe có thiết kế các vị trí sắp xếp các module phục vụ cho đề tài.

 1.2 Động cơ cổ xe

    undefined

Thông số kỹ thuật:

  • Kích thước: 22 x 11.5 x 27mm
  • Tốc độ hoạt động( 4.8V không tải): 0.12sec/60 độ
  • Gian hàng mô-men xoắn: 1. 2kg/4 2. 3oz( 4.8V); 1, 6 kg/56.4oz( 6.0v)
  • Phạm vi nhiệt độ:-30 đến +60 độ c
  • Chết băng rộng: 7 usec
  • Điện áp hoạt động: 3.0-7.2 volt

Đây là động cơ nhỏ gọn nhưng lực kéo và đẩy mạnh, phù hợp với việc bẻ lái cổ xe.

1.3 Động cơ bánh sau

undefined

Đây là động cơ DC 24v. Động cơ mạnh, bền, tiêu thụ ít điện, tuy nhiên loại động cơ này không có hàng mới tại việt nam nên nhóm tận dụng loại động cơ đã qua sử dụng 

2.   THIẾT KẾ ĐIỆN TỬ

2.1 Bo mạch phát triển Arduino Nano

     Arduino Nano là một bo mạch nhỏ, đầy đủ, và thân thiện dựa trên atmega328 (Arduino Nano 3.x) hoặc Atmega168 (Arduino Nano 2.x). 

undefined

2.2 Cảm biến góc mpu6050

    MPU6050 là IC tích hợp cảm biến tích gia tốc kế và cảm biến từ trường, từ cảm biến này có thể đo được tốc độ góc theo 3 chiều không gian(gyro), và hình chiếu vector trọng trường lên 3 trục trong không gian(Accelrometer).Ngoài ra  từ các giá trị này, người ta cho đi qua các bộ lọc số (chẳng hạn như AHRS Kalman...) để thu được giá trị đã loại bỏ nhiễu, các giá trị này tiếp tục được dùng để xác định các giá trị thứ cấp như tốc độ dài, tọa độ không gian.

undefined

Thông số kỹ thuật:

  • MPU6050 là chip tích hợp 2 cảm biến: vận tốc góc (gyroscope) và gia tốc góc (accelerometer).
  • MPU6050 cho biết vận tốc và gia tốc góc, từ đó xác định được hướng của vật trong không gian 3 chiều.
  • Dải điện áp hoạt động : 2, 375V – 3, 46V.
  • Nhiệt độ hoạt động tốt nhất 25°C.
  • Dải nhiệt hoạt đông:-40 đến +85°C.

2.3 Mạch lái động cơ L298N

undefined

   Mạch điều khiển động cơ L298 giúp bạn có thể điều khiển tốc độ và chiều quay của động cơ DC một cách dễ dàng, ngoài ra module l298còn điều khiển được 1 động cơ bước lưỡng cực. Mạch cầu H l298 động cơ có điện áp từ 5V đến 35V. Trên mạch cầu H l298 có tích hợp một IC nguồn 7805 để tạo ra nguồn 5V để cung cấp cho các thiết bị khác.

Thông số kỹ thuật:

  • Driver: L298N tích hợp hai mạch cầu H.
  • Điện áp điều khiển: +5 V ~ +35 V
  • Dòng tối đa cho mỗi cầu H là: 2A
  • Điện áp của tín hiệu điều khiển: +5 V ~ +7 V
  • Dòng của tín hiệu điều khiển: 0 ~ 36ma
  • Công suất hao phí: 20W (khi nhiệt độ T = 75 ℃)
  • Nhiệt độ bảo quản: -25 ℃ ~ +130 ℃

3.      MÔ HÌNH HOÀN CHỈNH

undefined

Đây là mô hình bằng sắt mạ kẽm đảm bảo sự an toàn của các module có trong xe, chống hư hỏng khi va đập. Thiết kế được nhóm tâm đắc nhất bới tính thẩm mỹ và gọn gàng.

 

CHƯƠNG II. LẬP TRÌNH

1. THUẬT TOÁN ĐIỀU KHIỂN PID.

     PID là cách viết tắc của các từ Propotional (tỉ lệ), Integral (tích phân) và Derivative (đạo hàm). Tuy xuất hiện rất lâu nhưng đến nay PID vẫn là giải thuật điều khiển được dùng nhiều nhất trong các ứng dụng điều khiển tự động.

PID được viết dựa trên 3 hệ số: tỷ lệ (P), Tích phân (I), Đạo hàm (D):

 

undefined

2. NGUYÊN LÝ HOẠT ĐỘNG VÀ THỰC NGHIỆM

2.1. Nguyên lý hoạt động

 

undefined

 

A – Hướng xe thằng về phía trước.

B – Trọng lực.

C – Lực hướng tâm.

D – Lực ly tâm.

Hình 12. Nguyên lý cân bằng của xe.


Điều khiển xe cân bằng dựa trên nguyên lý:

Khi xe bị nghiêng so với vị trí cân bằng, xe cần có một lực đủ lớn để kéo xe khỏi góc nghiêng trở về trạng thái ban đầu. Thực tế có một phương pháp phổ biến nhất là dùng con quay hồi chuyển. Tuy nhiên, nhận thấy phương pháp này phải xây dựng mô hình cồng kềnh và đó là phương pháp khá phổ biến nên nhóm không đi theo hướng này.

Lý thuyết về lực ly tâm và thực nghiệm quan sát cho thấy khi xe bị nghiêng, nếu bánh xe được bẻ lái sang hướng nghiêng của xe sẽ tạo ra một lực ly tâm kéo xe ngã về hướng ngược lại. Nhờ đó, mục tiêu của nhóm đề ra là sử dụng thuật toán điều khiển PID để điều chỉnh góc quay của xe sao cho lực ly tâm vừa đủ và chính xác nhất. Mục đính cuối cùng là giúp xe cân bằng.

3. SƠ ĐỒ THUẬT TOÁN

3.1 Sơ đồ tổng quan

undefined

Sơ đồ 1: Sơ đồ tổng quan

        Đây là sơ đồ tổng quan thể hiện mối liên kết giữa các thành phần chính của xe. Arduino được cấu hình giao tiếp I2C để nhận dữ liệu từ MPU6050, thông qua bộ lọc để xử lý sau đó tính toán bằng thuật toán điều khiển PID để truyền góc điều khiển (GDK) xuống điều khiển động cơ cổ xe. Đối với động cơ cổ xe cần có nguồn 5V được lấy trực tiếp từ LM2596S. Driver L298N nhận tín hiệu PWM từ board Arduino để điều khiển tốc độ bánh sau.

     undefined

Sơ đồ ngắt Timer, điều khiển động cơ bánh sau.

3.2 Sơ đồ thuật toán chính

Ở đây có thể thấy sơ đồ bao gồm 2 khối riêng biệt, một khối vòng lặp bao gồm các biến ban đầu, vòng lặp xử lý dữ liệu MPU6050 và thuật toán điều khiển PID. Bên cạnh khối này chính là khối ngắt timer, khi xe khởi động, chế độ timer đồng thời cũng được bật và tín hiệu PWM được truyền xuống cho mạch lái để điều khiển tốc độ động cơ bánh sau.

Khi bắt đầu xây dựng thuật toán để lập trình điều khiển, nhóm đã gặp không ít khó khăn đối với MPU6050 này, cảm biến này có độ nhạy cao nên rất dễ bị nhiễu, việc xác định góc cân bằng của MPU so với vị trí đặt trên thân xe cũng là vấn đề cần quan tâm. Không hẳn lúc nào góc cân bằng của MPU cũng là 00­­, để hiệu chính được góc cân bằng này nhóm đã dùng đến một biến phụ để loại bỏ độ sai lệch của MPU đối với góc cân bằng, điều này giúp việc hiệu chỉnh bớt phức tạp hơn.

undefined

Sơ đồ 4: Thuật toán điều khiển cổ xe.

3.3 Sơ đồ cấu hình MPU6050.

      Đối với góc nghiêng của xe, nhóm đã sử dụng cảm biến độ nghiêng MPU6050 để đo. Cảm biến có nhược điểm là độ nhiễu cao. Để sử dụng dữ liệu của cảm biến một cách chính xác thì cần phải lọc nhiễu, do đó nhóm đã quyết định dùng bộ lọc Kalman để sử lý nhiễu cho cảm biến. Sau khi sử dụng bộ lọc này, cảm biến trả về giá trị đúng và ít bị dao động khi ở vị trí cân bằng giúp việc lập trình dễ dàng hơn.

Ban đầu, nhóm chủ yếu tính toán dựa trên số nguyên ( ép kiểu của các thông số và dữ liệu ở dạng interger để tính toán ) nên có sai lệch trong quá trình xử lý dữ liệu MPU cũng như hiệu chỉnh thông số thuật toán PID. Sau một thời gian quan sát và nhóm đã nhận ra sự sai lệch này. Đối với MPU, dữ liệu của cảm biến này trả về là số thực nên ta có thể sử dụng số thực để tính toán và hiệu chỉnh, việc này giúp đảm bảo đáp ứng về thời gian thực một cách chuẩn xác nhất. Đồng thời, việc sử dụng số thực để hiệu chỉnh còn giúp tránh được độ sai lệch quá cao gây ra hiện tượng vọt lố khi điều khiển, bên cạnh đó, ta có thể hiệu chỉnh một cách dễ dàng, thỏa mái và việc qua sát sau mỗi lần hiệu chỉnh là rõ ràng nhất giúp cho việc hiệu chỉnh có hiệu quả. Sau một thời gian thực nghiệm, nhóm đã nhận định rằng phương pháp dùng số thực để tính toán rất hiệu quả.

3.4. Sơ đồ điều khiển động cơ

 

undefined

Sơ đồ 4: Thuật toán điều khiển cổ xe.

Thuật toán này có nói đến max_angle, min_angle. Đây chính là góc giới hạn dùng để hạn chế góc quay của động cơ. Động cơ dùng để bẻ lái cổ xe là động cơ servo, khi gắn nó vào phần cổ xe của mô hình và lập trình điều khiển thì không thể tránh việc chênh lệch giữa góc quay bên trái và góc quay bên phải. Do đó, nhóm dùng phương pháp giới hạn góc quay ( ở đây nhóm cho góc giời hạn so với vị trí cân bằng là 450 ) để góc quay bằng nhau đối với hai phía của cổ xe.

 

Tốc độ bánh sau có một phần quyết định cho sự cân bằng của xe, ví dụ như khi chúng ta đi xe hai bánh, xe đi tốc độ chậm thì việc thăng bằng khó khăn hơn, nếu đạt tốc độ ổn đinh thì việc giữ thăng bằng rất đơn giản. Khi đó đáp ứng cần có để giữ sự thăng bằng rất nhỏ. Tương tự, việc giữ cho mô hình có khả năng tự thăng bằng cũng dựa trên nguyên lý này, do đó tốc độ của bánh xe sau phải đáp ứng vừa đủ, không quá nhanh hoặc quá chậm khi ở vị trí cân bằng.

Để tránh gây ra các vấn đề không mong muốn trong điều khiển, nhóm đã quyết định cho việc điều khiển tốc độ động cơ bánh sau hoàn toàn độc lập bằng cách cho quá trình điều khiển vào timer. Timer chỉ có nhiệm vụ truyền tín hiệu PWM từ vi điều khiển xuống mạch lái.

5. KẾT QUẢ THỰC NGHIỆM

 

Sau khi hoàn thành mô hình, nhóm đã bắt tay vào triển khai thuật toán điều khiển PID với mục đích tìm ra các bộ thông số có thể giúp xe giữ thăng bằng. Tuy chưa đạt được kết quả tốt nhất nhưng những bộ thông số mà nhóm hiệu chỉnh được có thể giúp xe giữ thăng bằng trong khoàng thời gian 1-2m, với phương pháp này, nhóm có thể đánh giá được tính hiệu quả của thuật toán PID trong điều khiển và tạo tiền đề để cải thiện thuật toán sau này tốt hơn.

            Thực tế, việc cân bằng đối với xe hai bánh không đồng trục và xe hai bánh đồng trục hoàn toàn khác nhau. Xe hai bánh đồng trục chỉ có một thông số để điều chỉnh là tốc độ của 2 bánh xe để giữ xe cân bằng. Trong khi xe hai bánh không đồng trục có tới hai thông số cần hiệu chỉnh là tốc độ bánh sau và góc bẻ lái của cổ xe bánh trước. Ở đây, nhóm mặc định tốc độ của bánh sau là 150 (58.8%) so với tốc độ lớn nhất là 255 (100%) để việc điều chỉnh thông số trong thuật toán điều khiển PID đơn giản hơn.

Thuật toán PID là phần quan trọng nhất và được nhóm đầu tư nhất. Đây là phương pháp điều khiển cổ điển và phổ biến. Thuật toán được thể hiện qua công thức:

       Gdk = mean_straight +(Kp*alpha)+(Ki*I_value)- (Kd*D_value)

Trong đó:

  • Gdk: góc điều khiển cổ xe.
  • Mean_straight: góc cân bằng.
  • Alpha: góc lệch so với trục gia tốc biểu kiến và thân xe.
  • I_value: giá trị tích phân.
  • D_value: giá trị đạo hàm.
  • Kp, Ki, Kd: bộ thông số hiệu chỉnh thủ công.

Để tính được độ sai lệch so với ban đầu của xe, nhóm đã dựa vào góc đo được khi xe bị nghiêng, tất nhiên phải kèm theo thông số hiệu chỉnh để giảm độ sai lệch không mong muốn. Ở đây, góc cân bằng mà xe có được là 1150. Thông số Kp là thành phần thể hiện tốc độ bẻ lái của cổ xe được hiệu chỉnh thủ công, Kp càng lớn thì tốc độ bẻ lái càng cao. Thông số I_value là thành phần quán tính đáp ứng tốc độ mong muốn, nó được lấy từ trung bình dãy tích phân của góc nghiêng đo được lúc xe bị ngã với n mẫu. Với yêu cầu khoảng thời gian đáp ứng để xe vực dậy được là không vượt quá 0,25s tương ứng với 5 mẫu, n càng lớn thì tính đáp ứng càng chậm. Thông số D_value là thành phần vọt lố của xe, được tính bằng độ sai lệch giữa mẫu tích phân đầu tiên và mẫu thứ 2. Các thông số Ki, Kd cũng được hiệu chỉnh thủ công để thuật toán điều khiển chính xác, đáp ứng đủ nhanh mà không bị vọt lố.

            Với  mean_straight = 115 ( góc cân bằng), limit_angle = 45 ( độ rộng góc giới hạn) là không thay đổi, off_set ( thông số hiệu chỉnh đồ sai lệch của MPU so với vị trí cân bằng). Những bộ thông số mà nhóm hiệu chỉnh được, cho kết quả khả quan trong việc giữ thăng bằng cho xe là:

-       Bộ thông số đầu tiên, chỉ hiểu chỉnh Kp, xe đứng được 1 – 2s, đáp ứng của xe vừa đủ để vực xe ra khỏi góc ngã.

off_set = - 4;

Kp=3.5;

Ki=0;

Kd = 0;

-       Bộ thông số thứ hai, hiệu chỉnh thêm Ki, xe ít dao động tại vị trí thăng bằng, khi xe đạt đủ tốc độ ngay tại vị trí thăng bằng thì xe có thể giữ thăng bằng ở một đoạn khoảng 0,5m:

off_set = -4

Kp=3.4

Ki=0.11

Kd = 1

-       Và bộ thông số ổn định nhất cho đến lúc này giúp xe có thể được trong khoảng 1 – 2m.

off_set = -5.2

Kp=3.4

Ki=0.14

Kd = -1

 

Nguyên tắc để hiệu chỉnh bộ thông số trên là:

-         Đối với off_set, nếu tăng off_set thì xe sẽ nghiêng sang trái và ngược lại. Khi xe có xu hướng nghiêng bên trái hoặc phải nhiều hơn nhóm sẽ hiệu chỉnh thông số này sao cho cổ xe có xu hướng lái về góc cân bằng tốt nhất.

-         Thông số Kp tương ứng với tốc độ bẻ lái của cổ xe, với góc ngã càng lớn thì tốc độ bẻ cổ lái phải nhanh để đáp ứng được thời gian xe vực dậy. Nếu tăng Kp thì tốc độ càng nhanh và ngược lại.

-         Thông số Ki là phần quán tính để bù vào phần Kp chưa đáp ứng kịp ( xe có xu hướng nghiêng 1 bên). Ki càng lớn thì quán tính càng cao, lúc này dễ có trường hợp bị vọt lố tại vị trí cân bằng khiến cổ xe dao động qua lại hai phía tại góc cân bằng. Để triệt tiêu sự vọt lố này, nhóm sử dụng đến thông số Kd.

-         Kd là thành phần vọt lố để giảm thời gian trể lúc xe bẻ lái đế góc yêu cầu, khi thời gian trể lớn thì nhóm tăng Kd và ngược lại, nếu bị vọt lố thì nhóm trừ thành phần Kd này để giảm độ vọt lố đó ( Kd âm).

-         Lưu ý đối với các thông số này, chúng tôi đang thử nghiệm trên bề mặt gạch men phẳng, rộng. Vì bánh xe được thiết kế bằng cao su nên sự ma sát với bề mặt tiếp xúc trên những chất liệu khác nhau sẽ cần có những hệ số hiệu chỉnh khác nhau để đảm bảo xe có thể hoạt động tốt nhất.

 

CHƯƠNG III. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

1.      KHÓ KHĂN

  • Kinh phí thực hiện đề tài còn khó khăn.
  • Nơi làm việc còn hạn chế.

2.      THÀNH TỰU

Nhờ sự giúp đỡ của thầy hướng dẫn, nhóm với tinh thần nghiên cứu khoa học đã đạt được một số thành tựu sau:

  • Xây dựng mô hình xe hai bánh chắc chắn, có tính thẩm mỹ cao, chống hư hỏng xe và module khi va chạm, đáp ứng đủ yêu cầu đặt ra.
  • Nắm rõ cách thức hoạt động của các module được sử dụng ( Arduino Nano, LM2596S, L298N, MPU6050..).
  • Điều khiển được động cơ Servo, động cơ DC nhờ vi điều khiển cùng với mạch lái L298N.
  • Xây dựng khối nguồn ổn định cho các module và vi điều khiển.
  • Đo được góc lệch của xe đối với vị trí cân bằng.
  • Giao tiếp được cảm biên MPU6050 với vi điều khiển, xử lý dữ liệu đọc được một cách chính xác và hiệu quả nhất.
  • Đánh giá thuật toán điều khiển PID chính xác về mặt lý thuyết và thực nghiệm.
  • Tìm ra các thông số Kp, Ki, Kd phù hợp, đồng thời biết được phương pháp hiệu chỉnh bộ thông số của PID nhanh nhất.

3.      HƯỚNG PHÁT TRIỂN

Ngoài những thành tựu đã đạt được, nhóm còn đề xuất hướng phát triển tiếp theo sau khi hoàn thành đề tài này là:

  • phát triển mô hình xe hoàn thiện hơn, tìm ra thêm nhiều phương pháp để điều khiển xe, giúp xe giữ thăng bằng tốt hơn.
  • Phát triển mô hình rộng rãi với các tiêu chí quan trọng như:

ü  tiết kiệm năng lượng

ü  tính thẩm mỹ cao

ü  tính ổn định và an toàn

 

 

 

 

 

 

 

 

 

 

 

Các tin khác