最近一周多的時間開始學習并自己動手制作了一個循跡小車,主要運用的就是tb6612芯片以及紅外避障模塊,這篇博客主要就是總結(jié)一下在制作小車過程中學習到的知識以及問題。
一、有關(guān)IO輸出輸入的總結(jié)
在這次小車制作中,我使用到的有tb6612電機驅(qū)動芯片和MH-Sensor-Series紅外循跡避障模塊,兩者的使用方法都不是很復雜,只需要在對應(yīng)的引腳上接高低電平或者接輸入引腳即可,但正是這么基礎(chǔ)的引腳操作中也發(fā)現(xiàn)了很多小細節(jié),有同學在制作小車的過程中就遇到了寫完代碼根本沒達到預期效果,后來才發(fā)現(xiàn)是一些引腳的模式或者使能問題,因此我也更詳細學習了一下IO口的八種輸入輸出模式。
下面就是我個人對這幾種模式的理解
一、輸入模式
1. 浮空輸入(GPIO_Mode_IN_FLOATING)
該模式主要針對芯片本身,以及其他的邏輯器件(即由大量邏輯開關(guān)組成的元器件),在該模式下,引腳既不表現(xiàn)為高電平也不表現(xiàn)為低電平,如果用電壓表測量測得的可能也有所不同。
浮空輸入大多數(shù)情況就是代表該引腳什么都不接,但是在網(wǎng)上也有說可以用于ADC傳輸數(shù)據(jù)使用,但我并不了解。
這個模式基本用不上,如果以后我有使用會在這里記錄。
2. 上拉輸入(GPIO_Mode_IPU)
在上拉輸入模式下,引腳什么都不接的情況下表現(xiàn)為高電平,當連接到TTL(高電平低電平)信號時,會發(fā)生改變。
在沒有輸入或者是輸入為高電平時,其電壓為高;輸入為低電平時,電壓為低。
這里要注意的是沒有輸入的時候就處于高電平,適用于那些平常狀態(tài)輸出高,特殊狀態(tài)輸出低的模塊。
3. 下拉輸入(GPIO_Mode_IPD)
和上拉輸入類似
在下拉輸入模式下,引腳什么都不接的情況下表現(xiàn)為低電平,當連接到TTL(高電平低電平)信號時,會發(fā)生改變。
在沒有輸入或者是輸入為低電平時,其電壓為低;輸入為高電平時,電壓為高。
這里要注意的是沒有輸入的時候就處于低電平,適用于那些平常狀態(tài)輸出低,特殊狀態(tài)輸出高的模塊。
模擬輸入不同于以上三種輸入模式,前面三種模式都是數(shù)字信號的輸入也就是非高即低的信號,而模擬輸入就是輸入未經(jīng)處理的信號,可以是一段連續(xù)的電壓不固定的信號。
往往在數(shù)模轉(zhuǎn)換中需要用到,比如讀取某個引腳的電壓值,這個電壓值就可能是PWM波形,使用模擬輸入就可以講信號不經(jīng)處理的傳給ADC模塊進行分析。
二、輸出模式
1. 開漏輸出(GPIO_Mode_Out_OD)
在開漏模式下,控制IO輸出低時IO口輸出低,控制IO口輸出高時IO口既不輸出高也不輸出低,電壓不確定。(由外部驅(qū)動,降低芯片的驅(qū)動壓力)
在使用該模式時,通常外接一個電阻,通過這個電阻來給予高電平?!巴仆燧敵瞿J揭话銘?yīng)用在輸出電平為0和3.3伏而且需要高速切換開關(guān)狀態(tài)的場合”
或者在推挽輸出模式下我們輸出的電平是3.3V,但是我們想要達到一個5V的輸出,就可以采用開漏輸出,通過外接一個上拉電阻來控制我們的電壓能夠達到5V。
再或者可以用一個IO口進行雙向的數(shù)據(jù)傳輸。
首先從引腳往外這個指向來說,引腳輸出低時IO為低,引腳輸出高時外部可以由上拉電阻將IO上拉為高。
其次從外往引腳這個指向來說,由于IO的高低電平與外部上拉電阻有關(guān),也就可以通過外部上拉電阻的有無來 反向控制IO的高低,之后可以運用寄存器讀取IO狀態(tài)從而獲得外部的電平信號。這樣就可以達到IO口的雙向功能。(僅個人理解)
上拉電阻的阻值不僅影響輸出的電平高低,還影響著信號的延遲,阻值越大信號也就越延遲但是功耗小。
2. 推挽輸出(GPIO_Mode_Out_PP)
引腳輸出低時IO為低,引腳輸出高時IO輸出高。
3. 推挽復用輸出(GPIO_Mode_AF_PP)
可以使用IO口的第二功能,例如定時器、串口等。相當于是輸出信號更多樣的推挽輸出。
輸出PWM信號時需要使用該輸出模式。
4. 開漏復用輸出(GPIO_Mode_AF_OD)
可以使用IO口的第二功能,例如定時器、串口等。相當于是輸出信號更多樣的開漏輸出。
二、PWM輸出的一些總結(jié)
1.引腳與定時器和通道的對應(yīng)關(guān)系
STM32的定時器除了定時器6和定時器7都可以用來產(chǎn)生PWM,定時器1和定時器8是高級定時器,都可可以同時產(chǎn)生7路PWM,需要注意的是在配置高級定時器時需要多加這樣的一行代碼。
TIM_CtrlPWMOutputs(TIM1,ENABLE);
這一行代碼可以追根源頭發(fā)現(xiàn)是控制的是 剎車和死區(qū)寄存器(TIMx_BDTR)
2. 一些結(jié)構(gòu)體成員的介紹
①TIM_OCInitStructure.TIM_OCMode
該元素設(shè)置的是PWM的模式,可以指定兩種模式
TIM_OCMode_PWM1
在向上計數(shù)時,一旦裝載值小于占空比時通道為無效電平,否則為有效電平
在向下計數(shù)時,一旦裝載值大于占空比時通道為有效電平,否則為無效電平。
TIM_OCMode_PWM2
向上計數(shù)時,一旦裝載值小于占空比時通道1為有效電平,否則為無效電平
向下計數(shù)時,一旦轉(zhuǎn)載值大于占空比時通道1為無效電平,否則為有效電平。
②PWM初始化函數(shù)的兩個入口參數(shù)
TIM_TimeBaseStructure.TIM_Period
該元素設(shè)置的是計數(shù)值,通常是PWM初始化函數(shù)的第一個入口參數(shù)arr,這個值影響一次PWM周期的時間長短。
TIM_TimeBaseStructure.TIM_Prescaler
該元素設(shè)置的是預分頻值,通常是PWM初始化函數(shù)的第二個入口參數(shù)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
具體可以查數(shù)據(jù)手冊
③TIM_TimeBaseStructure.TIM_CounterMode
該元素設(shè)置的是PWM的計數(shù)模式,常用的有以下兩種。
TIM_CounterMode_Up
向上計數(shù)
TIM_CounterMode_Down
向下計數(shù)
還有幾種不常用的
④TIM_OCInitStructure.TIM_OCPolarity
該元素設(shè)置輸出極性,這個元素要配合PWM模式來說,在PWM模式中有無效電平和有效電平的區(qū)別,而具體的有效電平是什么呢?
就是在這個元素設(shè)置的,這里的元素如果設(shè)置成為TIM_OCPolarity_High則有效電平就是高電平,如果元素設(shè)置為TIM_OCPolarity_Low,則有效電平就是低電平。
總結(jié)
這篇博客主要介紹了一些輸入輸出函數(shù)的小細節(jié),以及PWM的一些重要結(jié)構(gòu)體元素代表什么。
輸入輸出與PWM可以說是STM32的基礎(chǔ)操作,只有加強對基礎(chǔ)的了解才可能在后面的學習中更加順利。
編輯:hfy
-
寄存器
+關(guān)注
關(guān)注
31文章
5359瀏覽量
120813 -
PWM
+關(guān)注
關(guān)注
114文章
5196瀏覽量
214378 -
STM32
+關(guān)注
關(guān)注
2270文章
10915瀏覽量
356778 -
電機驅(qū)動
+關(guān)注
關(guān)注
60文章
1219瀏覽量
86844 -
定時器
+關(guān)注
關(guān)注
23文章
3254瀏覽量
115088
發(fā)布評論請先 登錄
相關(guān)推薦
評論