LCR电桥@STC32G144K246,基于STC32G144K246的LCR电桥
LCR电桥@STC32G144K246,项目简介
使用STC32G144K246作为主控,以许老师LCR电桥为参考,制作的一款LCR电桥,通过此对此电路的学习,学到了STC32G的简单易用易上手,烧录容易,仿真容易,电路简单,学到许多关于运放的知识,包括最简单的跟随器,当然也有同相比例放大,反相比例放大,可编程比例放大,跨阻放大,仪表放大,差分放大等,也会学到模拟开关的简单应用,包括可编程滤波,信号切换等项目功能此处可填写项目的相关功能及应用场景,示例:
可以比较精确的测量电阻,电容,电感。项目参数此处可填写项目的相关功能参数介绍,示例:
无参数。原理解析(硬件说明)此处可填写项目的设计原理,将设计的原理拆分解析,示例:
1,主控及其数字部分,由于STC32G支持USB下载,所以很简单https://image.lceda.cn/oshwhub/pullImage/c77911f81d274c479a7e64fa01919afe.png2.从这里直接看出,外设在主控的哪个IO上,比较省时间
https://image.lceda.cn/oshwhub/pullImage/e942d62122f74a949fea4b35da6ffd39.png3.电源部分包含了升降压电路,以及反相电路,及充电电路和放电电路https://image.lceda.cn/oshwhub/pullImage/8b16f022fdf6445b82a34cc2ccbeb9c9.png
4.难点,模拟部分
包含激励信号发生电路,电流电压放大电路,及带通滤波电路,和鉴相电路,通过4052和4053来切换各个参数https://image.lceda.cn/oshwhub/pullImage/0f2ce73983524ba88f0bd4d344a39e90.png
激励正弦波信号,可以通过PWM多级RC滤波后得到,也可以用单片机自带DAC产生,硬件电路已设计切换0欧电阻。
https://image.lceda.cn/oshwhub/pullImage/c45de01a0ba94589b3e24b3399f13de8.png
对被测lcr的电流和端电压进行采集放大,后经4053切换,给后级滤波放大电路,分时放大
https://image.lceda.cn/oshwhub/pullImage/2ba3a177374a424fbec5c8aaca3c89b2.png
可编程带通滤波器,有效抑制杂波
https://image.lceda.cn/oshwhub/pullImage/d7b324b671714ff08d00327389e43cb2.png
对前级信号进行鉴相,给ADC采集,软件计算相位差等各个参数软件代码DAC用TIMER17触发产生正弦激励,TIMER17初始化,及DAC初始化void TIMER17_Init(void)
{
#define T17_PSCR (0)
#define T17_RELOAD (65536 - 186)
TIMER17_TimerMode(); //设置定时器17为定时模式
TIMER17_1TMode(); //设置定时器17为1T模式
TIMER17_SetIntPriority(2); //设置中断为较高优先级
TIMER17_EnableInt(); //使能定时器17中断
TIMER17_SetPrescale(T17_PSCR); //设置定时器17的8位预分频
TIMER17_SetReload16(T17_RELOAD); //设置定时器17的16位重载值
TIMER17_Run(); //定时器17开始运行
}
void DAC2_Init(void)
{
DAC2_SetClockDivider(0); //设置DAC2时钟
DAC2_T17Trigger(); //定时器17溢出时自动触发DAC2
DAC2_Enable(); //使能DAC2功能
DAC2_EnableDMA(); //使能DAC2的DMA模式
DMA_DAC2_SetAmount(255); //设置DAC2 DMA转换次数
DMA_DAC2_SetAddress(pu8DAC2DMABuffer); //设置DAC2 DMA缓冲区地址
DMA_DAC2_SetInterval(1); //设置DAC2 DMA转换间隔时间(系统时钟)
DMA_DAC2_ClearFlag(); //清除DAC2 DMA中断标志
DMA_DAC2_SetBusPriority(2); //设置总线访问为较高优先级
DMA_DAC2_SetIntPriority(2); //设置中断为较高优先级
DMA_DAC2_EnableInt(); //使能DAC2 DMA中断
DMA_DAC2_Enable(); //使能DAC2 DMA功能
//DMA_DAC2_Trigger(); //触发DAC2 DMALCR测试中,模拟开关高低电平切换的宏定义
//量程开关
#define Lc_4052_A_Clr() SetP6nInitLevelLow(PIN_3) // 00 40欧
#define Lc_4052_A_Set() SetP6nInitLevelHigh(PIN_3) //B0 A1 1K
#define Lc_4052_B_Clr() SetP8nInitLevelLow(PIN_0) //B1 A010K
#define Lc_4052_B_Set() SetP8nInitLevelHigh(PIN_0) //11 100K
//电流电压切换开关
#define VA_4053_A_Clr() SetP0nInitLevelLow(PIN_3) //0 电压
#define VA_4053_A_Set() SetP0nInitLevelHigh(PIN_3) // 1 电流
//带通输入端 放大倍数选择
#define DTQ_4053_C_Clr() SetP8nInitLevelLow(PIN_3)
#define DTQ_4053_C_Set() SetP8nInitLevelHigh(PIN_3) //电压跟随 还是9倍放大选择 , 0:跟随 ;1:9倍
//带通输出端 放大倍数选择
#define DTH_4053_B_Clr() SetP0nInitLevelLow(PIN_2)
#define DTH_4053_B_Set() SetP0nInitLevelHigh(PIN_2) // 0 : 1倍, 1 :10倍
/*******************************************************************************************************/
//带通中选择某频率进入下个运放 -------------------------------------------
#define DTZ_4053_A_Clr() SetP8nInitLevelLow(PIN_1) // 0 1 0
#define DTZ_4053_A_Set() SetP8nInitLevelHigh(PIN_1) //
//
#define DTZ_4053_B_Clr() SetP8nInitLevelLow(PIN_2) // 0 0 0
#define DTZ_4053_B_Set() SetP8nInitLevelHigh(PIN_2) //------------------------------------------
// 1KHZ 100HZ 7.8KHZ
/********************************************************************************************************/
//鉴相开关
#define JX_4053_C_Clr() SetP0nInitLevelLow(PIN_1)
#define JX_4053_C_Set() SetP0nInitLevelHigh(PIN_1)
//指示灯.........及固态继电器开关
#define QH_4052_A_Clr() SetP4nInitLevelLow(PIN_6)
#define QH_4052_A_Set() SetP4nInitLevelHigh(PIN_6)
#define QH_4052_B_Clr() SetP4nInitLevelLow(PIN_5)
#define QH_4052_B_Set() SetP4nInitLevelHigh(PIN_5)
//7.8KHZ滤波开关
#define K7K8HZ_LB_S_Clr() SetPBnInitLevelLow(PIN_6)
#define K7K8HZ_LB_S_Set() SetPBnInitLevelHigh(PIN_6)
//100HZ滤波开关
#define K100HZ_LB_S_Clr() SetPBnInitLevelLow(PIN_7)
#define K100HZ_LB_S_Set() SetPBnInitLevelHigh(PIN_7)硬件SPI,没调通,一发送数据,就卡死(用AICUBE生成的),用软件SPI写了个发送函数,就正常了。(焊接了FLASH芯片,再测试另外的硬件SPI)
static void Software_Spi_WriteByte(uint8_t dat)
{
uint8_t i;
LCD_CS_Clr() ;
for(i=0; i<8; i++)
{
if( (dat&0x80)==0x80 )
LCD_MOSI_Set();
else
LCD_MOSI_Clr();
dat <<= 1;
LCD_CLK_Clr();
LCD_CLK_Set();
}
}屏幕写数据和写命令函数
/******************************************************************************
函数说明:LCD写入数据
入口数据:dat 写入的数据
返回值:无
******************************************************************************/
void LCD_WR_DATA(u8 dat)
{
LCD_DC_Set();//写数据
//SPI2_WriteByte(dat);
#ifdef Software_Spi
Software_Spi_WriteByte(dat);
#endif
}
/******************************************************************************
函数说明:LCD写入命令
入口数据:dat 写入的命令
返回值:无
******************************************************************************/
void LCD_WR_REG(u8 dat)
{
LCD_DC_Clr();//写命令
// SPI2_WriteByte(dat);
#ifdef Software_Spi
Software_Spi_WriteByte(dat);
#endif
}256点sin值(依据官方示例)
/************************************************************************************/
for(i=0; i<128; i++)
{
u16_sin_data.sin_data_16 = 2048 + (u16)((T_SIN - 2048)*(u32)amp/256);
pu8DAC2DMABuffer = u16_sin_data.byte_parts.sin_data_low8;
pu8DAC2DMABuffer = u16_sin_data.byte_parts.sin_data_high8;
}
for(i=128; i<256; i++)
{
u16_sin_data.sin_data_16 = 2048 - (u16)((2048 - T_SIN)*(u32)amp/256);
pu8DAC2DMABuffer = u16_sin_data.byte_parts.sin_data_low8;
pu8DAC2DMABuffer = u16_sin_data.byte_parts.sin_data_high8;
}
注意事项此处可填写在设计制作时需重点关注的点或是易错的地方,示例:
[*]原理图中 红圈中的二极管,在焊接时,需要反向焊接(PCB标识错误)
(说明:为什么不重新导入,调换管脚呢,因为,LCEDA莫名奇妙的出现网表错误,当导入后,全部PCB元器件,会重新排列,需要重新布局,所以知道就好了,焊接注意下)
[*]原理图中,紫色框内的电阻,是低温漂的,最好是0.1%的。
[*]正弦波有一点点变形,软件还没调好,不能确定影响大小,请悉知
[*]还有个问题就是在使用USB进行串口printf时,会影响中断(DAC的Timer17和PWM的中断响应)。
[*]外壳就是EDA里的外壳就已经导出来了,组装时 把航空插头与PCB之间的那个螺母去掉,不然外壳合不严实。
[*]FLASH 可有可无,我焊接了,但不知道做什么,测试下硬件SPI驱动
实物图https://image.lceda.cn/oshwhub/pullImage/5dea1872432c4b38a1ed0b82566457a9.jpghttps://image.lceda.cn/oshwhub/pullImage/b9fc0956548f43498837e68682dc18c7.jpg实物图https://image.lceda.cn/oshwhub/pullImage/17e8b94d1d064f598ab5ddcc598369ee.jpghttps://image.lceda.cn/oshwhub/pullImage/4d64812d2831418d8a36afa85cc10f40.jpg
附件 楼主原理图,能否,重新截图,贴上高清的图片
神农鼎 发表于 2026-2-7 22:26
楼主原理图,能否,重新截图,贴上高清的图片原理图PCB都已开源哦,比较大,截图截不清,
附加上PDF文件,
帮重新截图贴在这
论坛发链接会“倍”审核,没有发链接
楼主威武,学习中。建议PCB套件分享(成本收费)一些,大家都来测试一下
力创开源链接
https://oshwhub.com/qq82871836/stc32g144k246-based-bridge
立创EDA工程文件 这个商品化就好! 这是个什么屏, 显示天气时钟是程序搞的还是屏自己的
页:
[1]