基于msp430的电阻测量系统的设计毕业论文内容摘要:

该硬件系统的电源部分采用TI公司的TPS76033芯片实现,该芯片是一个降压芯片,考虑到硬件系统对电源要求具有稳压功能和纹波小等特点,另外也考虑到硬件系统的低功耗等特点,因此该芯片能很好满足该硬件系统的要求。 电源电路具体如图29所示。 为了使使输出电源的波纹小,,减小输入端受到的干扰。 在使用时应该尽可能地选择最低的电源电压。 对于MSP430而言,可用的最低电压是很低的。 我们使用TI公司推荐使用的3V。 通常的电源只提供5V电压,因此,需要将5V电压由一个3V的稳压管降压后给CPU供电,也可以直接锂电池供电。 3V不是标准的TTL电平,因此,在使用时需要用接口电路使CPU的非TTL标准电平能与TTL标准电平的器件连接。 这些接口电路应该也是低功耗的,否则会造成一方面使用低电压降低了功耗,另一个方面使用额外的接口电路又增加了系统的功耗。 或者直接使用支持3V电压的外围芯片。 图29 电源电路16洛阳理工学院毕业设计(论文)第3章 系统软件设计 初始化程序设计初始化程序主要初始化端口,并设置A/D转换相应的寄存器。 下面为具体的程序。 端口初始化 void Init_Port(void) { //将PPPPPP6口的管脚设置为一般I/O端口 P2SEL=0。 P2SEL=0。 P3SEL=0。 P4SEL=0; P5SEL=0; P6SEL=0; //设置管脚为输入管脚 P1DIR=0。 P2DIR=0。 P3DIR=0。 P4DIR=0。 P5DIR=0。 P6DIR=0。 //、P1DIR |=BIT0。 P1DIR |=BIT1。 P1DIR |=BIT3。 //将中断寄存器清零P1IE=0。 P1IES=0。 P1IFG=0。 //管脚START使能中断P1IE |=BIT2。 //对应的管脚由高到底电平跳变,并使相应的标志置位P1IES=BIT2。 return。 }上面的程序是对所有的端口都进行初始化,用来与PGA204的A0管脚和A1管脚进行连接,实现增益的选择。 ,如果按下按键,则开始测量处理。 A/D初始化A/D初始化程序主要设置A/D的相应参数。 A/D转换有单通道单次转换、序列通道单次转换、序列通道多次转换等几种方式[12]。 本系统采用的是单通道单次转换方式。 下面为具体的A/D初始化程序。 void Init_ADC(void) { // P6SEL=0X01。 //设置ENC为0,从而修改ADC12寄存器的值 ADC12CTL0 amp。 = ~(ENC); //转化的起始地址为:A/DCMEM0 ADC12CTL1 |=CSTARTA DD_0。 //设置参考电压分别为AVss和Avcc,输入通道为A0 ADC12MCTL0 = INCH_0。 ADC12CTL0 |=ADC12ON。 ADC12CTL0 |=MSC。 //转换模式为:单通道、单次转换 ADC12CTL1 |=CONSEO_0。 //时钟源为SMCLK ADC12CTL1 |ADC12SSEL_1。 //时钟分频为1 ADC12CTL1 |ADC12DIV_0。 //采样脉冲由所采用的定时器产生 ADC12CTL1 |= (SHP)。 //使能ADC转换 ADC12CTL0 |=ENC。 return。 } 定时器A的初始化在本系统中,采用定时器A来控制A/D转换的控制,因此需要对定时器A进行初始化设置,下面为具体的程序。 Void Init_timerA(void){ TACTL = TASSEL1 + TACLR。 //选择SMCLK,清除TAR TACTL += ID1。 //1/8 SMCLK TACTL += ID0。 //CCR0 中断允许 CCTL0 = CCIE。 //时间间隔为250HZ CCR0 = 4000。 //增计数模式 TACTL |= MC0。 Return。 } A/D采集程序 A/D采集程序由定时器A来控制,即通过定时器A来确定A/D转换的频率。 通过前面介绍的关于定时器A的初始化程序可知:定时器工作模式为增计数模式,当条件满足时,就会产生相应的中断,在中断程序里就可以读出A/D转换的数据。 下面为定时器A的中断服务程序。 if_VER_200 Interrupt [TIMERA0_VECTOR] void TimerA_ISR(void) else pragma vector=TIMERA0_VECTOR _interrupt void TimerA_ISR(void) endif { int i。 If(nStart ==1) { //关闭转换 ADC12CTL0 amp。 = ~ENC。 //读出转换结果 ADC_BUF[nADC_Count]=ADC12MEM0。 nADC_Count +=1。 If(nADC_Count==32) { //设置标志 nADC_Flag=1。 nADC_Count=0。 //将数据倒向数据缓冲区 for(i=0。 i32。 i++) { ADC_BUF_Temp[i]=ADC_BUF[i]。 }}//开启转换ADC12CTL0 |=ENC+ADC12SC。 }} 在上面的程序中,首先检测“nStart”是否为“1”,如果为“1”则开始测量,在进行测量时,首先停止A/D转换,然后读出转化结果,最后再开启A/D转换。 在上面的程序中,通过全局变量和全局缓冲区与其他程序进行数据交互。 显示模块流程图单片机应用系统中使用的显示器主要有发光二极管显示器,简称LED(Light Emitting Diode);液晶显示器LCD(Liquid Crystal Display);近几年也有配置CRT显示器的。 液晶显示器简称是利用液晶经过处理后能够改变光线传输方向的特性,达到显示字符或者图形的目的液晶显示器显示功能强大,可现实各种字体的数字、图象,还可以自定义显示内容,增加了显示的美观性与直观性。 最重要的是提供了友好的人机界面。 其特点是体积小、重量轻、功耗极低、显示内容丰富等特点,在单片机应用系统中有着日益广泛的应用。 显示模块流程如图31所示:初始化清屏取字节地址检测忙闲取字符送显示YN开始取下一个字符图31 显示模块流程图22 测试程序在本系统中,A/D采集的参考电源选择的是AVcc,其电压为3V,由于A/D采样是12位。 由于PGA204的增益是以10倍为基础的,因此在测量的时候,首先将增益设置为1,当测量得到的值小于407()时,增大增益,继续测量,直到在增益合适的情况下得到测试结果。 如图32所示为测试程序的流程示意图。 开始 测量开始 NO Yes 得到测量结果 增益合适 NO YesLCD显示,结束 下一次 图32 测试程序流程图23根据图32所示的流程图,下面给出具体的测试程序。 int nStart。 int nADC_Count。 int nADC_Flag。 int ADC_BUF_Temp[32]。 int ADC_BUF[32]。 Void main(void) { int i。 int pBuf[32]。 int sum。 int nTemp。 float fVal。 //关闭看门狗 WDTCTL = WDTPW + WDTHOLD。 //关闭中断 _DINT()。 //变量初始化 nADC_Count=0。 nADC_Flag=0。 nStart=0。 fVal=0。 //时钟初始化 Init_CLK()。 //端口初始化 Init_Port()。 //定时器A初始化 Init_TimerA()。 //循环处理 for(。 ) { //采集完成 If(nADC_Flag==1) { //清除标志 nADC_Flag=0。 //取出数据 for(i=0。 i32。 i++) { pBuf[i]=ADC_BUF_Temp[i]。 } //取平均值,sum为测量的值 Sum=0。 for(i=o。 i32。 i++) { Sum +=pBuf[i]。 } Sum=5。 //判断增益是否合适, If(sum407) { nTemp=getGain()。 nTemp*=10。 setGain(nTemp)。 } else { //测量结束 nStart=0。 sum*=3。 fVal=(float)(sum)/4096。 fVal*=1000。 nTemp=getGain()。 //电阻值 fVal/=nTemp。 //LCD显示 P1OUT |=BIT3。 } } } } 在上面的程序中,使用了“setGain”和“getGa。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。