Tải bản đầy đủ (.pdf) (28 trang)

Đồ án thiết kế hệ thống nhúng Thiết kế điều khiển xe ô tô mô hình bằng điện thoại + file Code

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.35 MB, 28 trang )

BỘ THÔNG TIN VÀ TRUYỀN THÔNG
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THƠNG
----🙣🙣🙣----

BÁO CÁO MƠN HỌC
MƠN HỌC: ĐỒ ÁN THIẾT KẾ
HỆ THỐNG NHÚNG
ĐỀ TÀI: THIẾT KẾ ĐIỀU KHIỂN XE Ô TƠ MƠ HÌNH
BẰNG ĐIỆN THOẠI

Hà Nội, 2022


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

Mục lục
Lời cảm ơn .......................................................................................................................3
Chương 1. Tổng quan đề tài ............................................................................................5
1.1, Đặt vấn đề.............................................................................................................5
1.2, Mục tiêu đề tài ......................................................................................................5
1.3, Nội dung nghiên cứu ............................................................................................5
Chương 2. Cơ sở lý thuyết...............................................................................................5
2.1 Giới thiếu linh kiện ...............................................................................................5
2.1.1 Tổng quan về vi xử lý ARM ..........................................................................5
2.1.2 Kit STM32F103C8T6 ....................................................................................6
2.1.3 Module HC06.................................................................................................7
2.1.4 Module L298 ..................................................................................................8
2.1.5 Động cơ giảm tốc ...........................................................................................9
2.1.6 Động cơ servo SG90 ......................................................................................9


2.1.7 Pin 18650 .....................................................................................................11
2.2 Chuẩn giao tiếp UART........................................................................................12
2.2.1 Khái niệm .....................................................................................................12
2.2.2 Cách thức hoạt động của UART ..................................................................12
2.2.3 Định dạng gói tin .........................................................................................12
2.3 PWM ...................................................................................................................13
2.4 FreeRtos ..............................................................................................................14
2.4.1 Giới thiệu RTOS ..........................................................................................14
2.4.2 Tạo project và cách add thư viện FreeRtos trên Keil C ...............................14
2.4.3 Create Task ..................................................................................................15
Chương 3. Hệ thống ......................................................................................................16
3.1 Lập trình giao tiếp với module HC06 .................................................................16
3.2 Sử dụng app điều khiển .......................................................................................18
3.2 Lập trình giao tiếp với SG90 ...............................................................................19
3.2.1 Mơ tả thuật tốn ...........................................................................................19
3.2.2 Lưu đơ thật tốn ...........................................................................................20
3.3 Lắp ráp, thi công .................................................................................................20
3.3.1 Xe 3 bánh .....................................................................................................20
3.3.2 Cánh tay robot ..............................................................................................20

[2]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

3.4 Thực thi hệ thống ................................................................................................21
3.4.1 Sơ đồ khối ....................................................................................................21
3.4.2 Nguyên lý hoạt động ....................................................................................21

3.4.3 Thuật toán điều khiển cánh tay robot...........................................................21
3.4.4 Lập trình điều khiển động cơ giảm tốc ........................................................23
3.4.5 Lập trình điều khiển cánh tay robot .............................................................23
3.4.3 Sử dụng app điều khiển................................................................................25
Chương 4. Kết luận........................................................................................................27
4.1 Nhận xét ..............................................................................................................27
4.2 Hướng phát triển .................................................................................................27
Chương 5. Tài liệu tham khảo .......................................................................................28

[3]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

Lời cảm ơn
Nhóm chúng em xin gửi lời cảm ơn sâu sắc và chân thành tới thầy Nguyễn Ngọc
Minh đã tận tình giúp đỡ, chỉ bảo, hướng dẫn nhóm thực hiện trong suốt quá trình thực
hiện đề tài này. Trong thời gian làm việc với thầy, nhóm chúng em đã khơng ngừng tiếp
thu thêm nhiều kiến thức bổ ích mà cịn học được tinh thần làm việc, thái độ nghiên cứu
môn học nghiêm túc, hiệu quả của thầy đây là những điều rất cần thiết cho nhóm trong
q trình học tập và cơng tác cho chúng em sau này. Kính chúc thầy sức khoẻ, hạnh
phúc thành công trên con đường và sự nghiệp giảng dạy!
Chân thành cảm ơn đến các bạn trong nhóm đã ln đồng hành, giúp đỡ để nhóm
có thể thực hiện được đề tài này thành công!

[4]



Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

Chương 1. Tổng quan đề tài
1.1, Đặt vấn đề
Cuộc sống ngày càng phát triển nhanh chóng và hiện đại hơn, những công nghệ
mới ngày càng được phát minh và phát triển để đưa vào phục vụ cuộc sống hằng ngày
của con người. Nhằm mang lại sự tiện nghi, an toàn hơn cho người sử dụng, nhóm chúng
em đã đề xuất nghiên cứu xe điều khiển cánh tay robot
1.2, Mục tiêu đề tài
Đồ án được nhóm nghiên cứu, khảo sát và thực hiện với mục đích áp dụng các
kiến thức đã được học ở trường giúp cho những nhu cầu điều khiển trở nên tiện lợi hơn.
Vì vậy nhóm thiết kế “Xe điều khiển cánh tay robot”
1.3, Nội dung nghiên cứu
➢ Nội dụng 1: Tìm hiểu về HC06, truyền nhận ký tự từ app về vi điều khiển
➢ Nội dung 2: Viết thư viện giao tiếp nhiều servo, cụ thể sử dụng servo SG90
➢ Nội dung 3: Xây dựng thuật toán điều khiển cánh tay robot và điều khiển xe
➢ Nội dung 4: Thiết kế, thi công và thử nghiệm phần cứng
➢ Nội dung 5: Đánh gia kết quả và viết báo cáo

Chương 2. Cơ sở lý thuyết
2.1 Giới thiếu linh kiện
2.1.1 Tổng quan về vi xử lý ARM
ARM ( được viết cách điệu là arm, trước đây là từ viết tắt của Advanced RISC
Machine,ban đầu là Acorn RISC Machine) là một họ kiến trúc dạng RISC cho các vi xử
lý máy tính, được cấu hình cho các mơi trường khác nhau. Arm Holdings phát triển kiến
trúc và cấp phép nó cho các công ty khác, nơi mà sẽ thiết kế các sản phẩm của riêng họ
để thực hiện một trong những kiến trúc đó bao gồm các SoC và các module hệ thống
(SoM) kết hợp với các thành phần khác nhau như bộ nhớ, giao diện, radio. Họ cũng thiết

kế các lõi thực hiện tập lệnh này và cấp phép cho các thiết kế này cho các công ty đối
tác để thiết kế sản phẩm của riêng họ dựa trên các lõi này.

[5]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

2.1.2 Kit STM32F103C8T6

Hình 2.1 STM32F103C8T6
➢ STM32 là một trong những dịng chip phổ biến của ST với nhiều họ thông dụng
như F0,F1,F2,F3,F4….. Stm32f103 thuộc họ F1 với lõi là ARM COTEX M3.
STM32F103 là vi điều khiển 32 bit, tốc độ tối đa là 72Mhz. Giá thành cũng khá
rẻ so với các loại vi điều khiển có chức năng tương tự. Mạch nạp cũng như cơng
cụ lập trình khá đa dạng và dễ sử dụng. Phần mềm lập trình: có khá nhiều trình
biên dịch cho STM32 như IAR Embedded Workbench, Keil C…

Hình 2.2 Cấu tạo của STM32F103C8T6
➢ Sơ lược về Board
• 1 cổng Mini USB dùng để cấp nguồn, nạp cũng như debug.
• 2 MCU bao gồm 1 MCU nạp và 1 MCU dùng để lập trình.
• Có chân Output riêng cho các chân mạch nạp trên MCU1.
• Có chân Output đầy đủ cho các chân MCU2.
• Chân cấp nguồn ngồi riêng cho MCU2 nếu khơng sử dụng nguồn từ USB.
• Thạch anh 32,768khz dùng cho RTC và Backup.9
• Chân nạp dùng cho chế độ nạp boot loader.


[6]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

• Nút Reset ngoài và 1 led hiển thị trên chân PB9, 1 led báo nguồn cho MCU2
2.1.3 Module HC06

Hình 2.3 Module thu phát bluetooth HC-06
➢ Module thu phát bluetooth HC-06 ra chân hoàn chỉnh giúp dễ dàng kết nối để
thực hiện các thí nghiệm, module được thiết kế để cho thể hoạt động từ mức điện
áp 3V3 => 5V.
➢ Khi kết nối với máy tính, HC-06 được sử dụng như 1 cổng COM ảo, việc truyền
nhận với COM ảo sẽ giống như truyền nhận dữ liệu trực tiếp với UART trên
module.
➢ Lưu ý là khi thay đổi Baudrate cho COM ảo không làm thay đổi baudrate của
UART, baudrate UART chỉ có thể thay đổi bằng AT command trên module.
Module thu phát bluetooth HC-06 được setup mặc định là Slave không thể thay
đổi được nên chỉ có thể giao tiếp với các thiết bị bluetooth ở dạng master như
Smart phone, HC-05 master,… hai module bluetooth được set là Slave không thể
giao tiếp với nhau.
➢ Thơng số kỹ thuật:
• Điện áp hoạt động: 3.3 ~ 5VDC.
• Điện áp giao tiếp: TTL tương thích 3.3VDC và 5VDC.
• Baudrate UART có thể chọn được: 1200, 2400, 4800, 9600, 19200, 38400,
57600, 115200

[7]



Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

• Dải tần sóng hoạt động: Bluetooth 2.4GHz
• Sử dụng CSR mainstream bluetooth chip, bluetooth V2.0 protocol standards.
• Dịng điện khi hoạt động: khi Pairing 30 mA, sau khi pairing hoạt động truyền
nhận bình thường 8 mA
• Kích thước của module chính: 28 mm x 15 mm x 2.35 mm
• Thiết lập mặc định:


Baud rate: 9600, N, 8, 1.



Pairing code: 1234.

2.1.4 Module L298

Hình 2.4 Mạch điều khiển động cơ DC L298N
➢ Mạch điều khiển động cơ DC L298N có khả năng điều khiển 2 động cơ DC, dòng
tối đa 2A mỗi động cơ, mạch tích hợp diod bảo vệ và IC nguồn 7805 giúp cấp
nguồn 5VDC cho các module khác (chỉ sử dụng 5V này nếu nguồn cấp
<12VDC).
➢ Thông số kỹ thuật
• IC chính: L298 – Dual Full Bridge Driver
• Điện áp đầu vào: 5~30VDC

• Cơng suất tối đa: 25W 1 cầu (lưu ý cơng suất = dịng điện x điện áp nên áp
cấp vào càng cao, dịng càng nhỏ, cơng suất có định 25W).
• Dịng tối đa cho mỗi cầu H là: 2A
• Mức điện áp logic: Low -0.3V~1.5V, High: 2.3V~Vss

[8]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

2.1.5 Động cơ giảm tốc

Hình 2.5 Động cơ giảm tốc vàng kèm bánh xe
➢ Động cơ giảm tốc vàng là loại được lựa chọn và sử dụng nhiều nhất hiện nay cho
các thiết kế Robot đơn giản.
➢ Động cơ DC giảm tốc vàng có chất lượng và giá thành vừa phải cùng với khả
năng dễ lắp ráp của nó đem đến chi phí tiết kiệm và sự tiện dụng cho người sử
dụng, các bạn khi mua động cơ giảm tốc vàng có thể mua thêm gá bắt động cơ
vào thân Robot cũng như bánh xe tương thích.
➢ Thơng số kỹ thuật
• Điện áp hoạt động: 3--9VDC
• Dịng điện tiêu thụ: 110140mA
• Tỉ số truyền: 1:120
• Số vịng/1phút:
• 50 vịng/ 1 phút tại 3VDC.
• 83 vịng/ 1 phút tại 5VDC.
• Moment: 1.0KG.CM
2.1.6 Động cơ servo SG90


Hình 2.6 Động cơ servo SG90 180 độ

[9]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

➢ Động cơ servo SG90 có kích thước nhỏ, là loại được sử dụng nhiều nhất để làm
các mơ hình nhỏ hoặc các cơ cấu kéo không cần đến lực nặng.
➢ Động cơ servo SG90 180 độ có tốc độ phản ứng nhanh, các bánh răng được làm
bằng nhựa nên cần lưu ý khi nâng tải nặng vì có thể làm hư bánh răng, động cơ
RC Servo 9G có tích hợp sẵn Driver điều khiển động cơ bên trong nên có thể dễ
dàng điều khiển góc quay bằng phương pháp điều độ rộng xung PWM.
➢ Thơng số kỹ thuật
• Điện áp hoạt động: 4.8-5VDC
• Tốc độ: 0.12 sec/ 60 deg (4.8VDC)
• Lực kéo: 1.6 Kg.cm
• Kích thước: 21x12x22mm
• Trọng lượng: 9g.
➢ Phương pháp điều khiển PWM:
• Độ rộng xung 0.5ms ~ 2.5ms tương ứng 0-180 độ
• Tần số 50Hz, chu kỳ 20ms
➢ Sơ đồ dây:
• Đỏ: Dương nguồn
• Nâu: Âm nguồn
• Cam: Tín hiệu
➢ Kích thước Động cơ servo SG90 180 độ


Hình 2.7 Bản thiêt kế kích cỡ SG90
[10]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

2.1.7 Pin 18650

Hình 2.8 Pin cell 18650 2000mAh
➢ Pin cell 18650 2000mAh là loại pin Li-ion (Lithium-Ion) với dung lượng lên tới
2000mah, thích hợp sử dụng trong các ứng dụng DIY mơ hình như máy rửa tay
tự động, máy chào khách, sử dụng trong các đồ án sinh viên, phục vụ đời sống
dân dụng như thay pin của đèn pin, thiết bị nguồn dự phịng,…
➢ Lưu ý: Khơng được xả q mức điện áp tối thiếu của pin là 3V, khi tới mức này
cần sạc lại ngay, hoặc sử dụng mạch sạc xả pin có chức năng tự ngắt để tránh bị
hư pin và sử dụng pin được lâu dài
➢ Thông số kỹ thuật:
• Tên sản phẩm: Pin sạc Lithium
• Loại Pin: Li-ON
• Điện áp: 3.7v
• Dung lượng: 2000mah
• Điện áp sc y: 4.2v
ã Kớch thc: 64.7ì18.4mm ( chiu di x đường kính )
• Trọng lượng: ~ 34g
• Màu sắc: tùy lô hàng về thường là màu xanh lam, xanh chuối, hồng
• Nhiệt độ làm việc: < 80°C
• Tuổi thọ: > 1000 lần sạc xả


[11]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

2.2 Chuẩn giao tiếp UART
2.2.1 Khái niệm
UART (Universal Asynchronous Reciver/Transmister) một chuẩn giao tiếp không đồng
bộ cho MCU và các thiết bị ngoại vi.
Chuẩn UART là chuẩn giao tiếp điểm và điểm, nghĩa là trong mạng chỉ có hai thiết bị
đóng vai trị là transmister hoặc reciver.

Hình 2.9 Sơ đồ khối UART
2.2.2 Cách thức hoạt động của UART
➢ UART là giao thức truyền thơng khơng đồng bộ, nghĩa là khơng có xung Clock,
các thiết bị có thể hiểu được nhau nếu các Setting giống nhau
➢ UART là truyền thông song công(Full duplex) nghĩa là tại một thời điểm có thể
truyền và nhận đồng thời.
➢ Trong đó quan trọng nhất là Baund rate (tốc độ Baund) là khoảng thời gian dành
cho 1 bit được truyền. Phải được cài đặt giống nhau ở gửi và nhận.
2.2.3 Định dạng gói tin

Hình 2.10 Khung truyền UART
➢ Start – Bit: Start-bit còn được gọi là bit đồng bộ hóa được đặt trước dữ liệu thực
tế. Khi đang ở chế độ “nhàn rỗi” thì đường tín hiệu được đưa lên mức cao (1).
Để bắt đầu truyền dữ liệu, đường dữ liệu sẽ được kéo từ mức điện áp cao (1)


[12]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

xuống mức điện áp thấp (0), Báo cho bên nhận biết là sắp truyền dữ liệu, đây
chính là bit Start.
➢ Stop – Bit: Bit dừng được đặt ở phần cuối của gói dữ liệu. Thơng thường, bit này
dài 2 bit nhưng thường chỉ sử dụng 1 bit. Sau khi truyền xong dữ liệu, thì đường
dữ liệu sẽ được giữ ở mức cao tương đương 1 hoặc 2 bit.
➢ Partity Bit: Bit chẵn lẻ cho phép người nhận đảm bảo liệu dữ liệu được thu thập
có đúng hay khơng. Đây là một hệ thống kiểm tra lỗi cấp thấp. Trên thực tế, bit
này không được sử dụng rộng rãi nên không bắt buộc.
➢ Data frame: Các bit dữ liệu bao gồm dữ liệu thực được truyền từ người gửi đến
người nhận. Độ dài khung dữ liệu có thể nằm trong khoảng 5 & 8. Nếu bit chẵn
lẻ khơng được sử dụng thì chiều dài khung dữ liệu có thể dài 9 bit. Bit LSB sẽ
được truyền trước.
2.3 PWM
➢ PWM - Pulse Width Modulation, còn được gọi là điều chế độ rộng xung, hay
băm xung. Đây là phương pháp đơn giản dùng để điều chế điện áp ra tải dựa vào
điều chỉnh tín hiệu điện thế trung bình.
➢ Các khái niệm cần nắm về PWM:
• Duty cycle: Tỉ lệ phần trăm tín hiệu ở mức cao.
• Period: Chu kỳ xung
• Pulse width: Thời gian mức cao trong một chu kỳ.

Hình 2.11 Duty Cycle


[13]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

• Nếu Duty Cycle = 0% tương ứng điện áp đầu ra

U=5x0%=0V

• Nếu Duty Cycle = 30% tương ứng điện áp đầu ra

U=5x30%=1.5V

• Nếu duty cycle = 50% tương ứng điện áp đầu ra

U=5x50%=2.5V

• Nếu duty cycle = 100% tương ứng điện áp đầu ra

U=5x1000%=5V

➢ Ứng dụng của PWM: Phương pháp băm xung PWM thường được sử dụng để
điều khiển băm xung, điều khiển tốc độ động cơ, các bộ điều áp, xung áp,…
2.4 FreeRtos
2.4.1 Giới thiệu RTOS

➢ Viết tắt của Real-Time Operating system
➢ Cho Phép ứng dụng của mình chạy đa tác vụ

➢ Đáp ứng được “deadline” theo thời gian thực
➢ Chia nhỏ project để dễ trị
➢ Dễ dàng phân chia cơng việc trong làm việc nhóm
2.4.2 Tạo project và cách add thư viện FreeRtos trên Keil C
/>
[14]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

2.4.3 Create Task
Bước 1: Cấu trúc Funciton của 1 task trong FreeRtos
void vTaskLed1(void *pvParameters)
{
char led_val = 0;
unsigned int Frequency = 100; //100ms
while(1)
{
led_val = 1 - led_val;
GPIO_WriteBit(LEDPORT,LED1,led_val ? Bit_SET : Bit_RESET);
vTaskDelay(Frequency);
}
}

Bước 2: Tiếp theo trong hàm main, tạo task bằng hàm xTaskCreate và chạy task đã tạo
sử dụng vTaskStartScheduler();
xTaskCreate(vTaskLed1,( const char * ) “Task LED
1”,configMINIMAL_STACK_SIZE,NULL,mainFLASH_TASK_PRIORITY,(

xTaskHandle * ) NULL);
xTaskCreate(vTaskLed2,( const char * ) “Task LED
2”,configMINIMAL_STACK_SIZE,NULL,mainFLASH_TASK_PRIORITY,(
xTaskHandle * ) NULL);
xTaskCreate(vTaskLed3,( const char * ) “Task LED
vTaskStartScheduler()

Giải thích: Hàm xTaskCreate sẽ gồm các para input:
➢ vTaskLed1: Chương trình mình muốn tạo task mới
➢ ( const char * ) “Task LED 1”: Tên task bạn đặt số kí tự max được định nghĩa
trong file FreeRTOSConfig.h #define configMAX_TASK_NAME_LEN ( 16 )
➢ configMINIMAL_STACK_SIZE: giá trị stack size bạn sử dụng với task đó ở đây
stack size bằng 128byte. Với mỗi byte stack size FreeRTOS sẽ lấy 4byte của
RAM để back up giá trị của một trong các thanh ghi R0-R15 32bit sẽ tốn 128*4
= 512byte RAM. Khi sử dụng nhiều Task khác nhau nếu gọi chương trình cịn
nhiều bạn sẽ cần nhiều stack_size hơn. Vì vậy cần tính tốn sơ bộ và cài đặt lại
stack size trong file startup.
➢ mainFLASH_TASK_PRIORITY: Mức ưu tiên của hệ điều hành max là 255.

[15]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

➢ ( xTaskHandle * ) NULL: Có tác dụng trong việc tạm dừng, xóa task.

Chương 3. Hệ thống
3.1 Lập trình giao tiếp với module HC06


Hình 3.1 Sơ đồ kết nối module HC06 với MCU
➢ Cài đặt mặc định của mô-đun Bluetooth HC-06
• Tên Bluetooth mặc định: “HC-06”
• Mật khẩu mặc định: 1234 hoặc 0000
• Giao tiếp mặc định: Thiết bị nơ lệ
• Chế độ mặc định: Chế độ dữ liệu
• Tốc độ truyền của chế độ dữ liệu mặc định: 9600, 8, N, 1
• Tốc độ truyền của chế độ lệnh mặc định: 38400, 8, N, 1
➢ Xây dựng các hàm để giao tiếp với HC06
• Sử dụng hàm Serial_Begin() để khởi tạo UART1:

[16]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

void Serial_Begin (uint32_t baud)
{
//Config ringbuffer
RB_Init(&ring_buffer, Rx_BufArr, buff_len);
//Config UART1
GPIO_InitTypeDef
USART_InitTypeDef
NVIC_InitTypeDef

GPIO_InitStructure;
USART_InitStructure;

NVIC_InitStruct;

// Step 1: Initialize GPIO for Tx and Rx pin
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE ); /*enable clock*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE );
/*
USART1_Rx : PA10 input floating
USART1_Tx : PA9 alternate function push-pull
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure );
// Step 2: Initialize USART1
USART_InitStructure.USART_BaudRate
USART_InitStructure.USART_WordLength
USART_InitStructure.USART_StopBits
USART_InitStructure.USART_Parity
USART_InitStructure.USART_HardwareFlowControl
USART_InitStructure.USART_Mode
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE); //kich hoat usart1

=
=
=
=

=
=

baud;
USART_WordLength_8b;
USART_StopBits_1;
USART_Parity_No;
USART_HardwareFlowControl_None;
USART_Mode_Rx | USART_Mode_Tx;

// Step 3: Enable USART receive interrupt
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
// Step 4: Initialize NVIC for USART IRQ
// Set NVIC prority group to group 4
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
// Set System Timer IRQ at higher priority
NVIC_SetPriority(SysTick_IRQn, 0);
// Set USART1 IRQ at lower priority
NVIC_InitStruct.NVIC_IRQChannel = USART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct);
//Note:
//
use*/
//
//
}

Initialize NVIC for USART IRQ use register

USART1->SR = (uint16_t)~USART_IT_RXNE;
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
NVIC_EnableIRQ(USART1_IRQn);

/*Clear interrupt flag for first
/*Allow interrupt receive*/
/*Enable NVIC UART1*/

• Sử dụng hàm “Serial_Read()” để nhận được ký tử gửi về từ module HC06
uint8_t Serial_Read(void)
{
uint8_t data_read;
RB_Pop(&ring_buffer, &data_read);
return data_read;
}

[17]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

3.2 Sử dụng app điều khiển

Hình 3.2 App Bluetooth Electronics trên CH Play
➢ Bước 1: Bật bluetooth trên điện thoại, tiến hành vào giao diện app để tìm kiếm
thiết bị để kết nối

➢ Bước 2: Tìm kiếm thiết bị HC06 khi giao diện máy quét thiết bị thành công


➢ Bước 3: Tạo giao diện điều khiển sau khi kết nối thành công

[18]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

➢ Bước 4: Cuối cùng chỉnh sửa mã code gửi về từ app tương ứng với mã code
trên trình biên dịch vi điều khiển để điều khiển thiết bị hợp lý
3.2 Lập trình giao tiếp với SG90
3.2.1 Mơ tả thuật tốn
➢ Servo được điều khiển bằng giải thuật PID nhưng ta khơng cần quan tâm nhiều
vì trong 3 chân của servo, ta chỉ quan tâm đến chân PWM để cấp xung vào điều
khiển động cơ.
➢ Do servo hoạt động ở tần số 50Hz, tức chu kì xung PWM điều khiển servo là T
= 20ms. Nhiệm vụ của người lập trình là sử dụng timer 2 của STM32F103C8T6
băm xung tạo ra xung có chu kì là 20ms để điều khiển động cơ.
➢ Cơng thức tính tốn tạo xung PWM có tần số 50Hz như sau:
fPWM = 50Hz => TPWM = 20ms
fbus_timer2 = 72MHz, chọn prescaler = 72
= > ftimer_tick = fbus_timer2 / prescaler = 1MHz
Tìm period: period = (ftimer_tick / fPWM) -1 = 1000000 / 50 – 1 = 20000 (tick)

[19]


Đồ án thiết kế hệ thống nhúng


GVHD: Nguyễn Ngọc Minh

3.2.2 Lưu đơ thật tốn

Hình 3.2 Lưu đồ điều khiển servo trong stm32
3.3 Lắp ráp, thi cơng
3.3.1 Xe 3 bánh

Hình 3.2 Linh kiện chuẩn bị lắp ráp
3.3.2 Cánh tay robot

Hình 3.3 Cánh tay robot mica

[20]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

3.4 Thực thi hệ thống
3.4.1 Sơ đồ khối

Hình 3.4 Sơ đồ khối hoạt động
3.4.2 Nguyên lý hoạt động
➢ Khối nguồn: Sử dụng pin 18650 cấp nguồn cho module L298 xấp xỉ 11V, tạo
nguồn đầu ra 5V do module L298 có mạch ổn áp IC7805, sử dụng nguồn 5V đầu
ra cấp vào vi điều khiển STM32 thực hiện hoạt động
➢ Khối input: Nhận dữ liệu từ module HC06 gửi về vi điều khiển thơng qua bộ

USART1 gồm hai chân đó là PA9 và PA10, tôc độ baud là 9600
➢ Khối output: Từng dữ liệu nhận được thì thực hiện điều khiển hệ thống xe
3.4.3 Thuật toán điều khiển cánh tay robot
➢ Ý tưởng: Sử dụng các ký tự nhận được từ điện thoại, từ đó điều chỉnh độ góc
xoay từng động cơ sao cho hợp lý, sử dụng freertos chia làm hai tác vụ chính,
một tác vụ để thực hiện đọc dữ liệu, tác vụ cịn lại để xử lý dữ liệu
• Task 1: Kiểm tra dữ liệu từ điện thoại gửi về thông qua kết nối module HC06,
thực hiện tiến hành gửi dữ liệu vào queue

[21]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

• Task 2: Từ dữ liệu có trong bộ đệm queue, tiến hành xử lý để điều khiển ơ tơ

Hình 3.5 Lưu đồ thuật toan của tác vụ thứ nhất

Hình 3.6 Lưu đồ thuật toán của tác vụ thứ hai
[22]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

3.4.4 Lập trình điều khiển động cơ giảm tốc
void Robot_Down()

{
Led_DownHigh();
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
}
void Robot_Up()
{
Led_UpHigh();
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
}
void Robot_Right()
{
Led_RightHigh();
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
}
void Robot_Left()
{
Led_LeftHigh();
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,

}
void Robot_Stop()
{
Led_SetLow();
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
GPIO_WriteBit(GPIOA,
}

GPIO_Pin_3,
GPIO_Pin_4,
GPIO_Pin_5,
GPIO_Pin_6,

(BitAction)(1));
(BitAction)(0));
(BitAction)(1));
(BitAction)(0));

GPIO_Pin_3,
GPIO_Pin_4,
GPIO_Pin_5,
GPIO_Pin_6,

(BitAction)(0));
(BitAction)(1));
(BitAction)(0));
(BitAction)(1));


GPIO_Pin_4,
GPIO_Pin_3,
GPIO_Pin_5,
GPIO_Pin_6,

(BitAction)(1));
(BitAction)(0));
(BitAction)(0));
(BitAction)(0));

GPIO_Pin_4,
GPIO_Pin_3,
GPIO_Pin_6,
GPIO_Pin_5,

(BitAction)(0));
(BitAction)(0));
(BitAction)(1));
(BitAction)(0));

GPIO_Pin_3,
GPIO_Pin_4,
GPIO_Pin_5,
GPIO_Pin_6,

(BitAction)(0));
(BitAction)(0));
(BitAction)(0));
(BitAction)(0));


3.4.5 Lập trình điều khiển cánh tay robot
static void Task1_ReceiveData( void *pvParameters )
{
uint16_t readDataFormHC06;
Serial_Begin(9600);
Led_Config();
while (1)
{
if (Serial_Available() > 0)
{
readDataFormHC06 = Serial_Read();
if (readDataFormHC06 == 'F') Led_UpHigh();
if (readDataFormHC06 == 'B') Led_DownHigh();
if (readDataFormHC06 == 'R') Led_RightHigh();
if (readDataFormHC06 == 'L') Led_LeftHigh();
xQueueSend(queueBuffer, &readDataFormHC06, TIME_OUT);
}
vTaskDelay(10);
}
}
left_pos -= 5;
if (left_pos < 20) left_pos = 20;
Myservo_Write(GPIOA, GPIO_Pin_1, left_pos);
}
else if (data_receive == '7') Myservo_Write(GPIOB, GPIO_Pin_1, 15);
else if (data_receive == '8') Myservo_Write(GPIOB, GPIO_Pin_1, 30);
else
else
else
else

else

if (data_receive
if (data_receive
if (data_receive
if (data_receive
Robot_Stop();

==
==
==
==

'U')
'D')
'R')
'L')

Robot_Up();
Robot_Down();
Robot_Right();
Robot_Left();

}

[23]


Đồ án thiết kế hệ thống nhúng


GVHD: Nguyễn Ngọc Minh

static void Task2_HandleData ( void *pvParameters )
{
uint8_t data_receive;
int16_t rotage_pos = 90;
int16_t right_pos = 90;
int16_t left_pos = 20;
Robot_Config();
Myservo_Attach(GPIOA,
Myservo_Attach(GPIOA,
Myservo_Attach(GPIOA,
Myservo_Attach(GPIOB,
Myservo_Attach(GPIOB,
Myservo_Write(GPIOA,
Myservo_Write(GPIOA,
Myservo_Write(GPIOB,
Myservo_Write(GPIOB,

GPIO_Pin_0);
GPIO_Pin_0);
GPIO_Pin_1);
GPIO_Pin_0);
GPIO_Pin_1);
GPIO_Pin_0,
GPIO_Pin_1,
GPIO_Pin_0,
GPIO_Pin_1,

//Right

//Left
//Rotage
//Clamp

right_pos);
left_pos);
rotage_pos);
//Rotage
15);
//Clamp

uint16_t receiveData;
while (1)
{
if (xQueueReceive(queueBuffer, &data_receive, TIME_OUT))
{
if (data_receive == '1')
{
rotage_pos += 5;
if (rotage_pos > 180) rotage_pos = 180;
Myservo_Write(GPIOB, GPIO_Pin_0, rotage_pos);
}
else if (data_receive == '2')
{
rotage_pos -= 5;
if (rotage_pos < 15) rotage_pos = 15;
Myservo_Write(GPIOB, GPIO_Pin_0, rotage_pos);
}
if (data_receive == '3')
{

right_pos += 5;
if (right_pos > 140) right_pos = 140;
Myservo_Write(GPIOA, GPIO_Pin_0, right_pos);
}
else if (data_receive == '4')
{
right_pos -= 5;
if (right_pos < 50) right_pos = 50;
Myservo_Write(GPIOA, GPIO_Pin_0, right_pos);
}
if (data_receive == '5')
{
left_pos += 5;
if (left_pos > 90) left_pos = 90;
Myservo_Write(GPIOA, GPIO_Pin_1, left_pos);
}
else if (data_receive == '6')
{
left_pos -= 5;
if (left_pos < 20) left_pos = 20;
Myservo_Write(GPIOA, GPIO_Pin_1, left_pos);
}
else if (data_receive == '7') Myservo_Write(GPIOB, GPIO_Pin_1, 15);
else if (data_receive == '8') Myservo_Write(GPIOB, GPIO_Pin_1, 30);
else
else
else
else
else


if (data_receive == 'U')
if (data_receive == 'D')
if (data_receive == 'R')
if (data_receive == 'L')
Robot_Stop();
}
vTaskDelay(10);

Robot_Up();
Robot_Down();
Robot_Right();
Robot_Left();

}
}

[24]


Đồ án thiết kế hệ thống nhúng

GVHD: Nguyễn Ngọc Minh

3.4.3 Sử dụng app điều khiển

Hình 3.7 App Bluetooth Electronics trên CH Play


Bước 1: Bật bluetooth trên điện thoại, tiến hành vào giao diện app để tìm kiếm
thiết bị để kết nối




Bước 2: Tìm kiếm thiết bị HC06 khi giao diện máy quét thiết bị thành công

[25]


×