2021-09-17 16:03:11 索煒達(dá)電子 2235
項目編號:E1222
文件大?。?6M
源碼說明:帶中文注釋
開發(fā)環(huán)境:C編譯器
簡要概述:
通俗的講下帶編碼器的直流減速電機(jī)測速原理。首先我們得明白一個東西,電機(jī)旋轉(zhuǎn)一圈會產(chǎn)生脈沖,而一圈究竟能產(chǎn)生多少個脈沖,這是由電機(jī)的編碼器線數(shù)決定,線數(shù)越高,精度就越高。至于為什么會產(chǎn)生脈沖,這個就是編碼器這個傳感器的原理,這個我不講。
既然電機(jī)旋轉(zhuǎn)一圈能產(chǎn)生脈沖,那么我們就能記錄一段時間產(chǎn)生的脈沖數(shù)來計算速度。而單片機(jī)怎么去檢測脈沖并且記錄脈沖的個數(shù)則是我們的重點。在這里我想提一個東西——定時器。我們是如何用定時器定相應(yīng)的時間的?首先就是設(shè)置預(yù)分頻系數(shù)把主頻時鐘分頻,假設(shè)主頻時鐘168MHZ,你預(yù)分頻系數(shù)為168,則分頻后的時鐘頻率就為1MHZ(頻率的倒數(shù)就是周期,這里即1us),此時TIMx_CNT 寄存器,即定時器的計數(shù)器就是按照這個頻率(也就是10us)遞增的。假如你重裝載值為10,則你定時器最終定的時間就為10us。
從上面的例子可以看出,此時TIMx_CNT 寄存器的值遞增是由內(nèi)部時鐘頻率造成的,而時鐘頻率無非就是脈沖。好,那我們豈不是可以用這個寄存器去記錄編碼器產(chǎn)生的脈沖了?的確就是這樣,但是怎么把原本是因為內(nèi)部時鐘遞增的TIMx_CNT 寄存器改為是因為外部時鐘遞增呢?這就是我們?yōu)槭裁葱枰玫秸痪幋a模式了。至于為什么用了正交編碼模式就可以了,這個我就不知道了,反正我就知道用了正交編碼模式就可以實現(xiàn)這樣的過程。
以前我講了重裝載值對我們的影響,那現(xiàn)在你們是否就清楚了預(yù)分頻系數(shù)的我們的影響了?原來預(yù)分頻系數(shù)分的內(nèi)部時鐘,現(xiàn)在分頻系數(shù)分的就是外部時鐘。那我代碼里為何預(yù)分頻系數(shù)是為1?為其他數(shù)可不可以?當(dāng)然可以,但是沒必要。因為你現(xiàn)在就是要記錄電機(jī)旋轉(zhuǎn)一圈產(chǎn)生的真實的脈沖數(shù),如果你預(yù)分頻系數(shù)為2,假設(shè)電機(jī)旋轉(zhuǎn)一圈產(chǎn)生200個脈沖,則此時你單片機(jī)只能記錄100個脈沖了。
實際啊,其實直流減速電機(jī)測速度的本質(zhì)很簡單,以前我們定時器初始化設(shè)置重裝載值和與分頻系數(shù)時是基于內(nèi)部時鐘而定的。而現(xiàn)在是基于外部時鐘而定的,這個外部時鐘就是編碼器產(chǎn)生的脈沖。
順帶提下,我這份代碼只能測正轉(zhuǎn)或者反轉(zhuǎn),如果想正反轉(zhuǎn)都能測(當(dāng)然實際工程就需要這樣),去看下17樓,那里我講了下思路。這是其中一個思路,這里我還想說下另外一個思路,通過定時器的TIMx_CR寄存器的第四位DIR標(biāo)志位來判斷。
而我目前修改后的代碼用的就是這個思路。
我修改后的代碼也會傳上來,但是由于我沒有實物,我無法測試,我不知道我修改的代碼究竟實際能不能成功,所以這個代碼只供參考用。
目錄│文件列表:
│ 帶編碼器的直流減速電機(jī).zip
└ 帶編碼器的直流減速電機(jī)代碼(正反轉(zhuǎn)版).zip