Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-23 15:15
Xin chào một lần nữa các bạn:) Vì vậy, trong dự án này, chúng tôi sẽ điều khiển một động cơ servo với STM32F4 ARM MCU. Trong trường hợp của tôi, tôi sẽ sử dụng bảng khám phá, nhưng nếu bạn nắm được ý chính của vấn đề, thì bạn có thể áp dụng nó cho mọi MCU. Vì thế. Bắt đầu nào:)
Bước 1: Yêu cầu phần cứng và phần mềm
Về phần cứng, chúng tôi sẽ cần:
- MCU trong trường hợp của tôi là bảng khám phá STM32f4
- Một động cơ servo thông thường, như SG90 hoặc bất kỳ động cơ nào khác
Về phần mềm, chúng tôi sẽ cần:
- STM32CubeMX
- Keil uVision
Nếu bạn có tất cả những điều này, hãy chuyển sang bước tiếp theo:)
Bước 2: Cấu hình STM32CubeMX
Như bạn đã biết, để điều khiển động cơ servo, chúng ta cần tín hiệu PWM. Các yêu cầu về tín hiệu PWM là như vậy:
- Khoảng thời gian PWM phải là 20 mS
- Đúng giờ phải từ 0,5 mS đến 2,5 mS. Khi đúng thời gian là 0,5 mS, thì servo sẽ quay 0 độ, 1,5 mS cho 90 độ và 2,5 mS cho 180 độ.
Vì vậy, chúng ta cần cấu hình PWM và cho mục đích đó, chúng ta sẽ sử dụng Timer1.
- Đầu tiên, chọn TIM1 từ phần Bộ hẹn giờ. Bước này
-
Sau đó, từ phần Chế độ
- Chọn đồng hồ bên trong Bước này
- PWM thế hệ CH1 Bước này
-
Sau đó, từ phần Cấu hình
- Đặt Prescaler thành 160 Bước này
- Đặt Khoảng thời gian Bộ đếm thành 2000 Bước này
- Đặt Pulse thành 50 Bước này
- Ngoài ra, từ Cấu hình đồng hồ, đặt đồng hồ Bộ hẹn giờ APB1 thành 16MHz. Bước này
Bây giờ, hãy nói một chút về bước này:
Tần số của đồng hồ Bộ hẹn giờ APB1 của chúng tôi là 16MHz. Vì vậy, nó có nghĩa là cần 16, 000, 000 tick để có được 1 giây. Tuy nhiên, chúng tôi đặt bộ đếm trước của mình thành 160. Điều đó có nghĩa là, chúng tôi chia tần suất của mình cho số đó và giảm số lượng tích tắc xuống 100, 000. Vì vậy, trong 1 giây, chúng ta cần 100.000 tích tắc. Tuy nhiên, chúng tôi cần 20 triệu giai đoạn PWM như chúng tôi đã nêu trước đây. Vì vậy, dựa trên phép toán đơn giản, chúng ta cần 2000 tích tắc cho 20mS. Vì vậy, bằng cách đặt Khoảng thời gian bộ đếm là 2000, chúng tôi xác định khoảng thời gian của tín hiệu PWM là 20mS. Bây giờ chúng ta cần xác định số đánh dấu cho thời gian Bật từ 0,5mS đến 2,5mS. Chúng ta có thể nhận được phương trình này từ một phép toán đơn giản và nó là:
On_Time = (Số lần đánh dấu / 100). Hãy nhớ rằng đây là thời gian bật thay đổi góc của động cơ servo. Vì vậy, hình ảnh dưới đây tôi tóm tắt bước này. Nếu bạn có bất kỳ câu hỏi nào, hãy viết trong phần bình luận và tôi sẽ trả lời nhanh nhất có thể.
Hình ảnh tính toán
Sau khi thực hiện tất cả những điều này, hãy tạo mã:)
Bước 3: Keil UVision Coding
Vì vậy, trước tiên chúng ta hãy xác định xem chúng ta muốn làm gì? Chúng tôi muốn, viết một hàm chấp nhận mức độ và ghi nó vào servo. Vì vậy, làm thế nào chúng tôi sẽ làm điều đó? Như chúng ta đã nói trước đây, để thay đổi góc, chúng ta cần thay đổi thời gian. Các góc của chúng ta thay đổi giữa [0, 180] và số lượng bọ ve của chúng ta, xác định thời gian thay đổi giữa [50, 250]. Vì vậy, chúng ta cần một chức năng ánh xạ ánh xạ góc đã cho với phạm vi số lượng bọ ve. Ví dụ: đối với tick 0 độ 50, tick 180 độ 250, v.v. Vì vậy, hãy viết hàm ánh xạ của chúng ta:
int map (int st1, int fn1, int st2, int fn2, int value) {return (1.0 * (value-st1)) / ((fn1-st1) * 1.0) * (fn2-st2) + st2; }
Đây là chức năng lập bản đồ của chúng tôi. Bạn có quan tâm nó được bắt nguồn như thế nào không? Sau đó, hãy đọc cái đó. Vì vậy, chúng tôi lấy phạm vi của mình và giá trị mà chúng tôi muốn ánh xạ.
Bây giờ, chúng ta hãy viết một hàm chấp nhận góc và ánh xạ nó tới phạm vi tick:
void servo_write (int angle) {htim1. Instance-> CCR1 = map (0, 180, 50, 250, angle); }
Như bạn có thể thấy, mã này chấp nhận góc và ánh xạ nó với phạm vi số lượng bọ ve. Sau đó, số lượng tích tắc được cấp cho thanh ghi CCR1 kiểm soát thời gian và góc độ.
Tuy nhiên, để tất cả những thứ này hoạt động, trước tiên chúng ta bắt đầu pwm có thể được thực hiện chỉ bằng một dòng mã:
HAL_TIM_PWM_Start (& htim1, TIM_CHANNEL_1);
Vì vậy, chúng ta có một hàm chấp nhận góc và ghi nó vào servo. Hãy kiểm tra nó và viết hàm quét của chúng tôi rất dễ dàng:
void servo_sweep (void) {for (int i = 0; i <= 180; i ++) {servo_write (i); HAL_Delay (10); } for (int i = 180; i> = 0; i--) {servo_write (i); HAL_Delay (10); }}
Vì vậy, nó chỉ đếm lên đến 180 và sau đó xuống 0 và ghi các giá trị này vào servo:) Vì vậy, chúng ta hãy xem kết quả!
Bước 4: Kết quả:)
Vì vậy, đây là kết thúc. Nếu bạn có bất kỳ câu hỏi xin vui lòng hỏi. Tôi sẽ rất vui khi trả lời chúng. Xin chân thành cảm ơn các bạn đã đọc và hy vọng sẽ gặp lại các bạn trong những dự án tiếp theo:)
Đề xuất:
Động cơ bước Điều khiển động cơ bước Không cần vi điều khiển !: 6 bước
Động cơ bước Điều khiển động cơ bước Không cần vi điều khiển !: Trong phần Hướng dẫn nhanh này, chúng tôi sẽ tạo một bộ điều khiển động cơ bước đơn giản bằng cách sử dụng động cơ bước. Dự án này không yêu cầu mạch phức tạp hoặc vi điều khiển. Vì vậy, không cần thêm ado, chúng ta hãy bắt đầu
Động cơ bước Điều khiển động cơ bước Động cơ bước - Động cơ bước như một bộ mã hóa quay: 11 bước (có hình ảnh)
Động cơ bước Điều khiển động cơ bước Động cơ bước | Động cơ bước như một bộ mã hóa quay: Có một vài động cơ bước nằm xung quanh và muốn làm điều gì đó? Trong Có thể hướng dẫn này, hãy sử dụng động cơ bước làm bộ mã hóa quay để điều khiển vị trí của động cơ bước khác bằng vi điều khiển Arduino. Vì vậy, không cần phải quảng cáo thêm, chúng ta hãy
ESP8266 RGB LED STRIP Điều khiển WIFI - NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi - Điều khiển điện thoại thông minh RGB LED STRIP: 4 bước
ESP8266 RGB LED STRIP Điều khiển WIFI | NODEMCU làm điều khiển từ xa hồng ngoại cho dải đèn Led được điều khiển qua Wi-Fi | Điều khiển bằng điện thoại thông minh RGB LED STRIP: Xin chào các bạn trong hướng dẫn này, chúng ta sẽ học cách sử dụng gật đầu hoặc esp8266 làm điều khiển từ xa IR để điều khiển dải LED RGB và Nodemcu sẽ được điều khiển bằng điện thoại thông minh qua wifi. Vì vậy, về cơ bản bạn có thể điều khiển DÂY CHUYỀN LED RGB bằng điện thoại thông minh của mình
Các dự án thú vị với Bộ siêu khởi động Elegoo Uno R3 - Điều khiển cần điều khiển cho Động cơ DC: 4 bước
Những dự án thú vị với Elegoo Uno R3 Super Start Kit - Điều khiển cần điều khiển cho động cơ DC: Trong Tài liệu hướng dẫn này, tôi sẽ cố gắng điều khiển hướng và tốc độ của động cơ DC bằng cần điều khiển với sự trợ giúp của Arduino, sử dụng các thành phần từ Elegoo Uno R3 Super Start Kit hiện có trên Amazon.com
Điều khiển các thiết bị điện của bạn bằng Điều khiển từ xa Tv (Điều khiển từ xa) với Màn hình nhiệt độ và độ ẩm: 9 bước
Điều khiển thiết bị điện của bạn bằng Điều khiển từ xa Tv (Điều khiển từ xa) Có Hiển thị nhiệt độ và độ ẩm: xin chào, tôi là Abhay và đây là blog đầu tiên của tôi về Các thiết bị điện và hôm nay tôi sẽ hướng dẫn bạn cách điều khiển các thiết bị điện bằng điều khiển từ xa bằng cách xây dựng cái này dự án đơn giản. cảm ơn atl lab đã hỗ trợ và cung cấp tài liệu