找回密码
 立即注册
查看: 425|回复: 10

LCR电桥@STC32G144K246,基于STC32G144K246的LCR电桥

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-03-05 21:26:02
已绑定手机

2

主题

3

回帖

357

积分

中级会员

积分
357
发表于 2026-2-7 20:49:05 | 显示全部楼层 |阅读模式


LCR电桥@STC32G144K246,项目简介
使用STC32G144K246作为主控,以许老师LCR电桥为参考,制作的一款LCR电桥,
通过此对此电路的学习,学到了STC32G的简单易用易上手,烧录容易,仿真容易,
电路简单,学到许多关于运放的知识,包括最简单的跟随器,
当然也有同相比例放大,反相比例放大,可编程比例放大,跨阻放大,仪表放大,差分放大等,
也会学到模拟开关的简单应用,包括可编程滤波,信号切换等
项目功能
此处可填写项目的相关功能及应用场景,示例:
可以比较精确的测量电阻,电容,电感。
项目参数
此处可填写项目的相关功能参数介绍,示例:
无参数。
原理解析(硬件说明)
此处可填写项目的设计原理,将设计的原理拆分解析,示例:
1,主控及其数字部分,由于STC32G支持USB下载,所以很简单
2.从这里直接看出,外设在主控的哪个IO上,比较省时间
3.电源部分包含了升降压电路,以及反相电路,及充电电路和放电电路

4.难点,模拟部分
包含激励信号发生电路,电流电压放大电路,及带通滤波电路,和鉴相电路,通过4052和4053来切换各个参数

激励正弦波信号,可以通过PWM多级RC滤波后得到,也可以用单片机自带DAC产生,硬件电路已设计切换0欧电阻。

对被测lcr的电流和端电压进行采集放大,后经4053切换,给后级滤波放大电路,分时放大

可编程带通滤波器,有效抑制杂波

对前级信号进行鉴相,给ADC采集,软件计算相位差等各个参数
软件代码
DAC用TIMER17触发产生正弦激励,TIMER17初始化,及DAC初始化
  1. void TIMER17_Init(void)
  2. {
  3. #define T17_PSCR                (0)
  4. #define T17_RELOAD              (65536 - 186)
  5.     TIMER17_TimerMode();                //设置定时器17为定时模式
  6.     TIMER17_1TMode();                   //设置定时器17为1T模式
  7.     TIMER17_SetIntPriority(2);          //设置中断为较高优先级
  8.     TIMER17_EnableInt();                //使能定时器17中断
  9.     TIMER17_SetPrescale(T17_PSCR);      //设置定时器17的8位预分频
  10.     TIMER17_SetReload16(T17_RELOAD);    //设置定时器17的16位重载值
  11.     TIMER17_Run();                      //定时器17开始运行
  12. }
  13. void DAC2_Init(void)
  14. {
  15.     DAC2_SetClockDivider(0);            //设置DAC2时钟
  16.     DAC2_T17Trigger();                  //定时器17溢出时自动触发DAC2
  17.     DAC2_Enable();                      //使能DAC2功能
  18.     DAC2_EnableDMA();                   //使能DAC2的DMA模式
  19.     DMA_DAC2_SetAmount(255);            //设置DAC2 DMA转换次数
  20.     DMA_DAC2_SetAddress(pu8DAC2DMABuffer); //设置DAC2 DMA缓冲区地址
  21.     DMA_DAC2_SetInterval(1);            //设置DAC2 DMA转换间隔时间(系统时钟)
  22.     DMA_DAC2_ClearFlag();               //清除DAC2 DMA中断标志
  23.     DMA_DAC2_SetBusPriority(2);         //设置总线访问为较高优先级
  24.     DMA_DAC2_SetIntPriority(2);         //设置中断为较高优先级
  25.     DMA_DAC2_EnableInt();               //使能DAC2 DMA中断
  26.     DMA_DAC2_Enable();                  //使能DAC2 DMA功能
  27. //  DMA_DAC2_Trigger();                 //触发DAC2 DMA
复制代码
LCR测试中,模拟开关高低电平切换的宏定义
  1. //量程开关
  2. #define Lc_4052_A_Clr() SetP6nInitLevelLow(PIN_3)        // 00    40欧
  3. #define Lc_4052_A_Set() SetP6nInitLevelHigh(PIN_3)       //B0 A1   1K
  4. #define Lc_4052_B_Clr() SetP8nInitLevelLow(PIN_0)         //B1 A0  10K
  5. #define Lc_4052_B_Set() SetP8nInitLevelHigh(PIN_0)         //11    100K
  6. //电流电压切换开关
  7. #define VA_4053_A_Clr() SetP0nInitLevelLow(PIN_3)      //0 电压
  8. #define VA_4053_A_Set() SetP0nInitLevelHigh(PIN_3)     // 1 电流
  9. //带通输入端 放大倍数选择
  10. #define DTQ_4053_C_Clr() SetP8nInitLevelLow(PIN_3)
  11. #define DTQ_4053_C_Set() SetP8nInitLevelHigh(PIN_3)       //电压跟随 还是9倍放大选择 , 0:跟随 ;1:9倍
  12. //带通输出端 放大倍数选择
  13. #define DTH_4053_B_Clr() SetP0nInitLevelLow(PIN_2)
  14. #define DTH_4053_B_Set() SetP0nInitLevelHigh(PIN_2)       // 0 : 1倍,   1 :10倍  
  15. /*******************************************************************************************************/
  16. //带通中选择某频率进入下个运放                               -------------------------------------------
  17. #define DTZ_4053_A_Clr() SetP8nInitLevelLow(PIN_1)        //    0               1             0              
  18. #define DTZ_4053_A_Set() SetP8nInitLevelHigh(PIN_1)       //                                 
  19.                                                           //
  20. #define DTZ_4053_B_Clr() SetP8nInitLevelLow(PIN_2)        //    0               0             0
  21. #define DTZ_4053_B_Set() SetP8nInitLevelHigh(PIN_2)       //------------------------------------------  
  22.                                                           //   1KHZ           100HZ         7.8KHZ
  23. /********************************************************************************************************/
  24. //鉴相开关
  25. #define JX_4053_C_Clr() SetP0nInitLevelLow(PIN_1)      
  26. #define JX_4053_C_Set() SetP0nInitLevelHigh(PIN_1)
  27. //指示灯.........及固态继电器开关
  28. #define QH_4052_A_Clr() SetP4nInitLevelLow(PIN_6)      
  29. #define QH_4052_A_Set() SetP4nInitLevelHigh(PIN_6)
  30. #define QH_4052_B_Clr() SetP4nInitLevelLow(PIN_5)      
  31. #define QH_4052_B_Set() SetP4nInitLevelHigh(PIN_5)
  32. //7.8KHZ滤波开关
  33. #define K7K8HZ_LB_S_Clr() SetPBnInitLevelLow(PIN_6)      
  34. #define K7K8HZ_LB_S_Set() SetPBnInitLevelHigh(PIN_6)
  35. //100HZ滤波开关
  36. #define K100HZ_LB_S_Clr() SetPBnInitLevelLow(PIN_7)      
  37. #define K100HZ_LB_S_Set() SetPBnInitLevelHigh(PIN_7)
复制代码
硬件SPI,没调通,一发送数据,就卡死(用AICUBE生成的),用软件SPI写了个发送函数,就正常了。(焊接了FLASH芯片,再测试另外的硬件SPI)
  1. static void Software_Spi_WriteByte(uint8_t dat)
  2. {
  3.         uint8_t i;
  4.           LCD_CS_Clr() ;
  5.            for(i=0; i<8; i++)                        
  6.                          {  
  7.                                         if( (dat&0x80)==0x80 )
  8.                                                   LCD_MOSI_Set();
  9.                                         else
  10.                                                 LCD_MOSI_Clr();
  11.                                         dat <<= 1;
  12.                                 LCD_CLK_Clr()  ;
  13.                                 LCD_CLK_Set()  ;                        
  14.                          }
  15.         
  16. }
复制代码
屏幕写数据和写命令函数
  1. /******************************************************************************
  2.       函数说明:LCD写入数据
  3.       入口数据:dat 写入的数据
  4.       返回值:  无
  5. ******************************************************************************/
  6. void LCD_WR_DATA(u8 dat)
  7. {
  8.    LCD_DC_Set();//写数据
  9.     //SPI2_WriteByte(dat);
  10.         #ifdef Software_Spi
  11.         Software_Spi_WriteByte(dat);
  12.         #endif
  13. }
  14. /******************************************************************************
  15.       函数说明:LCD写入命令
  16.       入口数据:dat 写入的命令
  17.       返回值:  无
  18. ******************************************************************************/
  19. void LCD_WR_REG(u8 dat)
  20. {
  21.     LCD_DC_Clr();//写命令
  22.    // SPI2_WriteByte(dat);
  23.         #ifdef Software_Spi
  24.       Software_Spi_WriteByte(dat);
  25.         #endif
  26.   
  27. }
复制代码
256点sin值(依据官方示例)
  1. /************************************************************************************/
  2. for(i=0; i<128; i++)        
  3.                 {
  4.                         u16_sin_data.sin_data_16 = 2048 + (u16)((T_SIN[i] - 2048)*(u32)amp/256);
  5.                         pu8DAC2DMABuffer[i*2] = u16_sin_data.byte_parts.sin_data_low8;
  6.                         pu8DAC2DMABuffer[i*2+1] = u16_sin_data.byte_parts.sin_data_high8;
  7.                         
  8.                 }
  9.         for(i=128; i<256; i++)        
  10.                 {
  11.                 u16_sin_data.sin_data_16 = 2048 - (u16)((2048 - T_SIN[i])*(u32)amp/256);
  12.                         pu8DAC2DMABuffer[i*2] = u16_sin_data.byte_parts.sin_data_low8;
  13.                         pu8DAC2DMABuffer[i*2+1] = u16_sin_data.byte_parts.sin_data_high8;
  14.                         
  15.                 }
复制代码



注意事项
此处可填写在设计制作时需重点关注的点或是易错的地方,示例:
  • 原理图中 红圈中的二极管,在焊接时,需要反向焊接(PCB标识错误)
    (说明:为什么不重新导入,调换管脚呢,因为,LCEDA莫名奇妙的出现网表错误,当导入后,全部PCB元器件,会重新排列,需要重新布局,所以知道就好了,焊接注意下)
  • 原理图中,紫色框内的电阻,是低温漂的,最好是0.1%的。
  • 正弦波有一点点变形,软件还没调好,不能确定影响大小,请悉知
  • 还有个问题就是在使用USB进行串口printf时,会影响中断(DAC的Timer17和PWM的中断响应)。
  • 外壳就是EDA里的外壳就已经导出来了,组装时 把航空插头与PCB之间的那个螺母去掉,不然外壳合不严实。
  • FLASH 可有可无,我焊接了,但不知道做什么,测试下硬件SPI驱动
实物图
实物图


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

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-03-05 21:26:02
已绑定手机

2

主题

3

回帖

357

积分

中级会员

积分
357
发表于 2026-2-7 21:14:59 | 显示全部楼层
附件

BLINK.rar

2.37 MB, 下载次数: 17

正弦加参考

LCR-XLS-2011-程序.rar

270.96 KB, 下载次数: 18

参考XLS

3DShell_PCB1.zip

544.23 KB, 下载次数: 13

外壳文件

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:346
  • 最近打卡:2026-03-06 09:46:03

842

主题

1万

回帖

2万

积分

管理员

积分
22602
发表于 2026-2-7 22:26:23 | 显示全部楼层
楼主原理图,能否,重新截图,贴上高清的图片
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-03-05 21:26:02
已绑定手机

2

主题

3

回帖

357

积分

中级会员

积分
357
发表于 2026-2-7 22:43:55 | 显示全部楼层
神*** 发表于 2026-2-7 22:26
楼主原理图,能否,重新截图,贴上高清的图片
原理图PCB都已开源哦,比较大,截图截不清,
附加上PDF文件, 原理图.pdf (697.18 KB, 下载次数: 29)
帮重新截图贴在这
截图202602080832584105.jpg

截图202602080833308315.jpg

截图202602080834045626.jpg



论坛发链接会“倍”审核,没有发链接

点评

力创开源链接https://oshwhub.com/qq82871836/stc32g144k246-based-bridge  发表于 2026-2-10 09:53
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:334
  • 最近打卡:2026-03-06 15:37:09
已绑定手机

47

主题

259

回帖

2119

积分

金牌会员

积分
2119
发表于 2026-2-8 13:53:05 | 显示全部楼层
楼主威武,学习中。建议PCB套件分享(成本收费)一些,大家都来测试一下
8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:334
  • 最近打卡:2026-03-06 15:37:09
已绑定手机

47

主题

259

回帖

2119

积分

金牌会员

积分
2119
发表于 2026-2-10 09:52:57 | 显示全部楼层
8位程序---换个STC32G.h头文件,换个C251编译器就直接到STC32的高度了;
          想回到8位机,则换个STC8H.h头文件,换个C51编译器就回到8位机了.
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2026-03-05 21:26:02
已绑定手机

2

主题

3

回帖

357

积分

中级会员

积分
357
发表于 4 天前 | 显示全部楼层
立创EDA工程文件

ProPrj_基于STC32G144K246的lcr电桥_2026-03-03.epro2

1.6 MB, 下载次数: 8

立创EDA工程文件

回复

使用道具 举报 送花

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

3

主题

32

回帖

92

积分

注册会员

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

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:18
  • 最近打卡:2026-03-06 08:27:54

0

主题

5

回帖

58

积分

注册会员

积分
58
发表于 昨天 08:34 | 显示全部楼层
这个商品化就好!
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:250
  • 最近打卡:2026-03-07 10:28:18
已绑定手机

1

主题

31

回帖

1203

积分

金牌会员

积分
1203
发表于 昨天 11:11 | 显示全部楼层
这是个什么屏, 显示天气时钟是程序搞的还是屏自己的
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-3-7 11:11 , Processed in 0.125867 second(s), 99 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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