標(biāo)題: stm32多路pwm輸出控制程序 [打印本頁(yè)]

作者: 武略大韜    時(shí)間: 2019-5-30 15:08
標(biāo)題: stm32多路pwm輸出控制程序
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)




作者: hbthgsli    時(shí)間: 2019-5-30 21:07
正想學(xué)習(xí)STM32,雪中送碳
作者: aygc    時(shí)間: 2019-6-3 11:43

正想學(xué)習(xí)STM32,謝謝




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1