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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4975|回復: 1
收起左側

STM32F103互補PWM帶死區頻率占空比可調源程序

[復制鏈接]
ID:85785 發表于 2019-8-29 08:35 | 顯示全部樓層 |閱讀模式
最近做了STM32F103互補PWM帶死區頻率占空比可調,現在來分享一下。
從STM32的datashee可以看到下圖
B4DC28DB-6BBA-40f5-AB3E-2084D8E076BF.png
互補PWM我現在選擇的是TIM1的通道1通道2通道3
上圖可看出復用腳PA6 PA7 PB0 PB1
不復用的腳PB12 PB13 PB14 PB15,可以根據自己的引腳需求選擇復用或者不復用,這些腳是輸出互補的引腳,正向PWM引腳為PA8 PA9 PA10 PA11
這個功能其實也挺簡單的,下面直接看附件代碼。

單片機源程序如下:
  1. #include "PWM_Deadline.h"

  2. uint16_t CC1_Value = 1000,CC2_Value = 10000,CC3_Value = 20000;

  3. void TIM3_PWMShiftInit(void)
  4. {
  5.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  6.         TIM_OCInitTypeDef  TIM_OCInitStructure;
  7.         GPIO_InitTypeDef  GPIO_InitStruct;
  8.         TIM_BDTRInitTypeDef      TIM1_BDTRInitStruct;
  9.        
  10.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
  11.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
  12.        
  13.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  14.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_6 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12;
  15.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  16.         GPIO_Init(GPIOA,&GPIO_InitStruct);
  17.        
  18.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
  19.         GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
  20.         GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  21.         GPIO_Init(GPIOB,&GPIO_InitStruct);
  22.        
  23.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1, ENABLE);
  24. ////        GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE);
  25.         //TIM1_TIM2_TIM16
  26.         TIM_TimeBaseStructure.TIM_Period = 65534;//計數1000
  27.         TIM_TimeBaseStructure.TIM_Prescaler = 71;//48/n
  28.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  29.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  30.         TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

  31.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

  32.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  33.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  34.         TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
  35.         TIM_OCInitStructure.TIM_Pulse = 100;
  36.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  37.         TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
  38.         TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
  39.         TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
  40.        
  41.         //配置死區
  42.         TIM1_BDTRInitStruct.TIM_OSSRState = TIM_OSSRState_Disable;
  43.         TIM1_BDTRInitStruct.TIM_OSSIState = TIM_OSSIState_Disable;
  44.         TIM1_BDTRInitStruct.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
  45.         TIM1_BDTRInitStruct.TIM_DeadTime = 10;
  46.         TIM1_BDTRInitStruct.TIM_Break = TIM_Break_Disable;
  47.         TIM1_BDTRInitStruct.TIM_BreakPolarity = TIM_BreakPolarity_High;
  48.         TIM1_BDTRInitStruct.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;
  49.         TIM_BDTRConfig(TIM1,&TIM1_BDTRInitStruct);

  50. //        TIM_OCInitStructure.TIM_Pulse = 900;
  51. //        TIM_ICInit(TIM1, &TIM_OCInitStructure);
  52. //        TIM_CCPreloadControl(TIM1, TIM_OCPreload_Enable);

  53.   TIM_OCInitStructure.TIM_Pulse = CC1_Value;
  54.         TIM_OC1Init(TIM1, &TIM_OCInitStructure);
  55.         TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
  56. //        TIM_Cmd(TIM1, ENABLE);
  57. //        TIM_CtrlPWMOutputs(TIM1, ENABLE);
  58.        
  59.         TIM_OCInitStructure.TIM_Pulse = CC2_Value;
  60.         TIM_OC2Init(TIM1, &TIM_OCInitStructure);//CH4可以正確輸出,但CH1不行,全速轉動,為什么?
  61.         TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable);
  62.        
  63.         TIM_OCInitStructure.TIM_Pulse = CC3_Value;
  64.         TIM_OC3Init(TIM1, &TIM_OCInitStructure);
  65.         TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);
  66.        
  67.         TIM_Cmd(TIM1, ENABLE);
  68.         TIM_CtrlPWMOutputs(TIM1, ENABLE);
  69.        
  70. //        TIM_ITConfig(TIM1, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3, ENABLE);
  71.        
  72. //        TIM_ARRPreloadConfig(TIM1, ENABLE);

  73. }

  74. uint16_t Fre;
  75. void Dynami_Fre(void)
  76. {
  77.         TIM1->ARR = Fre;   //可調頻率
  78.         if (Fre > 10000) Fre = 10000;
  79.         if (Fre < 1000) Fre = 1000;
  80.         Fre ++;
  81.         TIM_SetCompare1(TIM1, 100);  //占空比 = 100 / TIM1->ARR;
  82.         TIM_SetCompare2(TIM1, 200);  //占空比 = 200 / TIM1->ARR;
  83.         TIM_SetCompare3(TIM1, 300);  //占空比 = 300 / TIM1->ARR;
  84.        
  85. }


  86. uint16_t value1 = 0;
  87. void TIM1_CC_IRQHandler(void)
  88. {
  89.         uint16_t capture;
  90.         if (TIM_GetITStatus(TIM1, TIM_IT_CC1) != RESET)
  91.         {
  92.                 TIM_ClearITPendingBit(TIM1, TIM_IT_CC1 );
  93.                 capture = TIM_GetCapture1(TIM1);
  94.                 if (value1 > 20000) value1 = 20000;
  95.                 TIM_SetCompare1(TIM1, 10000);
  96.                 TIM1->ARR = 15000;
  97.         }
  98. //        if (TIM_GetITStatus(TIM1, TIM_IT_CC2) != RESET)
  99. //        {
  100. //                TIM_ClearITPendingBit(TIM1, TIM_IT_CC2 );
  101. //                capture = TIM_GetCapture2(TIM1);
  102. //                if (value1 > 20000) value1 = 20000;
  103. //                TIM_SetCompare1(TIM1, capture + CC2_Value/2);
  104. //        }
  105. //        if (TIM_GetITStatus(TIM1, TIM_IT_CC3) != RESET)
  106. //        {
  107. //                TIM_ClearITPendingBit(TIM1, TIM_IT_CC3 );
  108. //                capture = TIM_GetCapture3(TIM1);
  109. //                if (value1 > 20000) value1 = 20000;
  110. //                TIM_SetCompare1(TIM1, capture + CC3_Value/2);
  111. //        }
  112. }

  113. void NVIC_Configuration(void)
  114. {
  115. NVIC_InitTypeDef NVIC_InitStructure;




  116. NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);


  117. NVIC_InitStructure.NVIC_IRQChannel=TIM1_CC_IRQn;
  118. NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
  119. NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
  120. NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
  121. NVIC_Init(&NVIC_InitStructure);
  122. }
復制代碼

所有資料51hei提供下載:
master.7z (303.03 KB, 下載次數: 97)

評分

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

查看全部評分

回復

使用道具 舉報

ID:71535 發表于 2019-9-16 19:36 | 顯示全部樓層

看看是什么寶貝
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩高清在线 | 久久精品国产久精国产 | 丁香婷婷综合激情五月色 | 一区二区三区视频在线观看 | 国产精品视频在线观看 | 亚洲一区二区网站 | 看亚洲a级一级毛片 | 成人羞羞国产免费视频 | 一区福利视频 | 91在线视频观看免费 | 一级毛片视频在线 | 日韩精品一区二区三区中文字幕 | 日韩精品一区二区三区在线观看 | 国产成人福利视频在线观看 | 成人高清视频在线观看 | 午夜看片网站 | 亚洲欧美综合精品久久成人 | 日日干日日色 | 久久久久久国产免费视网址 | 久久久999精品 | 国产区在线 | 日韩欧美在线精品 | 国产在线精品一区二区三区 | 国产96在线 | 综合婷婷 | 国产成人精品一区二 | 国产亚洲一区二区在线观看 | 国产精品一区在线 | 超碰高清 | v亚洲| 国产欧美日韩精品在线观看 | 日韩成人精品一区 | 美女视频一区二区三区 | 亚洲天天干 | 2020亚洲天堂| 成人在线免费视频 | 国产欧美日韩一区二区三区 | 99国产精品99久久久久久 | 伊人狠狠操 | 日本中文在线视频 | www久久|