LCR数字电桥精简版@STC8H8K64U,程序开源,电路开源@立创EDA
说明:LCR数字电桥精简版@STC8H8K64U,在上次的体验版
程序开源,电路开源@立创EDA
https://www.stcaimcu.com/thread-22285-1-1.html
上次体验版的基础上,增加了运放跟随、放大,测量范围有所提高,精度依旧不太好;
原理也差不多:采用约256kHz的PWM(SPWM)经RC滤波作为信号源,
2路ADC在PWM中断里采样得到待测件电压、取样电阻的电压(即电流),
经软件算法得到实部、虚部,省去了鉴相电路,仍旧是“自由轴测量法原理”。
本设计利用IO口代替模拟开关用于换挡;(但建议大家慎用,可能会有坑)
IO口开漏模式,输出高电平相当于模拟开关断开,输出低电平相当于模拟开关接通;
但是要注意:由于IO口有钳位二极管,所以IO口的负电压最好不要低于-0.23V,否则会有影响。
用了两路PWM分别调整电压、电流放大器的偏置电压。
最大约能测量100K电阻,最小约0.1欧。
未做显示、按键,通过4针插口连接USB转TTL模块,直接将数据发到串口调试助手。
自动换挡流程:
1.根据电压平均值调整VOS_V,根据电流平均值调整VOS_I;
2.根据电压幅度切换电压放大挡位,根据电流幅度切换电流放大挡位;(若信号较小则提高放大倍数)
3.若电压放大挡位已调至最大,且电压幅度较小,则接通51欧取样电阻(与1K并联);
4.若电压放大挡位已调至最小,且电压幅度较大,关断51欧取样电阻,只留1K取样电阻;
5.若电流放大挡位已调至最大,且电流幅度较小,关断51欧取样电阻,只留1K取样电阻;
6.若电流放大挡位已调至最小,且电流幅度较大,则接通51欧取样电阻(与1K并联);
目前的问题:
1.IO口若用于换档,需注意负电压不要超过-0.23V,否则会造成影响;
因此,根据目前的电路,负载两端的电压差不能超过+-0.23V、电流取样电阻上的电压不能超过+-0.23V;
因此,测量范围受限;
2.IO口有内阻,在输出低电平时,似乎是会受到MCU总电流的影响,工作电流变化会引起IO口电压变化;
因此,运放的放大倍数不能做大,倍数太大会有别的波形干扰测量;
3.电流取样电阻采用的是单端放大,由于地线影响,测量值不够精确。
程序:
电路: (嘉立创EDA专业版)
原理图
(注意,运放容易自激振荡,需在输出与反相输入端之间接个小电容,
可直接叠焊在反馈电阻上,比如R13、R17、R24、R25、R31并100pF电容)
实物图
从开路到接入1欧电阻时的自动调整过程:
探头短接:
测0.1欧电阻:
测0.2欧电阻:
测100K电阻:
厉害,这是个高手 请教下楼主,电路上只有adc_v 和 adc_i 这2路adc口,程序中有4路adc数据,能帮忙解释下吗 world_all 发表于 2026-3-6 09:13
请教下楼主,电路上只有adc_v 和 adc_i 这2路adc口,程序中有4路adc数据,能帮忙解释下吗 ...
只有两路adc数据,存入数组adbuf,
调用函数:
//获取2路ADC,V\I,存入adbuf
void get2ad(void)
你说的4路是指“波形显示器”中的吗?后面两组数据是挡位,
用的是这段代码:
//发送数据波形
for(i=0;i<ARRLEN(adbuf);i++)
{
u1tx(0xAA);
u1tx(8);
v=adbuf;//电压
u1tx(v>>8);
u1tx(v);
v=adbuf;//电流
u1tx(v>>8);
u1tx(v);
v=vseld;//电压挡位
u1tx(v>>8);
u1tx(v);
v=iseld;//电流挡位
u1tx(v>>8);
u1tx(v);
}
lcwswust 发表于 2026-3-6 09:22
只有两路adc数据,存入数组adbuf,
调用函数:
不好意思,是体验版的程序里面,我看岔了 比第一版要复杂了许多
页:
[1]