while(cnt>0) { adsfilter(2); adsfilter(3); Uo_ad=VIN_DAS[2]*ku; Ub_ad=VIN_DAS[3]*ku; cnt--; }
时间: 2023-07-15 11:12:08 浏览: 55
这是一个循环语句,条件是 `cnt>0`,即当 `cnt` 大于 0 时执行循环体内的语句。循环体内有三条语句,分别是 `adsfilter(2)`、`adsfilter(3)` 和两个变量的赋值语句。
`adsfilter(2)` 和 `adsfilter(3)` 是函数调用语句,可能是对某个信号进行滤波处理。`Uo_ad` 和 `Ub_ad` 是两个变量,根据等号右边的表达式求值后将结果赋值给它们。`VIN_DAS[2]*ku` 表示数组 `VIN_DAS` 中第 2 个元素的值乘以 `ku`,`ku` 可能是某个系数,得到的结果赋值给 `Uo_ad`。同理,`VIN_DAS[3]*ku` 得到的结果赋值给 `Ub_ad`。
最后 `cnt--` 表示将 `cnt` 减 1,即循环次数减 1,直到 `cnt` 不大于 0 跳出循环。
相关问题
#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 模块来获取输入电压、输入电流、输出电压和输出电流的值,并进行相应的滤波处理。其中,输入电压和输入电流经过处理后计算出了输入功率,输出电压和输出电流则计算出了输出功率。最终计算出的输入功率与输出功率之比即为转换效率。
aio_attr->sample_rate = OT_AUDIO_SAMPLE_RATE_48000; aio_attr->bit_width = OT_AUDIO_BIT_WIDTH_16; aio_attr->work_mode = OT_AIO_MODE_I2S_SLAVE; aio_attr->snd_mode = OT_AUDIO_SOUND_MODE_MONO; aio_attr->expand_flag = 0; aio_attr->frame_num = 30; /* 30:frame num */ aio_attr->point_num_per_frame = AACLC_SAMPLES_PER_FRAME; aio_attr->chn_cnt = 2; /* 2:chn cnt */ *ai_dev = SAMPLE_AUDIO_EXTERN_AI_DEV; aio_attr->clk_share = 1; aio_attr->i2s_type = OT_AIO_I2STYPE_EXTERN;详细解析
这段代码涉及音频输入输出设备的设置参数,具体解析如下:
1. `aio_attr->sample_rate = OT_AUDIO_SAMPLE_RATE_48000;` 设置音频采样率为 48000Hz。
2. `aio_attr->bit_width = OT_AUDIO_BIT_WIDTH_16;` 设置音频采样位宽为 16bit。
3. `aio_attr->work_mode = OT_AIO_MODE_I2S_SLAVE;` 设置音频输入输出设备的工作模式为 I2S 从设备模式。
4. `aio_attr->snd_mode = OT_AUDIO_SOUND_MODE_MONO;` 设置音频采集模式为单声道模式。
5. `aio_attr->expand_flag = 0;` 扩展标志位,暂未使用。
6. `aio_attr->frame_num = 30;` 设置音频数据帧数为 30。
7. `aio_attr->point_num_per_frame = AACLC_SAMPLES_PER_FRAME;` 设置每帧采样点数为 AACLC_SAMPLES_PER_FRAME。
8. `aio_attr->chn_cnt = 2;` 设置音频通道数为 2。
9. `*ai_dev = SAMPLE_AUDIO_EXTERN_AI_DEV;` 设置音频设备类型为 SAMPLE_AUDIO_EXTERN_AI_DEV。
10. `aio_attr->clk_share = 1;` 设置时钟共享标志为 1。
11. `aio_attr->i2s_type = OT_AIO_I2STYPE_EXTERN;` 设置 I2S 类型为外部 I2S 接口。