
編碼器接口測速用于電機控制Encoder Interface 編碼器接口編碼器接口可接收增量正交編碼器的信號根據(jù)編碼器旋轉(zhuǎn)產(chǎn)生的正交信號脈沖自動控制CNT自增或自減從而指示編碼器的位置、旋轉(zhuǎn)方向和旋轉(zhuǎn)速度每個高級定時器和通用定時器都擁有1個編碼器接口基本定時器沒有編碼器接口編碼器的兩個輸入引腳借用了輸入捕獲的通道1和通道2CH1、CH2CH3和CH4不能接編碼器通用定時器編碼器結(jié)構(gòu)框圖編碼器接口基本結(jié)構(gòu)編碼器接口根據(jù)編碼器的旋轉(zhuǎn)方向控制CNT的計數(shù)方向編碼器正轉(zhuǎn)CNT自增編碼器反轉(zhuǎn)CNT自減ARR一般設(shè)置ARR為65535最大量程利用補碼的特性可以得到負數(shù)將6553516位無符號數(shù)轉(zhuǎn)換為16位的有符號數(shù)65535 -165534 -2 等等正交編碼器用于測量位置或帶有方向的速度值有兩個信號輸出引腳A相、B相正轉(zhuǎn)A相提前B相90°反轉(zhuǎn)A相滯后B相90°CNT計數(shù)方向與編碼器信號的關(guān)系僅在TI1計數(shù)接收A相信號我們忽略TI2FP2信號相當于B相信號這樣精度低了點編碼器模式下的計數(shù)器操作實例TI1反相即TI1信號通過極性選擇時選擇的參數(shù)是下降沿高低電平反轉(zhuǎn)了。TI1在經(jīng)過極性選擇時可以選擇是上升沿有效還是下降沿有效而編碼器接口上、下升沿始終有效都需要計次那么在編碼器模式下極性選擇就不再是邊沿的極性選擇而是高低電平的極性選擇。如果選擇上升沿的參數(shù)那么信號直通過來高低電平極性不反轉(zhuǎn)。如果選擇下降沿的參數(shù)那么信號通過非門過來高低電平極性反轉(zhuǎn)。編碼器接口測速 代碼書寫思路1 RCC開啟時鐘開啟GPIO和定時器的時鐘GPIO模式可以選擇上拉、下拉、浮空如何選擇上拉、下拉看接在該引腳的外部模塊輸出的默認電平如果外部模塊空閑默認輸出高電平就選擇上拉輸入默認輸入高電平如果外部模塊默認輸入低電平那就選擇下拉輸入默認輸入低電平和外部模塊保持一致防止電平打架。默認高電平是習(xí)慣狀態(tài)。如何判斷GPIO模式是否需要配置為浮空輸入不確定外部模塊輸出的默認狀態(tài)或者外部信號輸出功率非常小就盡量選擇浮空輸入浮空輸入沒有上拉電阻和下拉電阻影響外部信號浮空輸入缺點引腳懸空沒有默認電平輸入受噪聲干擾來回不斷跳變2 配置GPIO將要用的接口配置為輸入模式不需要定時器內(nèi)部時鐘配置編碼器接口會托管時鐘編碼器接口就是一個帶方向控制的外部時鐘。3 配置時基單元。計數(shù)器模式參數(shù)沒有用因為計數(shù)方向也是被編碼器接口托管的。預(yù)分頻器一般選擇不分頻。自動重裝一般給最大65535-1只需要CNT執(zhí)行計數(shù)就行4 配置輸入捕獲單元只需要配置濾波器和極性后兩個參數(shù)沒用可以刪掉結(jié)構(gòu)體配置不完整為防止結(jié)構(gòu)體中出現(xiàn)不確定值可能造成的問題最好用StructInit給結(jié)構(gòu)體賦初始值加StructInit也是提醒我們結(jié)構(gòu)體沒有配置完整。結(jié)構(gòu)體中極性設(shè)置為上升沿不是代表上升沿有效因為編碼器接口上升沿、下降沿始終有效這里設(shè)置的上升沿表示高低電平極性不反轉(zhuǎn)。這里的極性配置會和后面TIM_EncoderInterfaceConfig函數(shù)重復(fù)配置極性可以刪掉。//初始化結(jié)構(gòu)體給結(jié)構(gòu)體賦初始值說明結(jié)構(gòu)體沒有完整賦值參數(shù)為結(jié)構(gòu)體地址 TIM_ICStructInit(TIM_ICInitStructure);5 配置編碼器接口模式/** 定時器編碼器接口配置 參數(shù)1選擇定時器 參數(shù)2選擇編碼器模式 TIM_EncoderMode_TI1 僅在TI1計數(shù) TIM_EncoderMode_TI2 僅在TI2計數(shù) TIM_EncoderMode_TI12 TI1和TI2都計數(shù) 參數(shù)3、4分別選擇CH1和CH2的電平極性 **/ void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode,uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity);參數(shù)2對應(yīng)的3個模式6 最后調(diào)用TIM_Cmd啟動定時器CNT會隨編碼器位置自增自減如果想要測量編碼器位置直接獲取CNT值即可。如果想測量編碼器的速度和方向需要每隔一段固定的閘門時間取出CNT再將CNT清零。