微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC单片机CCP模块在转矩传感器脉冲信号采集系统中的应用

PIC单片机CCP模块在转矩传感器脉冲信号采集系统中的应用

时间:06-26 来源:电子产品世界 点击:

摘要:在转矩传感器脉冲信号采集过程中,不仅要保证采集的精确度,为了能够实时显示出转矩的动态性能,也要保证其高采样率。本文设计了一种基于PIC单片机CCP模块捕捉模式下的脉冲信号采集系统,通过室内和室外试验研究结果表明:该脉冲信号采集系统采样频率高,且精度可到0.1%,具有很好的实用性。

引言

转矩测量的方法按测量原理分为平衡力法、能量转换法和传递法三大类,其中传递法的应用最为广泛[1]。转矩是反应机械传动系统性能的典型机械量,转矩的测量具有广泛的应用,故对于转矩信号的采集也就显得尤为重要。

本文选用一款通用的转矩传感器作为研究对象,其频率信号在零负载时为10kHz,正向旋转满量程时为15kHz,反向旋转满量程时为5kHz[2],并且其内部安装有基于霍尔元件为基础的转速测量装置,每旋转一圈则输出60个脉冲,是一款集转矩和转速同时输出的传感器,并且转矩和转速输出信号同为脉冲信号,基于此,本文设计了一款基于PIC单片机CCP模块高精度、高采样率的脉冲采集电路。

采集系统设计

脉冲信号检测原理

本系统采用PIC18F25K80作为微处理器,其具有4个CCP(捕捉/比较/PWM)模块和1个ECCP(增强型捕捉/比较/PWM)模块[3],所有模块均可实现标准的捕捉、比较和脉宽调制模式,本文应用的为其捕捉模式,捕捉模式是用来捕捉一个事件发生的时刻,通常是用来测量某事件的持续时间。以CCP3和CCP4模块为例,如图1所示为CCP模块捕捉模式原理示意图。  

?

PIC18F25K80的CCP3模式工作在捕捉模式下,即捕捉一个事件发生的时刻值。在单片机内的事件表示的是电平变化,即为引脚输入的脉冲上升沿或者下降沿,当引脚输入信号发生跳变时,CCP的捕捉功能就会立即把当时的TMR1或TMR3定时器的16位计数值记录下来,并会立即复制到CCPR3H和CCPR3L中,并产生CCP中断信号。具体由哪一种特殊脉冲形式触发一次时间捕捉将由CCP3M<3:0>这四位控制信号决定,其具体配置方式如表1所示。  

?

本研究设置时钟来源于内部时钟(Fosc/4),即主频为4MHz,每个指令周期为1μs,设置C3TSEL为低,即使用TRM1为定时器,预分频比选择1:1。考虑到CCP捕捉方式发生的最大误差为±1μs,由于高采样率可以实时表现出转矩或转速的动态性,另外又要最高限度地提高采样精度,故要在保证高采样率的前提下,将转矩信号采集采用每16个上升沿触发一次,这样既保证的高采样率,也降低了采样误差。如图2所示测得T1~T3之间的时间,则得到测量周期为T=( T3 - T1)/16,测量周期结果的单位为μs,用106除以测量周期T,就可得到信号的频率。同理如图2所示当转速为1000r/min以下时,输出信号为1kHz的低频脉冲信号,本研究采用每1个上升沿触发。  

?

脉冲采集电路设计

为了增强系统的抗干扰能力,传感器输出信号与CCP引脚之间通过光耦进行电气隔离,本研究中采用TOSHIBA公司生产的光耦TLP113对信号进行电气隔离,光耦隔离使被测对象信号和监测电路之间没有电的直接连接,从而防止了因为有电连接而引起的干扰,TLP113片内包含一个高输出功率的砷化镓铝发光二极管,该二极管耦合到一个高增益、高速度单片光探测器,探测器的输出为肖特基钳位晶体管,集电极开路输出[4]。能够有效地进行电气隔离。脉冲采集电路如图3所示。  

?

电源电路设计

电源电路在一个系统中是非常重要的,根据各模块电源电压的要求情况,联合收割机在线监测系统需要的电源电压值有:±15V和5V,单片机系统采用5V供电电源,转矩传感器需要±15V供电。本系统在为蓄电池24V供电电压,由于机器工作环境,蓄电池使用时间长而为及时充电等问题可能会造成电压不稳等情况,因此需要电源转化和稳压模块。本研究为了系统稳定考虑,采用DC-DC电源隔离模块,实现电源的稳定输出。如图4所示为电源电路。  

?

软件设计

为了达到程序简单明了、易于阅读、调试方便、采样率高及可靠性好的目的,采用结构化的程序设计方法。本研究采用的是MATLAB IDE V8.76控制系统的软件作为开发环境,并采用Hitech公司开发的PICC编译器进行编写、调试和编译程序。主要有CCP模块的初始化以及中断程序,具体实现如下:

////InitCCP//////////
  void initCCP(void)
  {
  ///CCP3//////
  TRISC6=1; //RC6作为捕捉输入引脚
  CCP3IF=0; //捕捉标志位清零
  CCP3IE=1; // 捕捉中断使能
  CCP3CON=0X07; //捕捉模式,每16个上升沿
  C3TSEL=1; //CCP3 定时器选择位,为0时 CCP3 基于TMR1产生
  ///CCP4//////
  TRISC7=1; //RC7作为捕捉输入引脚
  CCP4IF=0; //捕捉标志位清零
  CCP4IE=1; // 捕捉中断使能
  CCP4CON=0X07; //捕捉模式,每16个上升沿
  C4TSEL=1; //CCP4定时器选择位,为0时 CCP4基于TMR1产生
  //////////////////
  PEIE=1; //外围中断使能
  GIE=1; //总中断使能
  T1CON=0X01; //关闭独立时钟振荡器;时钟来源于Fosc/4;使能定时器计数;内部定时,无分频
  }
  ////Interrupt server function
  void interrupt ISR(void)
  {
  ///CCP3 Interrupt///
  if(CCP3IF &&CCP3IE)
  {
  CCP3IF = 0;
  if(LastData3 == 0)
  {
  LastData3 = CCPR3H;
  LastData3 = (LastData3<8)+CCPR3L;
  }
  else
  {
  NewData3 = CCPR3H;
  NewData3 = (NewData3<8)+ CCPR3L;
  g_Period3 = NewData3-LastData3; //测量周期计算
  g_Frequency3 = (long)10000000/g_Period3; //频率计算
  LastData3 = 0;
  CdataL3 = g_Frequency3;
  CdataH3 = (g_Frequency3>>8);
  }
  }
  ///CCP4 Interrupt///
  if(CCP4IF &&CCP4IE)
  {
  CCP4IF = 0;
  if(LastData4 == 0)
  {
  LastData4 = CCPR4H;
  LastData4 = (LastData4<8)+CCPR4L;
  }

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

网站地图

Top