新手上路
- 积分
- 31
- 金钱
- 31
- 注册时间
- 2016-4-17
- 在线时间
- 17 小时
|
20金钱
这是我的一个求全波整流后的电压有效值的程序,我的想法是用定时器3每隔100us采集一次adc值,采集100个即0.01s一个周期的的数据,然后求这些数据的平方和的均方根值,但是采集交流电压的时候结果是错误的,1.5V电压计算结果输出几乎为0,请问问题在哪?
这是定时器3的程序
void TIM3_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //ê±Öóê1Äü
//¶¨ê±Æ÷TIM33õê¼»ˉ
TIM_TimeBaseStructure.TIM_Period = arr; //éèÖÃÔúÏÂò»¸ö¸üDÂê¼t×°èë»î¶ˉμÄ×Ô¶ˉÖØ×°ÔØ¼Ä′æÆ÷ÖüÆúμÄÖμ
TIM_TimeBaseStructure.TIM_Prescaler =psc; //éèÖÃóÃà′×÷ÎaTIMxê±ÖóÆμÂê3yêyμÄÔ¤·ÖÆμÖμ
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //éèÖÃê±Öó·Ö¸î:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòéϼÆêyÄ£ê½
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //¸ù¾YÖ¸¶¨μÄ2Îêy3õê¼»ˉTIMxμÄê±¼ä»ùêyμ¥λ
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE );
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_Cmd(TIM3, ENABLE);
}
int i;
double temp;
float adcm;
float adcu;
u16 TIM3_IRQHandler(void) //100us¸üDÂò»′ÎÖD¶Ï£¬»ñè¡ADCÖμ
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update );
adcm=Get_Adc(ADC_Channel_8);
if(i<100)
{temp=temp+adcm*adcm; //temp=+adcm*adcm¸ÄÎaáËtemp+=adcm*adcm
i++;
}
else
{i=0;
adcu=sqrt(temp/100);
temp=0;
}
}
return adcu;
}
这是主函数的部分程序
|
最佳答案
查看完整内容[请看2#楼]
先不用看你的程序对不对.
先看程序在直流电采样时,对不对.直流电采样时,如果是可以用的.
那会不会是电路上 什么电容在滤波呀.把信号过滤掉了.
|