IT技術(shu)互動交(jiao)流平台

广东福彩网官网

作(zuo)者︰楊(yang)奉武(wu)456  來(lai)源︰IT165收集  發布日期︰2020-02-20 06:04:27

關于正(zheng)交(jiao)解碼,我先解釋何為正(zheng)交(jiao)解碼,,,,其實(shi)名字挺高大上的,,,,還是(shi)先說(shuo)編碼器吧

看一下我用過(guo)的一種編碼器

編碼器的 線 數 ,是(shi)說(shuo)編碼器轉(zhuan)一圈輸(shu)出多少個脈沖(chong),,,如(ru)果一個編碼器是(shi)500線,,,說(shuo)明這(zhe)個編碼器轉(zhuan)一圈對應的信號線會輸(shu)出500個脈沖(chong),,,,為什麼說(shuo)是(shi)對應的,,,對于上面的編碼器而言是(shi)這(zhe)樣(yang)的,,,,但是(shi)有的編碼器里(li)面有好多線,,,有的信號線是(shi)轉(zhuan)一圈就(jiu)輸(shu)出對應多少線的脈沖(chong),,,有的信號線是(shi)轉(zhuan)一圈就(jiu)輸(shu)出一個脈沖(chong),,,,這(zhe)就(jiu)要(yao)看編碼器的資料了......

看我上面用過(guo)的這(zhe)個編碼器,,使用A,B,VCC,GND這(zhe)四根線,,

編碼器轉(zhuan)一圈A信號線會輸(shu)出500個脈沖(chong),,,,B信號線也bu) shu)出500個脈沖(chong),,不(bu)過(guo)

正(zheng)轉(zhuan)的時候

反轉(zhuan)的時候

正(zheng)轉(zhuan)的時候信號線A先輸(shu)出信號,B信號線後輸(shu)出

反轉(zhuan)的時候信號線B先輸(shu)出信號,A信號線後輸(shu)出

假設只是(shi)單(dan)純的測正(zheng)轉(zhuan)脈沖(chong)或者單(dan)純的測反轉(zhuan)脈沖(chong),那麼只需要(yao)用單(dan)片(pian)機隨意選(xuan)擇一個信號線就(jiu)行了,,然後就(jiu)是(shi)脈沖(chong)計數,,,,

如(ru)果說(shuo)要(yao)是(shi)一個電機既有正(zheng)轉(zhuan)又有反轉(zhuan),,,,我想知道這(zhe)個電機絕對正(zheng)轉(zhuan)了多少圈

那麼就(jiu)需要(yao)用正(zheng)轉(zhuan)的圈數減去(qu)反轉(zhuan)的圈數了,,,,,,那麼問題來(lai)了,,,怎(zen)麼測正(zheng)轉(zhuan)圈數和(he)反轉(zhuan)圈數

其實(shi)傳統的做法(fa)

關于D觸發器,,,,當clk引腳來(lai)一個上升沿,D引腳是(shi)什麼電平,,那麼Q就(jiu)輸(shu)出什麼電平,,Q非,,與(yu)Q相反

現在(zai)如(ru)果說(shuo)電機正(zheng)轉(zhuan)

可(ke)以看到每(mei)當B來(lai)上升沿的時候,A信號總(zong)為高電平,,,所以Q會輸(shu)出高電平

設置A為上升沿進入其,,,中斷函數

然後判斷一下Q是(shi)否(fu)為高電平,如(ru)果為高電平正(zheng)轉(zhuan)變(bian)量(liang)自加一

如(ru)果電機反轉(zhuan)

可(ke)以看到每(mei)當B來(lai)上升沿的時候,A信號總(zong)為低電平,,,所以Q會輸(shu)出低電平

設置B為上升沿進入其,,,中斷函數

然後判斷一下Q是(shi)否(fu)為低電平,如(ru)果為低電平反轉(zhuan)變(bian)量(liang)自加一

 然後 正(zheng)轉(zhuan)變(bian)量(liang)減去(qu)反轉(zhuan)變(bian)量(liang)就(jiu)能得到電機到底正(zheng)轉(zhuan)了多少圈......這(zhe)樣(yang)就(jiu)會得到一個相對的變(bian)量(liang),,這(zhe)個變(bian)量(liang)呢,就(jiu)是(shi)單(dan)片(pian)機正(zheng)交(jiao)解碼的值

說(shuo)白了shuo)?pian)機的正(zheng)交(jiao)解碼功能就(jiu)是(shi)得到一個正(zheng)反轉(zhuan),,,相對的變(bian)量(liang),,,,這(zhe)個變(bian)量(liang)呢,,你(ni)正(zheng)轉(zhuan)的時候他會加,你(ni)反轉(zhuan)的時候他會減,

不(bu)過(guo)呢,,,,STM32的這(zhe)個變(bian)量(liang)有點坑,,,是(shi)太坑了,,,他內部定義的這(zhe)個變(bian)量(liang)的類型是(shi)無符(fu)號整形,,,也就(jiu)是(shi)說(shuo)0---65535,,,,,,,,,,,,,

如(ru)果直接利(li)用STM32的正(zheng)交(jiao)解碼功能,,直接讀這(zhe)個值,,這(zhe)樣(yang)呢就(jiu)會出現很麻煩的問題,,,,

假設你(ni)正(zheng)轉(zhuan)轉(zhuan)到10,然後反轉(zhuan)轉(zhuan)到0之後還是(shi)反轉(zhuan),,他就(jiu)會開始從65535開始往下減了,,,,假設轉(zhuan)到了60000,,你(ni)又開始正(zheng)轉(zhuan)了,一直越過(guo)65535之後,他又開始從0開始往上加了,,,,要(yao)是(shi)你(ni)的電機就(jiu)是(shi)這(zhe)樣(yang)的反反復復,而且正(zheng)轉(zhuan)與(yu)反轉(zhuan)次數每(mei)次都在(zai)變(bian)化,,,,,,,你(ni)如(ru)何寫程序來(lai)得到到底正(zheng)轉(zhuan)了多少圈??????????所以說(shuo)STM32真是(shi)太坑了,,,害的我和(he)我同學寫算法(fa)測試算法(fa)耽擱了兩天,,,,,,,最後還是(shi)會出現BUG,,,,,,,,網上也有大神(shen)寫類似的算法(fa)來(lai)計算出到底轉(zhuan)的圈數,,,,,,,,,,,,,,

最總(zong)我決定用最本質shi)姆椒fa)也就(jiu)是(shi)利(li)用D觸發器,,,,,,,不(bu)過(guo)因(yin)為手頭並沒有D觸發器,,,但是(shi)STM32正(zheng)交(jiao)解碼內部實(shi)質shi)jiu)是(shi)用的D觸發器來(lai)做判斷的,,,,,

而且他提供(gong)了一個寄(ji)存器來(lai)判斷是(shi)正(zheng)轉(zhuan)還是(shi)反轉(zhuan)

if((TIM3->CR1 & TIM_CounterMode_Down) == TIM_CounterMode_Down)//向(xiang)下計數

else

就(jiu)是(shi)向(xiang)上計數......也就(jiu)是(shi)能指明正(zheng)反轉(zhuan),,,,,

所以我就(jiu)打開他的正(zheng)交(jiao)解碼功能,,就(jiu)是(shi)把(ba)A,B信號線既接正(zheng)交(jiao)解碼引腳上,又接在(zai)脈沖(chong)計數中斷引腳上

void EXTI0_IRQHandler(void)//反轉(zhuan)中斷
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET) //???????EXTI Line??
{
EXTI_ClearITPendingBit(EXTI_Line0); //???????
if((TIM3->CR1 & TIM_CounterMode_Down) == TIM_CounterMode_Down)//???
{
cnt--;

}
}
}

/*************** ????1??,???? B1 *********************/
void EXTI1_IRQHandler(void)//正(zheng)轉(zhuan)中斷
{
if(EXTI_GetITStatus(EXTI_Line1) != RESET) //???????EXTI Line??
{
EXTI_ClearITPendingBit(EXTI_Line1); //???????
if((TIM3->CR1 & TIM_CounterMode_Up) == TIM_CounterMode_Up)//???
{

if((TIM3->CR1 & TIM_CounterMode_Down) == TIM_CounterMode_Down);//???
else
cnt++;

}
}
}

 這(zhe)樣(yang)的話省了D觸發器了,,,,,,,

看了一眼K60的正(zheng)交(jiao)解碼的變(bian)量(liang)

雖然是(shi)32位(wei)了shuo) shi),,,,,,,是(shi)無符(fu)號的,,,,,,如(ru)果只用正(zheng)交(jiao)解碼功能,,反轉(zhuan)又要(yao)考慮算法(fa)了,,,,,,,,,,,,,,,,,,,,,

 最後附(fu)上程序下載(zai)地址(zhi),,,,B1,A6接正(zheng)轉(zhuan)的那條信號線,,,,B0,A7接反轉(zhuan)的那條信號線,,串口1,PA9..PA10,,,波特率115200會打印出來(lai)到底轉(zhuan)了多少圈

http://pan.baidu.com/s/1pLPLyht  密碼  9t84

其實(shi)並不(bu)是(shi)在(zai)說(shuo)正(zheng)交(jiao)解碼怎(zen)麼用,,而是(shi)說(shuo)正(zheng)交(jiao)解碼是(shi)個怎(zen)麼回事,,,,,,,

广东福彩网官网

    Tag標簽︰正(zheng)交(jiao)  
    • 广东福彩网官网

    About IT165 - 廣告服(fu)務(wu) - 隱私聲明 - 版權申明 - 免責條款 - 網站(zhan)地圖 - 網友投(tou)稿 - 聯系方式
    本站(zhan)內容(rong)來(lai)自于互聯網,僅供(gong)用于網絡技術(shu)學習,學習中請遵循相關法(fa)律(lv)法(fa)規
    广东福彩网官网 | 下一页