找回密码
 立即注册
查看: 106|回复: 5

LCR数字电桥精简版@STC8H8K64U,程序开源,电路开源@立创EDA

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:71
  • 最近打卡:2026-03-07 09:59:50
已绑定手机

4

主题

198

回帖

748

积分

高级会员

积分
748
发表于 4 天前 | 显示全部楼层 |阅读模式
说明:

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.电流取样电阻采用的是单端放大,由于地线影响,测量值不够精确。

程序: LCR1.1程序-20260302.zip (112.96 KB, 下载次数: 14)
电路: LCW-LCR-1.1.zip (598.23 KB, 下载次数: 10) (嘉立创EDA专业版)
原理图
(注意,运放容易自激振荡,需在输出与反相输入端之间接个小电容,
可直接叠焊在反馈电阻上,比如R13、R17、R24、R25、R31并100pF电容)
SCH_LCR测试仪-1.1改_sch_1-P1_2026-03-02.png

实物图
傲游截图20260303084439.jpg

傲游截图20260303084502.jpg

从开路到接入1欧电阻时的自动调整过程:
断路到1欧.bmp

探头短接:
短接.bmp

测0.1欧电阻:
0.1欧电阻.bmp

测0.2欧电阻:
0.2欧.bmp

测100K电阻:
100K电阻.bmp





2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:799
  • 最近打卡:2026-03-07 08:48:37
已绑定手机

25

主题

627

回帖

3925

积分

论坛元老

积分
3925
发表于 3 天前 | 显示全部楼层
厉害,这是个高手
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-03-07 10:15:44
已绑定手机

3

主题

32

回帖

92

积分

注册会员

积分
92
发表于 3 天前 | 显示全部楼层
学习
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2026-03-06 08:27:42

0

主题

12

回帖

56

积分

注册会员

积分
56
发表于 昨天 09:13 | 显示全部楼层
请教下楼主,电路上只有adc_v 和 adc_i 这2路adc口,程序中有4路adc数据,能帮忙解释下吗
回复

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:71
  • 最近打卡:2026-03-07 09:59:50
已绑定手机

4

主题

198

回帖

748

积分

高级会员

积分
748
发表于 昨天 09:22 | 显示全部楼层
world*** 发表于 2026-3-6 09:13
请教下楼主,电路上只有adc_v 和 adc_i 这2路adc口,程序中有4路adc数据,能帮忙解释下吗 ...

只有两路adc数据,存入数组adbuf[2][512],
调用函数:



//获取2路ADC,V\I,存入adbuf
void get2ad(void)



你说的4路是指“波形显示器”中的吗?后面两组数据是挡位,
用的是这段代码:
  1. //发送数据波形
  2.                 for(i=0;i<ARRLEN(adbuf[0]);i++)
  3.                 {
  4.                         u1tx(0xAA);
  5.                         u1tx(8);
  6.                         v=adbuf[0][i];//电压
  7.                         u1tx(v>>8);
  8.                         u1tx(v);
  9.                         v=adbuf[1][i];//电流
  10.                         u1tx(v>>8);
  11.                         u1tx(v);
  12.                         v=vseld;//电压挡位
  13.                         u1tx(v>>8);
  14.                         u1tx(v);
  15.                         v=iseld;//电流挡位
  16.                         u1tx(v>>8);
  17.                         u1tx(v);
  18.                 }
复制代码


回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:9
  • 最近打卡:2026-03-06 08:27:42

0

主题

12

回帖

56

积分

注册会员

积分
56
发表于 昨天 14:35 | 显示全部楼层
lcws*** 发表于 2026-3-6 09:22
只有两路adc数据,存入数组adbuf[2][512],
调用函数:

不好意思,是体验版的程序里面,我看岔了
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-3-7 15:31 , Processed in 0.118012 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表