FPGA циклон IV DueProLogic хяналт Servo мотор: 4 алхам
FPGA циклон IV DueProLogic хяналт Servo мотор: 4 алхам
Anonim
FPGA циклон IV DueProLogic Servo моторыг хянадаг
FPGA циклон IV DueProLogic Servo моторыг хянадаг

Энэхүү гарын авлагад бид servo моторыг хянахын тулд Verilog кодыг бичих гэж байна. SG-90 servo-ийг Waveshare үйлдвэрлэдэг. Та servo мотор худалдаж авахдаа ажлын хүчдэл, хамгийн их эргэлт, санал болгож буй импульсийн өргөн модуляци (PWM) гэх мэт мэдээллийг агуулсан хүснэгтийг хүлээн авах боломжтой. Гэсэн хэдий ч FPGA DuePrologic нь 3.3V оролтын хүчдэлийг өгдөг бөгөөд SG -90 servo -ийн ажиллах хүчдэл 5V - 7V байна. Цахилгаан эрчим хүчний дутагдалтай үед би servo моторыг амжилттай эргүүлэхийн тулд тохируулагдсан ХОУХ -ийг жагсаах болно.

Бидний даалгавар: servo моторыг 5 секундын турш урагш хойш эргүүлнэ

Бүтэн цэс:

Алхам 1: Цахилгаан хэлхээг бий болгох

Цахим хэлхээг бий болгох
Цахим хэлхээг бий болгох

Алхам 2: Pin Planner -ийг тохируулна уу

Pin Planner -ийг тохируулах
Pin Planner -ийг тохируулах

Зүү төлөвлөгч зөв тохируулагдсан эсэхийг шалгахын тулд "I/O даалгаврын шинжилгээг эхлүүлэх" дээр дарна уу. Үгүй бол та бүх порт нэрийг дангаар нь оруулах ёстой.

Алхам 3: Verilog код

Бид "servo_count" таймер үүсгэдэг. "Servo_A" нь өндөр байх үед ХОУХ нь 1.5 мс байдаг тул servo нь 120 хэмд байрладаг. Үүний эсрэгээр "servo_A" LOW байхад ХОУХ нь 0.15 мс байдаг тул servo 0 хэмд хадгалагддаг.

оноох XIO_2 [3] = servo_pulse; // V -ийн хувьд

reg [31: 0] servo_count;

анхны эхлэл

servo_count <= 32'b0;

servo_A <= 1'b0;

Төгсгөл

үргэлж @(зурагт CLK_66)

Эхлэх

servo_count <= servo_count + 1'b1;

if (servo_count> 400000000) // Цагийн цикл 66MHz, 1/66M * 400000000 ~ 5 секунд

Эхлэх

servo_A <=! servo_A;

servo_count <= 32'b0;

Төгсгөл

Төгсгөл

рег [31: 0] ex_auto;

анхны эхлэл

ex_auto <= 32'b0;

servo_auto <= 1'b0;

Төгсгөл

үргэлж @(зурагт CLK_66)

Эхлэх

хэрэв (servo_A == 1'b1)

Эхлэх

ex_auto <= ex_auto + 1'b1;

хэрэв (ex_auto> 100000) // Цагийн цикл 66 МГц бол энэхүү ХОУХ нь ~ 1.5 мс, servo нь 120 градус руу эргэдэг

Эхлэх

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

Төгсгөл

Төгсгөл

хэрэв (servo_A == 1'b0)

Эхлэх

ex_auto <= ex_auto + 1'b1;

хэрэв (ex_auto> 10000) // Цагийн цикл 66 МГц бол энэ ХОУХ нь ~ 0.15 мс, servo нь 0 градус руу эргэдэг

Эхлэх

servo_auto <=! servo_auto;

ex_auto <= 32'b0;

Төгсгөл

Төгсгөл

Төгсгөл

Алхам 4: Verilog кодыг байршуулна уу

Image
Image

"Эмхэтгэлийг эхлүүлэх" дээр дарна уу. Хэрэв алдааны мэдэгдэл гарч ирэхгүй бол "Программист" руу очоод тоног төхөөрөмжийн тохиргоог дуусгана уу. Шаардлагатай бол "Файлыг өөрчлөх" хэсэгт pof файлыг шинэчлэхээ мартуузай. Кодыг оруулахын тулд "Эхлүүлэх" дээр дарна уу.

Эцсийн эцэст, servo моторыг үе үе эргүүлж байгааг харах ёстой.

Зөвлөмж болгож буй: