程控电阻器

程控电阻器

        由于要测试电阻型温度传感器,一个电阻箱又很贵,就想做一款 程控电阻器 来满足。

        设计满足300Ω到400kΩ可调电阻。


设计思路

        选择数字电位器去控制电阻输出,最好是精度高,范围大的数字电位器。经过寻找后,发现AD8403比较满足需求。采用STM32F103C8T6作为主控芯片。

AD8403

        AD8400/AD8402/AD8403分别是单通道/双通道/四通道、256位、数字控制可变电阻(VR)器件1,可实现与机械电位计或可变电阻相同的电子调整功能。AD8400内置一个可变电阻,采用紧凑的SOIC-8封装。AD8402内置两个独立的可变电阻,采用节省空间的SOIC-14表面贴装封装。AD8403内置四个独立的可变电阻,提供24引脚PDIP、SOIC和TSSOP三种封装。各器件均内置一个带游标触点的固定电阻,该游标触点在载入控制串行输入寄存器的数字码所确定的数字码分接该固定电阻值。游标与固定电阻任一端点之间的电阻值,随传输至VR锁存器中的数字码呈线性变化。在A端与游标或B端与游标之间,各可变电阻提供一个完全可编程电阻值。A至B固定端接电阻(1 kΩ、10 kΩ、50 kΩ或100 kΩ)的通道间匹配容差为±1%,标称温度系数为500 ppm/°C。

想法

        AD8403为四通道数字电位器,每个通道可分为256份,要想范围大。就要选择一片大的100K的。但是这样的话精度就只有100000/256=390欧。四通道串联范围可以达到400k,但是精度不符合我们的需求,在选择一片1K的AD8403,精度为1000/256=4欧,这样精度可以达到4欧,如果我们将1k的两两并联,这样并联之后每组可以达到500欧,正好包含了400欧,精度也达到了2欧,再通过串联将这两个和前边的100k的串联起来,这样的话就可以从0到400k欧范围,然后精度可以达到2欧(如果四个并联的话精度达到了1欧,但是范围只有250欧了,包含不了400欧,即有覆盖不到的地方)。这样就比较完美了。AD8403为了保护器件,就算输出0。器件也会有大约50欧的电阻。100k的和1k的会差一点,实测的话这样串并零最少也会有300欧。如果我们在1k的满足输出的时候。将100k的短路的话就可以得到更小的阻值。所以在1k串并零得到最大值之前,使用继电器将100k短路掉。

设计过程。

材料

  • STM32F103C8T6主控芯片
  • AD8403ARUZ1
  • AD8403ARUZ100
  • HFD4-3直插继电器
  • 贴片按键
  • 0.96寸OLED显示屏
  • Type-C
  • 1117电源芯片
  • 电阻电容晶振等。

原理图

        通过嘉立创绘制。
在这里插入图片描述

PCB

        通过嘉立创绘制。
在这里插入图片描述

程序

Keil 5编写。放上关键代码。
控制代码。


				if(R_Zuzhi < 300)
					R_Zuzhi = 300;
				if(R_Zuzhi > 400000)
					R_Zuzhi = 400000;
				testShowFont(&u8g2,R_Zuzhi);
        /* 1616欧	本身有70欧  每1是3欧 还剩 1561欧 一半962欧*/
        if(R_Zuzhi < 1360)
        {
            JDQ = 1;
						K1_5 = R_Zuzhi;
        }
        else
        {
						JDQ = 0;
						K2_Set = (R_Zuzhi -  Offset) / 398; 
					
						if(K2_Set > 1020)
						{
							Set1 = 255;
							Set2 = 255;
							Set3 = 255;
							Set4 = 255;
							if(K2_Set > 1023)
							{
								Set5 = 255;
								Set7 = 255;
							}
							else
							{
								K1_5 = R_Zuzhi - (1020 * Jingdu) - Offset;
							}
						}
						else if(K2_Set > 765)
						{
							Set1 = 255;
							Set2 = 255;
							Set3 = 255;
							Set4 = K2_Set - 765;
							K1_5 = R_Zuzhi - (K2_Set * Jingdu) - Offset;
						}
						else if(K2_Set > 510)
						{
							Set1 = 255;
							Set2 = 255;
							Set3 = K2_Set - 510;
							Set4 = 0;
							K1_5 = R_Zuzhi - (K2_Set * Jingdu) - Offset;
						}
						else if(K2_Set > 255)
						{
							Set1 = 255;
							Set2 = K2_Set - 255;
							Set3 = 0;
							Set4 = 0;
							K1_5 = R_Zuzhi - (K2_Set * Jingdu) - Offset;
						}
						else
						{
							Set2 = K2_Set;
							Set1 = 0;
							Set3 = 0;
							Set4 = 0;
							K1_5 = R_Zuzhi - (K2_Set * Jingdu) - Offset;
						}
					
        }

				K1_Set = (K1_5 - 56) / 2.56;
				if(K1_Set > 255)
				{
					Set5 = 255;
					Set7 = K1_Set - Set5;
				}
				else
				{
					Set7 = 0;
					Set5 = K1_Set;
				}
				
//            Set10 = Set9;
				AD8403_W(0, Set1); //100k短接 100k还有283欧电阻  共333欧
				AD8403_W(1, Set2);
				AD8403_W(2, Set3);
				AD8403_W(3, Set4);
				AD84032_W(0, Set5); //100k短接 1k还有55欧电阻
				AD84032_W(1, Set5);
				AD84032_W(2, Set7);
				AD84032_W(3, Set7);
//				SHDN=0;//为0时,所有? 缱鐰端开路,W连接到B,关闭SDO输出晶体管
	 

AD8403驱动


void AD8403_W(int CH, int w)
{
    int i = 0;
    int channal = CH;
    int send_data = w;
    CS = 0;
    delay_us(10);
    //前两个bit  选通道
    for(i = 0; i < 2; i ++)            //send the channal index
    {
        if((channal & 0x02) == 0x02)
            SDI = 1;
        else
            SDI = 0;
        delay_us(1);
        CLK = 1;           //Set SPI_SCK to High voltage
        delay_us(1);
        CLK = 0;          //Set SPI_SCK to low voltage
        channal = channal << 1;
    }
    //后八个bit  指定阻值
    for(i = 0; i < 8; i ++)            //send the resister value
    {
        if((send_data & 0x80) == 0x80)
            SDI = 1;
        else
            SDI = 0;
        delay_us(1);
        CLK = 1;           //Set SPI_SCK to High voltage
        delay_us(1);
        CLK = 0;          //Set SPI_SCK to low voltage
        send_data = send_data << 1;
    }
    CS = 1;
}

实物展示

正面图

在这里插入图片描述

反面图

在这里插入图片描述

视频演示

程控电阻器演示

总结

虽然范围大,但是精度还是控制的不理想。可能是芯片问题。控制之后,电阻会抖动和飘移,但是总体还是实现了相应的功能。可以使用。

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

释博文

您的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值