4.2.1. Giới thiệu Digital Input/Output
Hình 4.8 Code Simulink “Tạo tín hiệu tuần hoàn”
Sử dụng Khối rate transion để điều chỉnh tín hiệu liên tục (đường đen) thành tín hiệu rời (đường đỏ)
Hình 4.9 Khối tạo tần số cao
4.2.1.1. Sơ đồ mạch đầu vào
• Pull-Up Input (điện trở kéo lên).
Hình 4.11 Sơ đồ mạch Pull-Up Input
Khi nhấn công tắc thì MCU sẽ hiểu là mức LOW. • Pull-Down Input (điện trở kéo xuống)
Khi nhấn công tắc thì MCU sẽ hiểu là mức HIGH.
Hình 4.12 Sơ đồ mạch Pull-Down Input
• Floating Input (thả nổi)
Điện trở không được kết nối trong MCU nên khi chọn chế độ này cần lắp thêm điện trở bên ngoài (Pull-Up hoặc Pull-Down).
4.2.1.2. Sơ đồ mạch đầu ra
• Push-Pull Output
Mạch điều khiển bên trong có 2 con MOSFET: P-MOS và N-MOS:
Hình 4.13 Sơ đồ mạch Push-Pull Output khi P-MOS mở
Nếu mắc LED theo mạch hình 4.13 trên thì LED sáng khi trạng thái “1”.
Hình 4.14 Sơ đồ mạch Push-Pull Output khi P-MOS đóng
Nếu mắc LED theo mạch hình 4.14 thì LED sáng khi trạng thái “0”. Ưu điểm chọn Push-Pull Output:
- Thích hợp hệ thống yêu cầu đóng ngắt với tần số cao. - Điều khiển trực tiếp đến các thiết bị
Nhược điểm chọn Push-Pull Output:
- Dòng điện bị giới hạn. Các chân của STM34F4 chịu dòng lớn nhất 25 mA (ngoài trừ PC13 – PC15 là 3 mA). Vì vậy ta thường sử dùng điện trở R = 660 Ohm mắc nối tiếp với LED để hạn dòng.
• Open-Drain Output
Chân output được cấp nguồn ngoài (Vext), đèn sáng ở trạng thái “0”. Ưu điểm chọn Push-Pull Output:
- Sử dụng nguồn điện áp ngoài (Vext) nên có thể dùng nguồn điện áp cao hơn VDD. Nhược điểm chọn Push-Pull Output:
- Dòng điện không được quá 25 mA.
4.2.2. Thí nghiệm sử dụng khối Digital Output
4.2.2.1. Cấu hình khối Digital Output
Đường dẫn lấy khối Digital Output: Simulink library >> Waijung Blockset >> STM32F4 Target >> On-chip Peripherals >> I/O >> Digital Output.
Hình 4.15 Khối Digital Output
Chọn cổng (A, B, C, D, E hoặc H) Tần số đầu ra (2, 25, 50, 100)
Chọn mạch Push-Pull hoặc Open-Drain
4.2.2.2. Điều chỉnh thời gian sáng của LED
• Mục đích :
- Giúp người dùng mô phỏng thực tế.
- Biết cách sử dụng khối Pulse Generator để điều chỉnh thời gian sáng của LED. • Tiến hành:
Bảng 4.8 Các khối Simulink cho điều chỉnh thời gian sáng của LED
Tên Khối Thư viện
Khối thiết lập Target Setup Waijung Bolockset / STM32F4 target / Device Configuration
Khối đầu ra Digital Input Waijung Bolockset / STM32F4 target / On Chip Peripheral / IO
Khối tạo xung Pulse Generator Simulink / Sources
Màn hình Scope Simulink / Sink
Chú ý: Trong khối Pulse Generator có một tham số quan trọng gọi là chu kì, dùng để
tính ra độ rộng xung, nó quyết định thời gian sáng và tắt của LED. Ví dụ người dùng muốn sáng trong 1 giây, tắt trong 3 giây và quá trình này xảy ra liên tục. Như vậy độ rộng xung được tính bằng mối quan hệ sau:
% Độ rộng xung: (thời gian LED sáng) x 100/ chu kì
Ở đây chu kì là thời gian LED sáng + thời gian LED tắt = 1 + 3 =4 s Vậy % độ rộng xung là (1) x 100 / 4 = 25%
Người dùng có thể thiết lập khối Pulse Generator như hình .. bên dưới và chọn vào biểu tượng Run như hình.., sau đó nháy đúp vào Scope để xem sóng xung như hình... Trên thực tế người dùng không thể thấy được sự chớp của LED do tốc độ quá nhanh. Nhưng ta vẫn
có thể liên tượng được bằng việc nhìn vào sóng xung, thời điểm xung ở mức cao tương ứng với LED sáng, còn ngược lại mức thấp LED tắt. đồng thời ta nhìn vào cả chu kì thì lấy LED sáng ở 25% của chu kì và tắt ở 75% của chu kì.
Hình 4.18 Cách Run mô hình trên Simulink
Hình 4.19 Thiết lập khối Pulse Generator Bảng 4.9 Mô tả khối Pulse Genertor
Cấu hình Tùy chọn Giá trị Mô tả
Pulse Type Time Based Sample Based
Xung dựa trên thời gian mô phỏng Xung dựa trên thời gian mẫu
Times Use Simulatione
times
Use external signal
Chọn kiểu mô phỏng: sử dụng tín hiệu mô phỏng
Sử dụng tín hiệu bên ngoài
Ampilude Biên độ
Period secs Chu kỳ (T = Ton + Toff)
Pulse width % Độ rộng xung
Phase delay secs Thời gian delay
• Kết quả:
4.2.3. Thí nghiệm sử dụng khối Digital Input
4.2.3.1. Cấu hình khối Digital Input
Đường dẫn lấy khối Digital Output: Simulink library >> Waijung Blockset >> STM32F4 Target >> On-chip Peripherals >> I/O >> Digital Input.
Hình 4.22 Khối Digital Input
Hình 4.20 Kết quả lắp mạch “Điều chỉnh thời gian sáng LED”
Hình 4.23 Hộp thoại Digital Input 4.2.3.2. Điều chỉnh LED bằng nút nhấn
• Mục đích:
- Giúp người dùng đọc giá trị nút nhấn bằng khối Digital Input.
- Giúp người dùng hiểu được mục đích của thí nghiệm qua đó ứng dụng vào thực tế.
• Tiến hành
Chọn cổng (A, B, C, D, E, F, G, H, I) Tần số đầu vào (2, 25, 50, 100) Chọn mạch Pull-Up hoặc Pull-Down
Bảng 4.10 Các khối Simulink cho thí nghiệm “Điều khiển LED bằng nút nhấn”
Tên Khối Thư viện
Khối thiết lập Target Setup Waijung Bolockset / STM32F4 target / Device Configuration
Khối Digital đầu vào Digital Input Waijung Bolockset / STM32F4 target / On Chip Peripheral / IO
Khối Digital đầu ra Digital Output Waijung Bolockset / STM32F4 target / On Chip Peripheral / IO
Khi người dùng chạy chương trình này LED sẽ sáng khi nhấn nút và LED tắt khi nhả nút. Chương trình sẽ luôn gửi tín hiệu khi nhấn nút và ngừng gửi khi nhả nút. Chúng ta thấy mô hình này phù hợp cho việc điều khiển bằng tay như máy cẩu, máy nâng…
• Kết quả
Hình 4.25 Kết quả lắp mạch “Điều khiển LED bằng nút nhấn”
4.3. Sử dụng Timer/Counter 4.3.1. Giới thiệu Timer/Counter 4.3.1. Giới thiệu Timer/Counter
Mỗi vi điều khiển điều có một tín hiệu Clock giúp xử lí chương trình, thông thường Clock thường có tín hiệu Digital với tần số cao và được thiết lập cả trong và ngoài quá trình xử lí dữ liệu. Tốc độ của Clock ảnh hưởng đến khả năng xử lí của Vi điều khiển nhanh hoặc chậm.
Tín hiệu Clock được sử dụng nhiều trong các mô-đun như mô-đun ADC, các mô-đun giao tiếp và đặc biệt là các mô-đun Timer.
• Đặc điểm của mô-đun Timer:
- Thanh ghi của bộ đếm có 16 bit kiểu dữ liệu số nguyên, khi có một cạnh lên hoặc một tín hiệu bên ngoài vào cổng của Timer thì bộ điếm sẽ hoạt động.
- Up counter: bắt đầu đếm từ 0 đến một giá trị đặt trước, khi đến ngưỡng giá trị đặt trước thì bộ đếm sẽ bắt đầu lại 0 và tiếp tục quá trình tương tự.
- Down counter: bắt đầu từ một giá trị đặt trước và đếm lùi về 0, khi về 0 bộ đếm sẽ bắt đầu lại giá trị đặt trước và tiếp tục quá trình tương tự.
- Up-Down counter: bắt đầu đếm từ 0 đến một giá trị đặt trước, khi đến ngưỡng giá trị đặt trước thì bộ đếm lùi về 0.
- Prescaler divider: một mạch đếm nó được dùng để giảm tín hiệu tần số cao thành tín hiệu tần số thấp bằng phép chia số nguyên. Người dùng có thể chọn một giá trị từ 0 đến 65535 như một hàm số chia.
Trong STM32F4DISCOVERY, có 17 mô-đun có kết hợp với tín hiệu Clock và trong đó có 14 mô-đun dùng cho Timer.
Hình 4.26 Sự hoạt động của Timer/Counter khi Prescaler thay đổi từ 1 đến 4
4.3.2. Thí nghiệm sử dụng khối Basic PWM
4.3.2.1. Khái quát PWM
PWM là một tín hiệu dạng sóng tuần hoàn với tần số rời rạc, cho phép có thể điều chỉnh độ rộng xung ở mức cao và mức thấp.
Có hai cách điều chỉnh xung: Dùng công thức tính toán:
% Độ rộng xung: = (𝑡𝑂𝑁 x 100) / Chu kì = (𝑡𝑂𝑁 x 100) / ( 𝑡𝑂𝑁+ 𝑡𝑂𝐹𝐹)
Với Period là chu kì
Việc điều chỉnh độ rộng xung có thể thực hiện bằng việc so sánh hai tín hiệu với nhau. Tín hiệu đầu tiên là tín hiệu tam giác (Triangular signal) tín hiệu thứ hai là tín hiệu mong muốn (reference signal)
Trong STM32F407VG DISCOVERY thường dùng giá trị Counter trong mô-đun Timer. Ví dụ một tín hiệu tam giác với tần số không đổi so sánh với một tín hiệu mong muốn. Nếu giá trị của Counter thấp hơn giá trị tín hiệu mong muốn thì trạng thái tín hiệu đầu ra sẽ được hiểu ở mức ON, còn ngược lại nếu giá trị của Counter cao hơn giá trị tín hiệu mong muốn thì tín hiệu đầu ra sẽ được hiểu ở mức OFF.
Hình 4.28 Điều chỉnh độ rộng xung với cạnh lên Hình 4.27 Cách điều chỉnh độ rộng xung
Ngoài ra giá trị Counter có thể đếm cả cạnh lên và xuống (Up-Down Counter)
Hình 4.29 Điều chỉnh độ rộng xung với cạnh lên và xuống 4.3.2.2. Cấu hình khối Basic PWM
Đường dẫn lấy khối PWM: Simulink Library >> Waijung Blockset >> STM32F4
target >> On Peripheral Chip >> TIM
Hình 4.30 Khối Basic PWM
Chọn Timer từ 1-14
Chu kì của tín hiệu PWM
Chọn các kênh PWM
Chọn cực tính của xung ‘’Cao hoặc Thấp’’
4.3.2.3. Điều chỉnh độ sáng của LED dùng PWM
• Mục đích:
- Điều chỉnh độ rộng xung PWM bằng biến trở. - Điều chỉnh độ rộng xung PWM với nhiều kênh. - Điều chỉnh độ sáng của LED bằng tín hiệu PWM. • Tiến hành:
Giá trị điện áp đầu ra Vout biến thiên theo biến trở và nó được kết nối với chân PA5 còn LED kết nối với chân PA0 như hình.. Biến trở được dùng để điều chỉnh độ rộng xung của giá trị điện áp đọc được từ chân PA5, khi điện áp ở chân PA5 tăng thì độ sáng của LED cũng sẽ tăng theo. Ngược lại khi điện áp ở chân PA5 giảm thì độ sáng của LED cũng sẽ giảm.
Khi LED được nối với chân PA1 độ sáng của LED sẽ tăng chậm và sau đó LED tắt, quá trình này sẽ được lặp lại.
Khi LED được nối với chân PA2 độ sáng của LED sẽ mạnh sau đó giảm dần rồi tắt và lặp lại như vậy.
• Kết quả lắp mạch: .
Hình 4.34 Kết quả đồ thị “Điều chỉnh độ sáng LED dùng PWM”
4.3.3. Thí nghiệm sử dụng khối Encoder Read
4.3.3.1. Giới thiệu khối Encoder Read
Encoder là một thiết bị cơ điện dùng để đo vị trí góc hoặc tốc độ quay của động cơ. Nó bao gồm một đĩa tròn xẽ rãnh được gắn vào trục chính. Đầu đọc gồm 1 - 3 bộ thu phát quang. Đầu ra là xung vuông Độ phân giải Phụ thuộc rãnh trên 1 vòng. Như bộ mã hóa với 180 số kênh có thể đo góc lên tới 360/180 = 2.0 độ.
Khi trục bộ mã hóa bắt đầu xoay, các khe trên đĩa sẽ chạy qua cảm biến ánh sáng. Máy dò ảnh ở đầu thu sẽ cảm nhận tín hiệu ánh sáng và khi bộ cảm biến được kết nối với mạch tín hiệu, hệ thống có thể nhận biết có bao nhiêu độ động cơ đã xoay.
Từ hình 4.35, người ta có thể quan sát thấy các đĩa nằm trong 2 hàng và bị chồng
chéo. Để phát hiện hướng xoay, chẳng hạn như động cơ quay theo chiều kim đồng hồ (CW) hoặc hướng ngược chiều kim đồng hồ (CCW), có thể được thực hiện bằng cách đo chênh lệch pha giữa tín hiệu kênh A và kênh B. Nếu các tín hiệu từ kênh A được dẫn từ tín hiệu của kênh B thì động cơ sẽ chuyển động theo chiều kim đồng hồ và nếu các tín hiệu từ kênh A bị trễ phía sau kênh B, thì động cơ sẽ di chuyển theo hướng ngược chiều kim đồng hồ và điều này được thể hiện trong hình 4.36.
Để phát hiện hướng quay, xung đòi hỏi hai bộ mạch giải mã để biểu thị hướng quay. CW và CCW xoay có giá trị 0 và 1 tương ứng. Dựa trên số đọc của bộ giải mã, tín hiệu đếm sẽ được tăng hoặc giảm.
Hình 4.35 Cấu trúc bộ mã hóa quay
Ngoài ra, một lợi thế khác của việc sử dụng tín hiệu với sự khác biệt pha 90 là người dùng có thể điều chỉnh độ phân giải của số đếm được hiển thị trong Hình 4.37.
Tín hiệu kênh A được chọn làm tín hiệu tham chiếu. Khi các cạnh tăng và giảm của kênh A bằng 3 thì số đếm là (x1). Khi các cạnh tăng và các cạnh rơi của tín hiệu bằng 6 (gấp hai lần số xung tín hiệu) thì số đếm là (x2). Khi các cạnh tăng và giảm của tín hiệu là 12 thì số đếm là (x4) gấp 4 lần số xung tín hiệu kênh A.
Nếu đĩa bộ mã hóa có 180 kênh thì làm thế nào để đếm bốn lần? Vì số kênh trên mỗi chu kỳ bằng 180 x 4 = 720 vị trí nên độ phân giải thấp nhất có thể là 360/720 = 0,5 độ và cứ như vậy.
4.3.3.2. Cấu hình khối Encoder Read
Encoder Read: Đường dẫn lấy khối Digital Output: Simulink library >> Waijung Blockset >> STM32F4 Target >> On-chip Peripherals >> I/O >> TIM >>Encoder Read
Hình 4.37 Giao diện tín hiệu xung vuông
Bảng 4.12 Mô tả khối hộp thoại Encoder Read
Cấu hình Tùy chọn Giá trị Mô tả
Timer 1|2|3|4|5|6|7|8 Chọn kiểu Timer
Channel A, B Kênh đọc tín hiệu encoder
PPR Số xung đếm được khi quay 1 vòng
Reset Counter Chọn/Không chọn
Sample Time giây Thời gian lấy mẫu
• Lưu ý
Số xung mà encoder đọc được tính:
- Từ 0 đến PPRx4 khi sử dụng cả 2 kênh A và B. - Từ 0 đến PPRx2 khi sử dụng 1 trong 2 kênh A, B.
4.3.3.3. Đọc tốc độ động cơ DC dùng khối Encoder Read
• Mục đích:
- Biết cách sử dụng khối Encoder.
- Đọc được tốc độ (xung) của DC thông qua khôi Encoder. - Kết nối Encoder với UART hiển thi tốc độ DC lên máy tính • Tiến hành
Thí nghiệm sẽ được trình bày rõ trong “Chương 5: Mô hình DC motor”.
4.3.4. Thí nghiệm sử dụng khối Timer IRQ
4.3.4.1. Khái quát ngắt ngoài
Được hiểu như là chúng ta tạm thời dừng một việc đang làm để làm một việc nào đó ưu tiên hơn và sau khi hoàn thành việc đó ta sẽ quay lại làm việc đang làm trước đó.
Trong STM32F407VG DISCOVERY có hỗ trợ 82 nguồn của ngắt bao gồm tín hiệu Digital Input, I2C, UART, Timer…
Tại cùng một thời điểm có thể nhiều hơn một lệnh ngắt, ví dụ một chương trình đang chạy có ngắt từ UART và ngắt từ Digital Input từ vi điều khiển. Để giải quyết vấn đề này ta sẽ cần đặt mức ưu tiên có mỗi ngắt và sẽ xử lí theo thứ tự ưu tiên.
4.3.4.2. Cấu hình khối Timer IRQ
Đường dẫn lấy khối Digital Output: Simulink library >> Waijung Blockset >> STM32F4 Target >> On-chip Peripherals >> TIM>> Timer IRQ.
Bảng 4.13 Mô tả khối hộp thoại Timer IRQ
4.3.4.3. Điểu khiển LED dùng khối Timer IRQ
• Mục đích:
- Biết cách sử dụng và chức năng của khối Timer IRQ. - Hiểu được chương trình con điều khiển LED.
• Tiến hành:
Tạo mô hình simulink như hình 4.42 trên với thiết lập 4 khối Timer IRO và chọn TIM2- TIM5 để sử dụng công việc ngắt. Khi có tín hiệu ngắt IRO sẽ truyền tín hiệu đến chương trình con như hình 4.43 để điều khiển LED.
Cấu hình Tùy chọn Gía trị Mô tả
Configuration module Ngắt thường (Basic) Ngắt nâng cao (Advance)
Tùy vào mục đích ngắt Timer mà ta chọn chế độ ngắt
Timer module 1-14 Chọn Timer ứng với chế độ
đã chọn
Priority Chọn chế độ ưu tiên khi cùng
một thời điểm ngắt có nhiều nhiệm vụ
Sample time Thời gian ngắt
Hình 4.43 Chương trình con đọc LED
• Kết quả:
4.4. Sử dụng cổng giao tiếp UART 4.4.1. Giới thiệu UART