Mục tiêu nghiên cứu
Mục tiêu của bộ sản phẩm:
Di chuyển đúng khoảng cách được yêu cầu
Độ sai số dưới 1mm.
Kết quả đạt được
Thiết kế được hệ thống điều khiển vị trí trong mặt phẳng
Độ chính xác cao và ổn định.
CƠ SỞ LÝ THUYẾT
Sơ đồ khối hệ thống
Hình 2.1: Sơ đồ khối hệ thống
Nguyên lý hoạt động các khối:
Khối nguồn: cấp nguồn cho hệ thống
Khối nút nhấn: đọc tín hiệu của ngõ vào
Khối xử lí trung tâm: phân tích và giải quyết bài toán
Khối hiển thị: hiển thị thông tin cần thiết
Khối động lực: điều khiển động cơ.
Phần cứng
Với đề tài điều khiển vị trí này, phần cứng mà em sử dụng bao gồm:
Động cơ bước size 42 step 1.8 và driver
2.2.1 Vi xử lí : STM32F103C6T8 Blue Pill
Kit phát triển STM32F103C8T6 Blue Pill ARM Cortex-M3 là lựa chọn phổ biến cho nghiên cứu ARM nhờ giá thành hợp lý Nó cho phép nạp bootloader Blue Pill, giúp giao tiếp và lập trình dễ dàng với phần mềm Arduino Kit này được gia công chất lượng cao và có độ bền tốt.
Thông số của KIT STM32F103C8T6 Blue Pill như sau:
Tích hợp thạch anh ngoại 8Mhz
Tích hợp cổng USB để nạp Bootloader hoặc sử dụng ngoại vi USB
Led tích hợp vào chân PC13
Sử dụng chuẩn mạch nạp: SWD cho các loại mạch nạp ST-link, J-link
Ra chân đầy đủ tất cả các GPIO và giao tiếp: CAN, I2C, SPI, UART, USB,
Tích hợp sẵn thạnh anh 32Khz cho các ứng dụng RTC.
Hình 2.2: Sơ đồ chân của STM32
Hình 2.3: Kit STM32F103C8T6 Blue Pill
Mạch Nạp STM8 STM32 ST-Link V2
Hình 2.4: Mạch Nạp ST-Link V2
Mạch nạp STM8 STM32 ST-Link V2 là thiết bị lý tưởng để nạp chương trình và debug cho vi điều khiển STM32 và STM8 của ST Với kích thước nhỏ gọn, chi phí thấp và độ bền cao, mạch nạp này mang lại hiệu suất tối ưu cho các dự án phát triển.
Hỗ trợ đầy đủ các STM8 với giao diện SWIM cho việc nạp và gỡ lỗi, tương thích với các môi trường phát triển phổ biến như IAR và STVD Phiên bản phần mềm hỗ trợ được cung cấp để đảm bảo hiệu quả trong quá trình phát triển.
+ ST-LINK Utility 2 trở lên
Kết nối chân từ mạch nạp ST-LINK V2 với linh kiện điện tử STM32 theo thứ tự sau:
Đối với những bạn làm việc với linh kiện điện tử STM8 Kết nối chân từ mạch nạp ST-LINK V2 với STM8 theo thứ tự sau:
2.2.2 Động cơ bước và driver TB6600
Động cơ bước, hay còn gọi là Step Motor, là một loại động cơ điện đặc biệt, hoạt động dựa trên nguyên lý khác biệt so với các động cơ điện thông thường Đây là một động cơ đồng bộ, có khả năng chuyển đổi các tín hiệu điều khiển dưới dạng xung điện thành các chuyển động góc hoặc giữ rôto ở các vị trí cố định cần thiết.
Với yêu cầu điều khiển vị trí như đề tài ta chọn động cơ Stepper NEMA 17
Thông số của động cơ NEMA-17
+ Nhiệt độ làm việc: -50 độ - 20 độ
Mạch điều khiển động cơ bước TB6600 sử dụng IC TB6600HQ/HG, phù hợp cho các loại động cơ bước 2 pha hoặc 4 dây với kích thước 42/57/86 và dòng tải lên đến 4A/42VDC.
+ Dòng cấp tối đa là 4A
+ Ngõ vào có cách ly quang, tốc độ cao
+ Có tích hợp đo quá dòng quá áp
Hình 2.6: Hình ảnh thực tế driver TB6600
Cài đặt và ghép nối:
+ DC+: Nối với nguồn điện từ 9 – 40VDC
+ DC- : Điện áp (-) âm của nguồn
+ A+ và A -: Nối vào cặp cuộn dây của động cơ bước
+ B+ và B- : Nối với cặp cuộn dây còn lại của động cơ
+ PUL+: Tín hiệu cấp xung điều khiển tốc độ (+5V)
+ PUL-: Tín hiệu cấp xung điều khiển tốc độ (-)
+ DIR+: Tín hiệu cấp xung đảo chiều (+5V)
+ DIR-: Tín hiệu cấp xung đảo chiều (-)
+ ENA+ và ENA -: khi cấp tín hiệu cho cặp này động cơ sẽ không có lực momen giữ và quay nữa
+ Có thể đấu tín hiệu dương (+) chung hoặc tín hiệu âm (-) chung
Bảng 2.1: Cài đặt cường độ dòng điện
Hình 2.7: Cách kết nối driver với động cơ Step Motor
Micro Pulse/rev SW1 SW2 SW3
Bảng 2.2: Cài đặt vi bước cho driver
Sử dụng nút nhấn DS-213 1 trạng thái, không giữ để thiết lập và điều khiển động cơ bước
+ Công suất làm việc: 125VAC 2A
2.2.4 Nguồn tổ ong Để cung cấp nguồn điện cho mạch hoạt động ổn định, ta sử dụng nguồn tổ ong 12v 10A
+ Tần số hoạt động: 47 ~ 63HZ
+ Điều chỉnh điện áp (Đầy tải) ≤ 0.3%
+ Bảo vệ quá tải 105% —- 150% công suất định mức, phục hồi tự động + Chức năng bảo vệ ngắn mạch tự động
+ Bảo vệ quá áp 105% —- 150% điện áp định mức
Màn hình LCD2004 màu xanh dương có khả năng hiển thị 4 dòng, mỗi dòng chứa 20 ký tự Với độ bền cao và tính phổ biến, màn hình này là lựa chọn lý tưởng cho người mới học và thực hiện dự án, đi kèm với nhiều mã mẫu dễ sử dụng.
+ Điện áp hoạt động là 5 V
+ Chữ đen, nền xanh dương
+ Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với Breadboard
+ Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết nối, đi dây điện
+ Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ sáng để sử dụng ít điện năng hơn
+ Có thể được điều khiển với 6 dây tín hiệu
+ Có bộ ký tự được xây dựng hổ trợ tiếng Anh và tiếng Nhật, xem thêm HD44780 datasheet để biết thêm chi tiết
Bảng 2 3: Mô tả các chân của màn hình LCD 2004
Tổng quan về module LCD I2C PCF8574
Module I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD 16×2, LCD 20×4, …), hầu hết các loại LCD character hiện nay
Module PCF8574 cũng đươc thiết kế để hàn một cách nhanh chóng vào các loại LCD16x2, 20×4… Khiến việc đấu nối trở nên dễ dàng hơn rất nhiều
+ Điện áp hoạt động: 2.5-6V DC
+ Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780)
+ Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2)
+ Tích hợp Jump chốt để bật/tắt đèn nền LCD
+ Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD.
Để kết nối LCD với vi điều khiển, chỉ cần sử dụng các chân SDA và SCL cùng với hai đường nguồn Cung cấp điện áp 5V cho module sẽ giúp LCD hiển thị sáng rõ hơn.
Hình 2.12:Cách kết nối LCD với module I2C
Thanh vitme có độ chính xác cao với chi phí hợp lý
+ Chất liệu trục vitme: thép không gỉ
+ Chất liệu đai ốc: đồng
2.2.7 Thanh trượt tròn và gối đỡ
Chất liệu trục: Thép không gỉ, mạ crom
Chất liệu gối đỡ: Hợp kim nhôm
Hình 2.14: Thanh trượt tròn và gối đỡ
Kiểm tra thiết bị chạy đúng theo yêu cầu hay không
Phần mềm hỗ trợ lập trình
STM32CubeMX là công cụ hỗ trợ cấu hình và tạo mã cho MCU STM32, giúp lập trình viên dễ dàng thực hiện các tác vụ cấu hình và nâng cấp thông qua giao diện đồ họa Điều này không chỉ đơn giản hóa quá trình lập trình trên STM32 mà còn rút ngắn thời gian nghiên cứu và phát triển.
Hình 2.16: Phần mềm Stm32CubeMx
Hiện nay, có nhiều trình biên dịch ngôn ngữ C cho 8051 như Mikro C, IAR, SDCC và Reads 51 Trong số đó, Vision, hay còn gọi là Keil C, là môi trường phát triển tích hợp (IDE) của công ty Keil Software, bao gồm trình soạn thảo ngôn ngữ C, trình biên dịch và công cụ debug.
Keil C là môi trường phát triển khá mạnh và được sử dụng rộng rãi hiện nay
Nó hỗ trợ ta viết chương trình cho các chip vi điều khiển lõi 8051 và ARM của tất cả các hãng trên thế giới.
Hình 2.17: Phần mềm KeilC Version5.
THIẾT KẾ VÀ GIẢI QUYẾT BÀI TOÁN
Thiết kế
Thiết kế và thi công bộ điều khiển vị trí cho phép người dùng nhập độ dài móng muốn di chuyển thông qua nút nhấn, đồng thời hiển thị kết quả thông tin lên màn hình LCD.
Vi điều khiển STM32 sẽ nhận tín hiệu số từ nút nhấn, xử lý và hiển thị trạng thái trên màn hình LCD Người dùng có thể nhập khoảng cách mong muốn (giới hạn 300mm) thông qua nút nhấn, và vi điều khiển sẽ xuất tín hiệu cho động cơ bước quay đúng khoảng cách cần di chuyển.
Dựa vào số lượng thiết bị, ta sẽ cấu hình số ngõ vào ngõ ra để phù hợp với các thiết bị ngoại vi
Bảng 3.1: Cấu hình IN-OUT cho vi điều khiển
Ta có sơ đồ nối chân giữa vi điều khiển và cá thiết bị ngoại vi như sau:
PORTA đọc tín hiệu digital từ Button :
+ PA1, PA2, PA3 – 3 nút nhấn MODE , START, RESET
+ Sử dụng điện trở kéo xuống
3.1.2 Sơ đồ kết nối, mạch in và mạch thực tế
Hình 3.1: Sơ đồ kết nối
Hình 3.2: Sơ đồ mạch in
Giải quyết bài toán
Hình 3.4: Sơ đồ giải thuật.
Hình 3.5: Sơ đồ giải thuật chi tiết
3.2.2 Các bước thực hiện việc cấu hình và code
Đầu tiên, ta mở phần mềm STM32CubeMxleen, mở một Project mới, chọn dòng chip STM32F103C8
Tiếp theo ta cấu hình các cổng IN/OUT, RCC:
Sau đó đặt tên dự án, chọn thư mục lưu và chọn phiên bản KeilC, cuối cùng nhấn Generate Code để sinh code
Hình 3.8: Thông tin dự án và sinh code
- Tiến hành cài đặt cho driver TB6600:
Micro Pulse/rev SW1 SW2 SW3
- Khai báo thư viện của vi điều khiển đang dùng
- Khai báo thư viện dùng cho LCD uint8_t trangthaihientai = 0; // trang thai cai dat State starup
*/ int dx = 0, curX = 0, steps =0, maxSpeeds = 3200; char cdx[3], ccurX[3], cmaxSpeeds[3]; int8_t xungtruocdo =0, xunghientai = 0, xungxuatra =0;
The I2C_HandleTypeDef hi2c1 is initialized alongside the SystemClock_Config function, while static functions MX_GPIO_Init and MX_I2C1_Init are set up to configure GPIO and I2C peripherals The setlcd function is responsible for controlling the LCD display, and the updateState function updates the system state based on the provided parameter Additionally, the docnutnhan function retrieves input values, and the dichuyen function manages movement operations within the system.
- Khai báo vi bước stepper
- Khai báo các biến đầu vào int main(void)
MX_I2C1_Init(); lcd_init(); lcd_put_cur(0,0); lcd_send_string("**NHOM 14**"); lcd_put_cur(0,1); lcd_send_string("Linear");
- Xuất tín hiệu ra màn hình LCD
- Hiển thị các thông số cài đặt lên màn hình LCD lcd_clear(); while (1)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, 1); // en pin driver lcd_put_cur(1,11); lcd_send_string("RESET"); // bao o trang thai reset if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10) ==0)
{ while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_10)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, 0); // giu vi tri stepper lcd_put_cur(1,11); lcd_send_string(" "); lcd_clear();
- Cập nhật trạng thái driver
- LCD hiển thị case 1: //trang thai home lcd_put_cur(1,11); lcd_send_string(" WAIL"); dx = docnutnhan(); if(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11) == 0)
{ while(HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_11)
== 0); lcd_put_cur(1,11); lcd_send_string(" RUN"); setlcd(); dichuyen();
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_8, 1); // khoi dong driver
Lcd_write_string("RUN"); xunghientai = kcnhapvao * 200 / 8; //8mm buoc ren vitme, 200 so xung / 1 vong if( xunghientai > xungtruocdo)
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_4, 1); //
QUAY THUAN xungxuatra = xunghientai - xungtruocdo;
- Hàm điều khiển động cơ khởi động
- Điều khiển động cơ quay thuận for(uint8_t i =0; i