5.2.1. Bộ định thời Timers (TIM)
Bộ định thời – Timer là một trong số những ngoại vi cần thiết nhất trong công việc điều khiển động cơ. Ngoài chức năng xác định thời gian cho các vòng lặp kiểm tra và
tính toán của chương trình, bộ định thời Timer còn đóng vai trò tạo tín hiêu PWM để điều khiển tốc độ động cơ. Chương trình điều khiển sẽ sử dụng 6 bộ Timer của vi điều khiển nhằm các mục đích sau:
Timer 2, 3, 14 và 16 sẽ đóng vai trò là bộ tạo xung PWM cho các chân input/output của vi điều khiển.
Timer 17 sẽ tạo vòng lặp cho bộ điều khiển PID và hàm lấy giá trị ADC. Timer 6 sẽ được sử dụng để tính tốc độ động cơ.
5.2.2. Bộ chuyển đổi Analog – Digital (ADC)
Để đọc và theo dõi các tín hiệu như giá trị dòng điện, điện áp, nhiệt độ,… chương trình cần phải sử dụng một hay nhiều bộ chuyển đổi Analog – Digital. Bộ chuyển đổi này đóng vai trò chuyển đổi các tín hiệu tương tự (analog) từ các cảm biến thành tín hiệu số (digital) mà vi điều khiển có thể đọc và xử lí được. Các kênh chuyển đổi được sử dụng trong chương trình gồm:
Kênh ADC_IN0 sẽ đọc giá trị của biến trở
Kênh ADC_IN8 sẽ đọc giá trị của nhiệt độ MOSFET
Kênh ADC_IN10 sẽ đọc giá trị của dòng điện qua cuộn dây stator Kênh ADC_IN11 sẽ đọc giá trị của điện áp nguồn
5.2.3. Bộ truyền thông nối tiếp không đồng bộ (UART)
UART là một giao thức truyển thông nối tiếp được sử dụng rộng rãi và được tích hợp trên hầu hết các vi điều khiển hiện nay. Giao thức này có ưu điểm là thiết kế và cấu trúc dữ liệu đơn giản, dải tốc độ truyển tín hiệu rộng, có thể giao tiếp giữa 2 vi điều khiển không cùng tần số hoạt động. Giao thức truyền thông này được sử dụng trong đồ án với mục đích đưa các thông số theo dõi hoạt động của động cơ lên máy tính để xuất đồ thị hoặc lưu dữ liệu.
5.2.4. Watchdog Timer (WDT)
Watchdog Timer là một bộ định thời hoạt động độc lập với vi điều khiển bằng cách sử dụng mạch dao động riêng. Watchdog Timer có thể được tạo sự kiện ngắt hoặc khởi động lại vi điều khiển khi bộ đếm tràn hoặc khi giá trị bộ đếm đạt đến một giá định cố
dụng để khởi động lại vi điều khiển khi chương trình thực thi xảy ra lỗi và không thể tiếp tục điều khiển hoặc theo dõi đông cơ.
5.2.5. GPIO và ngắt ngoài (EXTI)
GPIO (General Purpose Input Output) là ngoại vi cần thiết được sử dụng để thiết lập chức năng của các chân tín hiệu vào và ra của vi điều khiển. Tùy vào từng ngoại vi và chức năng được kích hoạt mà các chân tín hiệu tương ứng có thể được thiết lập tự động hoặc bởi người dùng.
Ngắt ngoài – EXTI (External Interrupt) cho phép chương trình theo dõi trạng thái các chân tín hiệu đầu vào và tạo sự kiện ngắt tùy vào trạng thái của từng chân. Người lập trình có thể viết chương trình ngắt cho từng sự kiện ngắt riêng biệt. Trong chương trình này, ngắt ngoài được sử dụng để lấy tín hiệu từ cảm biến Hall, từ đó có thể tính toán tốc độ đồng thời thông báo vị trí kích từ tiếp theo cho vi điều khiển.
5.2.6. Truy cập bộ nhớ trực tiếp (DMA)
Truy cập bộ nhớ trực tiếp – DMA (Direct Memory Access) cho phép các ngoại vi trao đổi dữ liệu trực tiếp với nhau mà không cần thông qua lõi xử lí trung tâm. Ngoại vi này giúp vi điều khiển tiết kiệm tài nguyên xử lí, cho phép dử liệu được truyền nhận nhanh chóng nội bộ bên trong vi điều khiển. Chương trình điều khiển sẽ sử dụng DMA để lấy dữ liệu từ bộ chuyển đổi ADC, vì đây là ngoại vi sử dụng nhiều tài nguyên và dữ liệu chuyển đổi thường có kích thước khá lớn, sử dụng DMA để lưu trữ và truyền dữ liệu sẽ giúp vi điều khiển bảo toàn và đọc dữ liệu nhanh hơn so với các phương pháp truyền thống như chờ bộ chuyển đổi hoàn tất quá trình làm việc hoặc tạo chương trình ngắt để lấy dữ liệu.
5.3.1. Danh sách các hàm sử dụng trong chương trình điều khiển:
Tên hàm Chức năng
void SystemClock_Config(void) Thiết lập tần số làm việc của vi điều khiển
static void MX_GPIO_Init(void) Thiết lập chức năng các chân input/output
static void
MX_USART2_UART_Init(void
Thiết lập các thông số hoạt động của giao thức UART
static void MX_DMA_Init(void) Thiết lập các thông số hoạt động của DMA
static void MX_ADC_Init(void) Thiết lập thông số hoạt động bộ chuyển đổi ADC
static void MX_TIM2_Init(void); Thiết lập các thông số hoạt động bộ Timer 2
static void MX_TIM3_Init(void); Thiết lập các thông số hoạt động bộ Timer 3
static void MX_TIM6_Init(void); Thiết lập các thông số hoạt động bộ Timer 6
static void MX_TIM14_Init(void); Thiết lập các thông số hoạt động bộ Timer 14
static void MX_TIM16_Init(void); Thiết lập các thông số hoạt động bộ Timer 16
static void MX_TIM17_Init(void); Thiết lập các thông số hoạt động bộ Timer 17
static void MX_IWDG_Init(void); Thiết lập các thông số hoạt động của Watchdog Timer
Tên hàm Chức năng
static void Peripheral_Initiate() Khởi động các ngoại vi
static uint8_t
Set_PWM_Value(doubleduty)
Thiết lập giá trị chu kỳ làm việc cho bộ tạo xung PWM
static double getSpeed()
Lấy về giá trị tốc độ động cơ
static void Read_ADC_Value()
Đọc các giá trị của bộ chuyển đổi ADC
static void BLDCStart()
Động cơ bắt đầu hoạt động
static void BLDCStop()
Động cơ ngừng hoạt động
static void
BLDCBackwardCommutate(double
dutySet)
Chuyển bước kích từ theo chiều quay ngược
static void
BLDCForwardCommutate(double
dutySet);
Chuyển bước kích từ theo chiều quay thuận
static void dirCheck(uint16_t GPIO)
Cập nhật chiều quay của động cơ
static void hallCheck()
Cập nhật giá trị cảm biến Hall
static void Speed_PID(double
set_speed) Tính toán giá trị output của bộ điều khiển PID
Tên hàm Chức năng
void
HAL_GPIO_EXTI_Callback(uint16 _t GPIO_Pin)
Hàm ngắt ngoài cho các chân cảm biến Hall
void HAL_TIM_PeriodElapsedCallback( TIM_HandleTypeDef *htim) Hàm ngắt tràn các bộ định thời void HAL_TIM_OC_DelayElapsedCallb ack(TIM_HandleTypeDef *htim)
Hàm ngắt khi giá trị bộ đếm trùng khớp với một giá trị định sẵn
Bảng 5.3. Các chương trình ngắt
5.3.2. Lưu đồ thuật toán
Hình 5.3.static void Peripheral_Initiate()
Hình 5.5.static double getSpeed()
Hình 5.6.static void Read_ADC_Value()
Hình 5.11.static void dirCheck(uint16_t GPIO)
Hình 5.13.static void Speed_PID(doubleset_speed)
Hình 5.15.void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
CHƯƠNG 6: KẾT QUẢ VÀ PHƯƠNG HƯỚNG PHÁT TRIỂN TRONG TƯƠNG LAI
6.1. Đánh giá hoạt động của chương trình điều khiển
Trước khi kết nối các phần cứng và chạy thử động cơ, cần phải giả lập tín hiệu cảm biến Hall và kiểm tra các chức năng cùng tín hiệu PWM từ vi điều khiển để đảm bảo chương trình có thể hoạt động đúng như dự định khi lập trình. Dưới đây là các kiểm tra cần thiết trước khi kết nối với động cơ được thực hiện trên vi điều khiển.
Tín hiệu PWM được quan sát bằng một thiết bị Logic Analyzer, so sánh với cấu hình PWM đã được xây dựng từ trước, có thể thấy chương trình đã hoạt động đúng chức năng. Các MOSFET trên cùng một bán cầu không bao giờ ở trạng thái dẫn cùng một lúc, các thứ tự chuyển bước và MOSFET được kích hoạt tương ứng đúng với thứ tự được viết trong chương trình.
Các tín hiệu được gửi từ UART cũng được đưa lên thành công, định dạng và giá trị các tín hiệu đều đúng ở trong phạm vi cho phép.
Hình 6.2. Tín hiệu nhận được từ cổng Serial COM Port
Sau khi đảm bảo các chức năng của chương trình đều hoạt động đúng, tiến hành thiết lập kết nối hệ thống dựa trên sơ đồ nối dây và các chân kết nối tương ứng. Cụm dây từ động cơ sẽ được nối trực tiếp vào mạch điều khiển đông cơ BLDC 500W, sử dụng một bộ nguồn 24V để cấp nguồn cho toàn hệ thống và kết nối vi điều khiển vào máy tính để theo dõi các thông số hoạt động của động cơ.
Sau khi đã thiết lập hoàn chỉnh, chạy thử chương trình dưới các điều kiện: chạy tự do không tải và thay đổi giá trị biến trở để kiểm tra khả năng đáp ứng. Sau một số lần
chạy thử, kết quả cho ra các đồ thị dưới đây:
Hình 6.4. Đồ thị khả năng đáp ứng của bộ điều khiển tốc độ - chạy thử lần 1
Hình 6.6. Đồ thị khả năng đáp ứng của bộ điều khiển tốc độ - chạy thử lần 3
Quan sát đồ thị, có thể thấy được qua một số lần hiệu chỉnh, chương trình điều khiển đã làm tốt việc giữ tốc độ động cơ gần với tốc độ mong muốn điều khiển bởi người dùng. Ở lần chạy thử thứ nhất, thiết lập hệ số kP = 0.5 và kI = 0.02, bộ điều khiển không tăng tốc độ của động cơ đủ nhanh, đồng thời sai số ổn định vẫn tồn tại. Lần chạy thử thứ hai, thiết lập hệ số kP = 1 và kI = 0.7 sai số ổn định đã được loại bỏ, tuy nhiên thời gian để động cơ đạt đến tốc độ đầu vào vẫn còn khá lâu (khoảng 400 lần lấy mẫu). Ở lần chạy thử thứ 3, thiết lập hệ số kP = 1.5 và kI = 1.85, động cơ đã có thể đáp ứng gần như đồng thời giá trị setpoint, thời gian thiết lập đã giảm đáng kể (khoảng 140 lần lấy mẫu). Đồng thời, trên đồ thị cũng có thể thấy rõ sự dao động của tốc độ thực tế của động cơ. Đây là một nhược điểm của phương pháp điều khiển 6 bước (6 steps commutation) mà cách khắc phục là sử dụng một phương pháp điều khiển cao cấp hơn.
Hình 6.7. Đồ thị các thông số làm việc khác
Các thông số khác cũng có thể được quan sát trên đồ thị, nhiệt độ MOSFET được duy trì ổn định ở một giá trị hợp lý, trong khi có một số dao động nhỏ ở đồ thị điện áp khi động cơ tăng tốc độ, dòng điện đọc được cũng có một số thay đổi khi động cơ tăng hoặc giảm tốc độ.
6.2. Kết luận
Nhìn chung, quá trình thực hiện đồ án đã đạt được các mục tiêu đề ra cụ thể như sau: Tìm hiểu và nắm rõ các cấu tạo và nguyên lý hoạt động của động cơ không chổi than,
hiểu được nguyên nhân khiến cho loại động cơ này có độ bền và hiệu suất làm việc cao hơn động cơ sử dụng chổi than truyền thống.
Xây dựng được một mô hình mô phỏng hoạt động của động cơ không chổi than, hỗ trợ cho quá trình phát triển chương trình điều khiển.
Phát triển một chương trình điều khiển đơn giản nhưng có hiệu quả điều khiển cao Quan sát và theo dõi các thông số hoạt động của động cơ thông qua giao tiếp với máy
6.3. Các phương hướng nghiên cứu trong tương lai6.3.1. Về mặt phần cứng 6.3.1. Về mặt phần cứng
Các phần cứng được sử dụng trong đồ án đã có thể phục vụ hầu hết các nhu cầu sử dụng của động cơ không chổi than trên các phương tiện hiện nay. Mặc dù vậy, vẫn tồn tại nhiều yêu cầu để có thể đưa một thiết bị kết nối vào hệ thống điện của một chiếc xe hoàn chỉnh. Các yêu cầu này có thể phân làm 3 nhóm chính là kích thước, khả năng tương thích và kết nối.
Về kích thước, đối với các ứng dụng yêu cầu công suất lớn, động cơ và mạch điều khiển ít nhất cũng phải đạt được công suất cần thiết tối thiểu của hệ thống. Động cơ công suất càng lớn, kéo theo các linh kiện điện tử công suất được sử dụng để điều khiển cũng có sự gia tăng về kích thước. Thành ra phương hướng giải quyết yêu cầu này phần lớn phải dựa trên kỹ thuật và khả năng của các kỹ sư thiết kế mạch điều khiển. Các mạch điều khiển được thiết kế ra phải có kích thước hợp lý, đồng thời đạt khả năng hoạt động ổn định dưới công suất làm việc của động cơ
Về khả năng tương thích, các thiết bị điên tử trên xe hoạt động dưới nhiều điều kiện khác nhau, đặc biệt là khi hoạt động ở gần động cơ. Sự dao động cơ khí, nhiễu trên đường dây điện gây ra bởi từ trường hay các tín hiệu điện khác hoặc các yếu tố môi trường như nhiệt độ, bụi bẩn, dầu nhớt,… có thể ảnh hưởng đến khả năng hoạt động của mạch điều khiển và của cả động cơ. Vì vậy nên khi đưa một thiết bị mới kết nối vào hệ thống của một chiếc xe hoạt động trong thực tế, cần phải cân nhắc về các yếu tố có thể gây ảnh hưởng đến khả năng hoạt động của thiết bị này. Phải đảm bảo sự tương thích toàn bộ của thiết bị đối với các hệ thống khác trên xe, đưa ra các thay đổi về thiết kế hợp lý để đảm bảo khả năng hoạt động ổn định của thiết bị khi chiếc xe đang vận hành.
Về vấn đề kết nối, động cơ và bộ điều khiển phải đảm bảo kết nối với các hệ thống khác trên xe để có thể hoạt động đúng chức năng. Nhờ có mạng CAN, các hệ thống trên xe có thể chia sẻ thông tin và hoạt động đồng thời với nhau một cách hiệu quả nhất. Vậy nên khi thay thế các động cơ chổi than cũ bằng động cơ không chổi than cùng với mạch điều khiển, ta phải đảm bảo sự kết nối giữa các hệ thống, việc lắp đặt và vận hành động
thời, các tín hiệu được sử dụng để vận hành động cơ cũng phải được đảm bảo truyển nhận đầy đủ, cấp bậc sử dụng dữ liệu rõ ràng để tránh ảnh hưởng đến hoạt động của các bộ phận khác.
6.3.2. Về mặt phần mềm
Điều khiển động cơ không chổi than vẫn luôn là một đề tài nhận được nhiều sự quan tâm từ các kỹ sư và những nhà khoa học từ khi động cơ không chổi than được phát minh vào những năm 1960 cho đến ngày nay. Nhờ những ưu điểm vượt trôi so với động cơ sử dụng chổi than và dải công suất rộng mà động cơ không chổi than là một trong nhữa lựa chọn ưu tiên trong nhiều lĩnh vực công nghiệp đòi hỏi hiệu năng làm việc, độ chính xác và tính an toàn cao. Vì thế việc phát triển các chương trình điều khiển, các thuật toán phục vụ cho việc vận hành cùng với sự đơn giản hóa quá trình điều khiển của động cơ cũng được đầu tư trong nhiều năm nay.
Phương pháp điều khiển 6 bước với sự hỗ trợ của cảm biến Hall là phương pháp đơn giản nhất được sử dụng để điều khiển các động cơ không chổi than công suất nhỏ. Việc phát triển chương trình để có thể điều khiển động cơ mà không cần cảm biến sẽ giúp đơn giản hóa quá trình chế tạo động cơ và mạch điều khiển. Đối với các hệ thống sử dụng động cơ công suất lớn hay đặt năng vấn đề về năng lượng tiêu thụ, chương trình điều khiển sử dụng phương pháp FOC sẽ đem đến hiệu quả tối đa, đồng thời kết hợp với các kỹ thuật khác như thuật toán điều khiển FOC không cảm biến hay phát hiện vị trí ban đầu của động cơ sẽ giúp đơn giản hóa quá trình điều khiển và tăng sự ổn định khi động cơ đang vận hành.
Để điều khiển và theo dõi động cơ khi hoạt động, phát triển một ứng dụng trên máy tính để kết nối với vi điều khiển cũng là một hướng đi cần thiết. Ứng dụng được sử dụng trong đồ án là một ứng dụng mã nguồn mở được sử dụng để đọc dữ liệu từ cổng COM của máy tính qua giao thức UART, mặc dù có thể hoạt động ổn định và có nhiều tính năng hỗ trợ cho việc lưu trữ dữ liệu nhưng ứng dụng này không được thiết kế để điều khiển động cơ không chổi than. Các chế độ hoạt động, thông số làm việc của các ngoại vi