stm32 dma方式發(fā)脈沖做位置控制
兩個(gè)buff
short buff1[1000];
short buff2[1000];
里面都存放頻率值,也就是說(shuō)arp寄存器的值。
數(shù)組的長(zhǎng)度為1000,是考慮到最高的脈沖頻率,如果最大頻率比較小,則可以適當(dāng)減少數(shù)組的大小,之所以定義兩個(gè)buff,是考慮到每個(gè)伺服周期計(jì)算填充一個(gè)buff,同時(shí)另一個(gè)buff就作為當(dāng)前dma之用,每個(gè)伺服周期結(jié)束的時(shí)候會(huì)停止dma,然后統(tǒng)計(jì)已發(fā)脈沖數(shù)量,然后切換到剛剛填充好的buff,然后啟動(dòng)dma發(fā)脈沖。
因?yàn)閐ma發(fā)脈沖更新的寄存器是arp,對(duì)于ccr脈寬寄存器,則每個(gè)伺服周期開(kāi)始的時(shí)候,程序自己填充即可。
上面的dma發(fā)送的方法,優(yōu)點(diǎn)是頻率高、發(fā)送的數(shù)量可以保證、不占用cpu,缺點(diǎn)是占用一個(gè)dma控制器,占用較多的內(nèi)存,可能也會(huì)占用較多的系統(tǒng)總線,所以此種發(fā)脈沖的方式,不能完成控制太多的軸,估計(jì)3-4最多了,否者dma控制器、內(nèi)存等都很緊張。
當(dāng)然最好還是采用fpag來(lái)做發(fā)脈沖的事情了。
dma設(shè)置代碼
評(píng)論