微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 无运放的权电阻网络在单片机控制系统中的应用(下)

无运放的权电阻网络在单片机控制系统中的应用(下)

时间:04-28 来源:电子产品世界 点击:

接上篇

编程思路

对于电阻类数据,常用的数表有电阻数表、AD数表。

1. 电阻数表,优点是直观,方便后期查验,与电源电压无关;缺点和AD值之间需要额外的计算,占用系统时间。

2. AD数表,优点是MCU只需做比较而无需乘除,与电源电压无关;缺点是不直观,需要保存好原始的计算表格以备查验。

这里使用第二种AD数表,我们推导一下AD值与地址设置值之间的关系:

因为并联电路和串联电路都是线性电路,电源VCC的波动会直接导致输出电压波动,所以直接把VCC和Vref连接能更好地去除电源波动对电压采集的影响,即令VCC=Vref,化简得:Ad=(2n-1)*K

之前的Excel表格已经算出了系数K,在I4写入=H4*(2^$I$2-1),复制粘贴即可得到AD数表,再把它定义成数组即可。

主要程序

#define uint unsigned int
  #define uchar unsigned char
  #define parallel
  #ifndef parallel
  #define series
  #endif
  #ifdef parallel
  //并联电路AD数表
  const uint code ad_table[]=
  {
  0 , 59 ,113 ,160 ,204 ,242 ,278 ,310 , //0~7
  341 ,368 ,393 ,416 ,438 ,458 ,477 ,494 , //8~15
  512 ,527 ,541 ,555 ,568 ,580 ,592 ,603 , //16~23
  614 ,624 ,633 ,642 ,651 ,659 ,667 ,674 , //24~31
  };
  //并联电路AD数表为
  uint address_cal(uint value)
  {
  uchar i=0;
  uint address=0;
  uint buff=value;
  for(i=0;i<31;i++)
  {
  if((buff>=ad_table[i]) && (buff<ad_table[i+1]))
  {
  address=i;
  break;
  }
  }

  If(i==31)//超过上限
  {
  Address=31;
  }
  return address;
  }
  #endif
  #ifdef series
  //串联电路AD数表
  const uint code ad_table[]=
  {
  1023,964 ,911 ,863 ,820 ,781 ,746 ,714 ,//0~7
  683 ,656 ,631 ,608 ,586 ,566 ,547 ,530 ,//8~15
  512 ,496 ,482 ,468 ,455 ,443 ,431 ,420 ,//16~23
  410 ,400 ,390 ,381 ,373 ,364 ,357 ,349 //24~31
  }
  //串联电路地址计算,形参为AD采样值
  uint address_cal(uint value)
  {
  uchar i=0;
  uint address=0;
  uint buff=value;
  for(i=0;i<31;i++)
  {
  if(buff>=ad_table[i])
  {
  address=i;
  break;
  }
  }
  if(i==31)//低于下限
  {
  address=31;
  }
  return address;
  }
  #endif

系统设计

1、单次AD采样时间以及两次采样的间隔时间都尽量长些,能减少数据抖动。每次采样都要读多次然后求平均。

2、PCB布线时,将该电路的电源其它电源分开走线,只和数字电源单点连接,且连接点尽可能靠近MCU。

3、如果发生部分地址丢失的情况,就量一下相关电阻的大小,看是否偏差过大。测焊在板上的电阻时要断掉所有电源,拨码全部断开再测,否则会影响测量值。

4、注意MCU管脚内部的干扰,需要把它设置成模拟输入的形式,而且不能带内部上拉或下拉。

温度特性

对串联和并联电路进行高低温测试,温度范围是-10℃~70℃,实验结果是-10℃的低温对AD采集值几乎没影响,50℃~70℃下AD的波动由±1增加到±2,但也不影响地址判断。

调试经验

1、查表算法是个难点,需要进行反复调整,以保证0~31各个地址都能被正确识别,地址没被修改时判断出来的地址值也不能变动。

2、电路的电源和地要处理好,不能和数字地铺成一片,电源线要和其它供电器件分开走线,这些都是为了降低AD采样值的波动以及准确性,每一个采样到的值都应该和理论计算值保持在至少±1的误差内。

3、需要验证底层的AD驱动的正确性要做到采样点接地时,AD为0,接电源正时,AD为满量程,10位的话是1023,12位的是4095。

4、I/O口的干扰是较难发现的问题,需要查清楚芯片内部I/O口的设置,是否自带了内部上拉或下拉,这里的上拉电阻和下拉电阻会影响电路的输出电压。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top