Hình 3.10: Sơ đồ chương trình chính
Lưu đồ điều khiển của chương trình chính Hình 3.10 bao gồm ba khối chính tương tự như mục trước. Ngoài ra, khối Digital Input đóng vai trò là một khóa chuyển đổi giữa hai giải thuật điều khiển.
Khối nhận xung từ Encoder:
Khối nhận xung từ Encoder vị trí xe
Hình 3.11: Khối nhận xung từ Encoder vị trí xe
Cấu hình cho module eQEP ở Hình 3.11, trong phạm vi đề tài này ta cấu hình 3 tab General, Position Counter và Signal data types (Hình 3.12, 3.13, 3.14) như sau:
22
Tab General: Ta chọn module quản lý việc nhận xung từ Encoder vị
trí xe là module eEQP1, chế độ đếm dạng xung vuông và chiều dương quy ước là chiều cùng chiều kim đồng hồ.
Hình 3.12: Cấu hình Tab General module eEQP
Tab Position Counter: Ta chọn vào checkbox Output position counter để nhận được giá trị đếm ở ngõ ra của module, với chế độ reset được chọn là Reset on the maximum Position ta đặt giá trị đếm lên cao nhất của thanh ghi là 100000 để thuận tiện cho quá trình xử lý khi Encoder không phải reset trong suốt quá trình chạy.
23
Hình 3.13: Cấu hình Tab Position Counter module eEQP
Tab Signal data types: Để có thể lưu trữ giá trị đếm của thanh ghi ta
chọn kiểu dữ liệu cho thanh ghi này là uint32.
24
Khối nhận xung từ Ecoder đo góc lệch
Hình 3.15: Khối nhận xung từ Encoder đo góc lệch
Cấu hình cho module eEQP ở Hình 3.15 trong phạm vi đề tài ta chỉ cấu hình 3 tab General, Position Counter và Signal data types (Hình 3.16, 3.17, 3.18) như sau:
Tab General: Ta chọn module quản lý việc nhận xung từ Encoder đo góc lệch là module eEQP2, chế độ đếm dạng xung vuông và chiều dương quy ước là ngược chiều kim đồng hồ.
25
Tab Position Counter: Ta chọn vào checkbox Output position counter để ghi nhận được giá trị đếm ở ngõ ra của module, với chế độ reset được chọn là Reset on the maximum Position ta đặt giá trị đếm lên cao nhất của thanh ghi là 81920 để thuận tiện cho quá trình xử lý Encoder không phải reset trong suốt quá trình chạy.
Hình 3.17: Cấu hình Tab Position Counter module eEQP1
Tab Signal data types: Để có thể lưu trữ giá trị đếm của thanh ghi ta
26
Hình 3.18: Cấu hình Tab Signal data types module eEQP1
Bộ điều khiển
Hình 3.19: Sơ đồ chương trình bộ điều khiển
Hình 3.19 thông qua tác động của khối Digital Input, khi khối Digital Input được tác động mức cao, bộ điều khiển sẽ được thực thi.
27
Khối cho phép gửi dữ liệu lên máy tính
Hình 3.20: Khối cho phép gửi dữ liệu lên máy tính
Hình 3.21: Cấu trúc bên trong khối gửi dữ liệu lên máy tính
Khối Enable Signal (Hình 3.20) và cấu trúc bên trong khối gửi dữ liệu lên máy tính (Hình 3.21) đóng vai trò cho phép việc vẽ các biểu đồ thông qua các dữ liệu gửi lên máy tính một cách chính xác và thuận tiện cho việc quan sát việc điều khiển mô hình.
Khối chương trình chính
Hình 3.22: Khối chương trình chính
Khối chương trình chính (Hình 3.22) bao gồm 6 khối chương trình con Hình 3.23 thực hiện nhiệm vụ tính toán giá trị % xung PWM dùng để điều khiển động cơ dựa trên số xung nhận được từ hai Encoder.
28
Hình 3.23: Cấu trúc bên trong khối chương trình chính
Khối tính toán giá trị xung từ Encoder
Hình 3.24: Khối tính toán giá trị xung từ Encoder
Hình 3.25: Cấu trúc bên trong khối tính toán giá trị xung từ Encoder
Hình 3.24 và Hình 3.25 thể hiện cấu trúc khối tính toán giá trị xung từ Encoder. Sau khi nhận xung từ Encoder vị trí, tùy thuộc vào giá trị xung lấy về này
29
mà ta sẽ đưa vào hai khối Gain để tính toán ra giá trị tức thời của xe ở đơn vị mm. Trong đó, giá trị khối Gain là: (19.75 x 2 x pi)/8192 và khối Gain1 là -(19.75 x 2 x pi)/8192.
Tương tự như trên, từ giá trị xung lấy về từ Encoder đo góc lệch, ta sẽ đưa vào khối Gain để tính được giá trị góc lệch tức thời so với trạng thái lúc đầu của con lắc ở đơn vị độ. Trong đó, giá trị khối PulseToDegree là: 180/4096.
Khối chuyển đổi dữ liệu và feedback
Hình 3.26: Khối chuyển đổi dữ liệu và feedback
Khối chuyển dữ liệu và feedback (Hình 3.26) đảm nhận nhiệm vụ đơn giản đó là chuyển đổi 2 giá trị tính toán được từ khối tính toán xung sang hai đơn vị đó là metre và radian, trước khi gửi về so sánh với giá trị đặt để chuyển vào bộ điều khiển.
Khối hiệu chỉnh điện áp
Khối hiệu chỉnh giá trị điện áp Hình 3.27 có vai trò tính toán ra giá trị phần tram PWM từ giá trị điện áp ở đầu ra của bộ điều khiển, đồng thời dựa vào giá trị này set, clear tương ứng GPIO 10 tương ứng với chiều chuyển động dương hay âm của xe.
30
Hình 3.27: Khối hiệu chỉnh giá trị điện áp
Khối cho phép gửi xung PWM
Hình 3.28: Khối cho phép gửi xung PWM
Khối cho phép gửi xung PWM Hình 3.28 đảm nhận chức năng kiểm tra sai lệch góc đến một giới hạn quy định mới cho phép bật xung PWM để điều khiển, đồng thời khối cũng có vai trò ngưng cấp xung PWM khi xe di chuyển đến hai vị trí giới hạn đầu và cuối nhằm đảm bảo an toàn cho mô hình trong trường hợp có sự cố xảy ra.
31
Khối hiệu chỉnh dữ liệu trước khi gửi lên máy tính
Hình 3.29: Khối hiệu chỉnh dữ liệu
Hình 3.30: Khối hiệu chỉnh dữ liệu số có dấu
Khối hiệu chỉnh dữ liệu (Hình 3.29, 3.30) có vai trò chuyển đổi các giá trị vị trí, góc lệch, điện áp thành các mã ASCII tương ứng để có thể gửi lên máy tính, thuận tiện cho việc giám sát trên máy tính.
32
Khối Poly Controller
Hình 3.31: Khối Poly Controller
Khối Poly Controller (Hình 3.31) đảm nhiệm nhận giá trị sai lệch của vị trí và góc lệch, sau đó đưa vào bộ điều khiển Poly Controller để cho ra giá trị điện áp điều khiển động cơ.
Khối nhận xung PWM
Hình 3.32: Khối nhận xung PWM
Cấu hình cho module ePWM (Hình 3.32) trong phạm vi đề tài ta chỉ cấu hình 2 tab General và ePWMA (Hình 3.33, 3.34) như sau:
33
Tab General: Ta chọn module quản lý việc nhận xung PWM là ePWM1, với chế độ đếm lên. Với việc MCU DSP TMS320F288335 hoạt động ở tần số 150MHz, ta cấu hình với Timer period là 15000.
Hình 3.33: Cấu hình Tab General module ePWM
Tab ePWMA: Ta chọn vào checkbox Enable ePWMA để cho phép việc gửi xung ePWM thông qua kênh A dưới dạng là phần tram, và giá trị phần trăm này sẽ được gán thông qua Input port từ đầu ra của bộ điều khiển.
34
Hình 3.34: Cấu hình Tab Position Counter module ePWM