Trong hệ điều hành Linux, chương trình ứng dụng của ta chạy ở lớp User, không thể trực tiếp can thiệp điều khiển phần cứng ở lớp Device. Để điều khiển phần cứng cần một chương trình trung gian gọi là Driver. Chương trình ứng dụng sẽ giao tiếp với Driver qua hệ thống File System, và Driver sẽ truy xuất điều khiển phần cứng.
Driver cho GPIO của Linux cung cấp phương pháp giao tiếp thông qua các file và thư mục trong “/sys/class/gpio”.
Trong console terminal của Micro2440, gõ lệnh: #cd /sys/class/gpio
/sys/class/gpio# ls
Lệnh “ls” sẽ liệt kê các file và thư mục trong /sys/class/gpio export gpiochip192 gpiochip96 gpiochip0 gpiochip224 unexport gpiochip128 gpiochip32
gpiochip160 gpiochip64
Như vậy Driver GPIO trong Linux Kernel của Micro2440 cho phép ta truy xuất các port GPIO thông qua: gpiochip0, gpiochip32, gpiochip64, gpiochip96, gpiochip128, gpiochip160, gpiochip192, gpiochip224. Truy xuất file “export” và “unexport” bắt đầu và kết thúc thao tác với GPIO.
Để biết các gpiochip là tương ứng với port GPIO nào, ví dụ với gpiochip160, ta dùng lệnh:
/sys/class/gpio# cat gpiochip160/label
Cho kết quả: “GPIOF”. Nghĩa là gpiochip160 điều khiển port F của S3C2440A. Mỗi chân GPIO được đánh số thứ tự theo quy tắc: số của gpiochip điều khiển tương ứng + số thứ tự của GPIO đó trong port. Ví dụ: chân GPIO thứ 3trong port F (GPIO F.2) sẽ có số thứ tự: 160 (số của gpiochip port F) + 2 (số thứ tự của GPIO F.2 trong port F) = 162.
Để bắt đầu truy xuất chân GPIO F.2, ta ghi giá trị 162 vào file “export”. Sau đó, thư mục gpio162 sẽ được tạo ra, trong đó chứa các file phục vụ truy xuất chân GPIO F.2. Ta cần quan tâm file “direction” và “value”.
Để thiết lâp GPIO là input hay output, ta ghi “in”, “out”, “high”, “low” vào “direction”:
• “out” hay “low” cho cùng kết quả là GPIO sẽ được thiết lập thành ngõ ouput với mức điện áp ban đầu ở mức thấp (0).
Luận án tốt nghiệp Chương 6: Lập trình điều khiển Robot trên Micro2440 • “high” sẽ thiết lập output GPIO với điện áp ban đầu ở mức cao (1).
• “in” sẽ thiết lập chân GPIO tương ứng thành ngõ vào input.
Sau khi thiết lập GPIO thành ngõ ra output, ta có thể đặt giá trị ngõ ra cao hay thấp bằng cách ghi giá trị “1” hay “0” vào file “value”.
Đọc ngõ vào input bằng cách đọc giá trị trong file “value”
Trong chương trình Ball Tracking, đoạn code sau khởi tạo ouput cho GPIO F.0:
Ta cần 6 chân GPIO, khởi tạo tương tự cho GPIO F.1, F.2, F.3, F.4, F.5. Output mức cao cho chân GPIO:
Output mức thấp cho GPIO:
Với tham số fname giữ chuỗi đường dẫn và tên của file “value” tương ứng với chân GPIO muốn điều khiển.
Luận án tốt nghiệp Chương 6: Lập trình điều khiển Robot trên Micro2440 6.6.3 Tạo xung PWM :
Để điều khiển 1 động cơ ta cần 2 ngõ ra GPIO. Trong quá trình hoạt động, 1 ngõ ra sẽ được giữ ở mức thấp, ngõ ra còn lại xuất xung PWM điều khiển vận tốc động cơ. Để đảo chiều quay động cơ, ta đổi vai trò 2 chân GPIO. Mô tả chi tiết ở CHƯƠNG 4: mạch công suất động cơ.
Ta cần 6 GPIO để điều khiển độc lập 3 động cơ, trong đó cần 3 ngõ ra PWM. Để đơn giản, ta tạo xung PWM với độ phân giải 10 bước bằng 10 bước điều khiển giá trị output chân GPIO trong 1 chu kỳ.
Trong chương trình Ball Tracking:
- Dùng mảng PWM_mask[] giữ 3 chuỗi đường dẫn đến file “value” của 3 chân GPIO cần xuất xung PWM. Chiều quay của 3 động cơ sẽ quyết định chân GPIO nào cần xuất xung PWM.
- Mảng PWM_speed[] giữ giá trị vận tốc mong muốn cho 3 động cơ (giá trị trong khoảng từ 0 đến 10)
Đoạn chương trình tạo xung PWM:
Xung PWM tạo ra với độ phân giải 10 bước, tần số 100Hz. 6.6.4 Phân luồng cấu trúc chương trình:
Ball tracking cần làm 2 công việc đồng thời: xử lý ảnh và xuất xung điều khiển động cơ. Vì vậy dùng thư viện pthread, ta tạo 2 luồng (thread) hoạt động song song:
• Thread 1: nhận dạng quả bóng và tính toán giá trị vận tốc và chiều quay cho 3 động cơ. Từ chiều quay của 3 động cơ, xác định 3 chân GPIO phải xuất PWM và đưa giá trị tương ứng vào mảng PWM_mask[] định bằng cách đưa vào mảng PWM_speed[]. Quá trình này lặp lại liên tục.
• Thread 2: xuất xung PWM từ mảng giá trị PWM_speed[]. Đây cũng là một vòng lặp liên tục.
Luận án tốt nghiệp Chương 6: Lập trình điều khiển Robot trên Micro2440 Thư viện pthread là một thư viện chuẩn trong C/C++. Nó cho phép tạo và quản lý nhiều luồng xử lý trong 1 chương trình, cho ta hiệu quả gần như nhiều chương trình cùng được chạy và xử lý một lúc.
Cấu trúc chương trình Ball Tracking:
6.6.5 Biên dịch và chạy chương trình:
Chương trình được viết và lưu lại vào file “BallTracking.cpp”.
Để biên dịch chương trình, ta tạo file “Makefile” trong cùng thư mục với “BallTracking.cpp” với nội dung:
BOARDCC=/user/local/arm/4.3.2/bin/arm-linux-gcc BOARDCXX=/user/local/arm/4.3.2/bin/arm-linux-g++ BOARDFLAGS=-o2 -I/Micro2440-OpenCV/include/opencv -L/Micro2440-OpenCV/lib -lcv -lhighgui -lcxcore
-lml -lcvaux -lrt -lpthread -ldl -lz -lpng12 -ljpeg target: BallTracking.cpp
Luận án tốt nghiệp Chương 6: Lập trình điều khiển Robot trên Micro2440 default: target
Trong đó:
• “/user/local/arm/4.3.2/bin/” là đường dẫn đến Cross-compiler.
• “/Micro2440-OpenCV/” là đường dẫn đến thư viện OpenCV đã biên dịch. Biên dịch BallTracking: di chuyển vào thư mục chứa BallTracking.cpp và:
# make
File “BallTracking_app” sẽ được tạo ra trong cùng thư mục. Đây là file thực thi để chạy trên board Micro2440. Ta chép file này lên board và cấp quyền thực thi cho file:
# chmod +x BallTracking_app
Kết nối USB webcam vào cổng USB host trên Micro2440 và chạy ứng dụng: # ./BallTracking_app
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY CHƯƠNG 7
Mạch nhúng AT91SAM9260-SMISY
7.1 Tổng quan về mạch nhúng AT91SAM9260-SMISY:
7.1.1 Mục đích thiết kế mạch AT91SAM9260-SMISY:
Trong đề tài này, mạch AT91SAM9260-SMISY được thiết kế nhằm mục đích thay thế mạch Micro2440 làm vai trò bộ điều khiển trung tâm cho mô hình Robot tự hành. Mạch thiết kế được lấy tên là AT91SAM9260-SMISY.
Việc thiết kế lại mạch điều khiển thay thế cho mạch Micro2440 nhằm những mục đích sau:
• Thiết kế tối ưu cho ứng dụng cụ thể: điều khiển dẫn đường cho robot tự hành. Việc thiết kế tối ưu nhằm đơn giản hóa trong thi công và hạ giá thành sản phẩm.
• Nắm rõ hơn về cấu trúc và hoạt động của hệ thống nhúng, máy tính nhúng, hệ điều hành nhúng. Tiến đến thực hiện các hệ thống điều khiển Robot khác.
7.1.2 Mạch AT91SAM9260-SMISY:
Mạch AT91SAM9260-SMISY được thiết kế để thay thế cho mạch Micro2440 làm mạch điều khiển cho mô hình Robot tự hành, vì vậy cần mạch cần được thiết kế để có thể chạy với hệ điều hành Embedded Linux.
Nhiệm vụ của AT91SAM9260-SMISY trong mô hình Robot tự hành cũng tương tự như mạch Micro2440: là bộ điều khiển trung tâm cho Robot, nhận tín hiệu từ các cảm biến, xử lý và đưa ra quyết định điều khiển động cơ để robot di chuyển.
Với mục đích tối ưu các chức năng, hạ giá thành bộ điều khiển, và đơn giản hóa việc thi công tại Việt Nam, mạch AT91SAM9260 lược bỏ vài chức năng không cần thiết cho ứng dụng điều khiển Robot so với Micro2440 như: không có màn hình giao diện, không có phần Audio.
Ta thực hiện mạch với các thành phần chính:
o Vi xử lý AT91SAM9260: lõi ARM926EJ-S 32bit, tốc độ tối đa 180MHz.
o Ram: 8MB SDRAM.
o 256MB NAND Flash.
o USB host, USB device.
o SD card slot.
o Cổng giao tiếp RS232.
o Cổng giao tiếp Ethernet 10/100 Base.
o Các chân IO.
Mạch được thiết kế để có thể thi công tại Việt Nam, với những linh kiện dễ tìm thấy trên thị trường, giá thành không quá cao.
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY
7.2 Lựa chọn vi xử lý AT91SAM9260:
Để chạy hệ điều hành Embedded Linux, cần bộ vi xử lý 32bit, tối thiểu 4MB Ram cho kernel Linux, và cần tối thiểu 60MB ROM để chứa Root FileSystem. Vì vậy vi xử lý sử dụng phải có:
• Lõi xử lý 32-bit, tốc độ không quá thấp.
• Hỗ trợ giao tiếp với các bộ nhớ FLASH ngoài hay thẻ nhớ (Storage Card). • Hỗ trợ giao tiếp với RAM ngoài dung lượng lớn như SDRAM, DDRAM. Đồng thời để giảm bớt khó khăn khi thi công tại Việt Nam, ta lựa chọn vi xử lý được lựa chọn nên có kiểu đóng gói (package) thích hợp. Đa số các vi xử lý cao cấp có kiều đóng gói BGA (Ball-Grid Array), QFP (Quad Flat Package), hay LCC (Leadless Chip Carrier). Trong đó kiểu đóng gói BGA với các chân sắp xếp dạng ma trận dưới bụng chip, mạch sử dụng chip BGA cần thiết kế nhiều lớp, hầu như không thể thi công tại Việt Nam.
a) b) c)
Hình 7.1 – Một số kiểu đóng gói vi xử lý.
a) BGA package - b) QFP package - c) LCC package
Ta chọn vi xử lý AT91SAM9260 của hãng ATMEL với kiểu đóng gói 208 chân QFP.
AT91SAM9260 là vi xử lý với lõi ARM9 do hãng ATMEL sản xuất, được thiết kế như bộ xử lý cho hệ thống hoàn chỉnh, thích hợp cho các ứng dụng như Point-Of- Sale, Bar code reader, Ethernet-base IP camera…
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY Các thông số chính:
o 180 MHz ARM926EJ-S™ ARM® Thumb® Processor
- 8 KBytes Data Cache, 8 KBytes Instruction Cache, MMU
o Memories
- 32-bit External Bus Interface supporting 4-bank SDRAM/LPSDR, Static Memories, CompactFlash, SLC NAND Flash with ECC
- Two 4-kbyte internal SRAM, single-cycle access at system speed
- One 32-kbyte internal ROM, embedding bootstrap routine
o Peripherals
- ITU-R BT. 601/656 Image Sensor Interface
- USB Device and USB Host with dedicated On-Chip Transceiver
- 10/100 Mbps Ethernet MAC Controller
- One High Speed Memory Card Host
- Two Master/Slave Serial Peripheral Interfaces
- Two Three-channel 32-bit Timer/Counters
- One Synchronous Serial Controller
- One Two-wire Interface
- Four USARTs
- Two UARTs
- 4-channel 10-bit ADC
o System
- 90 MHz six 32-bit layer AHB Bus Matrix
- 22 Peripheral DMA Channels
- Boot from NAND Flash, SDCard, DataFlash® or serial DataFlash
- Reset Controller with On-Chip Power-on Reset
- Selectable 32,768 Hz Low-Power and 3-20 MHz Main Oscillator
- Internal Low-Power 32 kHz RC Oscillator
- One PLL for the system and one PLL optimized for USB
- Two Programmable External Clock Signals
- Advanced Interrupt Controller and Debug Unit
- Periodic Interval Timer, Watchdog Timer and Real Time Timer
o I/O
- Three 32-bit Parallel Input/Output Controllers
- 96 Programmable I/O Lines Multiplexed with up to Two Peripheral I/Os
o Package
- 217-ball BGA, 0.8 mm pitch
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY Sơ đồ khối:
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY
7.3 Sơ đồ nguyên lý mạch AT91SAM9260-SMISY:
Mạch AT91SAM9260-SMISY được thiết kế như một máy tính nhúng chạy hệ điều hành Embedded Linux với cấu hình:
o Vi xử lý AT91SAM9260: lõi ARM926EJ-S 32bit, tốc độ tối đa 180MHz.
o Ram: 8MB SDRAM.
o 256MB NAND Flash.
o USB host, USB device.
o SD card slot.
o Cổng giao tiếp RS232.
o Cổng giao tiếp Ethernet 10/100 Base.
o Các chân IO.
7.3.1 Khối vi xử lý AT91SAM9260:
Khối vi xử lý gồm các thành phần:
o Vi xử lý AT91SAM9260.
o Thạch anh 18.432MHz, cung cấp xung nhịp clock cho vi điều khiển.
o Thạch anh 32.768KHz, cung cấp xung nhịp cho khổi Realtime Clock trong vi điều khiển.
o Jtag port, debug.
o Các nút nhấn Reset, Wake-up, user button
o User Led.
o Các jumper chọn chế độ hoạt động. Sơ đồ nguyên lý khối vi xử lý:
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY
Hình 7.4 – Khối vi xử lý
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY 7.3.2 SDRAM:
Sử dụng MT48LC4M16A2, là IC SDRAM của hãng MICRON, với các thông số cơ bản:
o Dung lượng: 8 MegaByte (1Meg x 16 x 4banks).
o Data bus 16bits, 133MHz.
o Address bus 12bits.
o Đóng gói: TSOP II - 54 chân.
Hình 7.5 – SDRAM.
SDRAM được điều khiển giao tiếp nhờ khối giao tiếp với bộ nhớ ngoài (External Bus Interface) của vi điều khiển AT91SAM9260, ta không quá quan tâm đến giao thức giao tiếp SDRAM.
Khối SDRAM này dùng làm vùng Ram chính cho hệ điều hành và các ứng dụng. 7.3.3 NAND Flash:
Sử dụng HY27UF081G2M, là IC NAND Flash của hãng HYNIX, các thông số tiêu biểu:
o Dung lượng 128 Mega Bytes.
o Data bus 8bits.
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY
Hình 7.6 – NAND Flash.
NAND Flash cũng được giao tiếp nhờ vào khối External Bus Interface của vi điều khiển AT91SAM9260. NAND Flash đóng vai trò như ổ đĩa cứng máy vi tính, là bộ nhớ chứa hệ thống File (File System) cho hệ điều hành hoạt động.
7.3.4 SPI Data Flash:
Quá trình khởi động hệ điều hành Linux nhúng là quá trình phức tạp, qua nhiều giai đoạn. Cần một vùng nhớ chứa các đoạn code cho quá trình khởi động (Boot loader). Ta dùng AT45DB161D-SU, là IC nhớ Flash của hãng ATMEL:
o Dung lượng: 2 MegaBytes.
o Giao tiếp SPI, tốc độ tối đa 66MHz.
o Kiểu đóng gói: SOIC – 8 chân.
Hình 7.7 – SPI Data Flash.
AT45DB161D giao tiếp với AT91SAM9260 nhờ khối giao tiếp SPI với chân chip select SPI0_NPCS1 của AT91SAM9260.
7.3.5 Các khối khác:
7.3.5.1-Khối nguồn:
o Dùng LM1117-3V3, từ đầu vào 5VDC, tạo nguồn 3.3V cấp cho các module chức năng của AT91SAM9260, và các IC khác trên mạch.
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY
o Dùng LM1117-1V8, từ đầu vào 5VDC, tạo nguồn 1.8V cấp cho lõi xử lý của AT91SAM9260.
o Nguồn pin 3V, qua MCP1700-1802E/MB, là IC ổn áp hiệu suất cao, tạo áp 1.8V cho khối Realtime Clock của AT91SAM9260.
Hình 7.8 – Khối cấp nguồn.
7.3.5.2-Khối RS232:
Dùng IC Max3232 để chuyển đổi mức điện áp giữa khối giao tiếp UART của AT91SAM9260 (3.3V) và mức điện áp của chuẩn giao tiếp RS232 (±9V). nhờ đó giao tiếp với máy vi tính hoặc các thiết bị khác.
Khối UART0 của AT91SAM9260 còn giao tiếp với máy vi tính qua RS232, làm Console chính cho Hệ điều hành Linux chạy trên mạch.
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY
Hình 7.9 – RS232.
7.3.5.3-Khối giao tiếp SD card:
Giao tiếp với thẻ nhớ SD. Thẻ nhớ SD có thể được dùng như bộ nhớ chính chứa Kernel Linux và File system, hoặc để chứa các chương trình ứng dụng hay các dữ liệu khác.
Hình 7.10 – SD card.
7.3.5.4-Khối giao tiếp Ethernet:
AT91SAM9260 đã có module điều khiển lớp MAC của giao thức Ethernet, ta cần IC DM9161A của hãng DAVICOM làm nhiệm vụ giao tiếp ethernet ở lớp vật lý (Physical layer).
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY
Hình 7.11 – Ethernet.
7.3.5.5-USB port:
Cổng USB device dùng giao tiếp với máy vi tính.
Cổng USB host dùng giao tiếp với các thiết bị USB khác (USB webcam, USB flash disk…).
Hình 7.12 – USB port.
7.3.5.6-GPIO:
GPIO (General Purpose Input Output) là các chân vào/ra ứng dụng chung. Ta có thể dùng để điều khiển On/Off các thiết bị, đọc giá trị từ các nút nhấn...
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY AT91SAM9260-SMISY có 47 chân GPIO.
Hình 7.13 – GPIO.
7.4 Thi công thực tế:
Mạch được vẽ sơ đồ nguyên lý và sơ đồ mạch in bằng phần mềm Orcad. Mạch in được thiết kế 2 lớp, có thể dễ dàng đặt sản xuất tại các cơ sở thi công mạch in tại Việt Nam.
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY
Hình 7.15 – AT91SAM9260-SMISY – mặt dưới.
Luận án tốt nghiệp Chương 7: Mạch nhúng AT91SAM9260-SMISY Giải thích các Jumper:
Jumper Tên Chức năng
J3 INTRC/EXTCLK Chọn clock khởi động: từ bộ dao động RC bên trong hay từ thạch anh 32.768KHz ngoài.