简易电阻、电容和电感测量仪
PE.0的有效监测边沿改为上升沿或下降沿有效即上升沿和下降沿均可以触发中断。同时使能定时器TIM2、TIM3,代码如下:
void EXTI_Configuration_int(void) //在外部中断0服务子程序中将PD.O触发方式更改为EXTI_Trigger_Rising_Falling {
EXTI_InitTypeDef EXTI_InitStructure; /* Connect EXTI Line0 and 0 to PE.0*/
GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource0);
/* Configure EXTI Line9 to generate an interrupt on rising and falling edge */ EXTI_InitStructure.EXTI_Line = EXTI_Line0;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling ; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_Init(&EXTI_InitStructure); }
中断服务子程序代码:
void EXTI0_IRQHandler(void) {
if(EXTI_GetITStatus(EXTI_Line0) != RESET) { GPIO_SetBits(GPIOE,GPIO_Pin_5);//进入中断指示灯LED5 if(flag_exti == 0) //只让EXTI_Configuration_int()执行一次,提高代码效率 { EXTI_Configuration_int(); flag_exti = 1; } if(flag_tim2 == 0) { TIM_Cmd(TIM2,ENABLE);//同时启动定时器2、3 TIM_Cmd(TIM3,ENABLE); flag_tim3 = 1; } if(flag_tim2 == 1) { TIM_Cmd(TIM2,DISABLE);//检测到下降沿,失能定时器 counter_tim2 = TIM2 -> CNT;//读取定时器的值 TIM2 -> CNT = 0;//定时器清零 } if(++flag_tim2 == 2) flag_tim2 = 0; exti_PD0++;
10
简易电阻、电容和电感测量仪
EXTI_ClearITPendingBit(EXTI_Line0);//清除中断标志位 } }
void EXTI1_IRQHandler(void) {
if(EXTI_GetITStatus(EXTI_Line1) != RESET) { GPIO_SetBits(GPIOE,GPIO_Pin_6);//进入中断指示灯LED6 TIM_Cmd(TIM3,DISABLE); counter_tim3 = TIM3 -> CNT; TIM3 -> CNT = 0; flag_tim3 = 0; exti_PD1++; EXTI_ClearITPendingBit(EXTI_Line1); }
说明:在程序中给定时器TIM2、TIM3配置的时钟为36MHZ,是两个通道的输出频率10KHZ的3600倍,在两个通道的一个周期TIM2、TIM3会计数到3600.
在主函数中对PE.0的配置是为了总是在上升沿到来时启动定时器TIM2、TIM3,只是为了选定一个起始点,如果以任意边沿触发则会导致测出来的相位差不准确。在EXTI0_IRQHandler中断中将PE.0的有效边沿改为上升沿或下降沿是为了在通道一的下降沿到来时失能定时器TIM2,与此同时读出TIM2-CNT,测得在一个周期内通道一由高电平变为低电平定时器TIM2所计数的值counter_tim2。而在通道二的下降沿到来时失能定时器TIM3,与此同时读出TIM3-CNT,测得在通道一上升沿到来到通道二下降沿到来这一时间段定时器TIM3所计数的值counter_tim3。 3、相位差计算。结合以上三图:
(1)若counter_tim2 - counter_tim3 < 0,则通道二的输出信号滞后于通道一的输出信号,该元件无电容。
相位差 = | counter_tim2 - counter_tim3|/(2* counter_tim2)
(2)若counter_tim2 - counter_tim3 = 0,则通道二的输出信号没有发生移相,该元件为电阻。 相位差为0。
(3)若counter_tim2 - counter_tim3 > 0,则通道二的输出信号超前于通道一的输出信号,该元件为电容。
相位差 = | counter_tim2 - counter_tim3|/(2* counter_tim2) 3.5
程序流程图设计
11
简易电阻、电容和电感测量仪
开始 系统初始化 判断器件类型 电阻 电容 电感 测量幅值 计算电阻 计算电容 计算电感 显 示 是否按下结束按键 是 结束
4.1简易RLC测量仪功能说明
简易RLC测量仪功能说明:能够自动识别元器件(电阻、电容、电感)类型并计算出其值的大小,能够测出基准信号Ux(没有经过半桥电路)和半桥电路的输出信号Us的频率,真有效值大小及相位差。
4.2测试方案
测试工具:万用表DT9205
12
简易电阻、电容和电感测量仪
简易RLC测量仪使用说明:
1、整个测试过程通过使用操控台上的五个独立按键实现,五个按键分 为:key_up,key_down,ensure,return,res_consult+。 key_up:选中上一项。 key_down:选中下一项。 ensure:执行选中的当前项。 return:返回到上一幕。
res_consult+:更改程序中的档位值。
2、当向系统版写入程序后,进行测量,在10左右秒之后就会执行更新,并且12864会实时显示更新的测量值。
3、在测量之前应将档位调小,避免电路电流过大烧坏电路,“选中元件类型及值”之前应先执行“档位检测”以检测所选档位是否合适,如果不合适则进行更换。
3、系统能够测试常见的电阻、电感和电容的大小,将被测元件插入到测试插座中,系统能够自动识别元件类型并将元件类型显示,也可根据元件参数大小提示拨动拨码开关手动换挡:将档位调大或将档位调小,并且会显示当前程序中所选档位值。可通过调节“Res_consult+”键,来改变程序中所选档位值以此于实际电路中所选档位值相匹配,计算出元器件的值。
4.3实测记录
电阻测试:
表5-1电阻测量表格
序号 1 2 3 4 5 6 7 8 9 标准值 56? 100? 750? 1k? 5.1k? 10 k? 56 k? 100 k? 200 k? 测量值 57.34? 103.21? 762.89? 1037.02? 精度 2.4% 3.2% 1.7% 3.7% 3.9% 4.1% 2.7% 2.8% 8.5% 5297.26? 10412.23? 57491.12? 102836.25? 217159.34 13
简易电阻、电容和电感测量仪
10 11 12
680 k? 1M? 10 M? 725659.56? 6.7% 8.6% 2.7% 1085546.24? 10269456.24? 电容测试:
表5-2电感测量表格
序号 1 2 3 4 5 6
标准值(pF) 测量值(pF) 100 680 4700 10000 33000 100000 106.34 707.12 4664.25 9360.23 36168.12 106584.15 精度 6.3% 3.9% 0.8% 6.4% 9.6% 6.5%
电感测试:
表5-3电感测量表格 序号 1 2 3 4 标准值 100uH 1mH 10mH 100mH 测量值 0.11mH 1.06 mH 10.84 mH 90.12 精度 10% 6.0% 8.4% 9.8% 4.4测量数据分析
由表5-1电阻测量表格可知,电阻测量值的误差在10%以下,在满足题目要求的精度
范围内测量范围大,而由表5-2电容测量值表格及电感测量值表格可知,电容电感值的测量只是在一定范围内精度较高,超出一定范围就达不到精度要求,这是因为我们采用半桥法真有效值比例运算计算元器件的值,频率对电阻值的大小没有什么大的影响,但是对电容电感值的测量会产生较大的影响,如下为电阻、电容、电感的测量的计算公式;
对于电阻R:R=Zx=Rs*Ux/Us
14