1.3. 硬件篇之IO口(視頻連接)


視頻連接

Input/Output簡寫為IO,有些地方也稱為GPIO(General purpose Input Output),是單片機輸入數據和輸出數據的引腳或者叫接口。雖然IO口可以用作輸入和輸出,但在輸入和輸出時使用的底層電路是不一樣的,比如用作輸入的引腳往往配置為高阻態減少電流輸入,這也是使用IO口前必須配置工作狀態的原因。

有些單片機的引腳不能用作輸出,但仍延續IO的叫法,如esp32的IO34、IO35、IO36、IO39。

wps1

wps2

如上圖中,每個排針都有編號,如D2、D4等,這些排針的編號對應着單片機引腳的編號,控制軟件通過編號控制排針的電平,這就是IO口。

宏觀上講,程序中通過編號(如2對應D2口)實例化IO口,然后對IO口的賦值操作直接映射到IO口的電平上,如下例:

from machine import Pin           #導入模塊

Led = Pin(2,Pin.OUT)               #編號2對應D2口

Led.on()                         #D2輸出高電平

Led.off()                         #D2輸出低電平

對單片機控制,實際上就是對單片機的IO口控制,分為三種:

1.3.1. 開關量控制

單片機系統是數字系統,本質上IO口有且只有高電平、低電平兩個狀態,對應於於開關的ON、OFF狀態,所以稱為開關量。

在3.3v的單片機系統中,IO口為1對應着引腳輸出高電平3.3V,IO口為0對應着引腳輸出低電平0V。(嚴格講:這個說法並不准確,因為高低電平是滿足TTL電平的區間值,如在3.3v系統中,大於3v的都是高電平,低於0.3v的都是低電平)。

同理在5v的單片機系統中,IO口為1對應着引腳輸出高電平5.0V,IO口為0對應着引腳輸出低電平0V。

其他類似,不一一列舉。

下圖是單片機系統中LED的2種接法示意圖,LED通過限流電阻接上電源,則可以點亮。LED的亮度與流經LED的電流成非線性正比,電流越大亮度越大。估算時,LED的壓降按2.0v,如下式:

wps3

如,vcc=5v/R=1k時,i≈3MA。

做為指示燈,LED一般工作在1MA左右(亮度適中)。

wps4

上圖中LED的兩種接法,對應兩種控制方式:

方式1,LED負極經由限流電阻接地,單片機IO接LED正極,IO=1時輸出高電平,LED上電點亮,IO=0時輸出低電平,LED兩端均為低電平熄滅。LED點亮時,電流是從單片機流出的,稱為拉電流。

方式2,LED負極經由限流電阻單片機IO,LED正極端接電源,IO=1時輸出高電平,LED兩端均為高電平熄滅,IO=0時輸出低電平,LED上電點亮。LED點亮時,電流是從電源流出的,最終流向單片機,稱為灌電流。

單片機對灌電流的耐受度高於拉電流,所以一般采用第二種模式。

單片機IO口能承受拉電流、灌電流的能力是有限的,過大電流會造成單片機燒毀,這個承受能力稱為單片機IO口的驅動能力。

一般用於驅動LED等小功率器件沒有問題,但驅動不了繼電器等大功率器件。要驅動大功率器件,需要用到轉換電路,如圖是常用的功率轉換器件--光耦的工作原理:

wps5wps6wps7

1.3.2. PWM模式

PWM全稱脈沖寬度調制(Pulse width modulation,PWM)技術,通過調整特定頻率的矩形波占空比,達到控制的目的。

PWM有兩個主要參數,頻率和占空比。頻率反映的是IO口切換一次高、低電平的時間間隔。占空比反映的是在一次切換周期內,高、低電平的占比。

占空比的小數范圍是0~1。但單片機系統對小數運算會占用更多的資源,所以往往用整形替代,比如micropython中使用0~1023的整形對應0~1的小數,相當於把0~1分成1024份,並一一對應。

直接影響是占空比的計算方式隨取整區間變化,如下圖所示的案例中,時間間隔t=1S對應的是頻率f,f=1/t。0.75s對應的是占空比duty,在這個實驗條件下duty=((0.75*1024/t)-1)=767。

wps8

備注:占空比duty在不同的技術平台下可用賦值區間不同。

1.3.3. 模擬量控制

更進一步,在PMW輸出的方波尾端增加低通濾波器,經過低通濾波后將輸出一個恆定的電壓值,該電壓值與占空比成線性關系,這就是DAC轉換。

在現有實驗條件下,相當於把3.3v的高電平分成1024小段,每一段對應這一個電平。

有些單片機的特定IO口集成了DAC轉換功能,設定指定的值會自動轉換為對應的模擬量輸出。

1.3.4. IO口編號

不同的單片機采用不同的IO口編號模式,如stm32單片機有GPIOA、GPIOB...,Esp32單片機有IO0、IO1...。

不同的編程環境也有不同的編號方式,如micropython中采用順序編號,arduino對應stm32單片機時則采用pa0、pa1...等類似編號。

根據單片機及編程環境,選擇適用的編號,則可以直接操控單片機對應的IO口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM