嵌入式 电压采集系统_第1页
嵌入式 电压采集系统_第2页
嵌入式 电压采集系统_第3页
嵌入式 电压采集系统_第4页
嵌入式 电压采集系统_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、摘要针对传统的有线方式检测、采集、传输中节点分散需要大量布线等问题,本文介绍了一种基于CC2530和数字压力传感器的电压数据采集系统。首先介绍了CC2530 结构及实现原理以及所使用电压传感器模块结构和原理,然后在了解它们的基础上找出相应的采集数据以及传输数据的所需的软件,串口通信及AD转换的原理和其实现方法,最后通过给出总的电压采集的程序流程图以及软件子系统设计系统框图和以上实验设备完成基于CC2530和数字压力传感器的电压数据采集系统。 关键词: 电压采集,嵌入式,CC2530,AD转换,串口通信14目录一、前言1二、基本原理22.1 CC2530 结构及实现原理22.2 电压传感器结构及

2、实现原理42.3 软件方面5(1)串口通信5(2)AD转换6三、系统分析93.1 程序流程图93.2 软件子系统设计9四、代码清单104.1 核心代码104.2 AD转换代码11总结14参考文献15一、前言嵌入式系统是以应用为中心,以计算机技术为基础,软硬件可定制,适用于不同应用场合,对功能,可靠性,成本,体积,功耗有严格要求的专用计算机系统1。随着生活水平的提高和科学技术发展的需求,人类对环境信息的感知上有了更高的要求,在某些特殊工业生产领域和室内存储场合对环境要求显得特别苛刻;随着嵌入式技术的发展,为环境检测提供了更进一步的保障。基于嵌入式的环境信息采集系统包含感知层、传输层、应用层三个层

3、面;传输层常见的有温湿度、烟感、电压、压力等嵌入式传感器模块,传输层包括有线通信和无线通信两部分,应用层包括各种终端。电压是推动电荷定向移动形成电流的原因。电流之所以能够在导线中流动,也是因为在电流中有着高电势和低电势之间的差别。这种差别叫电势差,也叫电压。换句话说,在电路中,任意两点之间的电位差称为这两点的电压。在很多应用场合,电压是一个很重要的一个参数。电压的自动监测已经成为各行业进行安全生产和减少损失的重要措施之一。本课程设计就对嵌入式电压数据采集系统进行详细分析和设计。二、基本原理2.1 CC2530 结构及实现原理 CC2530 是基于2.4-GHz IEEE802.15.4、Zig

4、Bee 和RF4CE 上的一个片上系统解决方案。其特点是以极低的总材料成本建立较为强大的网络节点。CC2530 芯片结合了RF 收发器,增强型8051 CPU,系统内可编程闪存,8-KB RAM 和许多其他模块的强大的功能。如今CC2530 主要有四种不同的闪存版本:CC2530F32/64/128/256,分别具有32/64/128/256KB 的闪存。其具有多种运行模式,使得它能满足超低功耗系统的要求。同时CC2530运行模式之间的转换时间很短,使其进一步降低能源消耗。 CC2530包括了1个高性能的2.4 GHz DSSS(直接序列扩频)射频收发器核心和1个8051控制器,它具有32/6

5、4/128 kB可选择的编程闪存和8 kB的RAM,还包括ADC、定时器、睡眠模式定时器、上电复位电路、掉电检测电路和21个可编程I/O引脚,这样很容易实现通信模块的小型化。CC2530是一款功耗相当低的单片机,功耗模式3下电流消耗仅0.2A,在32 k晶体时钟下运行,电流消耗小于1A。CC2530芯片使用直接正交上变频发送数据。基带信号的同相分量和正交分量由DAC转换成模拟信号,经过低通滤波,变频到所设定的信道上。当需要发送数据时,先将要发送的数据写入128B的发送缓存中,包头是通过硬件产生的。最后经过低通滤波器和上变频的混频后,将射频信号被调制到2.4GHz,后经天线发送出去。CC2530

6、有两个端口分别为TX/RX,RF端口不需要外部的收发开关,芯片内部已集成了收发开关。CC2530的存储器ST-M25PE16是4线的SPI通信模式的FLASH,可以整块擦除,最大可以存储2M个字节。工作电压为2.7v到3.6v。CC2530温度传感器模块反向F型天线采用TI公司公布的2.4GHz倒F型天线设计。天线的最大增益为3.3dB,天线面积为25.77.5mm。该天线完全能够满足CC2530工作频段的要求(CC2530工作频段为2.400GHz2.480GHz)。 图1.CC2530芯片引脚CC2530芯片引脚功能AVDD1 28 电源(模拟) 2-V3.6-V 模拟电源连接AVDD2

7、27 电源(模拟) 2-V3.6-V 模拟电源连接AVDD3 24 电源(模拟) 2-V3.6-V 模拟电源连接AVDD4 29 电源(模拟) 2-V3.6-V 模拟电源连接AVDD5 21 电源(模拟) 2-V3.6-V 模拟电源连接AVDD6 31 电源(模拟) 2-V3.6-V 模拟电源连接DCOUPL 40 电源(数字) 1.8V 数字电源去耦。不使用外部电路供应。DVDD1 39 电源(数字) 2-V3.6-V 数字电源连接DVDD2 10 电源(数字) 2-V3.6-V 数字电源连接GND - 接地 接地衬垫必须连接到一个坚固的接地面。GND 1,2,3,4 未使用的连接到GNDP

8、0_0 19 数字I/O 端口0.0P0_1 18 数字I/O 端口0.1P0_2 17 数字I/O 端口0.2P0_3 16 数字I/O 端口0.3P0_4 15 数字I/O 端口0.4P0_5 14 数字I/O 端口0.5P0_6 13 数字I/O 端口0.6P0_7 12 数字I/O 端口0.7P1_0 11 数字I/O 端口1.0-20-mA 驱动能力P1_1 9 数字I/O 端口1.1-20-mA 驱动能力P1_2 8 数字I/O 端口1.2P1_3 7 数字I/O 端口1.3P1_4 6 数字I/O 端口1.4P1_5 5 数字I/O 端口1.5P1_6 38 数字I/O 端口1.

9、6P1_7 37 数字I/O 端口1.7P2_0 36 数字I/O 端口2.0P2_1 35 数字I/O 端口2.1P2_2 34 数字I/O 端口2.2P2_3 33 数字I/O 模拟端口2.3/32.768 kHz XOSCP2_4 32 数字I/O 模拟端口2.4/32.768 kHz XOSCRBIAS 30 模拟I/O 参考电流的外部精密偏置电阻RESET_N 20 数字输入 复位,活动到低电平RF_N 26 RF I/O RX 期间负RF 输入信号到LNARF_P 25 RF I/O RX 期间正RF 输入信号到LNAXOSC_Q1 22 模拟I/O 32-MHz 晶振引脚1或外部

10、时钟输入XOSC_Q2 23 模拟I/O 32-MHz 晶振引脚22.2 电压传感器结构及实现原理电压输入使用大于 1M的等效输入阻抗的输入取样,将输入电压进行 15 倍衰减,然后使用差分单端运放,将其变换到 03V 的范围,经电压二次缓冲后送到 AD 采集输入端。 其电路原理图,如下图 2.10 所示:使用 1012bit 的 AD 采集器,一次采样使用 2 字节描述,MSB 方式,电压传感器模块输出数据结构请参见“电流传感器模块上传数据定义”。2.3 软件方面(1)串口通信1、串行数据(DATA) DATA三态门用于数据的读取。DATA在SCK时钟下降沿之后改变状态,并仅在SCK时钟上升沿

11、有效。数据传输期间,在SCK时钟高电平时,DATA必须保持稳定。为避免信号冲突,微处理器应驱动DATA在低电平。需要一个外部的上拉电阻(例如:10k)将信号提拉至高电平。上拉电阻通常已包含在微处理器的I/O 电路中。2、串行时钟输入(SCK) SCK用于微处理器与电压传感器之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小SCK频率。3、测量时序(RH 和T) 发布一组测量命令(00000101表示电压值)后,控制器要等待测量结束。这个过程需要大约11/55/210ms,分别对应8/12/14bit测量。确切的时间随内部晶振速度,最多有15%变化。电压传感器通过下拉DATA至低电平并进

12、入空闲模式,表示测量的结束。控制器在再次触发SCK时钟前,必须等待这个“数据备妥”信号来读出数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。接着传输2个字节的测量数据和1个字节的CRC奇偶校验。uC需要通过下拉DATA为低电平,以确认每个字节。所有的数据从MSB开始,右值有效(例如:对于12bit数据,从第5个SCK时钟起算作MSB;而对于8bit 数据,首字节则无意义)。用CRC数据的确认位,表明通讯结束。如果不使用CRC-8校验,控制器可以在测量值LSB后,通过保持确认位ack 高电平,来中止通讯。在测量和通讯结束后,电压传感器自动转入休眠模式。4、通讯复位时

13、序如果与电压传感器通讯中断,下列信号时序可以复位串口:当DATA保持高电平时,触发SCK时钟9次或更多。在下一次指令前,发送一个“传输启动”时序。这些时序只复位串口,状态寄存器内容仍然保留。图4通讯复位时序图(2)AD转换CC2530 内部包含一个 ADC,它支持最高达 12 位的模拟到数字的转换。该 ADC 包含一个模拟多路复用器支持最高达 8 路的独立可配置通道、参考电压产生器,转换结果通过 DMA被写入存储器。支持多种运行模式。 1、ADC 输入P0 端口引脚上的信号可被用来作为 ADC 输入。在以下的描述中,我们将这些引脚记为AIN0-AIN7 引脚。输入引脚 AIN0-AIN7 被连

14、接到 ADC。ADC 可被设置为自动执行一个转换序列,当该序列被完成时可随意地从任一通道执行一个附加的转换。输入可被配置为单端或差分输入。当使用差分输入时,差分输入由输入组 AIN0-1、AIN2-3、AIN3-4、AIN4-5 和 AIN6-7 组成。注意:负电压不能被连接到这些引脚,大于 VDD的电压也不能被连接到这些引脚。 除了输入引脚 AIN0-AIN7 外,一个片上温度传感器的输出可被选择作为 ADC 的一个输入用来进行温度测量。还可以选择相当于 AVDD_SOC/3 的电压作为 ADC 的一个输入。2、ADC 转换序列 ADC 可执行一个转换序列并将结果传送到存储器(通过 DMA)

15、而不需要与 CPU 进行任何互操作。转换序列可被 ADCCFG 寄存器影响,因为来自于 IO 引脚的 ADC 的 8 个模拟输入不必全部被编程作为模拟输入。如果一个通道作为一个序列的一部分,但相应的模拟输入在 ADCCFG中被禁止,那么该通道将被跳过。对于通道 8 到 12,输入引脚必须被使能。 ADCCON2.SCH 寄存器位被用来定义一个来自 ADC 输入的ADC 转换序列。当 ADCCON2.SCH被设置为小于 8 的值时,一个转换序列将包含从 0 到该值的所有通道。 单端输入 AIN0 到 AIN7 由 ADCCON2.SCH 中的通道号 0 到 7 来表示。通道号 8 到 11 分别

16、表示差分输入 AIN0-1、AIN2-3、AIN4-5 和 AIN6-7。通道号 12 到 15 分别表示 GND、内部参考电压、温度传感器和 AVDD_SOC/3。 当 ADCCON2.SCH 被设置为一个 8 到 12 之间的值时,转换序列将从通道 8 开始。对于更高的设置值,只进行单一的转换。 3、ADC 运行模式 ADC 有 3 个控制寄存器:ADCCON1、ADCCON2 和 ADCCON3。这些寄存器被用来配置 ADC 和报告状态。 ADCCON1.EOC 位是一个状态位,当一个转换结束时该位被设置为高,当 ADCH 被读取时该位被清零。 ADCCON1.ST 位被用来开始一个转换

17、序列。当该位被设置为高、ADCCON1.STSEL 为 11 并且当前没有转换在运行时,一个转换序列将开始。当该转换序列被完成时该位被自动清零。 ADCCON1.STSEL 位被用来选择哪一个事件将开始一个新的转换序列。 4、ADC 转换结果 数字转换结果由二进制补码形式表示。对于单端输入,结果将总为正的。当输入振幅等于 VREF(选定的参考电压)时转换结果将达到最大值。对于差分输入,两引脚之间的差值被转换,该值可以是负的。对于 12 位分辨率,当模拟输入等于 VREF 时数字转换结果为 2047;当模拟输入等于-VREF 时数字转换结果为-2048。 当 ADCCON1.EOC 被设置为 1

18、 时,数字转换结果可从 ADCH 和 ADCL 中得到。 当 ADCCON2.SCH 位被读取时,读取值将指示通道号,在 ADCH 和 ADCL 中的转换结果是该通道之前的那个通道的转换结果。 5、ADC 参考电压 模/数转换的正参考电压是可选择的。内部产生的 1.25V 电压、AVDD_SOC 引脚上的电压、连接到 AIN7 引脚上的外部电压或连接到 AIN6-7 输入的差分电压都可以作为正参考电压。 为了进行校准,可以选择参考电压作为 ADC 的输入进行参考电压的转换。类似的,可以选择 GND 作为 ADC 的输入。 6、ADC 转换时间 当在 32MHz 系统时钟下,该时钟被 8 分频后

19、产生一个 4MHz 的时钟供 ADC 运行。三角积分调变器和抽取滤波器都是用 4MHz 时钟进行计算。使用其他的频率将会影响结果和转换时间。以下描述我们假设使用 32MHz 系统时钟。 执行一次转换所需要的时间取决于所选择的抽取率。例如,当抽取率被设置为 128 时,抽取滤波器使用 128 个 4MHz 时钟周期来计算结果。当一个转换开始后,输入多路复用器需要 16 个 4MHz 时钟周期来稳定。16 个 4MHz 时钟周期的稳定时间适用于所有抽取率。因此一般而言,转换时间由下式给定:Tconv = (抽取率 +16) 0.25us。 7、ADC 中断 当一个附加转换完成时 ADC 将产生一个

20、中断。当来自转换序列的一个转换完成时将不会产生中断。 8、ADC DMA 触发 当来自一个转换序列的每一个转换完成时 ADC 将产生一个 DMA 触发。当一个附加转换完成时不产生 DMA 触发。首次在 ADCCON2.SCH 中定义的 8 个通道的每一个都有一个 DMA 触发。当一个新的采样就绪时 DMA 触发被激活。另外,还有一个 DMA 触发 ADC_CHALL,当 ADC 转换序列中的任何通道有新数据就绪时该触发被激活。三、系统分析3.1 程序流程图开始系统时钟初始化读取电压数据显示电压数据LCD初始化图5 软件流程图3.2 软件子系统设计 为了能够进行系统初始化采用一个汇编文件做肩动代

21、码,用它实现向量表的定义、堆栈初始化、系统变量初始化、中断系统初始化、IO初始化、外同初始化、地址重映射等操作。系统的初始化流程如图所示。图6 系统的初始化流程 给智能主板供电(USB外接电源或2节干电池)。将一个无线节点模块插入到带LCD的智能主板的相应位置。将电压传感器模块插入到智能主板的传感及控制扩展口位置。将CC2530仿真器的一端通过USB线(A型转B型)连接到 PC 机,另一端通过10Pin下载线连接到智能主板的CC2530 JTAG口(J203)。将智能主板上电源开关拨至开位置。按下仿真器上的按钮,仿真器上的指示灯为绿色时,表示连接成功。四、代码清单4.1 核心代码void ma

22、in() int voltage; char s16;UINT8 adc0_value2; float num = 0; SET_MAIN_CLOCK_SOURCE(CRYSTAL); / 设置系统时钟源为 32MHz 晶体振荡器 GUI_Init(); / GUI 初始化 GUI_SetColor(1,0); / 显示色为亮点,背景色为暗点 GUI_PutString5_7(25,6,OURS-CC2530); /显示 OURS-CC2530GUI_PutString5_7(10,22,voltage:); LCM_Refresh(); while(1) th_read(&voltage);

23、 /读取电压 sprintf(s, (char*)%d%d C, (INT16)(int) voltage / 10), (INT16)(int) voltage % 10); /将电压结果转换为字符串 GUI_PutString5_7(48,22,(char *)s); /显示结果 LCM_Refresh(); ADC_ENABLE_CHANNEL(ADC_AIN0); / 使能 AIN0 为 ADC 输入通道 /* 配置 ADCCON3 寄存器以便在 ADCCON1.STSEL = 11(复位默认值)且 ADCCON1.ST = 1 时进行单一转换 */ /* 参考电压:AVDD_SOC

24、引脚上的电压 */ /* 抽取率:512 */ /* ADC 输入通道:AIN0 */ ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_14_BIT | ADC_AIN0); ADC_SAMPLE_SINGLE(); / 启动一个单一转换 while(!ADC_SAMPLE_READY(); / 等待转换完成ADC_ENABLE_CHANNEL(ADC_AIN0); / 禁止 AIN0adc0_value0 = ADCL; / 读取 ADC 值adc0_value1 = ADCH; / 读取 ADC 值adc0_value0 = adc0_value02;nu

25、m = (adc0_value1*256+adc0_value0)*3.3/8192; /有一位符号位,取213; num /= 4; num=num*913; /转换为 Lx 4.2 AD转换代码void main(void) INT8 adc0_value; UINT8 pot0Voltage = 0; INT8 adc1_value; UINT8 pot1Voltage = 0; char s16;SET_MAIN_CLOCK_SOURCE(CRYSTAL); / 设置系统时钟源为32MHz 晶体振荡器 GUI_Init(); / GUI 初始化 GUI_SetColor(1,0); /

26、 显示色为亮点,背景色为暗点 GUI_PutString5_7(25,6,OURS-CC2530); /显示 OURS-CC2530 GUI_PutString5_7(42,22,ADC LIB); GUI_PutString5_7(10,35,adc0_value); GUI_PutString5_7(10,48,adc1_value); LCM_Refresh(); while(1) /* AIN0 通道采样 */ ADC_ENABLE_CHANNEL(ADC_AIN0); / 使能 AIN0 为 ADC 输入通道 /* 配置 ADCCON3 寄存器以便在 ADCCON1.STSEL =

27、11(复位默认值)且 ADCCON1.ST = 1时进行单一转换 */ /* 参考电压:AVDD_SOC 引脚上的电压 */ /* 抽取率:64 */ /* ADC 输入通道:AIN0 */ ADC_SINGLE_CONVERSION(ADC_REF_AVDD | ADC_8_BIT | ADC_AIN0);ADC_SAMPLE_SINGLE(); / 启动一个单一转换 while(!ADC_SAMPLE_READY(); / 等待转换完成 ADC_ENABLE_CHANNEL(ADC_AIN0); / 禁止 AIN0 adc0_value = ADCH; / 读取 ADC 值 /* 根据新计

28、算出的电压值是否与之前的电压值相等来决定是否更新显示 */ if(pot0Voltage != scaleValue(adc0_value) pot0Voltage = scaleValue(adc0_value); sprintf(s, (char*)%d.%d V, (INT16)(pot0Voltage / 10), (INT16)(pot0Voltage % 10); GUI_PutString5_7(72,35,(char *)s); LCM_Refresh(); halWait(100); /* AIN1 通道采样 */ ADC_ENABLE_CHANNEL(ADC_AIN1); / 使能 AIN1 为 ADC输入通道 /* 配置 ADCCON3 寄存器以便在 ADCCON1.STSEL = 11(复位默认值)且 ADCCON1.ST = 1时进

温馨提示

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

评论

0/150

提交评论