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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7427|回復: 4
打印 上一主題 下一主題
收起左側

stm32定時器3四路PWM輸出驅動l9110s電機 源程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:421049 發表于 2019-7-27 01:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
stm32驅動l9110s,定時器3四路PWM輸出,pwm范圍為-899至899,可正反轉。

單片機源程序如下:
  1. #include "L9110.h"
  2. #include "usart.h"
  3. #include "led.h"


  4. //通用定時器3中斷初始化
  5. //這里時鐘選擇為APB1的2倍,而APB1為36M
  6. //arr:自動重裝值。
  7. //psc:時鐘預分頻數
  8. //這里使用的是定時器3!
  9. void TIM3_Int_Init(u16 arr,u16 psc)
  10. {
  11.   TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  12.         NVIC_InitTypeDef NVIC_InitStructure;

  13.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //時鐘使能
  14.         TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值         計數到5000為500ms
  15.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值  10Khz的計數頻率  
  16.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
  17.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式
  18.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位

  19.         TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中斷,允許更新中斷

  20.         NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中斷
  21.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占優先級0級
  22.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //從優先級3級
  23.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
  24.         NVIC_Init(&NVIC_InitStructure);  //根據NVIC_InitStruct中指定的參數初始化外設NVIC寄存器

  25.         TIM_Cmd(TIM3, ENABLE);  //使能TIMx外設
  26.                                                          
  27. }
  28. //定時器3中斷服務程序
  29. void TIM3_IRQHandler(void)   //TIM3中斷
  30. {
  31.         if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //檢查指定的TIM中斷發生與否:TIM 中斷源
  32.                 {
  33.                 TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中斷待處理位:TIM 中斷源
  34.                 LED1=!LED1;
  35.                 }
  36. }

  37. //TIM3 PWM部分初始化
  38. //PWM輸出初始化
  39. //arr:自動重裝值
  40. //psc:時鐘預分頻數
  41. void TIM3_PWM_Init(u16 arr,u16 psc)
  42. {  
  43.         GPIO_InitTypeDef GPIO_InitStructure;
  44.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  45.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  46.         

  47.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);        //使能定時器3時鐘
  48.          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  |  RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIO外設功能模塊時鐘
  49.          

  50.    //設置該引腳為復用輸出功能,輸出TIM3 CH2的PWM脈沖波形        GPIOA.6,7
  51.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7; //TIM_CH2,TIM_CH1
  52.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //復用推挽輸出
  53.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  54.         GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIO
  55.         
  56.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; //TIM_CH3,TIM_CH4
  57.         GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

  58.    //初始化TIM3
  59.         TIM_TimeBaseStructure.TIM_Period = arr; //設置在下一個更新事件裝入活動的自動重裝載寄存器周期的值
  60.         TIM_TimeBaseStructure.TIM_Prescaler =psc; //設置用來作為TIMx時鐘頻率除數的預分頻值
  61.         TIM_TimeBaseStructure.TIM_ClockDivision = 0; //設置時鐘分割:TDTS = Tck_tim
  62.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上計數模式
  63.         TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根據TIM_TimeBaseInitStruct中指定的參數初始化TIMx的時間基數單位
  64.         
  65.         //初始化TIM3 四路PWM模式         
  66.         
  67.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式1
  68.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  69.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  70.         TIM_OC1Init(TIM3, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM3 OC1
  71.         TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR1上的預裝載寄存器
  72.         
  73.                 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式1
  74.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  75.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  76.         TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM3 OC2
  77.         TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的預裝載寄存器
  78.         
  79.                 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式1
  80.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  81.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  82.         TIM_OC3Init(TIM3, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM3 OC3
  83.         TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR3上的預裝載寄存器
  84.         
  85.                 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //選擇定時器模式:TIM脈沖寬度調制模式1
  86.          TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比較輸出使能
  87.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //輸出極性:TIM輸出比較極性高
  88.         TIM_OC4Init(TIM3, &TIM_OCInitStructure);  //根據T指定的參數初始化外設TIM3 OC4
  89.         TIM_OC4PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR4上的預裝載寄存器
  90.         
  91.         TIM_Cmd(TIM3, ENABLE);  //使能TIM3
  92. }



  93. void L9110_Init(void)
  94. {

  95. GPIO_InitTypeDef  GPIO_InitStructure;
  96.          
  97. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);         //使能PC端口時鐘
  98.         
  99. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5;                                 //LED0-->PB.5 端口配置
  100. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                  //推挽輸出
  101. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 //IO口速度為50MHz
  102. GPIO_Init(GPIOC, &GPIO_InitStructure);                                         //根據設定參數初始化GPIOB.5
  103. GPIO_ResetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5);                                                 //PB.5 輸出高

  104. // GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;                             //LED1-->PE.5 端口配置, 推挽輸出
  105. // GPIO_Init(GPIOE, &GPIO_InitStructure);                                           //推挽輸出 ,IO口速度為50MHz
  106. // GPIO_SetBits(GPIOE,GPIO_Pin_5);                                                  //PE.5 輸出高
  107. }

  108. void L9100PWM1(vs16 speed1)
  109. {
  110.         if(speed1>=0)
  111.         {
  112.                 MA=0;
  113.                 TIM_SetCompare1(TIM3,speed1);
  114.         }
  115.         else
  116.         {
  117.                 MA=1;
  118.                 speed1=900+speed1;
  119.                 TIM_SetCompare1(TIM3,speed1);
  120.                
  121.         }
  122. }

  123. void L9100PWM2(vs16 speed2)
  124. {
  125.         if(speed2>=0)
  126.         {
  127.                 MB=0;
  128.                 TIM_SetCompare2(TIM3,speed2);
  129.         }
  130.         else
  131.         {
  132.                 MB=1;
  133.                 speed2=900+speed2;
  134.                 TIM_SetCompare2(TIM3,speed2);
  135.                
  136.         }
  137. }

  138. void L9100PWM3(vs16 speed3)
  139. {
  140.         if(speed3>=0)
  141.         {
  142.                 MC=0;
  143.                 TIM_SetCompare3(TIM3,speed3);
  144.         }
  145.         else
  146.         {
  147.                 MC=1;
  148.                 speed3=900+speed3;
  149.                 TIM_SetCompare3(TIM3,speed3);
  150.                
  151.         }
  152. }

  153. void L9100PWM4(vs16 speed4)
  154. {
  155.         if(speed4>=0)
  156.         {
  157.                 MD=0;
  158.                 TIM_SetCompare4(TIM3,speed4);
  159.         }
  160.         else
  161.         {
  162.                 MD=1;
  163.                 speed4=900+speed4;
  164.                 TIM_SetCompare4(TIM3,speed4);
  165.                
  166.         }
  167. }
復制代碼

所有資料51hei提供下載:
l9110s.7z (187.15 KB, 下載次數: 153)



評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:160995 發表于 2019-8-12 15:48 | 只看該作者
好東西呀,謝謝分享,正需要這東西參考
回復

使用道具 舉報

板凳
ID:329586 發表于 2021-5-7 23:23 | 只看該作者
本帖最后由 豬不怕壯 于 2021-5-9 00:09 編輯

請教一下怎么停止轉動呢?
回復

使用道具 舉報

地板
ID:1074289 發表于 2023-4-26 19:21 | 只看該作者
豬不怕壯 發表于 2021-5-7 23:23
請教一下怎么停止轉動呢?

直流電機應該是調節占空比控制轉速,貌似stm32里TIM_SetCompare這個比較函數里可以設置占空比,還在研究
回復

使用道具 舉報

5#
ID:291668 發表于 2023-4-27 13:17 | 只看該作者
對的! 點贊分享。學習參考下
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品视频免费观看 | 久久精品视频9 | 国产黄视频在线播放 | www.99热.com| 2021天天干夜夜爽 | 久久51| 久久精品久久久久久 | 欧美激情精品久久久久久 | 精品欧美一区二区三区精品久久 | 黄片毛片免费看 | 久久国产精品色av免费观看 | 亚洲精品乱码久久久久久蜜桃91 | 国产精品视频免费观看 | 天天操天天摸天天爽 | 草久久免费视频 | 亚洲精品在线看 | 国产一区二区三区四区五区加勒比 | 国产一区在线免费 | 一区二区三区四区国产 | 欧美一级毛片久久99精品蜜桃 | 91在线精品一区二区 | 久草在线青青草 | 欧美一区二区三区四区五区无卡码 | 国产探花在线精品一区二区 | 怡红院怡春院一级毛片 | 亚洲国产免费 | 久久久噜噜噜久久中文字幕色伊伊 | 欧美视频在线看 | www.中文字幕av | 美国黄色一级片 | 精品一区免费 | 亚洲精品一区在线观看 | 999热在线视频 | 日韩一区二区三区视频在线播放 | 中文在线a在线 | 蜜桃黄网 | 久在线视频播放免费视频 | 精品久久一 | 日本午夜免费福利视频 | 亚洲一区二区三区在线 | 亚洲精品综合一区二区 |