单片机测电阻
LCD_ShowxNum(60,80,temp,10,16,0);
TIM5CH1_CAPTURE_STA=0;
res_temp=temp/1.529-200;
res_val=(u32)(res_temp);
LCD_ShowxNum(60,100,res_val,10,16,0);
}
}
}
注意的点:
(1)分档的原因:
当公式里面的待测电阻远大于里面的定值电阻的时候,占空比会远非常接近100%,也即是Tl近似为0.这样在采样的时候,就会出现一些杂波的影响,使得测量结果接近于0.
(2)因为是要从浮点数转化为整数显示,那么如何从算法上提高精度
(3)如何从硬件上提高测量精度;
(4)软件滤波可以解决部分杂波干扰;
LCD_ShowString(150,100,200,16,16,"om");
while(1)
{
dHale Waihona Puke lay_ms(10);if (TIM5CH1_CAPTURE_STA&0X80)
{
temp=TIM5CH1_CAPTURE_STA&0X3F;
temp*=65536;
temp+=TIM5CH1_CAPTURE_VAL;//最后的时间值,单位为us
u32 temp;
u32 res_val;
float res_temp;
delay_init();
NVIC_Configuration();
TIM5_Cap_Init(0xFFFF,71);
LCD_Init();
LCD_ShowString(60,60,200,16,16,"ready");
LCD_ShowString(150,80,200,16,16,"uS");
单片机测电阻:
方案一:
电桥+放大电路+stm32AD采样;
方案二:
555震荡电路+stm32脉宽捕获
对比:
方案一的测量范需围有限:
分析如下:
根据TI提供的套件的参数,计算分析如下:
非平衡电桥测电阻公式如下:
带入TI套件的公式得到如下结果:
4/R(变化)+2=E/U0
可以知道电阻的范围为0到500欧姆
注意的地方:
(1)stm32的显示屏函数(与你自己的显示函数有关)只能显示整数,所以得到的值要换成整数,显示数字那个函数有一个参数是设定显示数字的个数的,设定个数与实际显示的数字的个数相比,只能多,不能少
(2)电压从电桥出来后还经过运算放大器的10倍放大,所以在计算U0时应该先除以10;
方案二:
范围很大:从几百欧姆到几兆欧姆都可以
Main.c文件:
#include "sys.h"
#include "delay.h"
#include"lcd.h"
#include "usart.h"
#include"adc.h"
#include"timer.h"
int main()
{
extern u8 TIM5CH1_CAPTURE_STA;
extern u16 TIM5CH1_CAPTURE_VAL;