久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9836|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

STM32F103+PWM+DMA精準控制輸出脈沖的數(shù)量和頻率 源程序

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:561911 發(fā)表于 2020-8-24 14:33 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
最近參加一個農(nóng)業(yè)機器人的比賽,由于今年的題目是蔬菜幼苗自動搬運,因此搬運部分需要用到一個三軸運動的裝置,我們參考了3D打印機的原理,上面通過步進電機控制絲桿和皮帶從而帶動我們的抓手來抓舉幼苗。因為比賽的幼苗和幼苗的基質(zhì)比較小,這個過程需要精度比較高,查詢了一些資料后,我想到了用dma來給STM32單片機的定時器寄存器ARR發(fā)送數(shù)據(jù)來精準控制輸出pwm的數(shù)量,從而可以精準控制步進電機轉(zhuǎn)動的度數(shù),可以十分方便的計算出到某個位置需要的脈沖。 上圖為我們的裝置的三維圖。
      stm32的DMA功能不需要使用中斷,這是我選用這個方式的主要原因,因為我們這個項目所需要的步進電機比較多 ,如果通過中斷的方式必然會使我們的程序比較混亂,而通過DMA的功能不占用CPU的運行,直接在目標地址之間發(fā)送數(shù)據(jù)。只要我們設(shè)置一個數(shù)組,將數(shù)組的最后一位設(shè)置為0,數(shù)組的長度就為pwm脈沖的數(shù)量,數(shù)組的數(shù)據(jù)就為ARR的值(即控制輸出pwm的頻率大小),十分方便。但這個方法有一個缺點就是如此長的數(shù)組比較占內(nèi)存空間,這個可以通過共用一個數(shù)組和減少細分等方法解決。

單片機源程序如下:

  1. #include "led.h"
  2. #include "delay.h"
  3. #include "key.h"
  4. #include "sys.h"
  5. #include "usart.h"
  6. #include "timer.h"
  7. #include "dma.h"
  8. /************************************************
  9. dma + pwm 測試代碼

  10. ************************************************/
  11. #define size 8000
  12. u16 send_buf[size];
  13. u32 i;
  14. void pwm_out(int step_count,int arr)
  15. {
  16.         for(i=0;i<step_count;i++)
  17.         {
  18.                 if(i < step_count-1)
  19.                         send_buf[i]=arr;
  20.                 else
  21.                         send_buf[i]=0;
  22.         }
  23.         MYDMA_Enable(DMA1_Channel6,step_count);
  24. }
  25. int main(void)
  26. {               
  27.         u8 count = 5;
  28.         delay_init();                     //延時函數(shù)初始化          
  29.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);          //設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級
  30.         uart_init(115200);         //串口初始化為115200
  31.         LED_Init();                             //LED端口初始化

  32.          MYDMA_Config(DMA1_Channel6, (u32)&TIM3->ARR, (u32)send_buf, size);
  33.         TIM3_PWM_Init(2000,100-1);         //不分頻。PWM頻率=72000000/900=80Khz                        PA6
  34.         TIM_SetCompare1(TIM3,500);       
  35.         pwm_out(1000,1000);
  36.        
  37.        
  38.   while(1)
  39.         {               
  40.                
  41.                         if(TIM3->ARR==0)
  42.                         {

  43.                                         pwm_out(1000,1000);
  44.                         }
  45.                         delay_ms(50000);
  46.                
  47.         }
  48. }
復(fù)制代碼

下載:
dma控制pwm測試代碼.7z (186.23 KB, 下載次數(shù): 321)


評分

參與人數(shù) 4黑幣 +107 收起 理由
peeta + 12
hzd530 + 15
luliang02003 + 30 支持為農(nóng)業(yè)做貢獻的人
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏14 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:71535 發(fā)表于 2020-8-24 19:27 | 只看該作者
支持農(nóng)業(yè)機器人比賽,蔬菜幼苗自動搬運可以減輕勞動強度,希望早日量產(chǎn)。
回復(fù)

使用道具 舉報

板凳
ID:481073 發(fā)表于 2020-9-4 15:40 | 只看該作者
你好,請問能進一步交流嗎,沒太看懂您的代碼
回復(fù)

使用道具 舉報

地板
ID:33544 發(fā)表于 2020-9-12 17:56 | 只看該作者
用PLC完成這樣的項目,一小時就搞定
回復(fù)

使用道具 舉報

5#
ID:262645 發(fā)表于 2021-10-19 09:41 | 只看該作者
不行脈沖抖動太大
回復(fù)

使用道具 舉報

6#
ID:1033476 發(fā)表于 2022-8-27 11:19 | 只看該作者
為啥改成PA7就不可了
回復(fù)

使用道具 舉報

7#
ID:1091558 發(fā)表于 2023-10-29 10:55 | 只看該作者
不能加減速,還有待優(yōu)化
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: www.精品国产| 天天视频成人 | 欧美精品v国产精品v日韩精品 | 久久精品小视频 | 在线一区观看 | 国产一区二区三区四区在线观看 | 热久久免费视频 | 亚洲国产精品一区在线观看 | 尤物视频在线免费观看 | 国产乱码精品一区二区三区五月婷 | 99热在线免费 | 久久成人午夜 | 日本福利视频 | 久久99精品久久久久 | 久久久久久亚洲国产精品 | 99re在线视频 | 毛片免费观看视频 | 嫩草视频免费 | 91高清视频在线观看 | 国产精品亚洲成在人线 | 91大神在线资源观看无广告 | 国产精品久久久久久久久久三级 | 欧美日韩成人影院 | 日本视频在线播放 | 精品国产免费一区二区三区演员表 | 手机看片在线播放 | 成人a视频在线观看 | www.天天操.com | 国产ts人妖一区二区三区 | 国产人免费人成免费视频 | 久久久久久久av | 日韩一区精品 | 亚洲一区视频在线 | 在线观看中文字幕视频 | 国产一区免费 | 龙珠z国语版在线观看 | 一区二区三区视频播放 | 99久久免费精品 | 成人在线一区二区 | 国产一区二 | www.中文字幕.com |