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

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

QQ登錄

只需一步,快速開始

搜索
查看: 5425|回復(fù): 7
收起左側(cè)

STM32頻率 脈沖可控,驅(qū)動(dòng)步進(jìn)電機(jī)源碼

[復(fù)制鏈接]
ID:324858 發(fā)表于 2018-5-8 10:58 | 顯示全部樓層 |閱讀模式
頻率 脈沖可控,驅(qū)動(dòng)步進(jìn)電機(jī)

單片機(jī)源程序如下:
  1. #include "master_slave.h"  
  2. #include "stm32f10x.h"

  3. /**TIM2的通道1 使用單脈沖模式    TIM2_ch1_ETR:A0
  4. **TIM3使用門控模式輸出PWM       TIM3_ch1    :A6

  5. TIM2per、TIM3per: ARR重裝值   (無關(guān)緊要,后面會(huì)在此賦值)
  6. Compare1: 比較捕獲1的預(yù)裝載值 (固定占空比所以,所以此參數(shù)不要了)           */


  7. void Motor_Init(u16 TIM2per, u16 TIM3per)
  8. {

  9.   TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  10.   TIM_OCInitTypeDef TIM_OCInitStruct;
  11.   GPIO_InitTypeDef GPIO_InitStruct;

  12.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM3,ENABLE);   // RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);                        
  13.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); //  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


  14.   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;   //TIM2_ch1_ETR:A0   ,  TIM3_ch1    :A6
  15.   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_6;
  16.   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  17.   GPIO_Init(GPIOA,&GPIO_InitStruct);

  18.   
  19.   /**************TIM2工作在單脈沖模式下********************/
  20.   TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  21.   TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
  22.   TIM_TimeBaseInitStruct.TIM_Prescaler = 7200;   //預(yù)分配值,每100u計(jì)數(shù)一次
  23.   TIM_TimeBaseInitStruct.TIM_Period = TIM2per;   //重載值
  24.   TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);


  25.   TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single);//設(shè)置TIM2在單脈沖模式下 , 單次觸發(fā)
  26.   TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);// 使能TIM2的通道1預(yù)裝載寄存器
  27.   TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_OC1Ref); //脈沖輸出通道1


  28.   TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//
  29.   TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
  30.   TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
  31.   TIM_OCInitStruct.TIM_Pulse = TIM2per/2;//比較捕獲1的預(yù)裝載值    占空比50%
  32.   TIM_OC1Init(TIM2,&TIM_OCInitStruct);

  33.   TIM_Cmd(TIM2,DISABLE);//先不使能TIM2


  34. /****************TIM3再從模式的門控模式下的PWM輸出模式**************/
  35.   TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  36.   TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
  37.   TIM_TimeBaseInitStruct.TIM_Prescaler = 720;//預(yù)分頻值,10us技術(shù)一次
  38.   TIM_TimeBaseInitStruct.TIM_Period = TIM3per;//重載值
  39.   TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);

  40.   
  41.   TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);//TIM3為門控模式
  42.   TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);
  43.   TIM_SelectInputTrigger(TIM3,TIM_TS_ITR1);//內(nèi)部從TIM2觸發(fā)
  44.   

  45.   TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;
  46.   TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
  47.   TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
  48.   TIM_OCInitStruct.TIM_Pulse = TIM3per/2;//比較捕獲1的預(yù)裝載值   占空比50%
  49.   TIM_OC1Init(TIM3,&TIM_OCInitStruct);

  50.   TIM_Cmd(TIM3,ENABLE);

  51. }





  52. /*****設(shè)置PWM的輸出,精確輸出多少頻率多少個(gè)數(shù)的脈沖************/

  53. /*****Cycle:周期,單位(us)
  54. ******Pulse_Num:脈沖個(gè)數(shù)(最大3200)

  55. ****改變TIM3的 ( 重裝載值          ) 改變脈沖頻率,固定占空比為50%
  56. ****改變TIM2的 ( 預(yù)分頻器+重裝載值 ) 改變脈沖個(gè)數(shù)                    */

  57. void TIM2_TIM3_PWM(u16 Cycle, u16 Pulse_Num)
  58. {
  59.   u16 TIM3per = 0;        
  60.   u32 Time = 0;

  61.   Time = Cycle * Pulse_Num;
  62.   Time /= 100;                  //預(yù)分頻為7200,100us 技術(shù)一次
  63.   TIM3per = Cycle/10;           //預(yù)分頻為720 ,10us  技術(shù)一次

  64.   TIM_SetAutoreload(TIM2, Time-1);     //設(shè)置TIM2的重裝載值
  65.   TIM_SetAutoreload(TIM3, TIM3per-1);  //設(shè)置TIM3的重裝載值
  66.   TIM_SetCompare1(TIM3,TIM3per/2);     //設(shè)置TIM3占空比為50%

  67.   TIM_Cmd(TIM2,ENABLE);

  68. }

  69. void TIM3_CH1_init(void)
  70. {
  71.   TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
  72.   TIM_OCInitTypeDef TIM_OCInitStruct;
  73.   GPIO_InitTypeDef GPIO_InitStruct;

  74.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2|RCC_APB1Periph_TIM3,ENABLE);   // RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);                        
  75.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); //  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);


  76.   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;   //TIM2_ch1_ETR:A0   ,  TIM3_ch1    :A6
  77.   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_6;
  78.   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  79.   GPIO_Init(GPIOA,&GPIO_InitStruct);

  80.   
  81.   /**************TIM2工作在單脈沖模式下********************/
  82.   TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  83.   TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
  84.   TIM_TimeBaseInitStruct.TIM_Prescaler = 7200;   //預(yù)分配值,每100u計(jì)數(shù)一次
  85.   TIM_TimeBaseInitStruct.TIM_Period = 400;   //重載值
  86.   TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);


  87.   TIM_SelectOnePulseMode(TIM2,TIM_OPMode_Single);//設(shè)置TIM2在單脈沖模式下 , 單次觸發(fā)
  88.   TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);// 使能TIM2的通道1預(yù)裝載寄存器
  89.   TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_OC1Ref); //脈沖輸出通道1


  90.   TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//
  91.   TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
  92.   TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
  93.   TIM_OCInitStruct.TIM_Pulse = 200;//比較捕獲1的預(yù)裝載值    占空比50%
  94.   TIM_OC1Init(TIM2,&TIM_OCInitStruct);

  95.   TIM_Cmd(TIM2,DISABLE);//先不使能TIM2


  96. /****************TIM3再從模式的門控模式下的PWM輸出模式**************/
  97.   TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
  98.   TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
  99.   TIM_TimeBaseInitStruct.TIM_Prescaler = 720;//預(yù)分頻值,10us技術(shù)一次
  100.   TIM_TimeBaseInitStruct.TIM_Period = 200;//重載值
  101.   TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);

  102.   
  103.   TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Gated);//TIM3為門控模式
  104.   TIM_SelectMasterSlaveMode(TIM3,TIM_MasterSlaveMode_Enable);
  105.   TIM_SelectInputTrigger(TIM3,TIM_TS_ITR1);//內(nèi)部從TIM2觸發(fā)
  106.   

  107.   TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;
  108.   TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;
  109.   TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;
  110.   TIM_OCInitStruct.TIM_Pulse = 100;   //比較捕獲1的預(yù)裝載值   占空比50%
  111.   TIM_OC1Init(TIM3,&TIM_OCInitStruct);

  112.   TIM_Cmd(TIM3,ENABLE);
  113. }









  114. void Set_F_Pulse_Num(u16 Cycle, u16 Pulse_Num)
  115. {


  116. }

復(fù)制代碼

所有資料51hei提供下載:
頻率 脈沖可控,驅(qū)動(dòng)步進(jìn)電機(jī).rar (2.19 KB, 下載次數(shù): 135)


回復(fù)

使用道具 舉報(bào)

ID:328089 發(fā)表于 2018-5-12 10:29 | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí)學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:350346 發(fā)表于 2018-6-15 18:08 | 顯示全部樓層
驅(qū)動(dòng)頻率調(diào)節(jié)范圍是多少?
回復(fù)

使用道具 舉報(bào)

ID:243748 發(fā)表于 2018-6-25 06:35 來自觸屏版 | 顯示全部樓層
這個(gè)程序這么小能用嗎
回復(fù)

使用道具 舉報(bào)

ID:340339 發(fā)表于 2018-6-25 23:34 | 顯示全部樓層
學(xué)習(xí)學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

ID:378309 發(fā)表于 2019-2-14 12:50 | 顯示全部樓層
完全不可用,建議不要下載。
回復(fù)

使用道具 舉報(bào)

ID:476614 發(fā)表于 2019-2-14 20:38 | 顯示全部樓層
學(xué)習(xí)了,謝謝
回復(fù)

使用道具 舉報(bào)

ID:478898 發(fā)表于 2019-2-22 10:54 | 顯示全部樓層
不錯(cuò)的。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲社区在线 | 精品中文视频 | 国内91在线 | 成人免费av | 欧美国产一区二区 | 国产精品日韩在线观看一区二区 | 国产成人aⅴ | 国产日韩一区二区三区 | 91精品国产91久久久久久吃药 | 一区二区av | 国产精品久久久久婷婷二区次 | 手机av在线| 亚洲成人观看 | 久久久青草婷婷精品综合日韩 | 免费的黄色片子 | 亚洲久草| 欧美日韩中文字幕在线 | 欧美日韩国产一区二区三区不卡 | 日韩有码一区二区三区 | 天天激情综合 | 91久久伊人 | 欧美视频区 | 成人一区二区在线 | 久久免费资源 | 中文字幕在线第二页 | 国产综合久久久久久鬼色 | 国精品一区 | 99热都是精品 | 99精品国产一区二区青青牛奶 | 91极品视频| 欧美成人精品二区三区99精品 | 国产成人午夜高潮毛片 | 欧美日韩在线播放 | 黄色免费网站在线看 | 亚洲天堂一区二区 | 在线免费黄色 | 中文字幕亚洲欧美日韩在线不卡 | a级在线观看 | av国产精品 | 国产美女h视频 | 成人亚洲综合 |