最近一周多的時間開始學習并自己動手制作了一個循跡小車,主要運用的就是tb6612芯片以及紅外避障模塊,這篇博客主要就是總結一下在制作小車過程中學習到的知識以及問題。
一、有關IO輸出輸入的總結
在這次小車制作中,我使用到的有tb6612電機驅動芯片和MH-Sensor-Series紅外循跡避障模塊,兩者的使用方法都不是很復雜,只需要在對應的引腳上接高低電平或者接輸入引腳即可,但正是這么基礎的引腳操作中也發現了很多小細節,有同學在制作小車的過程中就遇到了寫完代碼根本沒達到預期效果,后來才發現是一些引腳的模式或者使能問題,因此我也更詳細學習了一下IO口的八種輸入輸出模式。
下面就是我個人對這幾種模式的理解
一、輸入模式
1. 浮空輸入(GPIO_Mode_IN_FLOATING)
該模式主要針對芯片本身,以及其他的邏輯器件(即由大量邏輯開關組成的元器件),在該模式下,引腳既不表現為高電平也不表現為低電平,如果用電壓表測量測得的可能也有所不同。
浮空輸入大多數情況就是代表該引腳什么都不接,但是在網上也有說可以用于ADC傳輸數據使用,但我并不了解。
這個模式基本用不上,如果以后我有使用會在這里記錄。
2. 上拉輸入(GPIO_Mode_IPU)
在上拉輸入模式下,引腳什么都不接的情況下表現為高電平,當連接到TTL(高電平低電平)信號時,會發生改變。
在沒有輸入或者是輸入為高電平時,其電壓為高;輸入為低電平時,電壓為低。
這里要注意的是沒有輸入的時候就處于高電平,適用于那些平常狀態輸出高,特殊狀態輸出低的模塊。
3. 下拉輸入(GPIO_Mode_IPD)
和上拉輸入類似
在下拉輸入模式下,引腳什么都不接的情況下表現為低電平,當連接到TTL(高電平低電平)信號時,會發生改變。
在沒有輸入或者是輸入為低電平時,其電壓為低;輸入為高電平時,電壓為高。
這里要注意的是沒有輸入的時候就處于低電平,適用于那些平常狀態輸出低,特殊狀態輸出高的模塊。
模擬輸入不同于以上三種輸入模式,前面三種模式都是數字信號的輸入也就是非高即低的信號,而模擬輸入就是輸入未經處理的信號,可以是一段連續的電壓不固定的信號。
往往在數模轉換中需要用到,比如讀取某個引腳的電壓值,這個電壓值就可能是PWM波形,使用模擬輸入就可以講信號不經處理的傳給ADC模塊進行分析。
二、輸出模式
1. 開漏輸出(GPIO_Mode_Out_OD)
在開漏模式下,控制IO輸出低時IO口輸出低,控制IO口輸出高時IO口既不輸出高也不輸出低,電壓不確定。(由外部驅動,降低芯片的驅動壓力)
在使用該模式時,通常外接一個電阻,通過這個電阻來給予高電平。“推挽輸出模式一般應用在輸出電平為0和3.3伏而且需要高速切換開關狀態的場合”
或者在推挽輸出模式下我們輸出的電平是3.3V,但是我們想要達到一個5V的輸出,就可以采用開漏輸出,通過外接一個上拉電阻來控制我們的電壓能夠達到5V。
再或者可以用一個IO口進行雙向的數據傳輸。
首先從引腳往外這個指向來說,引腳輸出低時IO為低,引腳輸出高時外部可以由上拉電阻將IO上拉為高。
其次從外往引腳這個指向來說,由于IO的高低電平與外部上拉電阻有關,也就可以通過外部上拉電阻的有無來 反向控制IO的高低,之后可以運用寄存器讀取IO狀態從而獲得外部的電平信號。這樣就可以達到IO口的雙向功能。(僅個人理解)
上拉電阻的阻值不僅影響輸出的電平高低,還影響著信號的延遲,阻值越大信號也就越延遲但是功耗小。
2. 推挽輸出(GPIO_Mode_Out_PP)
引腳輸出低時IO為低,引腳輸出高時IO輸出高。
3. 推挽復用輸出(GPIO_Mode_AF_PP)
可以使用IO口的第二功能,例如定時器、串口等。相當于是輸出信號更多樣的推挽輸出。
輸出PWM信號時需要使用該輸出模式。
4. 開漏復用輸出(GPIO_Mode_AF_OD)
可以使用IO口的第二功能,例如定時器、串口等。相當于是輸出信號更多樣的開漏輸出。
二、PWM輸出的一些總結
1.引腳與定時器和通道的對應關系
STM32的定時器除了定時器6和定時器7都可以用來產生PWM,定時器1和定時器8是高級定時器,都可可以同時產生7路PWM,需要注意的是在配置高級定時器時需要多加這樣的一行代碼。
TIM_CtrlPWMOutputs(TIM1,ENABLE);
這一行代碼可以追根源頭發現是控制的是 剎車和死區寄存器(TIMx_BDTR)
2. 一些結構體成員的介紹
①TIM_OCInitStructure.TIM_OCMode
該元素設置的是PWM的模式,可以指定兩種模式
TIM_OCMode_PWM1
在向上計數時,一旦裝載值小于占空比時通道為無效電平,否則為有效電平
在向下計數時,一旦裝載值大于占空比時通道為有效電平,否則為無效電平。
TIM_OCMode_PWM2
向上計數時,一旦裝載值小于占空比時通道1為有效電平,否則為無效電平
向下計數時,一旦轉載值大于占空比時通道1為無效電平,否則為有效電平。
②PWM初始化函數的兩個入口參數
TIM_TimeBaseStructure.TIM_Period
該元素設置的是計數值,通常是PWM初始化函數的第一個入口參數arr,這個值影響一次PWM周期的時間長短。
TIM_TimeBaseStructure.TIM_Prescaler
該元素設置的是預分頻值,通常是PWM初始化函數的第二個入口參數psc,這個值也影響一次PWM周期的時間長短。
由公式
Fpwm = TCLK / ((arr+1)*(psc+1)) (單位:Hz)
可計算一次PWM的周期時長
其中TCLK的具體頻率可以到時鐘樹中查找,不同定時器的最高頻率是不同的
TIM1、TIM8、TIM15、TIM16、TIM17、TIM9、TIM10、TIM11屬APB2總線,最高頻率為72M
TIM2、TIM3、TIM4、TIM5、TIM6、TIM7、TIM12、TIM13、TIM14屬APB1總線,最高頻率為36M
具體可以查數據手冊
③TIM_TimeBaseStructure.TIM_CounterMode
該元素設置的是PWM的計數模式,常用的有以下兩種。
TIM_CounterMode_Up
向上計數
TIM_CounterMode_Down
向下計數
還有幾種不常用的
④TIM_OCInitStructure.TIM_OCPolarity
該元素設置輸出極性,這個元素要配合PWM模式來說,在PWM模式中有無效電平和有效電平的區別,而具體的有效電平是什么呢?
就是在這個元素設置的,這里的元素如果設置成為TIM_OCPolarity_High則有效電平就是高電平,如果元素設置為TIM_OCPolarity_Low,則有效電平就是低電平。
總結
這篇博客主要介紹了一些輸入輸出函數的小細節,以及PWM的一些重要結構體元素代表什么。
輸入輸出與PWM可以說是STM32的基礎操作,只有加強對基礎的了解才可能在后面的學習中更加順利。
編輯:hfy
-
寄存器
+關注
關注
31文章
5357瀏覽量
120697 -
PWM
+關注
關注
114文章
5193瀏覽量
214253 -
STM32
+關注
關注
2270文章
10910瀏覽量
356616 -
電機驅動
+關注
關注
60文章
1219瀏覽量
86827 -
定時器
+關注
關注
23文章
3251瀏覽量
115024
發布評論請先 登錄
相關推薦
評論