⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwm_adjust.c

📁 基于STM32的双极性逆变器软件
💻 C
字号:
#include "stm32f10x_lib.h"

#define TIM1_CCR1_Address    0x40012C34	//定义CCP1地址
//#define TIM3_CCR4_Address    0x40000440	//定义CCP1地址

u16 SRC_Buffer[360];/* = {							  //Dvalue=REG*(1/2+(Um*N/(E*pi))*SIN(pi/2*N)*SIN((2*i-1)*pi/2*N))
		2015,2047,2079,2111,2143,2175,2206,2238,2270,2301,2333,2364,2395,2426, 
		2457,2488,2519,2549,2580,2610,2640,2669,2699,2728,2758,2787,2815,2844, 
		2872,2900,2927,2955,2982,3009,3035,3061,3087,3112,3138,3162,3187,3211, 
		3235,3258,3281,3303,3326,3347,3369,3390,3410,3430,3450,3469,3488,3506, 
		3524,3542,3558,3575,3591,3606,3621,3636,3650,3663,3676,3689,3701,3712, 
		3723,3733,3743,3752,3762,3770,3778,3785,3791,3798,3803,3808,3813,3817, 
		3820,3823,3825,3827,3828,3828,3828,3828,3827,3825,3823,3820,3817,3813, 
		3809,3804,3798,3792,3785,3778,3771,3762,3754,3744,3734,3724,3713,3702, 	
		3690,3677,3665,3651,3637,3623,3608,3592,3576,3560,3543,3526,3508,3490, 
		3471,3452,3432,3412,3392,3371,3349,3328,3306,3283,3260,3237,3213,3189, 
		3165,3140,3115,3089,3063,3037,3011,2984,2957,2930,2902,2874,2846,2818, 
		2789,2760,2731,2702,2672,2642,2612,2582,2552,2521,2491,2460,2429,2398, 
		2367,2335,2304,2273,2241,2209,2178,2146,2114,2082,2050,2018,1984,1952, 
		1920,1888,1856,1824,1793,1761,1729,1698,1666,1635,1604,1573,1542,1511, 
		1480,1450,1419,1389,1359,1330,1300,1271,1241,1212,1184,1155,1127,1099, 
		1072,1044,1017, 990, 964, 938, 912, 887, 861, 837, 812, 788, 764, 741, 
		 718, 696, 673, 652, 630, 609, 589, 569, 549, 530, 511, 493, 475, 457, 
		 441, 424, 408, 393, 378, 363, 349, 336, 323, 310, 298, 287, 276, 266, 
		 256, 247, 237, 229, 221, 214, 208, 201, 196, 191, 186, 182, 179, 176, 
		 174, 172, 171, 171, 171, 171, 172, 174, 176, 179, 182, 186, 190, 195, 
		 201, 207, 214, 221, 228, 237, 245, 255, 265, 275, 286, 297, 309, 322,
		 334, 348, 362, 376, 391, 407, 423, 439, 456, 473, 491, 509, 528, 547,
		 567, 587, 607, 628, 650, 671, 693, 716, 739, 762, 786, 810, 834, 859,
		 884, 910, 936, 962, 988,1015,1042,1069,1097,1125,1153,1181,1210,1239,
		1268,1297,1327,1357,1387,1417,1447,1478,1508,1539,1570,1601,1632,1664,
		1695,1726,1758,1790,1821,1853,1885,1917,1949,1981 

		}; *///定义SPWM数组

		/*3999, 3999, 3997, 3995, 3992, 3989, 3985, 3981, 3975, 3970, 3963, 3956, 3949, 3941, 3932, 
		3923, 3913, 3902, 3891, 3879, 3867, 3854, 3841, 3827, 3813, 3798, 3782, 3766, 3749, 3732, 
		3714, 3696, 3677, 3658, 3638, 3618, 3597, 3576, 3554, 3532, 3509, 3486, 3463, 3439, 3414, 
		3389, 3364, 3338, 3312, 3286, 3259, 3231, 3204, 3176, 3147, 3118, 3089, 3060, 3030, 3000, 
		2970, 2939, 2908, 2877, 2845, 2814, 2782, 2749, 2717, 2684, 2651, 2618, 2585, 2551, 2518, 
		2484, 2450, 2416, 2382, 2347, 2313, 2278, 2244, 2209, 2174, 2140, 2105, 2070, 2035, 2000, 
		1965, 1930, 1895, 1861, 1826, 1791, 1756, 1722, 1687, 1653, 1618, 1584, 1550, 1516, 1482, 
		1449, 1415, 1382, 1349, 1316, 1283, 1251, 1219, 1187, 1155, 1123, 1092, 1061, 1030, 1000, 
		970 , 940 , 911 , 882 , 853 , 825 , 796 , 769 , 741 , 715 , 688 , 662 , 636 , 611 , 586 , 
		561 , 537 , 514 , 491 , 468 , 446 , 424 , 403 , 382 , 362 , 342 , 323 , 304 , 286 , 268 , 
		251 , 234 , 218 , 202 , 187 , 173 , 159 , 146 , 133 , 121 , 109 , 98  , 87  , 78  , 68  , 
		59  , 51  , 44  , 37  , 30  , 25  , 19  , 15  , 11  , 8   , 5   , 3   , 1   , 0   , 0   ,  
		0   , 1   , 3   , 5   , 8   , 11  , 15  , 19  , 25  , 30  , 37  , 44  , 51  , 59  , 68  , 
		77  , 87  , 98  , 109 , 121 , 133 , 146 , 159 , 173 , 187 , 202 , 218 , 234 , 251 , 268 , 
		286 , 304 , 323 , 342 , 362 , 382 , 403 , 424 , 446 , 468 , 490 , 514 , 537 , 561 , 586 ,
		611 , 636 , 662 , 688 , 714 , 741 , 768 , 796 , 824 , 853 , 881 , 911 , 940 , 970 , 1000, 
		1030, 1061, 1092, 1123, 1155, 1186, 1218, 1251, 1283, 1316, 1349, 1382, 1415, 1448, 1482,
		1516, 1550, 1584, 1618, 1652, 1687, 1721, 1756, 1791, 1825, 1860, 1895, 1930, 1965, 2000, 
		2035, 2070, 2104, 2139, 2174, 2209, 2243, 2278, 2313, 2347, 2381, 2416, 2450, 2484, 2517, 
		2551, 2584, 2618, 2651, 2684, 2716, 2749, 2781, 2813, 2845, 2876, 2908, 2939, 2969, 3000, 
		3030, 3060, 3089, 3118, 3147, 3175, 3203, 3231, 3258, 3285, 3312, 3338, 3364, 3389, 3414, 
		3438, 3462, 3486, 3509, 3532, 3554, 3576, 3597, 3618, 3638, 3658, 3677, 3696, 3714, 3732, 
		3749, 3766, 3782, 3797, 3812, 3827, 3841, 3854, 3867, 3879, 3891, 3902, 3913, 3922, 3932,
		3941, 3949, 3956, 3963, 3970, 3975, 3980, 3985, 3989, 3992, 3995, 3997, 3999, 3999, 3999 */


/*******************************************************************************
* Function Name  : DMA_Configuration
* Description    : Configures the DMA.
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void PWM_DMA_Configuration(void)
{
  DMA_InitTypeDef DMA_InitStructure;

  /* DMA1 Channel5 Config */
  DMA_DeInit(DMA1_Channel5); //将 DMA的通道 x 寄存器重设为缺省值 

  DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)TIM1_CCR1_Address;  //该参数用以定义 DMA外设基地址
  DMA_InitStructure.DMA_MemoryBaseAddr = (u32)SRC_Buffer;  //该参数用以定义 DMA内存基地址 
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;  //DMA_DIR 规定了外设是作为数据传输的目的地还是来源
  DMA_InitStructure.DMA_BufferSize = 360; //DMA_BufferSize 用以定义指定 DMA通道的 DMA缓存的大小,单位为数据单位
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //DMA_PeripheralInc 用来设定外设地址寄存器递增与否
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //MA_MemoryInc 用来设定内存地址寄存器递增与否
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; //DMA_PeripheralDataSize设定了外设数据宽度
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;//DMA_MemoryDataSize 设定了外设数据宽度
  DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //工作在循环缓存模式
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;//DMA通道 x拥有高优先级
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;//DMA通道 x没有设置为内存到内存传输 

  DMA_Init(DMA1_Channel5, &DMA_InitStructure);

  /* DMA1 Channel5 enable */
  DMA_Cmd(DMA1_Channel5, ENABLE); //使能或者失能指定的通道 x 
}

void TIM_Configuration(void)
{
    TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;
	//TIM_TimeBaseInitTypeDef       TIM_TimeBaseStructure;

    //TIM1基本计数器设置(设置PWM频率)
    //频率=TIM1_CLK/(ARR+1)
	// TIM1 frequency = TIM1CLK/(TIM1_Period + 1)
    TIM_BaseInitStructure.TIM_Period = 1440;//3999;
    TIM_BaseInitStructure.TIM_Prescaler = 0;
    TIM_BaseInitStructure.TIM_ClockDivision = 0;
    TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);
    //启用ARR的影子寄存器(直到产生更新事件才更改设置)
    TIM_ARRPreloadConfig(TIM1, ENABLE);


    //TIM1_OC1模块设置(设置1通道占空比)
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	//--------------------------------------------------------------
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	//-------------------------------------------------------------
    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
    TIM_OCInitStructure.TIM_Pulse = 0;
    TIM_OC1Init(TIM1, &TIM_OCInitStructure);
    //启用CCR1寄存器的影子寄存器(直到产生更新事件才更改设置)
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);

   
   
    //死区设置
    TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
    TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
    TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;
    TIM_BDTRInitStructure.TIM_DeadTime =10;  //这里调整死区大小0-0xff
    TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable ;
    TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High ;
    TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
    TIM_BDTRConfig(TIM1, &TIM_BDTRInitStructure);  
   
	 TIM_DMACmd(TIM1, TIM_DMA_Update, ENABLE);	//使能或者失能 TIM1 的DMA通道
    //TIM1开启
    TIM_Cmd(TIM1, ENABLE);
    //TIM1_OC通道输出PWM(一定要加)
    TIM_CtrlPWMOutputs(TIM1, ENABLE);


} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -