基于C8051F064数据采集的程序设计
2010-01-15秦伟
秦伟
(陕西理工学院 电信工程系,陕西 汉中 723003)
在某工程项目中需要对应变片信号采集,传统的由单片机、A/D转换器组成的数据采集系统使用的器件较多,系统复杂,成本高,系统开发时间比较长。C8051F06x系列单片机内部集成A/D转换器,能大大降低系统开发时间和成本。
1 C8051F064特点
C8051F064器件是完全集成的混合信号片上系统型MCU,片内集成硬件资源有:两个16位、1Msps的ADC,两个12位DAC,具有可编程数据更新方式,控制器局域网(CAN2.0B)控制器,64KB或32KB可在系统编程的FLASH存储器,4352(4K+256)字节的片内RAM,可寻址64KB地址空间的外部数据存储器接口,5个通用的16位定时器,6个捕捉/比较模块的可编程计数器/定时器阵列,硬件实现的SPI、SMBus/IC和两个UART串行接口,片内看门狗定时器、VDD监视器和温度传感器。工作电压为2.7~3.6V。端口I/O、/RST和JTAG引脚都容许5V的输入信号电压。
2 C8051F064内部ADC介绍及工作方式设置
C8051F064的ADC子系统包括两个1Msps、16位分辨率的逐次逼近寄存器型ADC,ADC中集成了跟踪保持电路、可编程窗口检测器和DMA接口。这两个ADC可以被配置为两个独立的单端方式ADC或组成一个差分对。数据转换方式、窗口检测器和DMA接口都可用软件通过特殊功能寄存器来控制。这两个ADC及相应的跟踪保持电路可以被独立使能或禁止(用特殊功能寄存器)。ADC控制寄存器(ADCnCN)中的ADnEN位被置为逻辑1时ADCn被使能。当ADnEN位为逻辑0时,ADCn处于低功耗关断方式。
2.1 ADC使用的电压基设置
ADC0和ADC1的电压基准电路允许使用多种不同的电压基准配置。每个ADC都可以使用其专用的内部电压基准或外部基准。每个ADC的内部电压基准电路由一个温度稳定性好的1.2V带隙电压基准发生器和一个两倍增益的输出缓冲放大器组成。VREFn(VREF0和VREF1)引脚对AGND的最大负载必须小于100μA。实际电路中在VREFn引脚与VRGNDn之间接入0.1μF和47μF的旁路电容。
本设计选着内部电压基准,每个ADC的电压基准电路由相应的基准控制寄存器控制。REF0CN是ADC0的基准控制寄存器,REF1CN是ADC1的基准控制寄存器。REFnCN寄存器用于独立地使能/禁止每个ADC的内部基准和偏置发生器电路。BIASEn位使能每个ADC的内部偏置发生器,而REFBEn位使能驱动VREFn引脚的2倍增益缓冲放大器。当被禁止时,带隙基准和缓冲放大器消耗的电流小于1μA(典型值),缓冲放大器的输出进入高阻状态(约25KΩ)。如果ADC使用内部电压基准,则ADC所对应的BIASEn和REFBEn位必须都被置‘1’。根据上述要求设置REF0CN为“00000011”,REF1CN为“00000011”,故系统ADC电压基准初始化程序代码如下:
void Voltage_Reference_Init(){ unint i;char old_SFRPAGE=SFRPAGE;SFRPAGE=ADC0_PAGE; //转换到ADC0页REF0CN =0x03;//ADC0使用内部电压基准for(i=0;i<1000;i++); //延时,等待VREF平稳SFRPAGE=ADC1_PAGE; //转换到ADC1页
REF1CN=0x03;//ADC1使用内部电压基准for(i=0;i<1000;i++);//延时,等待VREF平稳SFRPAGE=old_SFRPAGE;//重置SFRPAGE }
2.2 ADC寄存器工作方式设置
ADC0和ADC1可以独立地工作于单端方式或两者组合工作在差分方式。在单端方式,两个ADC可以被配置为同时采样,或分别使用不同的转换速度。在差分方式,ADC1从属于ADC0,其配置由ADC0的配置决定,仅在偏移和增益校准时例外。通道选择寄存器AMX0SL中的DIFFSEL位为“0”用于选择ADC工作在单端方式,DIFFSEL位为“1”选择ADC工作在差分方式。此次设计采用单端方式工作故DIFFSEL位为“0”
3 ADC控制寄存器数据采集设置
图1 ADC0数据采集流程图
ADC0有4种转换启动方式,由ADC0CN中的ADC0启动转换方式位(AD0CM1,AD0CM0)的状态决定。ADC1有5种转换启动方式,由ADC1CN中的ADC1启动转换方式位(AD1CM2~AD1CM0)的状态决定。
本设计中均采用向ADCnCN的ADnBUSY位写1的方式启动转换,ADnBUSY位在转换期间被置‘1’,转换结束后复‘0’。ADnBUSY位的下降沿触发中断(当被允许时)并将中断标志ADnINT(ADCnCN.5)置‘1’。在单端方式,ADCn的转换数据被保存在ADCn数据字的MSB和LSB寄存器:ADCnH和ADCnL中。当通过向ADnBUSY写‘1’启动数据转换时,应查询ADnINT位以确定转换何时结束(也可以使用ADCn中断)。查询步骤如下:①写‘0’到ADnINT;②向ADnBUSY写‘1’;③查询并等待ADnINT变‘1’;④处理ADCn数据。根据以上配置规则,ADC0数据采集流程图如图1所示,ADC1与ADC0工作方式方式相同故不再叙述。
4 结语
基于C8051F064的数据采集系统的程序设计简洁、高效。将该数据采集系统应用于应变片信号采集,降低了硬件设计难度,提高系统的可靠性和电气性能指标。
[1]潘琢金,孙德龙,夏秀峰,译.C8051F单片机应用解析[M].北京:北京航空航天大学出版社,2002.
[2]何立民.MCS-51系列单片机应用系统设计[M].北京:北京航天大学出版社,2005.