Nghiên cứu Khoa học
Xây dựng hệ thống Điều khiển động cơ dùng FPGA
1. Sơ đồ tổng quát
Hình 1: Sơ đồ tổng quát hệ thống
Sơ đồ tổng quát bao gồm những thành phần:
Hình 2: Chi tiết thiết kế
2. Chi tiết thiết kế hệ thống
2.1. NIOS II Processor – nios2_qsys_0
Trong thiết kế này, không cần nhiều chức năng nên chọn lõi NIOS II/e.
Hình 3: Chọn phiên bản NIOS II/e
Với phiên bản NIOS II/e này chúng ta có 1 bộ vi xử lý 32bit. Với Jtag debug Module là Level 1. Gồm các thành phần tín hiệu cơ bản sau:
o Clk: Clock Input
o Reset_n: Reset Input
o Data_master: Avalon Memory Mapped Master
o Intruction_master: Avalon Memory Mapped Master
o Jtag_debug_module_reset: Reset Output
o Jtag_debug_module: Avalon Memory Mapped Slave
o Custom_intruction_master: Custom Intruction Master
2.2. SRAM On Chip – onchip_memory2_0
Hình 4: On-chip memory
Tạo ra bộ nhớ Ram on Chip với tổng dung lượng có phạm vi từ 0 cho đến 67108864 bytes, tùy vào hệ thống cần ít hay nhiều ô nhớ.
2.3. Tạo các port I/O cho NIOS II
Tùy thuộc vào project số lượng port I/O sẽ thay đổi, trong project này ta sẽ cần 3 port I/O: 1 port để điều khiển motor, 1 port điểu khiển led, 1 port để nhận giá trị từ các switch.
Trong đó:
Nhiệm vụ của các port được diễn tả như sau:
- Với 4bits đầu ra chân GPIO ta làm tín hiệu đầu vào cho Driver L298N để điều khiển động cơ. Với 16bits đầu vào được gán với các nút trượt Switch để điều khiển động cơ theo ý muốn như khởi động động cơ, dừng động cơ, thay đổi tốc độ, hướng quay...Và cuối cùng là 4bits đầu ra gán với LED xanh để theo dõi tín hiệu của các chân GPIO. Trước mắt, hệ thống đã đầy đủ những tính năng để điều khiển động cơ bản.
Sau đây là chương trình gán chân cơ bản của hệ thống:
#include<system.h>
#include<io.h>
#include<stdio.h>
#include"altera_avalon_pio_regs.h"
#define LEGD_0 0x40;
#define LEGD_1 0x2;
#define LEGD_2 0x4;
#define LEGD_3 0x8;
//hàm gán chân switch
void GanChanSwich (){
//gán biến tốc độ cho switch 2,3,4
speed = 0x1c & IORD_ALTERA_AVALON_PIO_DATA(PIO_1_BASE);
//gán biến bắt đầu cho switch 5
start = 0x20 & IORD_ALTERA_AVALON_PIO_DATA(PIO_1_BASE);
//gán biến hướng quay cho switch 6
dir = 0x40 & IORD_ALTERA_AVALON_PIO_DATA(PIO_1_BASE);
}
// hàm đọc chân GPIO
void GhiTrangThaiGPIO(){
//ghi trạng thái lên địa chỉ LED tương ứng với b'0101
IOWR_ALTERA_AVALON_PIO_DATA(PIO_OUT_LED_BASE, 0x5);
//ghi trạng thái lên địa chỉ GPIO tương ứng với b'0101
IOWR_ALTERA_AVALON_PIO_DATA(PIO_2_BASE, 0x5);
}