【MCU方案】+采用MSP430F425实现电容传感器的数据信息处理

2019-07-26 15:45发布

本帖最后由 lark100 于 2015-6-27 00:42 编辑

电容传感器以各种类型的电容器作为传感原件,将被测物理量的变化转换为电容量的变化。通过相应的外接检测电路可将这种电容的变化转换成电压、频率等便于测量的电信号变化,根据输出电信号的变化来获得被测物的信息。该项目设计了一个通用的传感器数据处理采集显示系统。电容传感器输出模拟电压,通过信号处理电路处理后,满足MCUA/D模块输入条件,再通过软件滤波补偿处理后,LCD显示输出。 xtkt.JPG 硬件部分:1MCU本项目选用了TI公司生产的具有16A/D转换器的MSP430F425单片机,不再需要专用AD转换芯片,而采用MSP430F425单片机的优点是不仅可以实现16AD转换,而且可以实现数据处理,特别适合批量生产且性价比较高。MSP430F425的特点:(1)低电源电压范围:1.8~3.6V。(2)超低功耗:工作模式400uA@IMHz2.2V;待机模式1.67uA。(3)从等待方式唤醒的时间不超过6微秒。(4)片内频率锁相环,可使系统工作在稳定的频率上。(516RISC结构, 125ns指令周期。(63个独立的16位差分输入Σ-Δ A/D转换器,内置可编程增益放大器和内部参考源。(7116位定时器Timer-A,带3个捕获/比较模块。(8)片内集成液晶驱动器,驱动能力可达128段,可直接驱动段码式液晶板。(9)掉电检测器,可编程电压监视器。(10)可在线系统串行编程。介绍一下MSP430F425单片机内置的A/D转换模块。它具有16位的高分辨率,且采用了Sigma-Delta调制技术,简称为 SD16 模块。SD16 模块包含了3个独立的16ADC,它们公用一个基准电压源和时钟源,且每个 ADC都有独立的控制寄存器组,并有8组差分输入通道。(1)模拟输入范围每个模拟输入通道的最大输入电压范围(±Vfsr)由每个通道的可编程增益放大器设定的增益APGA和参考电压Vref决定。其中,Vfsr=Vref/2/APGA。如果参考电压是1.2V,增益是1时的最大输入电压范围为±0.6V。(2)转换参考电压要将模拟量转换为数字量,必须有参考电压,参考电压有内部与外部两种。具体设置如下:采用外部参考源:SD16REFON=0SD16VMIDON=0;采用内部参考源:SD16REFON=1SD16VMIDON=0;内部参考源带缓冲器输出:SD16REFON=1SD16VMIDON=l。为了简化设计,采用MSP430F425单片机处理器内壁提供了的片内参考电压1.2V。(3SD16的寄存器SD16使用起来相当灵活方便,对它的操作使用相关的控制寄存器实现。该模块的寄存器可分为转换控制类:SD16CTL;中断控制类:SD16IFGSD16IVSD16IESD16OVIFG;转换结果存储控制类:SD16CCTL0SD16CCTL1SD16CCTL2;预装载寄存器:SD16PPE0SD16PPE1SD16PPE2;通道输入控制寄存器:SD16INCTL0SD16INCTL0SD16INCTL2;转换结果存储器类:SD16MEM0SD16MEM1SD16MEM2。输出数据格式通过SD16DF来设置选择,有2的补码(双极性)或者偏移二进制(单极性)两种格式可选。(4SD16的转换模式由SD16SNGL位和SD16GRP位选择转换模式,共提供四种转换模式,即单通道单次转换、序列通道单次转换、单通道多次转换、序列通道多次转换。本项目选择单通道单次转换。(5)转换计算       在参考电压为1.2V,输入电压为VIN时,MSP430F425单片机的AD转换输出的结果为:N=65535*VIN/1.2VMSP430F425内置液晶驱动模块,其特点: 1)具有显示缓存器,可作为一般存储器;2)段输出端口可以作为通常输出端口使用;3)所需的SEGCOM信号自动产生;4)具有4种驱动方法(静态、2MUX3MUX4MUX)。 MSP430F425.JPG MSP430F425最小系统原理图2、信号处理电路由于MSP430F425单片机的A/D转换器采用差分信号输入,而一般电容传感器采集来的信号经过前端处理电路,输出的是单端信号,且输出电压范围与A/D输入电压范围不匹配,因此需要通过一个处理电路来实现电压范围的变化和单端信号转差分信号。信号处理电路由三部分组成,即电压转换电路、滤波电路和单端转差分电路。选用具有低功耗、较低的输入失调电流和输入失调电压的双运算放大器LM358完成功能。电压转换电路对输入电压进行增益调整,转换电压范围,把电容传感器通用输出电压0~5V,转换为0~1.2V。滤波电路一般采用一阶无源低通滤波或二阶有源低通滤波。单端转差分电路选用差分放大器LTC1992 xinhaotiaoli.JPG 3、液晶显示模块液晶显示模块主要是用来显示电容传感器输出采集处理补偿后数据值。选用LCD048液晶板作为显示器,驱动器利用MSP430F425自带的驱动模块,采用4MUX驱动方式,4MUX方式要用到4个公共端COM0COM1COM2COM3,每4段需要另一个引脚驱动(每个字的全部8段在同一个字节显示)。4MUX方式是最简单方便的显示形式。 LCD.JPG

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
2条回答
lark100
2019-07-26 18:22
部分软件源码1A/D转换软件#include <msp430x42x.h>Void  SD16init(void){Volatile unsigned  int i;SD16CTL=SD16REFON+SD16SSEL0; //SD16REFONl,选择1.2V内部参考电压//SD16SSEL001,选择子系统时钟SMCLK为时钟源SD16CCTL0=SD16SNGL+SD16IE+SD16OSRx+SD16SC;//SD16SNGL0,选择序列转换模式//SD16IE1,表示使能中断//SD16OSRx00,表示选择256过采样率 //SD16SCl,表示使能ADCSD16INCTL0|=SD16INTDLY_0; //SD16INTDLY_000,表示第四个采样中断for(i=0;i<0x3600;i++);} ADC.JPG 2、液晶显示程序 #inelude  <msP430x42x.h>#define   Num_of_Results  8Static unsigned int  ADC_result;Const unsigned char NUM_LCD[16]={0x7B,  //”0”  LCD seglllents  a+b+e+d+e+f lcd=lsd0480x12,  //”1”0x4F,  //”2”0xlF,  //”3”0x36,  //”4”0x3D,  //”5”0x7D,  //”6”0x13,  //”7”0x7F,  //”8”0x3F,  //”9”0x77,  //”A”0x7c,  //”B”0x69,  //”C”0xse,  //”D”0x6d,  //”E”0x65,  //”F”}; #define  LCD_IN_USE   8Unsigned char LCD_Buf[LCD_IN_USE];  //自定义显示缓冲区,用于外部设定要显示的数据Interrupt  void  SD16ISR(void); Unsigned int index;Void  init_LCD(void)     //初始化LCD048{int  i;  char  tmPv;  FLL_CTL0|=XCAP18PF;    //Configure  load  capsfor(i=O;i<10000;i++);     //Delay for 32kHz crystal  to  BTCTL=BTFRFQ1;  //Set freqLCD=ACLK/128LCDCTL=0x03d;  //4-Mux LCD segnlents S0-S15 for(tmPv=0;tmpv<8;tmPv++){LCDMEM[tmPv]=0x00:  // clear LCD}  }Void  LCD_DisPlay(){ADCresult=ADC_result-0x8000;ADCresult=ADC_result/1000;ADCresull=ADC_result*170;Char tmpvtmP;for(tmP=0;tmP<7;tmP++){Lcd_Buf[tmp=ADCresult%10;   //结果转换成十进制,并存放在LCD缓冲区中ADCresult=ADCresult/10;}for(tmpv=0;tmpv<LCD_IN_USE-4;tmpv++){LCDMEM[tmpv]=NUM_LCD[lcd_Buf[tmpv]]; //更新LCDMEM中的内容}LCDMEM[tmpv]=0xfb;}

一周热门 更多>