新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32 dma方式發脈沖做位置控制

        stm32 dma方式發脈沖做位置控制

        作者: 時間:2016-11-25 來源:網絡 收藏
        考慮到現有板子上沒有fpga,對于dma方式脈沖位置控制設計如下
        兩個buff
        short buff1[1000];
        short buff2[1000];

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

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

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

        當然最好還是采用fpag來做發脈沖的事情了。

        dma設置代碼

        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;



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 庆安县| 孟津县| 汉源县| 成武县| 仪征市| 金昌市| 兰西县| 乌鲁木齐县| 南投县| 盐山县| 明溪县| 许昌市| 谷城县| 淮阳县| 建湖县| 永泰县| 溧水县| 澜沧| 剑河县| 彝良县| 莱西市| 苏州市| 清涧县| 麻城市| 洪洞县| 红河县| 嘉祥县| 肃宁县| 新乡市| 新竹市| 上犹县| 时尚| 花垣县| 星座| 繁昌县| 庄浪县| 铅山县| 鹿邑县| 山东省| 郑州市| 如东县|