1. Trang chủ
  2. » Luận Văn - Báo Cáo

Đề tài giao tiếp c# và vxl (avr or arm or pic) sử dụng ivi com driver

72 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Giao Tiếp C# Và VXL (AVR Or ARM Or PIC) Sử Dụng IVI-COM Driver
Tác giả Phạm Lợi Hữu, Nguyễn Văn Nam
Người hướng dẫn Nguyễn Trọng Tài
Trường học Đại Học Quốc Gia Thành Phố Hồ Chí Minh
Thể loại báo cáo
Năm xuất bản 2024
Thành phố TP. HO CHI MINH
Định dạng
Số trang 72
Dung lượng 6,73 MB

Nội dung

STM32F103CST6: Sử dụng vị điều khiển này để thực hiện việc đọc tín hiệu từ encoder, tính toán và điều khiển dong co DC.. - Dé xm việc do các công ty vừa và nhỏ sử dung STM32 trong cac in

Trang 1

DAI HOC QUOC GIA THANH PHO HO CHI MINH

TRUONG DAI HOC BACH KHOA

Trang 2

MUC LUC

CHƯƠNG 2: Giới thiệu về vi điều khiến STM32F103C8T6 và môi trường phát triển sử dụng 5 2.1 Giới thiệu về vi điều khiển STM32F103C8T6 5

2.4.2 STMB2F103CBT6 cccccsssscescessessesssessessesssssscssessssssessessnsssessesseessessesaseesssseescessseaceacearecsesteseeesceneeses 6

2.2 Động cơ Dc-encoder 9

CHƯƠNG 3: Thiết kế mạch điều khiến và kết nối với động cơ DC -encoder 5 -<ccseccesee 13 3.1 L298 là gøì, có chức năng gì? 14 3.2 Thông tin động cơ DC-encoder 15

CHƯƠNG 4: Lập trình vi điều khiển SIM32F103C§T6 để đọc thông tin từ encoder và điều khiến động

4.3 Code stm32 27

5.1 Tong Quan về Winform C# 48 5.2 Giao Diện vad code C# 49 5.3 Code winform C# 49 5.4 Giải thích phần chính của code 54 CHƯƠNG ó: Kết quả mô phỏng, 58 6.1 Kết quả mô phông 58

Trang 3

LOI MO DAU

Ngày nay với sự phát trién cia khoa hoc ki thuật STM32 cũng trở nên phổ biến trong nhiều lĩnh vực xuất hiện nhiều trong các ngành công nghiệp, y tế, giám sát điều khiển, Trong bài báo cáo này em sẽ trình bày một số niệm liên qua đến stm32 và sử dụng stm32 đề điều khiển động cơ DC Trong quá trình thực hiện em vẫn còn l số thiếu sót em mong đợi những góp ý từ thầy cô để em có thê hoàn thiện hơn

Em chân thành cảm ơn cô Hồ Thanh Phương đã giành thời gian hướng đẫn và chỉ bảo

tận tính trong suốt quá trình em thực hiện đề tài để có được kết quả tốt nhất

Trang 4

CHUONG 1: Giới thiệu về Đề Tài

Tổng quan về đề tài

Xây dựng mô hình phần cứng và giải thuật điều khiển có hồi tiếp động cơ (DC/AC/BLDC, không dùng động cơ step), khảo sát đáp ứng của hệ thống bằng phần mềm máy tính (hoặc wed app) Trong đề tài này em sử dựng STM32fI03c8t6 đề thực hiện điều khiển động cơ DC-encoder

Vẻ Cầu trúc phân cứng:

Động cơ DC: Sử dụng một động cơ DC dé thực hiện các thử nghiệm và đo lường đáp

ứng của hệ thống điều khiên

Encoder: Kết nối một encoder với động cơ DC đề do vị trí và tốc độ quay của động cơ

STM32F103CST6: Sử dụng vị điều khiển này để thực hiện việc đọc tín hiệu từ encoder, tính toán và điều khiển dong co DC

Giao tiếp: Kết nói STM32F103C8T6 với máy tính thông qua giao tiếp nối tiếp UART

dé truyén dữ liệu va diéu khién từ xa

Giải thuật điều khiển:

Phần mềm điều khiến: Sử dụng STM32Cube[IDE hoặc các công cụ phat triển khác đề

lập trình vi điều khiển STM32F103C§Tó6 Sử dụng ngôn ngữ lập trình như C/C++ để triển khai các giải thuật điều khiên

Đọc encoder: Viết mã đề đọc tín hiệu từ encoder và tính toán vị trí và tốc độ quay của dong co DC

Điều khiển: Áp đụng một phương pháp điều khién nhu diéu khién PID (Proportional-

Integral-Derivative) dé diéu khién động cơ DC dựa trên thông tm từ encoder

Giao tiếp: Xây đựng giao tiếp giữa vi điều khiển STM32F103C§T6 va may tinh dé

truyền đữ liệu đo lường và điều khiên từ xa

Phân mềm máy tính hoặc web app:

Trang 5

Xây dựng phần mềm may tinh dé hién thi dữ liệu đo lường từ encoder và gửi tín hiệu

điều khiến đến vi điều khiển STM32F103C§T6

Sử dụng các công nghệ phần mềm C# đề xây dựng giao diện người dùng và giao tiếp với vi điều khiển qua giao tiếp nối tiếp UART

Trang 6

CHUONG 2: Giéi thiéu vé vi diéu khién STM32F103C8T6 va méi

trường phát triên sử dụng 2.1 Giới thiệu về vi điều khiển STM32F103C§T6

2.1.1 STM32 la gi?

STM32 là một dòng vi điều khiên (MCU - Microcontroller Unit) phé bién diroc san

xuất bởi cong ty STMicroelectronics STM32 noi tiéng với sự linh hoạt và hiệu suất cao, là

sự lựa chọn hàng đầu trong nhiều ứng dụng nhúng và dự án IoT (Internet of Things)

Lập trình STM32 nói riêng hay lập trình Vi Điều Khiên (MCU) đều sử đụng 2 ngôn

ngữ chính đó là C và C++

Đặc điểm chính của vi điều khiển STM32:

- - Kiến trúc ARM Cortex-M: Các dòng STM32 thường sử dụng các lõi vi xử ly ARM Cortex-M, cung cấp hiệu suất mạnh mẽ và tiêu thụ năng lượng hiệu quả

‹ - Dải sản phẩm đa dạng: STM32 cung cấp nhiều đòng sản phẩm với các tính năng và cầu hình khác nhau, từ dòng F0 đành cho ứng dụng giá rẻ, đòng F1 dành cho các ứng

dụng đòi hỏi hiệu suất cao, đến đòng H7 với hiệu suất cao và các tính năng đặc biệt

‹ - Bộ nhớ dữ liệu và chương trình: Hầu hết các dòng STM32 có các tùy chọn bộ nhớ

flash (ROM) và RAM khác nhau, cung cấp linh hoạt cho các ứng dụng khác nhau

‹ - Tích hợp nhiều chức năng: STM32 thường được tích hợp với nhiều chức năng

nhu GPIO, USART, SPI, 12C, CAN, ADC, DAC, PWM, timers, va cac tinh nang

khác, giúp giảm chi phí và diện tích mạch in PCB

‹ - Hỗ trợ phần mềm đa dạng: STMicroelectronics cung cấp nhiều công cụ phần mềm

hỗ trợ như STM32CubeMX và STM32CubeIDE để giúp để đàng hóa quá trình phát triên

¢ Thưyiện chuẩn CMSIS và HAL: Sử dụng thư viện CMSIS (Cortex

Microcontroller Software Interface Standard) va HAL (Hardware Abstraction Layer), việc lập trình trở nên thuận tiện và chuyên nghiệp

‹ _ Hỗ trợ cộng đồng mạnh mẽ: Cộng đồng người dùng STM32 rộng lớn, có nhiều tài nguyên trực tuyển, diễn đàn, và mã nguôn mở đề hô trợ người dùng

Trang 7

* Téc dé xt ly cao, ngoai Vi hỗ trợ rất nhiều, dong chip phan khuc thap la

STM32F0x cting co the hoat động lên tới 4SMhz, 64kB Flash, I6kB RAM, § bộ

Timer 16 bit, 1 b6 Timer 32 bit, 10 b6 ADC 12 bit, 8 b6 USART, 2 bộ SPI, 2 bộ

ĐC

« Gia thành rẻ nhưng hiệu quả đem lại lớn

¢ Hoc lap trinh STM32 rat dé dàng do cộng đồng hỗ trợ nhiều

- Dé xm việc do các công ty vừa và nhỏ sử dung STM32 trong cac ing dung rất nhiêu

« _ Công cụ lập trình đều Free và đầy đủ tài liệu hỗ trợ

Vi điều khiển STM32 là một công cụ mạnh mẽ cho các nhà phát triển nhúng, từ

những dự án nhỏ đến các ứng dụng phức tạp đòi hỏi hiệu suât và độ tin cậy cao

2.1.2 STM32F103C8T6

HÌNH I.STM32F103C§T6

Trang 8

STM832 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ư EF0,F1,F2,F3,F4 Stm32f103 thuộc họ F1 với lõi là ARM COTEX M3 STM32F103 là vị

điều khiến 32 bít, 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à để sử dụng Một số ứng dụng chính: dùng cho driver để điều khiển ứng dụng, điều khiển ứng dụng thông thường, thiết bị cầm tay và thuốc, máy tính và thiết bị ngoại vi chơi game, GPS

cơ bản, các ứng dụng trong công nghiệp, thiết bị lập trình PLC, biến tần, máy in, máy quét,

hệ thông cảnh báo, thiết bị liên lạc nội bộ

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 G day minh str dung Keil C nén các bài viết sau mình chỉ đề cập đến Keil C

Thu vién lap trinh: co nhiều loại thư viện lập trình cho STM32 như: STM32snippets,

STM32Cube LL, STM32Cube HAL, Standard Peripheral Libraries, Mbed core Mỗi thư viện đều có ưu và khuyết điểm riêng, ở đây mình xin phép sử dụng Standard Peripheral Libraries vì nó ra đời khá lâu và khá thông dụng, hỗ trợ nhiều ngoại vi và cũng dễ hiểu rõ

bản chất của lập trình

Mach nap: co kha nhiéu loại mạch nạp nhu : ULINK, J-LINK , CMSIS-DAP,

STLINK ở đây mình sử dụng Stlink vì giá thành khá rả và debug lỗi cũng tốt

Board đề lập trình: các bạn có thé mua san 1 số kít ra chân đã có sẵn trên thị trường

hoặc thiết kế l cái board dành riêng cho bản thân mình Ở đây mình đã thiết kế 1 board đã

tích hợp sẵn mạch nạp, mình cũng đã test và chạy khá ôn, debug bằng Keil C khá giống với

phiên bản STlink V2 trên thị trường

So luoc vé STM32F 103C8T6:

¢ 1 cong Mini USB ding dé cap ngu6n, nạp cũng như debug

¢ C6 chan Output riêng cho các chân mạch nạp trên MCU]

Trang 9

© Chan cap nguén ngoai riéng cho MCU2 néu khéng str dung nguén tir USB

e =Thach anh 32,768khz dung cho RTC va Backup

e Chan nap ding cho chế độ nap boot loader

¢ Nut Reset ngoai va | led hiển thi trén chan PB9, 1 led bao nguồn cho MCU2

Thành phần: Board có thê sử dụng một số loại MCU 48 pin của ST(vì sơ đồ chân

cũng khá tương đồng giữa các dòng F0, Fl, F2, F3, F4) như : STM32F100C§Tó,

STM32F 103C8T6, STM32F303CCT6

Cầu hình chỉ tiết của STM32F103C8176:

ARM 32-bit Cortex M3 với clock max là 72Mhz

Thạch anh nội dùng dao động RC ở mode 8Mhhz hoặc 40khz

Sử dụng thạch anh ngoài 32.768khz được str dung cho RTC

Trong trường hợp điện áp thấp:

Co cac mode :ngủ, ngừng hoạt động hoặc hoạt động ở chế độ chờ

Cấp nguồn ở chân Vbat bằng pin đề hoạt động bộ RTC và sử dụng lưu trữ data khi mat ngu6n cap chính

Trang 10

2 bộ ADC 12 bít với 9 kênh cho mỗi bộ.

Trang 11

Khoảng giá tri chuyén doi tir 0 —

3.6V Lay mau nhiéu kénh hoac 1

kénh

Có cảm biến nhiệt độ nội

CPU DMA: bộ chuyên đối này giúp tăng tốc độ xử lý do không có sự can thiệp quá sâu của

7 kênh DMA

Hỗ trợ DMA cho ADC, I2C, SPI, UART

7 timer

3 timer 16 bít hỗ trợ các mode IC/OC/PWM

1 timer 16 bít hỗ trợ để điều khiên động cơ với các mode bảo vệ như ngắt input, dead- time

2 watdog timer dùng để bảo vệ và kiểm tra lỗi

1 sysTick timer 24 bit đêm xuống dùng cho các ứng dụng như ham

Delay Hỗ trợ 9 kênh giao tiếp bao gồm:

2 bộ I2C(SMBus/PMBuạ)

3 bộ USART(SO 7816 mferface, LIN, IrDA capability, modem

control) 2 SPIs (18 Mbit/s)

1 b6 CAN interface (2.0B

Active) USB 2.0 full-speed

interface Kiểm tra lỗi CRC và

96-bit ID

2.2 Động cơ Dc-encoder

Động cơ Encoder (motor encoder, tiéng Anh la Rotary Encoder) la tén cua 1 loai

10

Trang 12

động cơ có phần con quay được tích hợp trong 1 hệ thống tự động nhằm mục đích tạo tín

hiệu xung trong hoạt động điều khiển động cơ hoặc các máy móc, thiết bị vận hành trong

quá trình sản xuất

Trang 13

Thong thudng, ngudi ta hay goi la Quadrature Encoder, Linear Encoder, Rotary Encoder, hoặc có thể gọi tắt là encoder Mặc dù có khá nhiều tên gọi nhưng mục đích chủ yếu của các dòng encoder chính là thực hiện mã hóa số vòng quay nhằm mục đích tạo tín hiệu xung có dạng vuông ở trong quá trình điều khiển động cơ

Dựa trên sơ đồ tín hiệu có đạng nhị phân thì tất cả các đòng encoder đều có thê hỗ trợ

hoán đổi được các vị trí góc hoặc các vị trí thăng căn cứ theo yêu cầu người sử dụng có mong muốn dịch chuyên đến vị trí điều khiển như thể nao

Cấu tạo và nguyên lý hoạt động:

Các đòng động cơ DC ecoder thường có cầu tạo khá đơn giản, bao gồm I thanh đĩa inox tròn được gắn vào l cái trục quay, trong đó:

Có 2 đèn led ở dưới dạng thu và phát,

Lớp boar mạch giúp bạn phân tích và xử lý dữ liệu

Encoder hoạt động tuân theo nguyên lý đó là khi ta cung cấp nguồn cho nó và khi tất

cả các trục quay đều hoạt động Đồng thời, động cơ còn tạo cho đĩa tròn được xoay vòng khi bạn đã xoay kéo theo chiếc đèn led sáng

Tất nhiên, ở trên đĩa tròn xoay còn có | cai lỗ và các lỗ này cũng được xen kẽ nhau Dựa vào đó, hệ thống xử lý vi boar mạch sẽ đếm tất cả các lượt quay bằng cách đèn xuyên qua lỗ, hoặc có thể không xuyên qua bằng I con bắt tích hợp ở trong đó truyền báo về

Cũng chính vì vậy, các xung vuông của động cơ được tạo ra và bạn có thể đếm được

thông qua độ cắt của ánh sáng từ chiếc đèn led thông qua các lỗ hồng trên

Trang 14

Động cơ Ecoder „x2

PHOTO SENSOR

SQUARING CIRCUIT

Hình 2 Encoder tạo ra tín hiệu xung căn cứ vào số lần ánh sáng đèn led cat dĩa inox Chắc chắn, trong khi đó tín hiệu xung vuông đang có khả năng tăng giảm theo yêu cầu Bên cạnh đó, nếu nó ở gần các động cơ lớn hoặc bộ phận biến tan sé gây ra tín hiệu làm

nhiều xung, đo đó gây ra tỉnh trạng mất độ chính xác cho động cơ encoder trong khi hoạt động

Do đó, động cơ encoder có nhiệm vụ quan trọng là tạo các điểm xung vuông trên đồ thi sao cho chúng lệch nhau I góc 90 độ Từ 2 tín hiệu lệch góc đó, các bạn sẽ xác định được

hướng quay cũng như vi tri quay cua con motor servo

2.3 Môi trường phát trién STM32F103C8T6

Môi trường phát triển chính cho vi diéu khién STM32F 103C8T6 la STM32CubelDE

Đây là một công cụ phát triển tích hợp (IDE) cung cấp môi trường phát triển hoàn chỉnh cho

vi điều khién STM32 của STMIicroelectronics.

Trang 15

STM32CubeIDE là một IDE dựa trên Eclipse, cung cấp các tính năng như viết mã,

biên dịch, gỡ lỗi và nạp chương trình cho vi điều khiên STM32F103C§T6 Nó hỗ trợ nhiều

ngôn ngữ lập trình như C và C++

Đặc điểm chính của STM32CubeIDE bao gồm:

Trình biên dich: STM32CubeIDE tich hop bd bién dich GCC (GNU Compiler Collection) dé bién dich mã nguồn thành mã máy thích hợp cho vi điều khiển STM32F103C8T6

Gỡ lỗi: STM232CubeIDE cho phép gỡ lỗi chương trình trực tiếp trên vi điều khién No cung cấp các tính năng như theo dõi biến, bước từng bước (step-by-step) và gỡ lỗi tín hiệu

Cầu hình phần cứng: STM32CubeIDE đi kèm với STM32CubeMX, một công cụ cho

phép bạn cầu hình phần cứng của vi điều khiên STM32F103C§T6 thông qua giao diện đồ họa Bạn có thê chọn các chức năng ngoại vi, thiết lập chân GPIO, cầu hình giao tiếp và nhiều hơn nữa

Thư viện và bộ phân phối: STM32CubeIDE đi kèm với STM32CubeF1, một bộ phần

mềm đi kèm với các thư viện, bộ điều khiển và ví dụ ứng dụng để bạn có thê bắt đầu phát

triển dự án trên vi điều khiển STM32F103C§T6 một cách nhanh chóng.

Trang 16

CHUONG 3: Thiét kế mạch điều khiến và kết nối với động cơ DC -

mE: = IN4 OUT2 i

Hình3 Sơ đồ mạch kết noi vi điều khiển và động cơ DC-encoder

Trong đồ án này em sử dụng proteus để mô phỏng bao gồm vi điều khiển STM32F103C8T6, L298, mạch đảo chiều , động cơ DC-encoder Chân PB6 của vi điều

khiển nối với chân ENA của I298 và chân A của OC§ILLOSCOPE, chân INI và chân IN2 nối lần lượt với chân IN1 và chân IN2 của L298 Về phan L298 cấp nguồn 12v và chân I,

15, 8 nỗi đất Phần mạch đảo chiều bao gồm 4 diode theo tu ty la d1.d2.d3.d4 Khi co dong

điện chạy qua DI và D4 thì động cơ quay theo chiều thuận, Khi dòng chạy qua D2 Và D3 thì động cơ quay ngược chiều Ngõ ra của mạch kết nối với VCC và GND của DC-encoder

Trang 17

U6 EE D1 + D2

UF4001 UF4001

Chức năng chính của vi mach L298 bao gồm:

Điều khiên động cơ: L298 cho phép người dùng điều khiển tốc độ quay và hướng quay của động cơ DC Nó được thiết kế để hoạt động với các động cơ DC có dòng điện lớn

và có thê điều khiển động cơ với đòng điện lên đến 2A

Đảo chiều quay động cơ: L298 có khả năng đảo chiều quay của động cơ DC, cho phép quay theo cả hai chiều (thuận và ngược) thông qua các tín hiệu điều khiến

Bảo vệ quá dòng: L298 có tích hợp chức năng bảo vệ quá đòng đề ngăn chặn thiết bị

bị hỏng trong trường hợp dòng điện vượt quá giới hạn cho phép

Giao tiếp: L298 sử dụng giao điện điều khiển đơn giản, thông qua tín hiệu điều khiển

từ vi điều khiển như Arduino hoặc vi điều khiên STM32 Thông qua các tín hiệu điều khiển,

người dùng có thể kiểm soát tốc độ quay và hướng quay của động cơ DC

Trang 18

Két néi: L298 co cac chan két néi cho nguén cấp, đầu vào tín hiệu điều khién va dau

Part Value: Hidden: () Help

LISA Model File: ENCMOTOR Hide All Nhi Cancel

(_) Exclude from Simulation

@ Exclude from PCB Layout Hide common pins

Exclude from Current Variant

Hình 5: thông số của động cơ DC-encoder

Điện áp danh định (Nominal Voltage: 12V): Đây là điện áp mà động cơ được thiết

kế để hoạt động hiệu quả nhất

Trang 19

Điện trở cuộn dây (Cọl Resistance: 50): Day là sức kháng của cuộn dây trong động

cơ, ảnh hưởng đến hiệu suất và nhiệt độ hoạt động của động cơ

Từ trở cuộn dây (Coil Inductance: 100mH): Dây là thơng số cho biết sự tự chủ về

từ tính của cuộn dây, liên quan tới tốc độ phản hồi và hiệu suất cua motor

Vịng quay khơng tải (Zero Load RPM: 800): Đây là tốc độ vịng quay mỗi phút khi khơng cĩ tải, cho biết tốc độ tối đa mà motor cĩ thê chạy mà khơng cĩ gánh nặng nào Tải/Torque tối đã (Load/Max Torque %: 90): Đây là phần trăm momen xoắn tối

đã so với momen xoắn khi khơng cĩ tải; cho biết sức mạnh và khả năng xử lý gánh nặng của

motor

Khối lượng hiệu quả (Effective Mass: 0.01): Đây là khối lượng hiệu quả liên quan toi inercia va kha năng xử lý gánh nặng xoay vịng của motOr

Xung mỗi vịng quay (Pulses per Revolution: 360): Đây là số xung trong mỗi chu kỳ

xoay, thường được sử dụng dé kiểm sốt và theo dõi vị trí hoặc tốc độ xoay

Ngồi ra cịn 1 cơng com hỗ trợ giao tiếp giữ máy tính và uartl

Trang 20

Hình 6: cổng com Cổng com kết nối với 2 chân PA9 và PA10 của STM32F103C§T6 tương ứng với 2 chân TX(transmrt) và chân RX(recerver) đảm nhận chức năng truyền và nhận dữ liệu của uart]

Part Reference:

Part Value:

VSM Model:

Physical Baud Rate:

Physical Data Bits:

Physical Parity:

Virtual Baud Rate:

Virtual Data Bits:

Công com nay str dung Com4 voi Baud rate 9600, Databit 8, Party NONE Céng com ding

đề giao tiệp stm32 với máy tính

Trang 21

CHUONG 4: Lập trình vi điều khiến STM32F103C8T6 để đọc thông

tin từ encoder và điêu khiên động cơ DC

4.1 Phần cứng của STM32F103C§T6

Về phần mèn lập trình em sử dựng phần mềm STM32CubeIDE ,phần mềm nay pho biến được sử dụng để phát triển ứng dụng trên vi điều khiển STM32 là STM32CubeIDE Đây là một môi trường phát triển tích hợp (IDE) được cung cấp bởi STMicroelectronics, nhằm hỗ trợ việc lập trình và phát triển ứng dụng trên các dòng vi điều khiển STM32 STM32CubeIDE dựa trên nền tảng Eclipse và cung cấp các tính năng như lập trình, biên dịch, gỡ lỗi và nạp chương trình cho vi điều khiển STM32 Nó hỗ trợ nhiều ngôn ngữ lập trình như C và C++

Trong STM32CubeIDE, bạn cũng có thê sử dụng công cụ STM32CubeMX đề cấu

hình phân cứng của vị điều khiên STM32 và tự động tạo mã mau dé bắt đầu phát triển ứng dụng

20

Trang 22

Hinh 8: phan cimg stm32f103c8t6

Đầu tiên ta khởi tạo các chân PBI3,PBI14,PBI5 với chức năng input, chan PB3,PB4, PB5 chức năng output các chân này dùng đề điều khiến [298

Về chân PBI3, PBI14, PBIS :

PB13 nía n/a Input Pull-up n/a

PB14 nía n/a Input Pull-up n/a

PB15 nía n/a Input Pull-up n/a BES!

Hinh 9 cau hinh input

3 chân này sử dụng GPIO ở chế độ Pull-up ( điện trở kéo lên)

Vẻ chân PB3,PB4, PB5:

21

Trang 23

PBH4 nía Low Outp No pu High

PBS n/a Low Outp No pu High

Hinh 10: cau hinh output

Cac chan nay có ng6 ra o muc high(cao)

Tiếp theo ta khởi tạo uartl tương ứng với chân PA9 và PALO

USAR! wiuue anu vurmgurauon

® }JVIC Settings @ DMA Settings @ GPIO Settings

® Parameter Settings ® User Constants

NVIC Interrupt Table — Sub Priority

DMA‘1 channel5 global interrupt

USART1 global interrupt 1

22

Trang 24

Hinh1 1: cau hinh uart!

Đối với uart | ta str dung mode Asynchronous ( khéng déng b6) và cho phép nhắt với Preemption Prority la 1

v Basic Parameters

Baud Rate 9600 Bits/s Word Length 8 Bits (including Parity) Parity None

Stop Bits 1

Hinh12: setting uartl

Với baud Rate là 9600 trùng với dữ liệu truyền của máy tính và cổng com

PA0-W n/a na Externa No pull- n/a

PA1 na na Input m No pull- n/a L]

Hình 14 Chân PA0,PAI

23

Trang 25

Chân Pal này cĩ chức năng tạo xung và ở chế độ input, cho phép ngắt Pa0 , chân này cho phép kích cạnh xuơng

Tiếp theo là timer4 tương ứng với chân PBĩ

VIOäE

Slave Mode |Disable v

Trigger Source |Disable Vv

® Parameter Settings ® User Constants

Configure the below parameters |

Y Counter Settings

Prescaler (PSC - 16 bits v 8

Counter Mode Up

Counter Period (AutoReloa 1000

Internal Clock Division (CKD) No Division

auto-reload preload Disable

*⁄ Trigger Output (TRGO) Parameters

Master/Slave Mode (MSM Disable (Trigger input effect not delay

Hình 15: Cấu hình timer4

Ta chon Internal Clock va Channel 1 la PWM Generation CH1 gia tri scale la 8 va couter 1000

24

Trang 26

Tiếp theo là sys tương ứng với chân pal4

eS

BeBug! Serial Wire v

@ System Wake-Up

Timebase Source |SysTick v

Hinh 16: cau hinh sys

Chon Serial Wire

Tiép theo la timer2

25

Trang 27

Slave Mode [Disable v |

Trigger Source [Disable v |

Clock Source lInternal Clock vị

Prescaler (PSC - 16 bits v 800

Counter Mode Up

Counter Period (AutoReloa 1000

Internal Clock Division (CKD) No Division

auto-reload preload Disable

¢ Trigger Output (TRGO) Parameters

Master/Slave Mode (MSM Disable (Trigger input effect not delay

Trigger Event Selection Reset (UG bit from TIMx_EGR)

Hinh 17: cấu hình timer2

Chịn xung clock la internal clock tức giao động nội, scaler 800, counter 1000, cho phép

ngắt trong ing vs chu ki 0.1s

Cuối cùng ta dùng thêm timer 1 dé đo vận tốc

26

Trang 28

Trigger Source [Disable v |

Clock Source lInteral Clock v |

Counter Period (AutoReloa

Internal Clock Division (CKD) No Division

Repetition Counter (RCR - 0

auto-reload preload Disable

* Trigger Output (TRGO) Parameters

x HH HH em — - ls

Hình 18: Cau hinh timer]

Vai clock la internal clock ( giao động noi), scaler 800, couter 1000 tương ứng vs chu

kì 0,1s, và cho phép ngát ở chế độ Timerl update interrupt

Công thức tinh chu ki

F

Tgcalescounier

Voi F=8M hz

27

Trang 29

Voi CCR là giá trị thanh ghi CCR

ARR la gia tri thanh ghi ARR

28

Trang 30

> Error = setpoint -outpu:

Y(t)= Kp*e(t) +KÍ* l e(0dr +Kd*" e@)

™ derivatiye = (error - errpr_truoc) / Delta_t,

Y(t)= Kp*e(t) +Ki* f e(t)dr + Kd** e(t)

0 dt

> output = (Kp * error) + (Ki * integral) + (Kd * derivative);

chu thich: derivative la: ¢ e(t )

Trang 31

/* USER CODE BEGIN Header */

* This software is licensed under terms that can be found in the LICENSE file

* in the root directory of this software component

* Ifno LICENSE file comes with this software, it is provided AS-IS

Trang 32

/* USER CODE END PTD */

/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro

*/

*/

/* USER CODE BEGIN PM */

/* USER CODE END PM */

volatile uint8_t buffer[4];

/* USER CODE END PV */

void SystemClock_Config(void);

static void MX_GPIO_Init(void);

static void MX_DMA _Init(void);

static void MX_TIM4_Init(void);

static void MX_TIM2_Init(void);

static void MX_TIM1_Init(void);

31

Trang 33

static void MX_USART1_UART_Init(void):

/* USER CODE BEGIN PFP */

32

Trang 34

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

#define GPIO_NN_Thuan GPIOB

#define GPIO_PIN_NN_Thuan GPIO PIN 13

#define GPIO_NN_Nghich GPIOB

#define GPIO_PIN_NN_Nghích GPIO PIN 14

#define GPIO_NN_ Dung GPIOB

#define GPIO_IN1 GPIOB

#define GPIO_PIN_IN1 GPIO_ PIN 3

#define GPIO_IN2 GPIOB

#define GPIO_PIN_IN2 GPIO PIN 4

#define GPIO_ENA GPIOB

#define GPIO_PIN_ENA GPIO PIN Š

int Trang Thai = 0;

void Xuat_PWM(TIM_HandleTypeDef *htim, uint32_t Channel, float Duty_Cycle) Duty_Cycle = Duty_Cycle / 100 * htim->Instance->ARR;

HAL TIM SET COMPARE(htim, Channel, (uintl6_t)Duty_ Cycle);

}

void QuayThuan() {

HAL_GPIO_WritePin(GPIO_IN1, GPIO_PIN_INI, GPIO_PIN SET);

HAL_GPIO_WritePin(GPIO_IN2, GPIO_PIN_IN2, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIO_ENA, GPIO_PIN_ ENA, GP/O_PIN_ SET),

}

void QuayNghich() {

HAL_GPIO_WritePin(GPIO_IN1, GPIO_PIN_INI, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIO_IN2, GPIO_PIN_IN2, GPIO_PIN_ SET);

HAL_GPIO_WritePin(GPIO_ENA, GPIO_PIN_ ENA, GP/O_PIN_ SET),

}

void Dung() {

HAL_GPIO_WritePin(GPIO_IN1, GPIO_PIN_INI, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIO_IN2, GPIO_PIN_IN2, GPIO_PIN_RESET);

HAL_GPIO_WritePin(GPIO_ENA, GPIO_PIN ENA, GPIO_PIN RESET);

33

Trang 35

Trang Thai = 0;

}

}

volatile long xung;

void HAL_GPIO_EXTL Callback(uint16_t GPIO_Pin) £{

if (HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1) == 0) {

xung ;

} else {xung++;}

volatile float giatrido_hientai, error = 0, error_truoc = 0;

volatile static float integral = 0, derivative = 0;

volatile float setpoint = 50, Kp =2, Ki=1, Kd=1;

volatile float Delta_t = 0.1;

volatile float output;

volatile static float xung_ vantoc_hientai, xung_vantoc_truoc = 0;

volatile static float Delta time vantoc = 0.1;

volatile static float vantoc;

volatile float number;

Trang 36

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {

if (htim == &htim1) {

HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_7);

xung_ vantoc_hientai = xung:

vantoc = (xung_vantoc_hientai - xung vantoc truoc)/360

xung vantoc truoc = xung vantoc_hiental;

}

if (htim == &htim2) {

giatrido_hientai = vantoc;

error = setpoint - giatrido_hientat;

integral = integral + (error * Delta_t);

derivative = (error - error_truoc) / Delta_t;

output = (Kp * error) + (Ki * integral) + (Kd * derivative);

/* USER CODE BEGIN 1 */

/* USER CODE END 1 */

35

Ngày đăng: 19/12/2024, 15:35

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN