FPGA Cyclone IV DueProLogic điều khiển Động cơ Servo: 4 bước
FPGA Cyclone IV DueProLogic điều khiển Động cơ Servo: 4 bước
Anonim
FPGA Cyclone IV DueProLogic điều khiển động cơ Servo
FPGA Cyclone IV DueProLogic điều khiển động cơ Servo

Trong hướng dẫn này, chúng ta sẽ viết mã Verilog để điều khiển động cơ servo. Servo SG-90 được sản xuất bởi Waveshare. Khi bạn mua động cơ servo, bạn có thể nhận được một biểu dữ liệu liệt kê điện áp hoạt động, mô-men xoắn cực đại và Điều chế độ rộng xung (PWM) được đề xuất… vv. Tuy nhiên, FPGA DuePrologic cung cấp điện áp đầu vào là 3,3V trong đó điện áp hoạt động của servo SG-90 là 5V - 7V. Trong trường hợp thiếu điện, tôi sẽ liệt kê PWM đã hiệu chỉnh của mình để quay động cơ servo thành công.

Nhiệm vụ của chúng tôi: Động cơ servo được quay qua lại với khoảng thời gian 5 giây

Menu đầy đủ:

Bước 1: Xây dựng vi mạch điện tử

Xây dựng vi mạch điện tử
Xây dựng vi mạch điện tử

Bước 2: Thiết lập Công cụ lập kế hoạch ghim

Thiết lập công cụ lập kế hoạch ghim
Thiết lập công cụ lập kế hoạch ghim

Nhấp vào "Bắt đầu phân tích phân công I / O" để kiểm tra xem công cụ lập kế hoạch ghim có được đặt chính xác hay không. Nếu không, bạn phải tự nhập tất cả các tên cổng.

Bước 3: Mã Verilog

Chúng tôi tạo bộ hẹn giờ "servo_count". Khi "servo_A" ở mức CAO, PWM là 1,5ms và do đó servo nằm ở 120 độ. Ngược lại, khi "servo_A" ở mức THẤP, PWM là 0,15ms và do đó servo được giữ nguyên ở 0 độ.

gán XIO_2 [3] = servo_pulse; // cho V '

reg [31: 0] servo_count;

bắt đầu ban đầu

servo_count <= 32'b0;

servo_A <= 1'b0;

kết thúc

always @ (posedge CLK_66)

bắt đầu

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Chu kỳ xung nhịp 66MHz, 1 / 66M * 400000000 ~ 5 giây

bắt đầu

servo_A <=! servo_A;

servo_count <= 32'b0;

kết thúc

kết thúc

reg [31: 0] ex_auto;

bắt đầu ban đầu

ex_auto <= 32'b0;

servo_auto <= 1'b0;

kết thúc

always @ (posedge CLK_66)

bắt đầu

if (servo_A == 1'b1)

bắt đầu

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 100000) // Chu kỳ xung nhịp 66MHz, PWM này là ~ 1,5ms, servo quay đến 120 độ

bắt đầu

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

kết thúc

kết thúc

if (servo_A == 1'b0)

bắt đầu

ex_auto <= ex_auto + 1'b1;

if (ex_auto> 10000) // Chu kỳ xung nhịp 66MHz, PWM này là ~ 0,15ms, servo xoay đến 0 độ

bắt đầu

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

kết thúc

kết thúc

kết thúc

Bước 4: Tải lên mã Verilog

Image
Image

Nhấp vào "Bắt đầu biên dịch". Nếu không có thông báo lỗi nào được hiển thị, hãy chuyển đến "Lập trình viên" để hoàn tất thiết lập phần cứng. Hãy nhớ cập nhật tệp pof trong "Thay đổi tệp" nếu cần. Nhấp vào "Bắt đầu" để tải lên mã.

Rốt cuộc, bạn sẽ thấy rằng động cơ servo được quay theo chu kỳ.