ADC模块的硬件模块化设计平均次数是什么意思

单片机中 ADC 是如何进行采集的?
单片机中 ADC 是如何进行采集的?
08-12-31 &
摘 要:本文设计并实现了基于2.4GHz ISM频段射频收发芯片nRF2401的计算机短距离无线数据采集系统。该系统采用PC作为系统控制中心,以C单片机为核心构成数据采集传送的前端,并且采用nRF2401芯片进行数据无线发射与接收。 关键词:ISM频段; 射频; C单片机; nRF2401 引言 针对某医疗装置中的人体生理信号采集和传输问题,本文设计了计算机近距离无线数据采集系统。采用Nodic公司的nRF2401作为无线收发核心器件。系统由一台PC、无线数据接收模块和无线数据采集发射模块组成。无线数据发射模块以C单片机为处理核心,采用单片机内部的12位ADC对现场的模拟信号进行采集和发送;无线数据接收模块以C单片机作为处理核心,接收与发射模块由nRF2401无线收发芯片完成,采用MAX5591实现12位D/A转换,采用 RS-485总线与PC进行通信,它负责现场数据的接收和初步处理,并转发给PC以供显示和监控,同时将数字量转换为模拟量,供示波器显示;PC有良好的人机界面,利用NI的虚拟示波器显示远端现场采集的数据,并可以向现场的采集模块发送控制命令,同时可以实现保存采集数据、打印、回放历史数据等功能。 系统分析及设计 计算机短距离无线数据采集系统组成如图1所示。 图 1 系统组成框图 系统分析及硬件设计 由于现场要采集的数据为医学人体实验数据,幅值大约在-1.0V~+1.0V之间,频率为300Hz,要求测量误差低于10mV,C自带的12位ADC在精度上可以满足要求;但是单片机中的ADC要求输入为正电压,同时考虑到转换精度要求,故需要对信号进行转换,将原信号转换为幅值在0~3V、频率300Hz左右的信号。可以利用MAX4194组成信号转换电路,将模拟信号的零参考电平抬升到1.0V。这样,原先-1.0V~0V之间的电压信号转换为0~1.0V之间的电压,而原先0V~1.0V之间的电压转换为1.0V~2.0V之间的电压。这样就完成了原始信号的转换,适应了单片机的输入要求。单片机A/D转换参考电压选择外部3.3V,由MAX6013提供。 考虑到无线数据的发送与接收特点,故选用Nordic 公司的nRF2401芯片。nRF2401是单片射频收发芯片,工作于2.4GHz~2.5GHz ISM频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。芯片功耗非常低,以-5dBm的功率发射时,工作电流只有10.5mA,接收时工作电流只有18mA。其独有的DuoCeiver技术使nRF2401可以使用同一天线,同时接收两个不同频道的数据。nRF2401使用跳频技术,在2400MHz~2527MHz之间设立了128个频道(每个频道带宽1MHz),频道间的切换时间小于200ms。此外,nRF2401内置CRC编解码模块,可以在不增加编程难度的条件下减小误码率。 无线数据接收后,要进行D/A转换,供示波器观看;考虑到数据的采集精度要求,故采用了 MAX5591作为转换器件,一方面可以方便地与C单片机SPI接口连接,另一方面,它是12位DAC,与采集端的ADC匹配,可减小转换误差。 无线数据接收到终端后,要求能直观地观看,并且可以对现场的数据采集次数、采集启停时间进行控制,故需要将数据传到PC,进行显示;同时,通过人机界面,对现场进行远程控制。PC采用VC++编写程序,利用NI 的虚拟示波器和其它控件实现友好的人机界面,数据显示、存储和打印功能。 系统中的主要软件模块 系统软件主要由上位机软件和下位机软件组成。 上位机软件主要实现与单片机通信、波形显示、数据存储、数据回放、打印等功能。下位机的主要功能有:系统初始化、数据采集(A/D转换)、无线数据发射、无线数据接收、数据D/A转换、与PC串口通信等。下面重点介绍下位机的无线发射与接收部分软件。 无线数据收发主要通过对nRF2401进行操作实现,包括器件配置、发送数据、接收数据等。nRF2401的工作模式通过引脚PWR_UP、CE和CS选择。在RX/TX模式下,有两种工作方式:ShockBurs和Direct Mode。本系统选用了ShockBurst模式,这种模式下需要配置的内容有:接收数据长度、接收通道地址、CRC校验、工作方式、发送频率、传送速率、接收与发送等。需要15字节的配置内容,下面给出了16进制的配置内容:0x80,0x80,0x00,0xcc,0xcc,0xcc, 0x00,0xcd,0xcd,0xcd,0xcd,0x83,0x4f, 0x05。 难点分析及解决方法 nRF2401半双工通信方式与C8051全双工通信接口的转换 在数据的采集端,单片机与射频模块是双向通信,可以直接采用单片机自带的SPI 接口与射频模块单向通信,包括配置射频模块的工作方式、接收通道地址、接收数据长度、接收频率、发送功率等参数和要发送的采集数据;当单片机要读取远端发送的控制命令时,要将SPI模式关闭,同时将MOSI、DR1端口定义为输入方式,然后将射频模块接收的控制命令读到单片机内部,并根据控制命令进行相应的操作,如采集通道选择、采集次数设定、开始采集、停止采集、发送数据等。 表1 实验数据表 在接收端,单片机和射频模块之间也是双向通信,单片机首先关闭SPI 模式,将MISO定义为输入模式,通过模拟的SPI 操作,对射频模块进行配置;当有控制命令要发送时,仍将MISO端口定义为输出模式,将射频模块配置为发送模式,将控制命令发送到数据采集终端;当要接收采集终端传来的数据时,首先将射频模块配置为接收模式,然后打开SPI 功能,利用单片机的SPI接口,将数据读到单片机内部。 这样,就完成了射频模块的半双工通信接口与单片机全双工通信接口的转换。 单片机与MAX5591之间的 SPI接口通信 C8051单片机的SPI 操作时序不能满足MAX5591的时序要求。要使单片机和MAX5591之间进行数据传输,必须根据MAX5591的时序要求将单片机的SPI时序进行转换。 实验结果及分析总结 实验结果 现场模拟电压信号通过12位ADC转换为数字量,通过无线方式传送到远端监控室,一方面通过DAC转换为模拟量,供示波器观看;另一方面,通过RS-232传送到PC进行显示、存储和打印。表1是实验数据。 分析总结 从试验数据可以看到,系统实现了现场模拟电压信号的采集、无线传输以及模拟信号还原,误差不大于0.2%,满足了设计要求。同时系统还存在着不足之处:在数据量加大,传输速率为1MHz时,偶尔会出现数据丢失现象;当被测信号频率大于500Hz的时候,信号复现时会出现波形失真。 系统实现了远端现场采集8路人体生理信号,无线传送到监控中心并复现现场信号的功能。实验证明,系统在250Kbps速率下无线传输距离可达50米,采集信号误差低于0.5% 。数据传输中采用了16位CRC校验,降低了误码率。该系统已经在某医疗器械上得到应用。经改造,系统可以采集现场的数字量和一些开关量,实现设备状态监测和开关量控制等。 结语 本文采用软件切换的方式实现了半双工器件与全双工器件的通讯转换,采用软件模拟SPI操作,解决了多SPI器件之间的通信协议匹配问题。■ 参考文献: 1 沈阳新华龙电子有限公司,C/2/3 混合信号ISP FLASH 微控制器,2005 2 赵念强,鲍可进,申屠浩.基于SoC单片机8051F的码头供给监控系统 北京:微计算机信息, 2005年第3期第70页
请登录后再发表评论!
您好,里面的图和表看不到啊,你有原版吗,我想学习一下!!
请登录后再发表评论!网站已改版,请使用新地址访问:
ADC_PRC DSP28335AD模块标准的寄存器配置,可以实现16通道的自由序列采集 DSP program 244万源代码下载-
&文件名称: ADC_PRC& & [
& & & & &&]
&&所属分类:
&&开发工具: C-C++
&&文件大小: 345 KB
&&上传时间:
&&下载次数: 0
&&提 供 者:
&详细说明:DSP28335AD模块标准的寄存器配置,可以实现16通道的自由序列采集-DSP28335AD module standard register configuration, can achieve 16 free sequence acquisition channels
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&ADC_PRC&&.......\.ccsproject&&.......\.cproject&&.......\.project&&.......\.settings&&.......\.........\org.eclipse.cdt.codan.core.prefs&&.......\.........\org.eclipse.cdt.debug.core.prefs&&.......\.........\org.eclipse.core.resources.prefs&&.......\28335_RAM_lnk.cmd&&.......\ADC_PRC.c&&.......\Debug&&.......\.....\ADC_PRC.map&&.......\.....\ADC_PRC.obj&&.......\.....\ADC_PRC.out&&.......\.....\ADC_PRC.pp&&.......\.....\ccsObjs.opt&&.......\.....\ccsSrcs.opt&&.......\.....\DSP2833x_Adc.obj&&.......\.....\DSP2833x_Adc.pp&&.......\.....\DSP2833x_ADC_cal.obj&&.......\.....\DSP2833x_CodeStartBranch.obj&&.......\.....\DSP2833x_CpuTimers.obj&&.......\.....\DSP2833x_CpuTimers.pp&&.......\.....\DSP2833x_DefaultIsr.obj&&.......\.....\DSP2833x_DefaultIsr.pp&&.......\.....\DSP2833x_DisInt.obj&&.......\.....\DSP2833x_GlobalVariableDefs.obj&&.......\.....\DSP2833x_GlobalVariableDefs.pp&&.......\.....\DSP2833x_Gpio.obj&&.......\.....\DSP2833x_Gpio.pp&&.......\.....\DSP2833x_PieCtrl.obj&&.......\.....\DSP2833x_PieCtrl.pp&&.......\.....\DSP2833x_PieVect.obj&&.......\.....\DSP2833x_PieVect.pp&&.......\.....\DSP2833x_SysCtrl.obj&&.......\.....\DSP2833x_SysCtrl.pp&&.......\.....\DSP2833x_usDelay.obj&&.......\.....\makefile&&.......\.....\objects.mk&&.......\.....\sources.mk&&.......\.....\subdir_rules.mk&&.......\.....\subdir_vars.mk&&.......\DSP2833x_Adc.c&&.......\DSP2833x_ADC_cal.asm&&.......\DSP2833x_CodeStartBranch.asm&&.......\DSP2833x_CpuTimers.c&&.......\DSP2833x_DefaultIsr.c&&.......\DSP2833x_DisInt.asm&&.......\DSP2833x_GlobalVariableDefs.c&&.......\DSP2833x_Gpio.c&&.......\DSP2833x_Headers_nonBIOS.cmd&&.......\DSP2833x_PieCtrl.c&&.......\DSP2833x_PieVect.c&&.......\DSP2833x_SysCtrl.c&&.......\DSP2833x_usDelay.asm
&输入关键字,在本站244万海量源码库中尽情搜索:拒绝访问 | www.broadon.net | 百度云加速
请打开cookies.
此网站 (www.broadon.net) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(3b2dbc-ua98).
重新安装浏览器,或使用别的浏览器来自拉普兰德Wiki
HW_ADC.c和HW_ADC.h是ADC模数转换模块的固件驱动文件,这里定义了该模块的初始化函数、反初始化函数、获取转换结果等函数,你可以通过配置相关结构体来实现硬件出发、DMA传输等高级功能。
ADC_Type *ADC_Adcx
ADC0、ADC1、ADC2(F系列特有)、ADC3(F系列特有)
必须初始化
uint8 ADC_DiffMode
转换模式选择
ADC_SE-单端采集 ADC_DIFF-差分分级
不必须初始化,默认ADC_SE
uint8 ADC_BitMode
转换精度选择
SE_8BIT-单端8位精度
SE_10BIT-单端10位精度
SE_12BIT-单端12位精度
SE_16BIT-单端16位精度
DIFF_9BIT-差分9位精度
DIFF_11BIT-差分11位精度
DIFF_13BIT-差分13位精度
DIFF_16BIT-差分16位精度
不必须初始化,默认SE_8BIT
uint8 ADC_SampleTimeCfg
采样时间选择
SAMTIME_SHORT-短采样时间
SAMTIME_LONG-长采样时间
不必须初始化,默认SAMTIME_SHORT
uint8 ADC_LongSampleTimeSel
长采样时间额外AD时钟选择
LSAMTIME_20EX-长采样时间增加20个额外AD时钟
LSAMTIME_12EX-长采样时间增加12个额外AD时钟
LSAMTIME_6EX-长采样时间增加6个额外AD时钟
LSAMTIME_2EX-长采样时间增加2个额外AD时钟
不必须初始化,默认LSAMTIME_20EX
uint8 ADC_HwAvgSel
硬件平均次数选择
HW_DISAVG-禁用硬件平均
HW_4AVG-4次硬件平均
HW_8AVG-8次硬件平均
HW_16AVG-16次硬件平均
HW_32AVG-32次硬件平均
不必须初始化,默认HW_DISAVG
uint8 ADC_PgaGain
可编程增益选择,使用相应PGA输入通道才有效
PGA_1GAIN-1倍增益
PGA_2GAIN-2倍增益
PGA_4GAIN-4倍增益
PGA_8GAIN-8倍增益
PGA_16GAIN-16倍增益
PGA_32GAIN-32倍增益
PGA_64GAIN-64倍增益
不必须初始化,默认PGA_1GAIN
uint8 ADC_MuxSel
ADC输入通道a\b复用引脚选择
MUX_ADXXA-A输入通道
MUX_ADXXB-B输入通道
不必须初始化,默认MUX_ADXXA
boolean ADC_CalEnable
ADC初始化自动校准功能使能
TRUE-使能自动校准
FALSE-禁用自动校准
建议初始化为TRUE
uint8 ADC_HwTrgCfg
ADC硬件触发配置
HW_TRGDSABLE-禁用硬件触发
HW_TRGA-A转换通道硬件触发
HW_TRGB-B转换通道硬件触发
不必须初始化,默认HW_TRGDSABLE
boolean ADC_DmaEnable
使能ADC准换完成触发DMA请求
TRUE-使能DMA
FALSE-禁用DMA
不必须初始化,默认FALSE
ADC_ISR_CALLBACK ADC_Isr
ADCx中断回调函数
函数必须为无返回值,无参数(eg. void isr(void);)
不必须初始化、如未初始化则不会触发中断
uint8 LPLD_ADC_Init(ADC_InitTypeDef);
ADC通用初始化函数,选择ADCx、采集模式、精度等参数
ADC_InitTypeDef
adc_init_structure
ADC初始化结构体
结构体定义见
0--配置错误
1--配置成功
uint8 LPLD_ADC_Deinit(ADC_InitTypeDef);
ADC反初始化函数,禁用ADC模块
ADC_InitTypeDef
adc_init_structure
ADC初始化结构体
结构体定义见
0--配置错误
1--配置成功
uint8 LPLD_ADC_Chn_Enable(ADC_Type *, AdcChnEnum_Type);
使能ADCx相应转换通道的AD采集功能
ADC_Type *
ADCx模块号
ADC0--ADC0ADC1--ADC1ADC2--ADC2(F系列特有)ADC3--ADC3(F系列特有)
AdcChnEnum_Type
ADC采集输入通道,每个通道所对应引脚详见技术手册K60P144M100SF2RM Page.118
当adcx为ADC0时,见
当adcx为ADC1时,见
当adcx为ADC2(F系列特有)时,见
当adcx为ADC3(F系列特有)时,见
0--配置错误
1--配置成功
uint16 LPLD_ADC_Get(ADC_Type *, AdcChnEnum_Type);
软件触发模式获取AD转换结果
ADC_Type *
ADCx模块号
ADC0--ADC0ADC1--ADC1ADC2--ADC2(F系列特有)ADC3--ADC3(F系列特有)
AdcChnEnum_Type
ADC采集输入通道,每个通道所对应引脚详见技术手册 Page.118
当adcx为ADC0时,见
当adcx为ADC1时,见
当adcx为ADC2(F系列特有)时,见
当adcx为ADC3(F系列特有)时,见
AD通道转换值(右对齐),若为差分转换结果,则为二进制补码格式(需强制转换为int16)
uint8 LPLD_ADC_EnableIrq(ADC_InitTypeDef);
使能ADCx中断
ADC_InitTypeDef
adc_init_structure
使能ADCx中断
结构体定义见
0--配置错误
1--配置成功
uint8 LPLD_ADC_DisableIrq(ADC_InitTypeDef);
禁用ADCx中断
ADC_InitTypeDef
adc_init_structure
使能ADCx中断
结构体定义见
0--配置错误
1--配置成功
void LPLD_ADC_EnableConversion(ADC_Type *, AdcChnEnum_Type, uint8, boolean);
使能ADCx转换通道,完成设置AB转换通道、转换完成中断。
ADC_Type *
ADCx模块号
ADC0--ADC0ADC1--ADC1ADC2--ADC2(F系列特有)ADC3--ADC3(F系列特有)
AdcChnEnum_Type
ADC采集输入通道,每个通道所对应引脚详见技术手册K60P144M100SF2RM Page.118
当adcx为ADC0时,见
当adcx为ADC1时,见
当adcx为ADC2(F系列特有)时,见
当adcx为ADC3(F系列特有)时,见
SC1寄存器A、B通道选择
0--A转换通道1--B转换通道
是否使能转换完成中断
TRUE--使能转换完成中断FALSE--禁用转换完成中断
uint16 LPLD_ADC_GetResult(ADC_Type *, uint8);
获取AD转换结果,用于中断操作下的转换结果获取。
ADC_Type *
ADCx模块号
ADC0--ADC0ADC1--ADC1ADC2--ADC2(F系列特有)ADC3--ADC3(F系列特有)
SC1寄存器A、B通道选择
0--A转换通道1--B转换通道
AD通道转换值(右对齐),若为差分转换结果,则为二进制补码格式(需强制转换为int16)
uint8 LPLD_ADC_GetSC1nCOCO(ADC_Type *);
获取判断A或B哪组通道COCO位置1,即转换完成。
ADC_Type *
ADCx模块号
ADC0--ADC0ADC1--ADC1ADC2--ADC2(F系列特有)ADC3--ADC3(F系列特有)
-1--没有转换完成
0--SC1A寄存器COCO位置1
1--SC1B寄存器COCO位置1
下表定义了ADC0通道对应的芯片引脚,其中通道列为chn形参的取值。
ADC0_DP0和ADC0_DM0
ADC0_DP1和ADC0_DM1
PGA0_DP和PGA0_DM
ADC0_DP3和ADC0_DM3
单端A(保留)单端B(ADC0_SE4b--PTC2)
单端A(保留)单端B(ADC0_SE5b--PTD1)
单端A(保留)单端B(ADC0_SE6b--PTD5)
单端A(保留)单端B(ADC0_SE7b--PTD6)
ADC0_SE8--PTB0
ADC0_SE9--PTB1
ADC0_SE10--PTA7
ADC0_SE11--PTA8
ADC0_SE12--PTB2
ADC0_SE13--PTB3
ADC0_SE14--PTC0
ADC0_SE15--PTC1
ADC0_SE17-PTE24
ADC0_SE18--PTE25
温度传感器
下表定义了ADC1通道对应的芯片引脚,其中通道列为chn形参的取值。
ADC1_DP0和ADC1_DM0
ADC1_DP1和ADC1_DM1
PGA1_DP和PGA1_DM
ADC1_DP3和ADC1_DM3
单端A(ADC1_SE4a--PTE0)单端B(ADC1_SE4b--PTC8)
单端A(ADC1_SE5a--PTE1)单端B(ADC1_SE5b--PTC9)
单端A(ADC1_SE6a--PTE2)单端B(ADC1_SE6b--PTC10)
单端A(ADC1_SE7a--PTE3)单端B(ADC1_SE7b--PTC11)
ADC1_SE8--PTB0
ADC1_SE9--PTB1
ADC1_SE10--PTB4
ADC1_SE11--PTB5
ADC1_SE12--PTB6
ADC1_SE13--PTB7
ADC1_SE14--PTB10
ADC1_SE15--PTB11
ADC1_SE17--PTA17
温度传感器
下表定义了ADC2通道对应的芯片引脚,其中通道列为chn形参的取值。
ADC2_DP0和ADC2_DM0
ADC2_DP1和ADC2_DM1
PGA2_DP和PGA2_DM
ADC2_DP3和ADC2_DM3
单端A(ADC2_SE4a--PTB20)单端B(保留)
单端A(ADC2_SE5a--PTB21)单端B(保留)
单端A(保留)单端B(保留)
单端A(保留)单端B(保留)
ADC2_SE8--PTB0
ADC2_SE9--PTB1
ADC2_SE10--保留
ADC2_SE11--保留
ADC2_SE12--PTA29
ADC2_SE13--PTA28
ADC2_SE14--PTA27
ADC2_SE15--PTA26
ADC2_SE16--PTE8
ADC2_SE17--PTE9
ADC2_SE18--保留
温度传感器
下表定义了ADC3通道对应的芯片引脚,其中通道列为chn形参的取值。
ADC3_DP0和ADC3_DM0
ADC3_DP1和ADC3_DM1
PGA2_DP和PGA2_DM
ADC3_DP3和ADC3_DM3
单端A(ADC3_SE4a--PTA10)单端B(ADC3_SE4b--PTE27)
单端A(ADC3_SE5a--PTA9)单端B(ADC3_SE5b--PTE26)
单端A(ADC3_SE6a--PTA6)单端B(保留)
单端A(ADC3_SE7a--PTE28)单端B(保留)
ADC3_SE8--PTB0
ADC3_SE9--PTB1
ADC3_SE10--保留
ADC3_SE11--保留
ADC3_SE12--保留
ADC3_SE13--保留
ADC3_SE14--保留
ADC3_SE15--PTA11
ADC3_SE16--PTE11
ADC3_SE17--PTE12
温度传感器

我要回帖

更多关于 硬件安全模块 的文章

 

随机推荐