深圳市航顺芯片技术研发有限公司
直播中

王焕锁

7年用户 945经验值
私信 关注
[问答]

如何去实现一种基于FDC2214的纸张计数显示装置

受到警告
提示: 作者被禁止或删除 内容自动屏蔽

回帖(1)

陶珪扁

2021-11-9 11:46:43
  一、设计方案工作原理
  1.1、预期实现目标定位
  在硬件方面通过设计合理的结构和电路实现以下目标:(1)选取合适材质、厚度的正方形极板,其中边长为50mm±1mm,实现电容的精确测量;(2)每块极板的电极连接一根信号线,两极板与信号线为二线制平行极板结构,且信号线的线缆类型与排布方式尽可能减小外部因素对电容测量的影响;(3)设计极板与纸张之间的结构, 使两极板能压紧被测纸张,从而减小测量误差;(4)设计电路模块,包括单片机最小系统电路、OLED、按键、蜂鸣器、FDC2214信号采集电路、供电模块电路等实现电容采集、数据记录、自校准与曲线拟合、纸张数量的判断与显示、拟合曲线的显示等功能。
  软件:(1)通过TM4单片机和STM32F103RCT6单片机利用IIC通信控制FDC2214模块的2个通道实现对极板间纸张的电容测量;(2)设计数据处理算法(滤波算法、数据拟合算法)对采集到的电容数据进行处理,实现纸张数量的准确测量;(3)设计算法检测极板间是否短路;(4)设计程序使每次在极板间放入被测纸张并固定后,一键启动测量,完成测量并发出一声蜂鸣,且每次测量从按下同一测量启动键到发出蜂鸣的时间不得超过 5 秒钟;(5)设计程序驱动OLED和液晶屏显示纸张数量和拟合曲线。
  1.2、技术方案分析比较
  (1)主控制器选用
  方案一:采用传统的STC89C51系列单片机;
  方案二:采用TI公司的TM4单片机;
  方案三:采用STM32F103RCT6单片机;
  结合不同单片机解决问题的能力,通过比较,TM4单片机的数据处理能力较强,能对多组数据进行更高阶次的曲线拟合,能力优于传统的STC89C51系列单片机,同时可结合STM32F103RCT6单片机进行辅助控制,因此选择同时采用方案二和方案三。
  (2)控制方案选择
  方案一:在面包板上搭建简易电路;
  方案二:自制单片机印刷电路板;
  方案三:利用Multisim软件进行电路设计及仿真,再在洞洞板上进行焊接;
  方案一可以方便的对硬件做随时修改,也易于搭建,但是系统连线较多,不仅相互干扰,使电路杂乱无章,而且系统可靠性低,不适合本系统使用;方案二实现较为困难,实现周期长,此外也会花费较多的时间,影响整体设计进程。方案三能明显减少外围电路的设计复杂程度,降低系统设计的难度,综合以上三种方案,选择方案三。
  (3)自动压紧装置
  方案一:利用重物压住亚克力板,依靠其自身的重力将纸张压紧;
  方案二:利用两层亚克力板结合尼龙柱,利用尼龙柱固定亚克力板的位置,依靠亚克力板自身的重力将纸张压紧;
  经实验,方案一和方案二均能将纸张夹紧,当方案一中由于重物的放置位置不同,每次测量时纸张的受力不均匀,测量数据不准确,而方案二固定亚克力板进行夹紧时,每次纸张的受力均匀,测量数据较准确,故选用方案二。
  (4)极板材质选择
  方案一:选择铝制材料作为极板;
  方案二:采用覆铜板作为极板;
  方案三:采用纯铜板作为极板;
  经分析,我们发现,当极板的材质不同时,对于相同数量的纸张所检测到的电容数值不同,且数据的稳定性不同,经多次检验不同材料的极板,我们最终选择纯铜板作为极板。
  (5)极板的放置位置
  方案一:将极板贴在亚克力板上;
  方案二:在将极板嵌在亚克力板上;
  经检验,方案一中将极板黏贴在亚克力板上,由于亚克力板和极板均是水平的,每次测量纸张受力均匀,相同纸张多次测量时极板间距离不变,测量结果更为准确;方案二中虽然极板与亚克力板的固定更加牢靠,但由于亚克力板凹槽不够平整,因此造成纸张受力不均匀,对结果影响较大,因此采用方案一。
  (6)系统数据采集及数据处理方案
  方案一:单片机直接利用FDC2214模块采集到的数据完成自校准,再进行测量;
  方案二:单片机在得到FDC2214模块采集到的数据后,先利用一阶互补滤波算法进行滤波作为自校准的数据,并进行曲线拟合,在进行测量时利用得到的拟合曲线进行纸张的测量;
  经分析,方案二能够得到更准确地完成自校准,测量精度也比较高,综合算法对该系统的适应性以及其他优势,采用方案二对数据进行处理并完成测量。
  1.3、系统结构工作原理
  该系统由TM4单片机、STM32F103RCT6单片机、OLED、液晶屏、按键、蜂鸣器、极板、FDC2214信号采集电路、电源供电电路构成。
  其中TM4单片机、STM32F103RCT6单片机用于整个系统的数据处理、模块控制、通信和显示工作,采用IIC通信驱动FDC2214模块采集极板间一定数量的纸张对应的电容值,通过IIC通信驱动OLED和液晶屏实现纸张数量和拟合曲线的显示。
  FDC2214模块是面向电容式传感解决方案的抗噪声和EMI、 高分辨率、 高速、多通道电容数字转换器,可对噪声和干扰进行高度抑制,同时在高速条件下提供高分辨率。其传感平面,即为导体材质,当纸张接近该导体传感平面时,传感端的电容发生了变化,这就会导致LC电路振荡频率的变化,进而可用于对极板间一定数量的纸张进行电容检测,从而反映出纸张的变化,以及数量的判定。
  单片机通过按键控制模式的切换,包括八个按键,分别为测试模式、校准模式、停止自校准、计数加、记录电容值、测试按键、拟合曲线1和拟合曲线2按键,在按键按下即进入对应的模式。在测试完成后,单片机通过赋予蜂鸣器控制电平,用于控制蜂鸣器打开和关闭。
  电源供电电路采用LM2596降压模块和12V锂电池,用于为整套系统供电。该模块集成滤波元器件、稳压芯片和指示灯,当输入12V的直流电压时,能稳压输出5V和3.3V的直流电压,且具备过热和过流保护功能。
  1.4、功能指标实现方法
  对于基础指标(1),在打开装置电源开关后,通过校准模式按键进入自校准模式,输入一定数量的纸张再测量对应的电容值,并进行记录,单片机利用一阶互补滤波算法对此时得到的数据进行处理,再进行最小二乘曲线拟合完成校准。
  对于基础指标(2),在纸张未放入时,两极板接触,此时短路,通过此时的电容值即可判断是否短路。
  对于基础指标(3),通过测量模式开始测量,在放入1~10 张不等的给定纸张数后,按下测量按键,此时单片机得到一组测量数据,再利用自校准模式下得到的拟合曲线得到此时对应的纸张数量,并利用OLED显示,同时利用蜂鸣器进行提醒。
  对于发挥指标(1)(2),利用基础指标(1)中得到的拟合曲线结合基础指标(3)的解决方案即可得到纸张的精确数量。
  对于发挥指标(3),在基础指标(1)中利用单片机进行曲线拟合后,利用液晶屏显示出所得到的最小二乘拟合曲线和曲线对于的方程。
  1.5、测量控制分析处理与计算
  测量部分采用单片机驱动FDC2214模块自动计算出被测纸张对应电容值,然后利用一阶互补滤波算法和最小二乘曲线拟合对数据进行处理。
  其中一阶互补滤波算法通过对上一次测得的电容值C1和本次测得的电容值C2进行加权得到处理后的电容数据C3,从而较小测量误差,其中加权公式为:
  C3= 0.1×C1+0.9 ×C2(1)
  利用单片机编写最小二乘曲线拟合算法对自校准得到的电容数据进行拟合,即得到一条曲线,使数据点均在离此曲线的上方或下方不远处。取纸张数量x_i为横坐标,电容值y_i为纵坐标,取拟合直线φ(x)=a_0+a_1 x+a_2 x^2+⋯+a_n x^n,通过解最小二乘的法方程即可得到拟合直线的系数,其中最小二乘的法方程如下:
  
  二、核心部件电路设计
  2.1、关键器件性能分析
  (1)单片机模块
  TM4C123GH6PM是TI公司生产的一款32位单片机,STM32F103RCT6也是一款32位单片机,该单片机内部资源丰富,有很多空闲I/O口供连接外设,同时内部有多个定时器和串口来进行串口通信,且对于数据的处理能力和内存都很强大,极大你便了本次设计方案的设计。
  (2)FDC2214模块
  FDC2214采用I^2 C通信协议进行控制,其有4个电容输入通道,分辨率高达28位,能通过所接极板完成电容的精确测量。但由于极板的材质、厚度、表面氧化程度、表面平整程度和环境因素等的影响,可能引入越多的噪声,因此需要设计硬件结构,合理选择FDC2214模块所用的极板。
  (3)显示模块
  本设计采用OLED 显示判断后的纸张数量,OLED模块同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、使用温度范围广、构造及制程较简单等优异之特性。
  (4)电源供电模块
  电源供电模块采用LM2596模块进行稳压输出5V,LM2596芯片是3A电流输出降压开关型集成稳压芯片,它内含固定频率振荡器(150KHZ)和基准稳压器(1.23v),并具有完善的保护电路、电流限制、热关断电路等。只需极少的外围器件便可构成高效稳压电路。
  2.2、电路工作机理及设计仿真
  系统电路总体设计框图如图1所示,包括供电电路、单片机最小系统、FDC2214模块电路、极板、显示模块电路、按键电路、蜂鸣器电路、 该系统供电电路由锂电池输入12V电压,经LM2596降压模块之后电压稳定输出5V,为单片机供电;TM4单片机核心板内置降压电路可引出3.3V电压接口,进而为FDC2214模块、OLED模块、按键等供电。
  FDC2214模块电路图详见附件图3,包括FDC2214芯片、四通道接口及外围滤波电路、晶振电路、IIC接口电路。两个极板通过引出两根导线连接到FDC2214模块的两个通道上,进而测出极板内电容的电容值。
  
  2.3、电路实现调试
  在设计完电路后,经焊接搭建电路并调试,各模块电压均稳定,单片机可以驱动各模块正常工作,该电路设计可以实现该系统的正常工作。
  2.4、关键电路驱动接口
  其中LM2596电路模块包括输入接口和输出接口,单片机驱动接口包括VCC、GND、SCL和SDA接口,FDC2214模块包括VCC、GND、SCL、SDA及两个通道采集信号接口。
  单片机与FDC2214模块的电路连接有VCC、GND、SCL、SDA线,其中VCC、GND用于供电,SCL、SDA用于IIC通信。
  三、系统软件设计分析
  3.1、系统总体工作流程
  系统包括自校准和测量两种工作模式,打开电源开关后,按下“自校准模式按”键后系统进入自校准模式,在自校准模式下可进行9次测量,即1-10张范围内进行5次测量,在15-30张范围内进行4次测量,测量时按下“增计数”按钮输入纸张数量,将纸张放入后按下“记录电容值”按键即可利用单片机记录每次测试的纸张数量和对应的电容值,测量结束后按下“停止自校准”按键即可关闭自校准模式。
  在进行纸张测量时,按下“测试模式”即可开始测量,此时按下“拟合直线1”即可对“1-10”张的纸张数量进行测量;按下“拟合直线2”即可对“15-30”张的纸张数量进行测量,然后按下“测试”按键即可在在5s之内完成测量,蜂鸣器进行提示,并利用单片机驱动OLED显示纸张的数量,利用液晶屏显示拟合曲线。
  另外,OLED可实时进行自检并显示两极板之间是否短路。
  系统工作流程如图2所示。
  
  3.2、主要模块程序设计
  3.2.1一阶互补滤波算法
  通过一阶互补滤波算法对FDC2214模块采集到的电容值进行处理,从而减小测量的误差。
  利用公式(1)即可进行一节互补滤波算法得到传递函数从而对数据进行处理,得到误差较小的电容值。
  3.2.2分段最小二乘曲线拟合
  单片机利用分段最小二乘曲线拟合对一阶互补滤波处理后的数据进行拟合,即对1-10张、15-30张、30-40张、40-80张内的数据分别进行测量并利用Matlab软件进行曲线拟合,利用公式(2)计算得到拟合曲线1、曲线2、曲线3和曲线4,从而精确测量1-80张范围内的纸。
  四、竞赛工作环境条件
  软件环境:Keil软件,CCS 7.0软件主要负责代码编写,MATLAB软件利用神经网络、KNN等算法进行数据分析与检验。
  仪器设备硬件平台:在教学楼科协实验室内有示波器、稳压电源、万用表等实验器材,硬件模块包括亚克力板、各类单片机开发板、焊接洞洞板、供腐蚀的覆铜板、纯铜板等相关耗材
  配套加工安装条件:实验室内各种实验工具,如焊枪、热熔胶枪、助焊剂、手钻、台钻、老虎钳等工具。
  前期设计使用模块:TM4C123GH6PM单片机开发板、STM32开发板、FDC2214模块、LM2596降压模块、覆铜板和纯铜板等材料。
  五、作品成效总结分析
  系统测试性能指标:(1)极板为正方形,边长为50mm±1mm,每块极板的电极连接一根信号线,信号线长度均为 500mm±5mm,两极板与信号线为二线制平行极板结构;(2)极板与纸张之间具有压紧结构,使两极板能压紧被测纸张;(3)电路能实现电容采集、数据记录、自校准与曲线拟合、纸张数量的判断与显示、拟合曲线的显示等功能;(4)能检测极板间是否短路;(5)在测试之前进行自校准,并拟合出曲线;(5)启动测量,完成测量并发出一声蜂鸣,时间不超过 5 秒钟;(6)OLED和液晶屏显示纸张数量和拟合曲线。
  成效得失对比分析:判决准确度高、可视化程度高,对于纸张的放置位置要求较低,具有较强的灵活性和适应性,但是对于代码和算法的要求比较高
  创新特色总结展望:(1):使用一阶互补滤波算法对采集到的数据进行处理,使采集到的数据更加准确;(2)使用分段最小二乘曲线拟合对自校准的数据进行处理,使预测结果更加准确;(3)使用液晶屏显示自校准模式下记录的拟合曲线,提高系统的可视化程度;(4)测量精度高,能准确预测1-80张以内的纸张数量。
  六、附件材料
  6.1 附件1
  FDC2214模块电路图如图4所示:
  
  1-10张纸的拟合曲线如图5所示:
  
  15-30张纸的拟合曲线如图6所示:
  
  30-40张纸的拟合曲线如图7所示:
  
  6.2 附件2
  部分源程序:
  int main(void)
  {
  int key,key1,key2,key3;
  int num=0;//用来给按键4计数
  int num1=0;//用来给按键5计数
  int z,y,w,e,r;
  float x222,x111;
  double cc[9];
  double dd[9];
  double cc1[5];
  double dd1[5];
  double cc2[4];
  double dd2[4];
  int mode;
  int flag1,flag2,flag3,flag4;//模式12标志位
  Sys_Init();
  while(1)
  {
  Oled_Printf_Float(0,1,100,0); //100表示工作在空闲状态
  res=(res0-temp0+res1-temp1)/2.0; /*短路检测*/
  Oled_Printf_Float(0,3,res,0);
  if(res《=50) //判断短路
  {led=0; }
  else{led=1;}
  while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
  key=KEY_Scan(0); //得到键值
  if(key==1) {mode=1;}
  if(key==2) {mode=2;}
  while(mode)
  {
  OLED_Fill(0x00);
  switch(mode)
  {
  case 1: //模式1,开始测试
  Oled_Printf_Float(0,1,101,0); //101表示工作在测试模式
  while(flag2==0) /*****************开始放纸测试*******************/
  {
  key2=KEY_Scan(0);
  if(key2==7)//拟合曲线1{flag3=0;}
  if(key2==8)//拟合曲线2{flag4=0;}
  /****************基础部分:曲线1*****************/ while(flag3==0)//拟合曲线1
  {
  res=(res0-temp0+res1-temp1)/2.0;
  key3=KEY_Scan(0);
  Oled_Printf_Float(0,3,res,0);
  OLED_P6x8Str(50,1,ch1,0);//坐标已确定
  if(key3==6)
  {x111=jie_4(res,P);
  Oled_Printf_Float(80,1,x111,0);
  beep=1;
  delay_ms(5000);//延时300ms
  beep=0;
  delay_ms(5000);//延时300ms }
  if(key3==8)
  {flag3=1;}
  }
  /****************发挥部分:曲线2*****************/ while(flag4==0)//拟合曲线2
  {res=(res0-temp0+res1-temp1)/2.0;
  key3=KEY_Scan(0);
  Oled_Printf_Float(0,3,res,0);
  OLED_P6x8Str(50,1,ch1,0);//坐标已确定
  if(key3==6)
  { x222=jie_3(res,Q);
  Oled_Printf_Float(80,1,x222,0);
  beep=1;
  delay_ms(5000);//延时300ms
  beep=0;
  delay_ms(5000);//延时300ms}
  if(key3==8)
  {flag4=1;} }
  }break;
  case 2: //模式2,自校准
  Oled_Printf_Float(0,1,102,0); //102表示工作在校准模式
  while(flag1==0)
  {
  res=(res0-temp0+res1-temp1)/2.0;
  Oled_Printf_Float(0,3,res,0);
  key1=KEY_Scan(0);
  if(key1==3) //结束自校准,算出两个系数数组
  {
  for(z=0;z《num1;z++)
  {
  printf(“数组第 %d 位 纸张数:%1.1f 电容值:%3.3f rn”,z,dd[z],cc[z]);
  }
  OLED_Fill(0x00);
  Oled_Printf_Float(0,1,100,0);
  for(w=0;w《5;w++)
  {
  dd1[w]=dd[w];
  cc1[w]=cc[w];
  }
  for(e=0;e《4;e++)
  {dd2[e]=dd[e+5];
  cc2[e]=cc[e+5];}
  nihe1(dd1,cc1);
  nihe2(dd2,cc2);
  for(y=0;y《5;y++)
  {printf(“第一段系数第 %d 位 系数:%3.3f rn”,y,P[y]);}
  for(r=0;r《4;r++)
  { printf(“第二段系数第 %d 位 系数:%3.3f rn”,r,Q[r]);}
  flag1=1;
  }
  if(key1==4) //按键增计数
  {
  num++;
  Oled_Printf_U16(0,5,num,0);
  flag1=0;
  }
  if(key1==5) //记下电容值
  {num1++; //num1是数组有效长度
  dd[num1-1]=num*1.0; //纸张数放进数组
  res=(res0-temp0+res1-temp1)/2.0;
  cc[num1-1]=res; //电容值放进数组
  Oled_Printf_Float(0,7,dd[num1-1],0); //显示记录纸张数 Oled_Printf_Float(50,7,cc[num1-1],0); //显示记录电容值
  flag1=0;
  }}break;}
  mode=0;
  }}}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分