Mục lục:

Phần 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 bước
Phần 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 bước

Video: Phần 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 bước

Video: Phần 3: GPIO: ARM Assembly: Line Follower: TI-RSLK: 6 bước
Video: Rap Việt Mùa 3 - Tập 13: Rhyder thể hiện skill rap, OgeNus CAPTAIN bứt tốc mạnh mẽ | Rap Việt 2023 2024, Tháng mười một
Anonim
Image
Image
Phần cứng
Phần cứng

Xin chào. Đây là phần tiếp theo mà chúng tôi tiếp tục sử dụng hợp ngữ ARM (thay vì ngôn ngữ cấp cao hơn). Nguồn cảm hứng cho cuốn sách Có thể giảng dạy này là Phòng thí nghiệm 6 của Bộ công cụ học tập hệ thống người máy của Texas Instruments, hoặc TI-RSLK.

Chúng tôi sẽ sử dụng bộ vi điều khiển từ bộ, bảng phát triển MSP432 LaunchPad, nhưng có lẽ bạn sẽ tìm thấy thứ gì đó hữu ích để trích xuất từ Bản hướng dẫn này ngay cả khi bạn không sử dụng LaunchPad hoặc theo dõi T. I. chương trình giảng dạy.

Chúng tôi đã bắt đầu với phần giới thiệu về ARM Assembly có thể hướng dẫn, môi trường phát triển và cách tạo một dự án.

Phần tiếp theo có thể hướng dẫn trên ARM Assembly đã giới thiệu cách tương tác với đầu vào / đầu ra (GPIO).

Sau đó, chúng tôi mở rộng kiến thức và giới thiệu các chức năng, điều khiển đèn LED và công tắc.

Giờ đây với Có thể hướng dẫn này, chúng ta có thể sử dụng những gì đã học để làm điều gì đó thú vị hơn, hữu ích hơn: phát hiện một đường thẳng.

Điều này có thể giúp ích cho chúng ta sau này khi chúng ta chế tạo robot theo dõi đường dây.

Trong chương trình học, hầu hết lập trình được thực hiện bằng C hoặc C ++, nhưng sẽ rất hữu ích nếu chúng ta làm quen với assembly, trước khi chúng ta bắt đầu tùy thuộc vào các ngôn ngữ và thư viện cấp cao hơn.

Bước 1: Phần cứng

Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng
Phần cứng

Tôi không muốn rehash phần cứng một cách chi tiết, vì đã có các nguồn, nhưng chúng tôi sẽ thêm giải thích nếu cần.

Đối với Có thể hướng dẫn này, chúng tôi sẽ sử dụng Mảng cảm biến phản xạ từ Pololu, vì nó là một phần của TI-RSLK (bộ robot). Nó là cái được sử dụng trong khóa học và trong Phòng thí nghiệm 6 của chương trình giảng dạy.

Nếu bạn không có điều đó, bạn có thể sử dụng bất kỳ đầu dò IR nào (hoặc loạt đầu báo) xuất tín hiệu kỹ thuật số, CAO hoặc THẤP, cho sự hiện diện và vắng mặt.

Cảm biến mảng là tốt nhất vì nó có thể giúp phát hiện xem chúng ta đang ở ngay giữa đường hay lệch sang một bên. Ngoài ra, như chúng ta sẽ thấy ở phần sau, nó có thể giúp chúng ta phát hiện góc của robot so với đường thẳng.

Mảng phản xạ có các đầu báo rất gần nhau. Điều đó có nghĩa là chúng ta sẽ nhận được nhiều tín hiệu phát hiện, tất nhiên tùy thuộc vào độ dày của đường truyền.

Nếu đúng như vậy, thì nếu rô bốt không thẳng hàng trực tiếp với đường thẳng, thì nó sẽ trả về kết quả đầu ra là đường thẳng rộng hơn so với mức cần thiết (vì chúng ta đang ở một góc).

Để được giải thích rõ hơn về điều trên, hãy xem tài liệu Lab 6.

Để được trợ giúp trong việc nối dây / kết nối cảm biến với bảng phát triển MSP432 LaunchPad, đây là một số hướng dẫn hữu ích.

Tôi cũng đã thêm các hướng dẫn pdf tương tự (tương tự?) Vào Bước này.

Nếu bạn đọc kỹ các tài liệu Pololu, họ giải thích lý do cho "đường vòng 3,3V", rằng bạn sẽ muốn nhảy nếu bạn đang sử dụng 3,3V thay vì 5V.

Vì chúng ta chưa chế tạo robot mà thay vào đó chúng ta chỉ đang tìm hiểu về cách lắp ráp ARM và cách tương tác với các mảnh (hệ thống con) của robot, nên chúng ta không cần phải làm theo các hướng dẫn trên.

Hiện tại, kết nối mảng cảm biến dòng chỉ sôi / giảm xuống như sau:

  • kết nối 3.3V và GND từ bảng MSP432 vào mảng cảm biến.
  • kết nối chân cổng (tôi đề xuất P5.3) từ MSP432 với chân bật đèn LED trên mảng cảm biến dòng. Chân đó trên cảm biến nằm giữa 3,3V và GND.
  • kết nối tất cả tám chân / bit của một cổng (tôi đề xuất từ P7.0 đến P7.7) với tám chân của mảng cảm biến có nhãn "1" đến "8". Đây là những đường sẽ đi CAO hoặc THẤP tùy thuộc vào cảm nhận của chúng.

Như bạn có thể thấy trong hình ảnh của bước này và trong video, tôi không gắn cảm biến vào khung robot vì tôi muốn dễ dàng lập trình, gỡ lỗi, kiểm tra và học hỏi.

Vì vậy, với mọi thứ được kết nối, chúng tôi đã sẵn sàng tham gia vào phần mềm.

Bước 2: Dòng sau

Dòng sau
Dòng sau
Dòng sau
Dòng sau

Cảm biến mảng phản xạ khá tiện lợi vì nó có thể giúp ích ít nhất theo hai cách.

  • Xác định là rô bốt được đặt chính giữa dòng hay bị lệch sang một bên.
  • Robot có được căn chỉnh theo hướng của đường thẳng hay là ở một góc.

Mỗi bộ phát hiện của mảng về cơ bản cung cấp một bit thông tin, CAO hoặc THẤP.

Ý tưởng là kết hợp tất cả các bit đó thành một số hoặc một mẫu bit duy nhất và sử dụng mẫu đó để đưa ra quyết định (để di chuyển chính xác).

Bước 3: Trước khi chúng ta thực sự có thể bắt đầu…

.. chúng ta cần tìm hiểu một số điều mới về lập trình lắp ráp ARM. Và ý tôi không chỉ là một chỉ dẫn khác. Những người có xu hướng là trẻ vị thành niên.

Cho đến nay chúng tôi đã không sử dụng "ngăn xếp" trong các chương trình của chúng tôi.

Chúng tôi đã dựa vào việc sử dụng hầu hết các thanh ghi cpu lõi trên toàn cầu trên các chương trình con khác nhau.

Một điều chúng tôi đã làm là lưu và khôi phục địa chỉ LR (đăng ký liên kết) cho một chức năng - chức năng gọi một số chức năng khác. (Tôi sử dụng "chức năng" và "chương trình con" thay thế cho nhau ở đây).

Những gì chúng tôi đang làm không tốt. Điều gì sẽ xảy ra nếu chúng ta muốn lồng các hàm khác? Điều gì sẽ xảy ra nếu chúng ta có nhiều hơn một cấp độ lồng nhau?

Trong các ví dụ trước, chúng tôi đã chọn sử dụng thanh ghi R6 làm nơi lưu trữ cho LR hoặc địa chỉ trả về. Nhưng nếu chúng ta muốn làm lồng sâu hơn / sâu hơn, chúng ta không thể tiếp tục thay đổi giá trị của R6. Chúng tôi sẽ phải chọn một đăng ký khác. Và cái khác. Và sau đó trở thành gánh nặng để theo dõi thanh ghi cpu lõi nào giữ LR nào để khôi phục lại chức năng nào.

Vì vậy, bây giờ chúng ta hãy xem xét "ngăn xếp".

Bước 4: Ngăn xếp

Đây là một số tài liệu đọc giải thích về ngăn xếp.

Tôi là người đề xuất nhiều hơn một vài ý tưởng:

  • chỉ có nhiều lý thuyết theo yêu cầu, nhanh chóng đi vào thực tế
  • học khi cần thiết, tập trung vào việc thực sự làm điều gì đó chứ không chỉ là các bài tập hoặc ví dụ không có mục đích.

Có rất nhiều tài liệu trực tuyến về ARM và MSP432 nói về ngăn xếp, vì vậy bạn sẽ không phải chia sẻ lại tất cả những điều đó. Tôi cũng sẽ giữ mức sử dụng ngăn xếp ở đây ở mức tối thiểu - lưu địa chỉ trả về (Đăng ký liên kết).

Về cơ bản, chúng tôi chỉ cần hướng dẫn:

PUSH {danh sách đăng ký}

POP {danh sách đăng ký}

Hoặc, trong trường hợp của chúng tôi, cụ thể:

PUSH {LR}

POP {LR}

Vì vậy, một hàm hợp ngữ / chương trình con sẽ giống như sau:

funcLabel:.asmfunc

PUSH {LR}; đây có thể là một trong những hướng dẫn đầu tiên khi nhập.; làm thêm mã tại đây..; Vân vân…; được rồi, chúng ta đã hoàn thành chức năng, sẵn sàng quay trở lại để gọi hàm POP {LR}; điều này khôi phục địa chỉ trả về chính xác để gọi lại; hàm số. BX LR; trả về.endasmfunc

Video đi qua một ví dụ trực tiếp về một số hàm lồng nhau.

Bước 5: Phần mềm

Tệp đính kèm có nhãn "MSP432_Chapter…" có rất nhiều thông tin tốt về các cổng của MSP432 và từ tài liệu đó, chúng tôi nhận được các cổng, thanh ghi, địa chỉ sau, v.v. Tuy nhiên, nó hơi cũ. Tuy nhiên, tôi không thấy địa chỉ chi tiết được liệt kê cho Cổng 5 trở lên. (chỉ "các chức năng thay thế"). Nhưng nó vẫn hữu ích.

Chúng tôi sẽ sử dụng hai Cổng. P5, P7, P1 và P2.

Ngõ ra P5.3 (một bit duy nhất) sẽ điều khiển bật đèn LED hồng ngoại trên cảm biến. Chúng tôi đang sử dụng P5.3 bởi vì nó là một chân tiếp xúc trên cùng một tiêu đề như các kết nối MSP432 khác đi đến mảng cảm biến.

P7.0 đến P7.7 sẽ là tám đầu vào thu thập dữ liệu từ cảm biến; những gì nó "nhìn thấy".

P1.0 là đèn LED màu đỏ duy nhất và chúng tôi có thể sử dụng nó để cung cấp cho chúng tôi một số chỉ báo về dữ liệu.

P2.0, P2.1, P2.2 là đèn LED RGB và chúng tôi cũng có thể sử dụng đèn LED đó, với các khả năng màu sắc khác nhau, để cung cấp cho chúng tôi dấu hiệu của dữ liệu cảm biến.

Nếu bạn đã xem qua các Hướng dẫn trước liên quan đến tất cả những điều này, thì bạn đã biết cách thiết lập chương trình.

Chỉ cần có phần khai báo cho các cổng và bit, v.v.

Bạn sẽ có một phần "chính".

Nên có một vòng lặp, nơi chúng tôi liên tục đọc dữ liệu từ P7, đưa ra quyết định về dữ liệu đó và làm sáng hai đèn LED tương ứng.

Đây một lần nữa là các địa chỉ của Port Register:

  • GPIO P1: 0x4000 4C00 + 0 (địa chỉ chẵn)
  • GPIO P2: 0x4000 4C00 + 1 (địa chỉ lẻ)
  • GPIO P3: 0x4000 4C00 + 20 (địa chỉ chẵn)
  • GPIO P4: 0x4000 4C00 + 21 (địa chỉ lẻ)
  • GPIO P5: 0x4000 4C00 + 40 (địa chỉ chẵn)
  • GPIO P6: 0x4000 4C00 + 41 (địa chỉ lẻ)
  • GPIO P7: 0x4000 4C00 + 60 (địa chỉ chẵn)
  • GPIO P8: 0x4000 4C00 + 61 (địa chỉ lẻ)
  • GPIO P9: 0x4000 4C00 + 80 (địa chỉ chẵn)
  • GPIO P10: 0x4000 4C00 + 81 (địa chỉ lẻ)

Những gì được in đậm là những gì chúng tôi sẽ sử dụng cho Tài liệu hướng dẫn này.

Các bước lập trình để đọc đầu dò hồng ngoại

Sau đây là mã psuedo để viết chương trình bằng C, nhưng nó vẫn hữu ích và chúng ta sẽ theo dõi nó khá chặt chẽ trong phiên bản hợp ngữ của chương trình.

chương trình chính0) Khởi tạo // các cổng trong khi (1) {1) Đặt P5.3 ở mức cao (bật đèn LED hồng ngoại) 2) Đặt P7.0 làm đầu ra và đặt nó ở mức cao (sạc tụ điện) 3) Chờ 10 chúng tôi, Clock_Delay1us (10); 4) Đặt P7.0 làm đầu vào 5) Chạy vòng lặp này 10.000 lần a) Đọc P7.0 (chuyển đổi điện áp trên P7.0 thành nhị phân) b) Đầu ra nhị phân thành P1.0 (cho phép bạn xem nhị phân trong thời gian thực) 6) Đặt P5.3 ở mức thấp (tắt đèn LED hồng ngoại, tiết kiệm điện) 7) Chờ 10 ms, Clock_Delay1ms (10); } // lặp lại (quay lại while ())

Bước 6: Hãy cải thiện mã

Mục đích hoặc việc sử dụng mảng Pololu IR LED là để phát hiện một đường và để biết liệu rô-bốt (tương lai) đang trực tiếp căn giữa đường hay lệch sang một bên. Ngoài ra, vì đường có độ dày nhất định, nếu mảng cảm biến vuông góc trực tiếp với đường, N số cảm biến sẽ có giá trị đọc khác với phần còn lại, trong khi nếu mảng LED hồng ngoại nằm ở một góc nào đó (không vuông góc), thì Các cặp đầu dò / LED hồng ngoại N + 1 hoặc N + 2 bây giờ sẽ cho kết quả khác.

Do đó, tùy thuộc vào số lượng cảm biến chỉ ra sự hiện diện của đường thẳng, chúng ta sẽ biết liệu chúng ta có căn giữa hay không và chúng ta có bị nghiêng hay không.

Đối với thử nghiệm cuối cùng này, chúng ta hãy xem liệu chúng ta có thể lấy đèn LED màu đỏ và đèn LED RGB để cung cấp cho chúng tôi thêm thông tin về những gì mảng cảm biến đang cho chúng tôi biết hay không.

Video đi vào tất cả các chi tiết. Mã cuối cùng cũng được đính kèm.

Điều này hoàn thành loạt ARM Assembly liên quan đến GPIO. Chúng tôi hy vọng sẽ trở lại với nhiều ARM Assembly hơn vào một thời gian sau.

Cảm ơn bạn.

Đề xuất: