怎么检测交流信号有效值
可能问题有点弱啊!怎么用定时器确定一个正弦信号的周期呢?定时器都是用来定时触发的,而不是在定时间内做某一件事得把?不明白!像这个
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //判断中断标志位是否为1;为1则中断响应啦,0则没有
{
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); //清除中断挂起位
执行操作
}
而没有,
while(TIM_GetITStatus(TIM2, TIM_IT_Update) == RESET)
{
执行操作
}
就想在固定的一段时间内检测信号,然后用均方根计算有效值,怎么弄呢?
谢谢啊!
RE:怎么检测交流信号有效值
每周期采样一定数量的信号,最好是奇数理论上越多越好,实际上不少于16个就够了.再求均方根就是有效值。RE:怎么检测交流信号有效值
一般测试周期的话,都是用信号捕获功能,楼主可以详细看一下定时器的应用,你说的定时应用只是其中一个!RE:怎么检测交流信号有效值
一种方法是使用有效值检测芯片,还有一种方法就是每个周期采样,然后计算
RE:怎么检测交流信号有效值
常用的方法:方法一:用外部中断进行捕获
方法二:周期采样,计算
RE:怎么检测交流信号有效值
先进行周期采样, 再通过计算求出有效值回复:怎么检测交流信号有效值
可这样为什么不对呢?利用stm32定时器3产生0.5s的定时,用current detect程序启动定时器,循环检测adc信号,定时器中断程序改变adcflag 值,current detect程序停止定时器。
但现在进入不了定时器3中断程序。怎么回事呢?
void Init_TIMER3(void)//初始化
{
TIM_TimeBaseInitTypeDef TIM_BaseInitStructure; //
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //!!
TIM_DeInit( TIM3); //
TIM_InternalClockConfig(TIM3); //
TIM_BaseInitStructure.TIM_Period = 5000;
TIM_BaseInitStructure.TIM_Prescaler = 7199;
TIM_BaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分割为0
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_BaseInitStructure);
TIM_ClearFlag(TIM3, TIM_FLAG_Update); //
TIM_ARRPreloadConfig(TIM3, DISABLE); //
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); //
//TIM_Cmd(TIM3, ENABLE); //
}
void TIM3_IRQHandler(void)//定时器3中断
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); //
ADCflag=0;
}
}
/*****************************************************************************
void Current_detect(void)
{
ADCflag=1;
TIMadc=0;
TIM_Cmd(TIM3, ENABLE);
while(ADCflag)
{
ADC_GetConversionValue(ADC1);
if(AD_Value>AD_Value) array_Ia=AD_Value-AD_Value;
else array_Ia=AD_Value-AD_Value;
TIMadc++;
}
RE:怎么检测交流信号有效值
能想到的只有多采样然后计算了RE:怎么检测交流信号有效值
利用单片机的定时器中比较器单元与捕捉器单元的硬件功能,通过两次脉冲边沿时间捕捉值的差值,得到脉冲周期值。RE:怎么检测交流信号有效值
利用定时器的捕获功能,捕获到数据后计算周期
页:
[1]