找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

stm32多路pwm輸出控制程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:253933 發(fā)表于 2019-5-30 15:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
stm32 多路pwm輸出控制單片機(jī)源程序如下:
  1. #include "stm32f10x.h"
  2. #include "TIM.h"
  3. #include "DELAY.h"
  4. #include "GPIO.h"
  5. #include "math.h"
  6. #include "DATA.h"

  7. int main()
  8. {
  9. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//選擇中斷分組4
  10. GPIO_Configuration();

  11. TIM3_Init(71,9);//每10us進(jìn)一次中斷
  12. NVIC3_Configurature();
  13. TIM2_Init(35999,19);//100Hz
  14. NVIC2_Configurature();
  15.         
  16.         slaver_SetAngle(0,220,60);//零號(hào)舵機(jī),A1
  17.         slaver_SetAngle(1,20,60);//A2
  18.         slaver_SetAngle(2,40,60);//A3
  19.         slaver_SetAngle(3,60,60);
  20.         slaver_SetAngle(4,80,60);
  21.         slaver_SetAngle(5,100,60);
  22.         slaver_SetAngle(6,120,60);
  23.         slaver_SetAngle(8,140,60);
  24.         slaver_SetAngle(9,160,60);
  25.         slaver_SetAngle(10,170,60);
  26.         slaver_SetAngle(11,100,60);
  27.         slaver_SetAngle(12,40,60);
  28.         slaver_SetAngle(13,60,60);
  29.         slaver_SetAngle(14,70,60);
  30.         slaver_SetAngle(15,80,60);
  31.         slaver_SetAngle(16,90,60);
  32.         slaver_SetAngle(17,100,60);
  33.         while(1)
  34.         {
  35.         }
  36. }
  37.         
  38. volatile unsigned short pulse_width = 2000;
  39. volatile unsigned int tim3_cnt = 0;//設(shè)置的奇數(shù)位
  40.         
  41. void TIM3_IRQHandler(void)//TIM3做PWM輸出
  42. {
  43.         unsigned char j;
  44.         TIM3->SR = 0;//清楚中斷
  45.         
  46.         tim3_cnt++;
  47.         if(tim3_cnt == pulse_width)
  48.         {
  49.                 tim3_cnt = 0;
  50.                 GPIOA->ODR |= 0XFFFF;//對(duì)其他的端口不會(huì)影響
  51.                 GPIOB->ODR |= 0XFFFF;
  52.         }
  53.         for(j = 0;j < slave_Number;j ++)
  54.         {
  55.                 if(tim3_cnt == slaver_data[j].Data_Converted)//等于角度轉(zhuǎn)換值得到的數(shù)值
  56.                 {
  57.                                 (slaver_data[j].GPIOx)->ODR&=~slaver_data[j].GPIO_Pin;//選擇端口,進(jìn)行賦值
  58.                 }
  59.         }
  60. }        

  61. void TIM2_IRQHandler(void)//定時(shí)器2做控速
  62. {
  63.         unsigned char i;
  64.         TIM2->SR = 0;
  65.   
  66.         for(i=0; i<slave_Number; i++)
  67.         {
  68.                 if(fabs(slaver_data[i].Data_Desire - slaver_data[i].Data_Real) < slaver_data[i].Data_Speed*CYCLE_TIM2_UPDATE)//判斷實(shí)際角度與輸入角度的差值
  69.                 {
  70.                         slaver_data[i].Data_Real = slaver_data[i].Data_Desire;//差值小就直接賦值
  71.                 }
  72.                 else
  73.                 {
  74.                         if(slaver_data[i].Data_Desire > slaver_data[i].Data_Real)//輸入值大于實(shí)際值
  75.                         {
  76.                                 slaver_data[i].Data_Real += slaver_data[i].Data_Speed*CYCLE_TIM2_UPDATE;//加等于輸入值
  77.                         }
  78.                         else
  79.                         {
  80.                                 slaver_data[i].Data_Real -= slaver_data[i].Data_Speed*CYCLE_TIM2_UPDATE;//減等于輸入值
  81.                         }
  82.                 }
  83.                 slaver_data[i].Data_Converted = (unsigned short)(50.0f + slaver_data[i].Data_Real*SLAVER_CHANGE);//加上偏移量,轉(zhuǎn)換數(shù)值
  84.         }
  85. }
復(fù)制代碼

所有資料51hei提供下載:
多路坡pwm輸出.zip (318.85 KB, 下載次數(shù): 42)



評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

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

使用道具 舉報(bào)

沙發(fā)
ID:323453 發(fā)表于 2019-5-30 21:07 | 只看該作者
正想學(xué)習(xí)STM32,雪中送碳
回復(fù)

使用道具 舉報(bào)

板凳
ID:47541 發(fā)表于 2019-6-3 11:43 | 只看該作者

正想學(xué)習(xí)STM32,謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表