<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > stm32 dma方式發(fā)脈沖做位置控制

          stm32 dma方式發(fā)脈沖做位置控制

          作者: 時間:2016-11-25 來源:網(wǎng)絡(luò) 收藏
          考慮到現(xiàn)有板子上沒有fpga,對于dma方式發(fā)脈沖位置控制設(shè)計如下
          兩個buff
          short buff1[1000];
          short buff2[1000];

          里面都存放頻率值,也就是說arp寄存器的值。

          數(shù)組的長度為1000,是考慮到最高的脈沖頻率,如果最大頻率比較小,則可以適當(dāng)減少數(shù)組的大小,之所以定義兩個buff,是考慮到每個伺服周期計算填充一個buff,同時另一個buff就作為當(dāng)前dma之用,每個伺服周期結(jié)束的時候會停止dma,然后統(tǒng)計已發(fā)脈沖數(shù)量,然后切換到剛剛填充好的buff,然后啟動dma發(fā)脈沖。
          因為dma發(fā)脈沖更新的寄存器是arp,對于ccr脈寬寄存器,則每個伺服周期開始的時候,程序自己填充即可。

          上面的dma發(fā)送的方法,優(yōu)點是頻率高、發(fā)送的數(shù)量可以保證、不占用cpu,缺點是占用一個dma控制器,占用較多的內(nèi)存,可能也會占用較多的系統(tǒng)總線,所以此種發(fā)脈沖的方式,不能完成控制太多的軸,估計3-4最多了,否者dma控制器、內(nèi)存等都很緊張。

          當(dāng)然最好還是采用fpag來做發(fā)脈沖的事情了。

          dma設(shè)置代碼

          DMA_DeInit(DMA1_Channel2);

          DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)TIM1_ARP_Address;
          DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SRC_Buffer;
          DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
          DMA_InitStructure.DMA_BufferSize = 1000;
          DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
          DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
          DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
          DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
          DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
          DMA_InitStructure.DMA_Priority = DMA_Priority_High;
          DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;



          關(guān)鍵詞: stm32dma方式脈沖位置控

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();