第二章MSP430单片机的内部资源_第1页
第二章MSP430单片机的内部资源_第2页
第二章MSP430单片机的内部资源_第3页
第二章MSP430单片机的内部资源_第4页
第二章MSP430单片机的内部资源_第5页
已阅读5页,还剩181页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、罗小刚重庆大学TI 430有一系列型号,代表不同配置第一位数字代表系列。内核相同,指令相同,主要区别在于外部模块与成本专用单片机系列: 430家族中还有针对热门应用而设计的一系列专用单片机。如MSP430FW4xx系列水表专用单片机、MSP430FG4xx系列医疗仪器专用单片机、MSP430FE4XX系列电能计量专用单片机等。这些专用单片机都是在同型号的通用单片机上增加专用模块而构成的。例如FW4xx系列在F4xx系列上增加了SCAN-IF无磁流量检测模块选择最容易实现设计目标且性能/价格比又高的型号在研制任务重,时间紧的情况下,首先选择熟悉的型号欲选的型号在市场上要有稳定充足的货源I/O口是

2、单片机和外设之间连接和传输数据/状态的通道,I/O口数决定了单片机能连接外设的数目,属于单片机可用资源的一种I/O口资源不足时,可通过电路进行扩展,如3-8译码器、多路选通开关等。6 个 8 位数字 I/O 端口:P1P6;每个 I/O 引脚都可以独立编程为输入或输出(方向设置);每个 I/O 引脚都可以独立进行读或写操作;P1 和 P2 具有中断功能(16 级外部中断输入),可以独立进行中断控制(屏蔽或允许),可以独立进行上升沿或下降沿有效中断请求信号设置;P1 的 8 个外部中断共享同一个中断向量, P2 的 8 个外部中断共享另一个中断向量;I/O口寄存器:设置、读取I/O口的数据或状态

3、的特殊存储单元,与硬件直接相关每组I/O口有4个寄存器,其中P1/P2因具有中断功能,还额外具有3个中断寄存器PxDIR寄存器:设置每一位I/O口方向0:输入1:输出使用I/O口时首先要选择输入/输出P1DIR|=BIT7;delay=0;while(1) P1OUT=(17); /异或运算,实现第7位取反 delay+; while(delay450k时置1,反之则置0.OSCCAPx:设置晶振匹配电容(每只管脚,位于FLLCTLO寄存器)。001pF(XCAP0PF) 016pF(XCAP6PF) 108pF(XCAP14PF) 1110pF(XCAP18PF) 或 OSCCAP_0 OS

4、CCAP_1 OSCCAP_2 OSCCAP_3高频晶振时需外接2030pF电容。FLL_DIVx:设置ACLK输出分频系数(位于FLLLCTL1寄存器)O0=无分频(FLL_DIV_1) 01=2分频(FLL_DIV_2) 10 =4分频(FLL_DIV_4) 11=8分频(FLL_DIV_8) ACLK除了提供系统活动用之外,还可以从P1.5管脚输出供其它外围设备使用。OSCOFF:关闭低频时钟振荡器(位于SR寄存器)0=正常工作(初始值) 1=关闭关闭时钟振荡器后,系统中ACLK也随之停上。一般在进人最深的休眠模式(LPM4)前才关闭ACLK,之后系统功耗降到最低。此时只能通过外部I/O

5、中断或复位唤醒。例2.3.1 MSP430F14x单片机外部接有32.768kHz晶振,设置时钟如下: FLL_CTL0 &=XTS_FLL; /设置振疡器类型为低频(可省略) FLL_CTL0 |=XCAP18PF;/设置晶振匹配电容18pF左右例2.3.2 MSP430F14x单片机外部接有1MHz晶振,并要从P1.5输出250kHz时钟信号给某外部逻辑电路使用:FLL_CTL0 |=XTS_FLL; /设置振荡器类型为高频FLL_CTL0 |=XCAP0PF; /设置内部晶振匹配电容0pF(电容需外接)FLL_CTL1 |=FLL_DIV_4; /设置对外输出4分频P1DIR |=BIT

6、5; /P1.5设为输出P1SEL |=BIT5; /P1.5设为第二功能管脚(ACLK)共有8个控制位,实现功能是将ACLK转换为高频时钟供CPU或外设。N环路分频系数。(位于SCFQCTL寄存器低7位) 倍频系数=N+1(复位后N=31,即32倍频) 快捷宏定义:SCFQ_64K SCFQ _128K SCFQ_256K SCFQ_512K SCFQ_1M SCFQ_2M SCFQ_4M DCOPLUS: DCO额外分频允许(位于FLL_CTLO寄存器) 0=禁止额外的分频 1=允许额外分频 当DCOPLUS为1时,下面FLLDx的设置才有效FLLDx:DCO额外分频系数(位于SCFl0寄

7、存器) 00=无分频 01=2分频 10 =4分频 11 =8分频 快捷宏定义:FLL_DIV_1 FLL_DIV_2 FLL_DIV_4 FLL_DIV_8 例2.3.3 MSP430F42x单片机外部接有32.768kHz手表晶振,CPU需要2MHz左右时钟频率FLL_CTL0 &=XTS_FLL; /设置振荡器类型为低频(可省略)FLL_CTL0 |=XCAP18PF; /设置晶振匹配电容18pF左右SCFQCTL=SCFQ _ 2M; /倍频至2MHz(64倍频,2.09MHz)SCFI0 |=FN_2n; /DCO中心频率2MHz左右(1.312.1 MHz)例2.3.4MSP430

8、F42x单片机外部接有32.768kHz手表晶振,CPU需要2.752MHz时钟频率。2.752MHz是32.768kHz的84倍。因此分频系数N=841=83。FLL_CTL0 &=XTS_FLL; /设置振荡器类型为低频(可省略)FLL_CTL0 |=XCAP18PF; /设置晶振匹配电容18pF左右SCFQCTL=83; /倍频至2.752MHz(84倍频)SCFI0 |=FN_3 /DCO中心频率3MHz左右 例2.3.5 MSP430F42x单片机外部接有32.768kHz手表晶振,CPU需要6. 554MHz时钟频率。6.554MHz是32. 768 kHz的200倍。通过分频系数

9、N最大只能实现128倍频,需要开启DCOPLUS利用FLLDx再额外倍频200 =2 x 100,可以将N设为99, FLLDx设为2倍频。 FLL_CTL0 &=XTS_FLL; /设置振荡器类型为低频(可省略) FLL_CTL0 |=XCAP18PF; /设置晶振匹配电容18pF左右 SCFQCTL=99; /先100倍频 FLL_CTL0 |=DCOPLUS; /开启额外的倍频 SCFI0 |=FLL_DIV_2+FN_4; /额外2倍频DCO中心频率4MHz理论上430时钟频率虽可由倍频设置高频,但存在上限的制约。一般来说,和芯片电压有关。表2.3.1MSP430F42x单片机低功耗模

10、式低功耗通过系统时钟的设置来实现模块的打开和关闭。低功耗模式唤醒无论处于何种低功耗模式,只要有中断发生都会响应中断。进入中断前CPU会自动将存有4个低功耗控制位的srs寄存器压入堆栈,并自动清除SCG1,OSCOFF, CPUOFF这3个控制位,但不清除SCGO控制位。在LPM1,LPM3,LPM4模式下SCG0是置位的,唤醒进入中断服务程序后,SCG0仍然置位,DC发生器仍被关闭,因此从上述3个模式唤醒后MCLK和SMCLK都是不准确的,若中断服务程序需要准确的CPU时钟,则需在中断内人工清除SCGO标志位。 _BIC_SR(SCG0)(1)间歇工作:让设备在不工作时低功耗休眠,工作时唤醒。

11、尽可能延长休眠时间,可降低系统功耗。例2.3.6在MSP430单片机组成的系统中,ACLK =32.768kHz,CPU速度1MHz。P1.5接有按键(按下为低电平),P2.0输出至LED,当按键被按下时LED亮,松开后LED灭。(2)替代程序流程中的等待过程:MSP430单片机中,几乎所有的设备都能产生中断,目的在于让CPU无需查询也能等待设备。方法是用休眠替代查询等待,设备在发生状态变化时将会主动唤醒CPU进行后续的处理。防止其它中断唤醒CPU导致发送混乱。(3)作为电源开关:在所有的休眠模式中,LPM4的功耗是最低的,仅0.1A。进入LPM4后单片机内部所有的部件都不再活动,仅保持RAM

12、内数据和I/O口状态不变。利用LPM4可以在不切断电源的情况下实现“软件关机”。间歇工作需要定时器进行唤醒 MSP430单片机内部基础定时器(BASIC TIMER)能在无需CPU干预的情况下产生 个时钟周期的定时中断,供问歇唤醒系统N2Basic Timer定时器总共有5个控制位:BTDIV,BTHOLD, BTSSEL,BTFREQx,BTIPx,都位于BTCTL寄存器。BTDIV:是否预分频;BTHOLD:BT是否起作用;BTSSEL:时钟源选择;BTFREQx:LCD刷新频率分频器;BTIPx:BT中断频率选择器。BTCNT1,BTCNT2:一、二级计数器值寄存器(可读写);例2.4.

13、1在某MSP430单片机系统中,ACLK时钟频率为32.768kHz。用Basic Timer定时器产生周期为1/4s的定时中断,同时为LCD提供512Hz的刷新时钟。 I/4s的周期较长,从32768 Hz分频到4Hz需要8192分频,大于256分频。使用一级分频器不够,需要2级级联使用。先对ACLK进行256分频后再进行32分频。LCD时钟从32768分频到512 Hz需要64分频。可以利用快捷宏定义对BTCTL寄存器进行设置:例2.4.2在某MSP430单片机系统中,ACLK时钟频率为32.768kHz。用Basic Timer定时器产生周期为1/1024s的定时中断,同时为LCD提供2

14、56Hz的刷新时钟在Basic Timer第二级分频器的8个输出抽头中,被选中的抽头每次由0到1的跳变(计数进位)会产生中断标志。BTIE: BT中断允许位,0=禁止,1=允许(IE2寄存器)BTIFG: BT中断标志位,0=未发生中断,1=中断发生(位于IFG2寄存器)。注:此位实际无用,因BT独占一个中断源,因此产生中断时不需要判断中断标志,中断如使能发生中断后系统将自动将BTIFG置0。例2.4.3在某430单片机系统中,ACLK时钟频率为32.768kHz。用 B a s i c Timer定时器让P2.0口上的LED每秒闪烁一次,同时为LCD提供256Hz的刷新时钟。例2.4.4 设

15、计思想是主程序休眠降低功耗,定时BT中断,当BT中断产生时CPU被唤醒,在中断服务程序中处理事件。例2.4.5编写延时程序,要求延时期间CPU休眠,以降低功耗。例2.4.7在某430单片机系统中,ACLK时钟频率为32.768kHz。用BasicTimer定时器为0.25s、0.5s、0.75s、1.5s共4个定时服务程序提供时钟节拍。液晶(LCD)是最常用的低功耗显示设备。在MSP430F4xx系列单片机中,内部集成了LCD控制器。能够直接驱动段码液晶。LCD控制器会产生LCD驱动所需的交流波形,并自动完成LCD的扫描与刷新。核心技术:由于LCD显示更新是驱动模块自动进行的,所以用户对液晶显

16、示的内容操作表现为对液晶模块显示缓冲区内容的更新。简单理解:改变显示只需写入对应的显示缓冲存储区内数据。(所有液晶显示操作都是这样的,对F149来说,如接12864点阵,液晶两端加不同电压改变其偏振特性,呈现不同的灰度。液晶OCMJ4X8C:此模块可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。提供三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口(OCMJ4X16A/B无串行接口)。所有的功能,包含显示RAM,字型产生器,都包含在一个芯片里面,只要一个最小的微处理系统,就可以方便操作模块。这款液晶内置2M-位中文字型ROM (CGROM) 总共提供819

17、2个中文字型(16x16点阵),16K位半宽字型ROM(HCGROM) 总共提供126 个符号字型(16x8点阵),64x16位字型产生RAM(CGRAM),另外绘图显示画面提供一个64x256点的绘图区域(GDRAM),可以和文字画面混和显示。引引脚脚名称名称方方向向说明说明引脚引脚名称名称方向方向说明说明1 1VSS-GND(0V)11DB4I/O数据42 2VDD-Supply Voltage For Logic(+5V)12DB5I/O数据53 3NC-Supply Voltage For LCD(悬空)13DB6I/O数据64 4RS(CS)IH:Data L:Instruction

18、 Code14DB7I/O数据75 5R/W(STD)IH:Read L:Write15PSBIH:Parallel M o d e L:Serial Mode6 6EN(SCLK)IEnable Signal,高电平有效16NC-空脚7 7DB0I/O数据017/RSTIR e s e t Signal,低 电 平有效8 8DB1I/O数据118NC-空脚9 9DB2I/O数据219LEDA-背 光 源正极(+5V)1010DB3I/O数据320LEDK-背 光 源负极(0V)OCMJ4X8C的引脚说明:引脚连接方式:PSB、RST接高电平(3.3v);RS接P3.0;R/W接P3.1;E接

19、P3.2;DB0-DB7接P5口,电源接3.3v(包括背光) GND接地(包括背光)。1、显示资料RAM(DDRAM) 显示数据RAM 提供64x2 个字节的空间,最多可以控制4 行16 字(64 个字)的中文字型显示,当输入显示资料RAM时,可以分别显示CGROM,HCGROM 与CGRAM 的字型;本系列模块可以显示三种字型,分别是半宽的HCGROM 字型、CGRAM 字型及中文CGROM 字型,三种字型的选择,由在DDRAM 中写入的编码选择,在0000H0006H 的定字型,02H7FH 的编码中将选择半编码中将选择CGRAM 的自宽英数字的字型,至于A1 以上的编码将自动的结合下一个

20、字节,组成两个字节的编码达成中文字型的编码。 BIG5(A140D75F) GB(A1A0F7FF),详细各种字型编码如下: 1)显示半宽字型:将8 位资料写入DDRAM 中,范围为02H7FH 的编码。 2)显示CGRAM 字型:将16 位资料写入DDRAM 中,总共有0000H,0002H,0004H,0006H 四种编码。 3)显示中文字形:将16 位资料写入DDRAM 中,范围为A140HD75FH 的编码(BIG5) , A1A0HF7FFH 的编码(GB)。将16 位资料写入DDRAM 方式为透过连写入两个字节的资料来完成,先写入高字节(D15D8)再写入低字节(D7D0)。2、绘

21、图RAM(GDRAM) 绘图显示RAM 提供64x32 个字节的记忆空间(由扩充指令设定绘图RAM 地址),最多可以控制256x64点的二维绘图缓冲空间,在更改绘图RAM 时,由扩充指令设定GDRAM 地址先设垂直地址再设水平地址(连续写入两个字节的数据来完成垂直与水平的坐标地址),再写入两个8 位的资料到绘图RAM,而地址计数器(AC)会自动加一,整个写入绘图RAM 的步骤如下: 1)先将垂直的字节坐标(Y)写入绘图RAM 地址。 2)再将水平的字节坐标(X)写入绘图RAM 地址。 3)将D15D8 写入到RAM 中(写入第一个Bytes)。 4)将D7D0 写入到RAM 中(写入第二个By

22、tes)。液晶屏显示地址:判忙: 等待液晶模块空闲。 当模块在接受指令前,单片机必须先确认模块内部处于非忙碌状态,即读取 BF 标志时 BF需为 0,方可接受新的指令;如果在送出一个令前并不检查 BF标志,那么在前一个指令和这个指令中间必须延迟一段较长的时间,即等待前一个指令确实执行完成;在这里,选用等待忙标志结束。程序如下:void WaitForEnable() char busy; CLR_RS; SET_RW; DATA_DIR_IN; do /判忙 SET_EN; _NOP(); busy = DATA_IN; CLR_EN; while(busy & 0 x80); DATA_DI

23、R_OUT;这样,每次向液晶写命令或数据时,只需先调用此函数即可,该函数将会阻塞,直到忙标志变回0(内部空闲,可以接受命令)。写入数据: 向模块内部RAM写入数据。写入数据到DDRAM即可显示到液晶,写入函数:void LcdWriteData(char data) WaitForEnable(); SET_RS; CLR_RW; DATA_OUT = data; /写数据 SET_EN; _NOP(); CLR_EN;同样,调用这个函数也可以向其他RAM写入数据,完成相应操作。写入命令: 向模块写入命令。写入命令可以通过液晶的指令集,控制液晶完成相应的功能。程序如下:void LcdWrit

24、eComm(char cmd) WaitForEnable(); /检测忙信号? CLR_RS; CLR_RW; DATA_OUT = cmd; /写命令 SET_EN; _NOP(); CLR_EN;如果cmd是0 x80-0 x9F,则是向液晶写入地址;地址表参见前面硬件介绍部分。写入字符串: 写入字符串,以显示。写入字符串即是多次调用写入数据,把字符串写入液晶以供显示。程序如下:void LcdWriteString(char addr,char *str) LcdWriteComm(addr); while(*str!=0) LcdWriteData(*str); str+; 这是向某

25、个地址写入字符串,液晶显示到相应位置。这个函数有个要求,就是字符串是中文字符串;如果不是,每一处的英文必须两个相连,否则将显示乱码,如果只有一个英文字符,可以加入空格;如:LcdWriteString(0 x90,1 abcd你好啊); 1+空格+abcd+汉字中 1只有一个字符,加空格,ab,cd两个,直接显示到一个汉字的位置。液晶初始化:液晶必须初始化之后才能正常使用。初始化就是一系列命令,完成液晶状态的初始工作,以使液晶可供正常使用。程序如下:void LcdInit() CTRL_DIR_OUT; DelayNms(500); LcdWriteComm(0 x30); /基本指令集 L

26、cdWriteComm(0 x01); /清屏,地址00H LcdWriteComm(0 x06); /光标的移动方向 LcdWriteComm(0 x0c); /开显示,关游标在运行过这个函数之后,液晶方能正常的显示;在调用液晶显示函数前,必须先调用这个函数。时钟初始化:void ClkInit() char i; BCSCTL1 &= XT2OFF; /打开XT2振荡器 IFG1&=OFIFG; /清除振荡错误标志 while(IFG1&OFIFG)!=0) for(i=0;i0 xff;i+); IFG1&=OFIFG; /清除振荡错误标志 BCSCTL2 |= SELM_2+SELS+

27、DIVS_3; /MCLK为8MHz,SMCLK为1MHz使用示例:这个程序的使用方式和串口程序库的使用方式一样,把C文件加入工程;H文件包含要调用的程序源文件中即可。void main( void ) / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; ClkInit(); LcdInit(); LcdWriteString(0 x90,1 abcd你好啊);这个函数运行后,将在第二行显示 1 abcd你好啊 字符串,如果把1后面的空格去掉,中文部分将是乱码。ClkInit(); 这个函数和前面一

28、个里面调用的一样,把主系统时钟设为8MHz,SMCLK设为1MHz。见附件:实现方法是F149读写外部液晶驱动器实现。关键技术:显示汉字(先用字模软件获取点阵字模,然后将字模的二进制数发送到缓冲区hanzi_zimo.h);cpu初始化(cpu_init.c)液晶显示操作(lcd.c,包括数据发送,写入等)在单片机中Flash存储器用于存放代码,属于只读型存储器。但在全系列MSP430单片机上,可以通过内置的Flash控制器,擦除或改写内部任何一段Flash的内容。MSP430单片机内部还专门留有一段Flash区域(InfoFlash)用于存放需要掉电后永久保存的数据。利用Flash控制器,可

29、以实现较大容量的数据记录、用户设置参数在掉电后的保存、在线更新程序等功能图2.6.1MSP430单片机存储器组织结构冯诺依曼结构,程序存储器和数据存储器统一编址三部分:(1)数据区(2)主Flash区(3)信息Flash区(1)数据区 最低16个存储单元是寄存器区,对应着R0R15共16个寄存器。其中R0R3作为特殊寄存器:R0是PC(程序指针)、R1是SP(堆栈指针)、R2是SR寄存器、R3是常数发生器。R4R15是通用寄存器。包括寄存器与数据变量、堆栈等,都属于RAM主FLASH区作用为存放程序代码空间,中断向量表。在Flash中,将每次能擦除的最小区块单位成为“段”(Segment),将

30、每次能连续写入的最大区块单位称为”块”(Block)。Flash擦除以段为单位进行,插除后存储区全为1;写入以块为单位进行,写入后部分单元1被改写为0,形成有效数据。要写入前必须先擦除,否则会出错。从最高地址向下排列,每段大小512B,因此不同容量430其主Flash起始地址不同。理论上最高容量Flash起始地址为1100(容量59.75KB),事实上可通过存储阵列方式扩展。最高地址向下第0段(FE00-FFFF)为中断向量表位置。信息Flash区 为了提高单字节改写的效率,MSP430单片机中专门开辟了两个较小的段InfoA段(1000H一107FH)和InfoB段(1080-I0FFH)数

31、等少量需要掉电保存的数据。每个段只有128B。改写数据时,擦除前备份全部内容也只需要128B,提高了写入速度。InfoFlash除了每段的字节数比主Flash少之外,使用与主Flash没有任何区别。Flash存储器的读操作与RAM相同,但擦除操作与写操作都需要比较复杂的时序,还需要专门的编程电压发生器的配合,所以无法像RAM一样直接写。图2.6.2Flash控制器的结构图2.6.3Flash控制器内部时钟发生器结构例2.6.1某MSP430单片机系统,ACLK=32.768kHz,MCLK=SMCLK=1.048MHz。为Flash控制器设置时钟。 Flash控制器要求250 -470kHz范

32、围内的时钟源,显然ACLK过低,不能满足要求。而MCLK和SMCLK高于时钟范围,通过合适的分频系数可以得到符合要求范围的时钟当对MCLK或SMCLK进行3分频后,能得到349kHz FCTL2=FWKEY+FSSEL_2+FN1; /SMCLK/3=349kHzFCTL1寄存器负责Flash的擦除以及写入操作。其中擦除操作有3种模式:单段擦除、全部擦除、仅擦除主Flash通过MERAS与ERASE两位的组合来选择 MSP430单片机的Flash控制器也提供了两种写入方式:正常写入和批量写入。在正常写入模式下,每次只能写一字节(Byte,8Bit)或一个字(Word,16Bit),待flash

33、存储单元的电荷注入完毕才能进行下一次写操作,正常写模式下连续写入数据速度较慢。控制器还提供批量写入功能,以解决连续写入数据时的效率问题。在批量写入模式下,写入以块(64B)为单位,每次必须写人64B的整倍数。例2.6.5在某MSP430单片机系统上,编写一段擦除Flash存储器的InfoA段的程序(假设Flash已经设置好)例2.6.6某MSP430单片机系统,读取Flash存储器的InfoA段内的1082H单元内容,存于变量Val内。例2.6.7某MSP430单片机系统,读取Flash存储器的InfoA段内的全部内容,存于数组Array128内。连续数据记录不受断电影响,适合做连续数据记录随

34、机数据存储Flash存储器的寿命问题可保存百年例2. 6. 8用MSP430单片机设计电压记录仪器,每秒采集一次输入电压,将电压的历史记录连续地保存在单片机内部存储器中,为数据连续记录编写函数。MSP430F425单片机共有16KB的主Flash存储空间,假设程序大小为3.9KB(占用8个段),扣除中断向量表所在的第0段,还剩11.5KB从C800H一FCFFH的23段是空余可。的Flash存储空间可供保存数据。集成单元,完成将模拟量转换为数字量MSP430 x42x系列集成16位AD转换MSP430 x14x系列集成12位AD转换操作单片机AD转换模块方法类似分辨率:指A/D转换器所能分辨的

35、最小模拟输入量,通常用A/D的位数表示。如:8位A/D的分辨率为8位,10位A/D的分辨率为10位 转换精度:指实际输入的模拟值与理论输入的模拟值(根据A/D输出推算)之间的偏差。常用数字量最低有效位 LSB 的几分之几表示。(如1/4 LSB,1/2 LSB)转换时间和转换速度:转换时间指完成一次A/D转换所需的时间,从启动信号开始到转换结束,得到稳定数字量的时间。转换速度是转换时间的倒数。2022-4-212022-4-21A/D转换器A/D转换启动信号数字量输出A/D转换完成信号输出使能信号ADC时钟电源数字地参考电源转换启动转换后数据读取程序延时方式 程序查询方式 中断方式3个独立AD

36、C,每个ADC八个输入通道,其中只有A0.0,A1.0,A2.0由引脚从外界输入。步骤:(1)配置时钟及基准源(2)配置输入通道(3)配置Sigma-Delta调制器(4)ADC采样图2.7.1SD16模块的结构框图使用SD16模块之前,首先要配置过采样时钟以及基准源采样时钟频率越高,得到同样分辨率所需的时间越短,这对减少工作时间降低功耗有利。当采样频率过高时可能导致采样电容充电未满导致测量误差。所以一般根据实际情况选择最高的时钟频率例2. 7. 1 MSP430F425单片机的ACLK为32.768kHz,MCLK和SMCLK被配置为4.192MHz,为SD16模块配置500kHz左右的时钟

37、 ACLK太低显然不适合做SD16的时钟,若用MCLK作时钟,则CPU无法休眠,选择SMCLK即可获得指定高频时钟,而且也能让CPU进入LPM0模式。配置基准源基准源是AD转换的标准参比电压,430可选用内部和外部基准,当选用内部基准时,这种内部基准源电压也可以向外设输出。内部基准打开时,会产生额外功耗,因此AD转换结束应予关闭。例2.7.2SD16模块采用内部基准源,并对外提供1.2V基准,外部负载约3左右。例2.7.4某仪器中使用MSP430单片机的SD16模块测量3种量:ADC0采集某压力传感器的输出、ADC1采集电池电压、ADC2采集温度。为SD16配置通道寄存器。例2.7.4某仪器中

38、使用MSP430单片机的SD16模块测量3种量:ADC0采集某压力传感器的输出、ADC1采集电池电压、ADC2采集温度。为SD16配置通道寄存器。当时钟一定时,过采样率越高,采样速度越慢,获得的有效分辨率越高;反之当降低过采徉率时,能够提高采样速度但会损失有效分辨率。采样开始的命令通过SD16SC发出,之后SDl6模块将自动开启相应的Sigma-Delta调制器进行采样。当采样结束时,相应的SD161FG标志将被置1,最后通过读取SD16MEMx寄存器获得采样结果。每次读取SD16MEMx寄存器后SD16IFG标志将会被自动清零,若不读取SDI6MEMx,SD16IFG也可以通过软件清除。例2

39、.7.5用单次模式采集ADC0的电压输入值,存于变量ADCResult0内。假设选择2分频后的SMCLK做时钟,内部基准源,开启基准输出缓冲器。PGA增益=4,过采样率=256,数据格式为有符号二进制格式(双极性)。ADC模块具有编组功能,可实现多路ADC的并行采样。SD16GRP设置。之前ADC,均采用查询方式,比如查询SD16IFG位: while (SD16CCTL0 & SD16IFG)=0);/总是在反复查询SD16IFG是否为1,为1则才能跳出循环,进入到下一步读取ADC数据进程。效率极低。因此,对多任务的控制检测进程而言,合理的应采用中断方式,这样不只提高效率,还可降低功耗(如A

40、D转换过程中关闭CPU)。 3个独立的ADC中,每个ADC采样结束以及超量程都可以引发中断,所以总共有6个事件会引发SD16中断,这6个中断源共用一个中断入口SD16_ VECTOR。 例2. 7. 8编写中断服务程,读取3个ADC的值。存于ADC_Result3数组中并在退出中断后唤醒CPU单端电压测量差分电压测量比值(Ratiometric)测量作为数值输入设备电源检测图2.7.4单端电压测量图2.7.6压力传感器的差分测量图2.7.9用比值法测量电阻值图2.7.10用ADC作为电动机速度输入值利用ADC可以测量出系统自身的电池电压。通过测出的电压值还可以估算出电池的剩余电量、剩余使用时间

41、等参数。MSP430可作笔记本电池模块控制芯片。分辨率和精度是不同概念精度为测量的测量值与真实值之间的误差,分辨率是指能分辨的最小刻度。稳定度是指多次测量的误差分布范围。AD转换误差来源零点误差。增益误差。随机误差。漂移误差。非线性误差。零点误差由于半导体工艺的对称性问题,差分输入级在实际输入0V的时候,输出可能不为0。反映到ADC及测量结果上就是一个固定的偏移量。可通过添加调零电路,或者固定补偿方式来减小误差增益误差基准电压误差、内部PGA增益误差、分压电阻误差都会导致增益误差。这也是最主要的误差来源。可通过记录增益误差值然后进行补偿方法来减小误差随机误差有时受到干扰、电路设计不良、信号源波

42、动都可能造成ADC读数的跳动。通过改善电路、增加屏蔽措施、差分输入、增大信号的滤波常数等措施都能减少随机误差。漂移误差对于零点误差与增益误差来说,即使校准之后,也可能随温度与时间漂移。可以通过选用更低温度系数指标的元器件来降低温度漂移误差。非线性误差理论上ADC的读数与输入电压之间的关系应该是线性的。但实际中因各种非理想因素,如半导体特性在不同电压下特性不一致、信号调理电路元器件存在非线性、被测的传感器输出与测量物理量之间存在非线性等,都可能导致非线性误差。可通过分段校准和曲线拟合方式减小误差。SD16模块中任何一个部件的功耗都是较大的。若将ADC相关的部件一直开启,总功耗可能达到毫安级。只需

43、数天时间即可将一节200mAh容量的纽扣电池耗尽。所以ADC采样部分必须间歇性工作。同时还需结合实际需要,考虑AD转换的采样频率问题。例2.7.12以图2.7.11的电压测量系统为例,若对输入信号连续地采集,基准源、ADC、CPU这3个部分的功耗至少900A。假设电压采集的结果显示在LCD上供用户查看。连续的采集反而导致显示数字快速变化,看不清楚。采样速度降到采样2次到3次每秒已经足够,且能够明显地降低功耗。让CPU休眠在LPM3模式,用BasicTimer每1/2s唤醒CPU进行采样及处理工作。在采样前才打开基准源,采样后及时关闭基准源例2.7.13以压力测量系统为例(见图2.7.6),一般

44、的压力桥传感器内阻约1k左右,3V供电时耗电约3mA左右。若不对其电源进行控制,传感器的功耗将远大于单片机系统的功耗。3天即可耗尽一节200mAh的纽扣电池。降低功耗的方法是将压力桥的激励电源从VCC改为P2.2口,通过控制P2.2口的电平高低即可控制传感器的电源间歇性开启(见图2.7.12)。图2.7.12用I/O口作为电源控制NADC=4095VinVR-VR+VR-NADC=4095,当VinVR+ NADC=0, 当VinVR-VR-,VR+可由编程进行选择。(见结构逻辑图)如:据图设置VREFON,REF2_5V,SREF0,SREF1可设置VR+,SREF2得VR-。 寄存器类型寄

45、存器缩写寄存器的含义转换控制寄存器ADC12CTL0转换控制寄存器0ADC12CTL1转换控制寄存器1中 断控制寄存器ADC12IFG中断标志寄存器ADC12IE中断使能寄存器ADC12IV中断向量寄存器存 储及其控制寄存器ADC12MCTL0 ADC12MCTL15存储控制寄存器015ADC12MEM0 ADC12MEM15存储寄存器015转换控制寄存器 ADC12CTL0、ADC12CTL1ADC12CTL1 寄存器中断控制寄存器:ADC12IFG 、ADC12IE 、ADC12IV选择A0为输入AD口,需设定为第二功能,输入。程序:初始化ADC12void Init_ADC(void)

46、P6DIR |=0 xfe; /使用A/D通道A0,初始化为输入,其余为输出(低功耗) P6SEL |=0 x01; /打开第二功能 ADC12CTL0 = ADC12ON /开ADC12内核,设SHT0=2 (N=4) ADC12CTL1 = SHP /SAMPCON信号选为采样定时器输出 /ADC12内部参考电压设置 ADC12CTL0 |= REF2_5V; /选用内部参考电压为2.5V ADC12CTL0 |= REFON; /内部参考电压打开 ADC12MCTL0 |= SREF_1; /R+=2.5V R-=VSS /转换允许 ADC12CTL0 |= ENC /转换允许(上升沿)

47、 读数据Void Read_ADC(unsigned int ADC0) /开始AD转换,AD转换完成后(ADC12BUSY=0),ADC12SC自动复位; ADC12CTL0 |= ADC12SC; while(ADC12IFG & ADC12BUSY) = 0); /等待转换结束 ADC0 = ADC12MEM0;/读转换数据值,同时清ADC12IFG0标志主程序int main( void ) int ADC0; / Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; Init_ADC(); Re

48、ad_ADC(ADC0); return 0; 在全系列的MSP430单片机中,都带有一个16位定时器Timer_ A以下简称TA,用于精确定时、计时或计数。此外,还包括3路(某些型号5路)捕获/比较模块,能够在无需CPU干预的情况下自动根据触发条件捕获定时器计数值,或自动产生各种输出波形( PWM调制、单稳态脉冲等) Timer_ A定时器分为两个部分:主计数器和比较/捕获模块。主计数器负责定时、计时或计数。(类似于BASIC TIMER)计数值(TAR寄存器的值)被送到各个比较/捕获模块中,它们可以在不需CPU干预的情况下根据触发条件与计数器值自动完成某些测量和输出功能。图2.8.1主计数

49、器部分结构控制字 Timer_A计数器提供了3种计数模式:增计数、连续增计数和增减计数。在增模式下每个时钟周期计数值TAR加1,当TAR值超过TACCRO寄存器(捕获/比较模块的设置值)时自动清零。同时会将Timer_A溢出标志位TAIFG置1。如果TA中断被允许。还会引发中断。改变TACCRO寄存器值可以改变定时周期,非常适合产生周期固定的定时中断。连续模式和增模式类似,可看作增模式的特例。即TACCR0=0 xFFFF。达到自动清零,如有中断就引发中断。一般用于利用捕获事件记录事件发生时间。增减模式:增减模式相当于另一种特殊增模式,当TAR加1计数达到TACCR0值时,TAR变为减1,达到

50、0时产生中断。一般用于产生正反计数脉冲,用于PWM控制。例2.8.1在MSP430单片机中,为Timer_A配置时钟源及工作模式,使Timer_A在无需CPU干预的情况下,每隔1.3125s溢出一次(假设SMCLK=MCLK=1.048576MHz,ACLK=32.768kHz)。32768*1.3125=43008; 除主计数器之外,Timer_A还带有3个(某些型号有5个)捕获/比较模块。每个捕获/比较模块都有单独的模式控制寄存器以及捕获/比较值寄存器。在比较模式(也叫输出模式)下,每个捕获/比较模块将不断地将自身的比较值寄存器与主计数器的计数值进行比较,一旦相等,就将自动地改变某个指定管

51、脚(TAx管脚)的输出电平。有8种改变电平的规律可以选择(8种输出模式),从而能在无需CPU干预的情况下输出PWM调制、可变单稳态脉冲、移相方波、相位调制等常用波形在捕获模式下,用某个指定管脚(TAx管脚)的输入电平跳变触发捕获电路,将此刻主计数器的计数值自动保存到相应的捕获值寄存器中。该过程纯硬件实现,无需CPU干预,不存在中断响应等时间延迟。可以用于测频率、测周期、测脉宽、测占空比、门控计数等需要获得波形中精确时间量的场合。例2.8.3在MSP430F42x单片机中,捕获3路信号。要求其中从P1.0输入的方波上升沿出发捕获逻辑,P1.2输入方波下降沿触发捕获,P2.0输入方波上下沿都触发捕

52、获。假设主计数器用ACLK作为时钟,连续计数模式,为TimerA及3个捕获模块配置寄存器:比较模式下,通过比较器TACCRx与主计数器的计数值进行比较,两者相等时产生EQU信号,该信号触发输出逻辑,通过OUTMODEx控制位可以配置输出逻辑,通过不同的输出逻辑配置合来产生各种输出波形。例2.8.4在MSP430F42x单片机中,利用输出模式0,通过软件将TA2管脚(P2.0)置高或置低:例2.8.6在MSP430F42x单片机中,P1.2口(TA1)与P2.0口(TA2)通过晶体管控制两只灯泡的亮度。要求从P1.2(TA1)管脚输出占空比75%的PWM调制波形,从P2.0(TA2)管脚输出占空

53、比50%的PWM调制波形,频率约为100Hz。例2.8.8用MSP430F42x单片机驱动图2.8.7所示的逆变电路,要求输出交流电频率400Hz左右,正负半周各占50%时间,死区时间2s左右。假设SMCLK=1.048576MHz。例2.8.11如图2.8.10c所示,在MSP430F42x单片机中,通过P1.0(TA0)输出管脚驱动一只红外发射管,发出38kHz调制的红外线。假设SMCLK=4.194304MHz。Timer_A定时器的下列4种事件均能产生中断:主计数值计满(或计至TACCR0)后复位,TAIFG标志被置1。捕获通道0发生捕获事件,或主计数值TAR计至TACCR0(计数值从TACCR0-1跳至TACCR0的时刻),TACCTL0寄存器内的CCIFG标志被置1。捕获通道1发生捕获事件,或主计数值TAR计至TACCR1(计数值从TACCR1-1跳至TACCR1的时刻),TACCTL1寄存器内的CCIFG标志被置1。捕获通道2发生捕获事件,或主计数值TAR计至TACCR2(计数值从TACCR2-1跳至TACCR2的时刻),TACCTL2寄存器内的CCIFG标志被置1。这4种事件占用了两个中断源,其中,事件2(计至TACCRO或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论