u16 pwm1_arr=1800,pwm1_psc=2,//pwm1初始arr psc 72000/2/1800=20khz pwm pwm2_arr=1800,pwm2_psc=2;//pwm2初始arr psc u16 pwm1_pluse,pwm2_pluse ;
时间: 2024-05-31 19:11:18 浏览: 120
这段代码是关于STM32的PWM模块的初始化代码。其中,pwm1_arr和pwm2_arr分别表示PWM计数器的自动重载值,pwm1_psc和pwm2_psc则表示PWM计数器的预分频值。通过这些参数可以计算出PWM输出的频率,公式为:PWM输出频率=定时器时钟频率/(pwm_arr+1)/(pwm_psc+1)。
另外,pwm1_pluse和pwm2_pluse则是用来控制PWM输出占空比的变量。在实际应用中,可以通过修改这些变量的值来调整PWM输出的占空比,从而控制电机、灯光等设备的运行状态。
相关问题
#include "USART.h" #include "contral.h" #define P_ARR_MAX 50 #define Us_ARR_MAX 10 double VIN_DAS[4]; u16 pwm1_arr=1800,pwm1_psc=2,//pwm1初始arr psc 72000/2/1800=20khz pwm pwm2_arr=1800,pwm2_psc=2;//pwm2初始arr psc u16 pwm1_pluse,pwm2_pluse ; //pwm1/2占空比ccr寄存器值 float ku=21.68,ki=1.055; float UIn_ad,IIn_ad,Uo_ad,Ub_ad,Ib_ad,Ib; float Us0=0,Us=0,Uo=30,Uobase=30,p; int cnt=20,cnt_getUs=10; int flag1=0,flag2=0,i=P_ARR_MAX,flagPlus=0,flagMinus=0; float step=0.0; vu8 key=0; /*************电路初始化************/ void Init() { //1 pwm1 通过一个循环来进行滤波操作,然后根据滤波后的结果计算出 pwm1_pluse 的值 while(cnt>0) { adsfilter(0);adsfilter(1); UIn_ad=VIN_DAS[0]*ku; IIn_ad=VIN_DAS[1]*ki; Us0=IIn_ad*10+UIn_ad; cnt--; } pwm1_pluse=Us0/60.0*pwm1_arr; // TIM4_PWM_Init(pwm1_arr,pwm1_psc); // TIM_SetCompare1(TIM4,pwm1_pluse); //2 EN delay_ms(50); GPIO_SetBits(GPIOB,GPIO_Pin_15); delay_ms(50); //3 pwm2 cnt=20; while(cnt>0) { adsfilter(2); adsfilter(3); Uo_ad=VIN_DAS[2]*ku; Ub_ad=VIN_DAS[3]*ku; cnt--; } pwm2_pluse=Ub_ad/Uo_ad*pwm2_arr; TIM3_PWM_Init(pwm2_arr,pwm2_psc); TIM_SetCompare2(TIM3,pwm2_pluse); //4 EN delay_ms(50); GPIO_SetBits(GPIOB,GPIO_Pin_12); delay_ms(50); } /*************电路初始化************/ /*************采样*************/ void caiyang() { adsfilter(0);adsfilter(1);adsfilter(2); adsfilter(3); UIn_ad=VIN_DAS[0]*ku; UIn_ad=UIn_ad*0.9554+0.0127; IIn_ad=VIN_DAS[1]*ki; IIn_ad=IIn_ad*0.9906-0.0021; Uo_ad=VIN_DAS[2]*21.05; //Uo_ad=Uo_ad*0.9991+1.2882; Ub_ad=VIN_DAS[3]*21.15; Ub_ad=Ub_ad*0.859+1.8277; Ib_ad=Get_Adc(1)*(3.3/4096); Ib=(Ib_ad-1.39)/0.428+0.12; Us=IIn_ad*10+UIn_ad; Us=1.0084*Us-0.0239; }
这段代码主要实现了电路初始化和采样两个功能。在电路初始化的过程中,通过循环滤波操作来得到输入电压、输入电流和输出电压的值,并计算出 PWM1 和 PWM2 的占空比。在采样的过程中,通过 ADS 模块来获取输入电压、输入电流、输出电压和输出电流的值,并进行相应的滤波处理。其中,输入电压和输入电流经过处理后计算出了输入功率,输出电压和输出电流则计算出了输出功率。最终计算出的输入功率与输出功率之比即为转换效率。
// 定时器预分频为psc= 7200-1 arr=20000 这个定时器周期为
定时器的周期可以通过以下公式计算得出:
周期 = (arr + 1) * (psc + 1) / 定时器时钟频率
其中,定时器时钟频率是指定时器的时钟频率,可以根据具体情况进行设置。
根据你提供的信息,定时器的预分频为psc=7200-1,计数值为arr=20000,假设定时器时钟频率为72MHz,则定时器周期可以计算如下:
周期 = (20000 + 1) * (7200 - 1 + 1) / 72MHz = 1s
因此,这个定时器的周期为1秒。
阅读全文