PSoC3 之ADC组件简单说明
本帖最后由 wangku001wei 于 2012-9-25 22:10 编辑基本上是翻译了说明文档 有一些自己加的
特性:1 宽精度范围,8-20位2 连续采集方式3 高输入阻抗4 可选的输入增益
接口图:
简介:AD转换组件可以在一个很宽的频谱范围内采集信号,采样率与采集精度和采集模式有关,可以单路信号或者利用多路开关技术采集多个信号AD组件由输入放大器,3阶调制器和一个滤波器组成。输入放大器提供高输入阻抗以及一个可选的输入增益;后处理单元提供增益,偏置及简单滤波。AD转换组件采用了过采样技术
输出输出接口:(注意,有些输出输出接口在不同的配置下可能没有,比如ACLK,SOC,-Input)+ Input:模拟输入信号的正极。(AD转换结果是+ Input与参考电压的差值,参考电压可选择-Input或者Vss)
- Input:模拟输出信号的负极。该引脚只有当我们在“ADC_Input_Range”配置了如下的两种方式之一时才会提供给用户配置• 0.0 +/- 1.024V (Differential) -Input +/- Vref • 0.0 +/- 2.048V (Differential) -Input +/- 2*Vref
SOC:启动转换信号,该引脚只有当用户选择使用硬件触发AD转换后才会提供给用户配置。该引脚上信号上升沿启动转换。如果采用软件方式,则使用xxx_StartConvert()函数开始AD转换
xxx代表我们定义的组件名称
ACLK: 该引脚只有当我们将ADC_Clock配置成External才会出现,决定了转换率。如果将ADC_Clock配置成internal,则使用芯片内部时钟,该引脚隐藏
EOC: 转换结束,该引脚上的上升沿标志着一次AD转换结束,内部的中断也是和这个信号相连,该信号还可以和DAM 请求信号相连
参数设置:在原理图上放置并双击AD转换组件,对其参数进行设置。
注意:Conversion Mode 转换模式, Resolution 精度, Conversion Rate转换率 都会影响转换时钟频率,对其的设置应遵守ADC的技术参数
Power:电压越高,转换速率越高
Conversion Mode:转换模式,分为1 Fast_Filter: 连续单路信号采集,非常适用于需要利用多路开关采集多路信号的情况。注意,如果是利用软件切换采集输入通道,建议在两次采集间先使用StopConvert() 停止采集,再用StartConvert()重新使能ADC组件
2 Continuous: 标准的采集方式,适用于单路信号的采集3 Fast_FIR:在8-16位采集精度的时候,和Fast_Filter是一样的,但是在17位精度以上的采集时速度要快。
Resolution:采集精度。注意,越高的采集精度对应越长的采集时间
Conversion Rate:对于单个信号转换来说,转换时间是采样率的倒数,转换时间与采集精度和转换模式有关
Clock Frequency:时钟频率,注意,该编辑框不能编辑更改,只是对用户的提示,它显示了对于选择的转换模式,什么样的时钟频率是合适的。
Start of Conversion:该参数决定了是采用硬件方式还是采用软件方式触发采集
Clock Source:该参数觉得是采用AC组件内部的时钟还是采用外部时钟。如果采用外部时钟,则方波的占空比应为50%。
Input Range:输入范围 (太多了 偷个懒 参加中英文手册)10.0 to 1.024V (Single Ended)0 to Vref20.0 to 2.048V (Single Ended)0 to 2*Vref3 Vssa to Vdda (Single Ended) 40.0 +/- 1.024V (Differential)-Input +/- Vref50.0 +/- 2.048V (Differential)-Input +/- 2*Vref60.0 +/- 0.512V (Differential)-Input +/- 0.5*Vref70.0 +/- 0.256V (Differential)-Input +/- 0.25*Vref
Reference: 参考电压1 Internal Ref使用内部1.024V参考电压2 Internal Ref, bypassed on P03 * 使用内部1.024V参考电压,并在P03口上放置旁路电容3 Internal Ref, bypassed on P32 * 使用内部1.024V参考电压,并在P32口上放置旁路电容4 External Ref on P03 使用P03口上的外部参考电压5 External Rev on P32使用P32口上的外部参考电压注意:当内部数字开关造成的早上影响到了模拟应用部分的性能时,建议使用外部旁路电容,将P03或者P32引脚配置成模拟高阻抗模式,并和一个外部电容相连(0.01uF~10uF)。
Input Buffer Gain:输入缓冲增益,注意应保证Buffer_Gain和ADC_Input_Range设置时候兼容
Voltage Reference:参考电压。当使用内部1.024V参考电压时候,该参数不能编辑。当使用外部参考电压时候,当使用外部参考电压时候,用户应设置该参数为外部参考电压值。当输入范围参数设置为“Vssa to Vdda (Single Ended)”时,该参数应设置为Vdda的电压值。在将ADC采样值转换为ADC电压值的函数中使用了该参数。
Application Programming Interface:应用程序接口注意,我们在原理图上放置的组件的名称作为有关该ADC组件的函数,名称,变量等的前缀,下面的函数对应于名称为“ADC”的ADC组件实例
void ADC_Start(void)配置ADC组件并上电,但并未启动AD转换
void ADC_Stop(void) 禁止并停止ADC组件供电
void ADC_SetPower(uint8 power)设置ADC组件的运行电源,对应于参数设置面板上的“Power”参数
void ADC_SetBufferGain(uint8 gain)设置输入缓冲的增益(1,2,4,8) ,对应于参数设置面板上的“Input Buffer Gain”参数
void ADC_StartConvert(void)启动AD转换. 当使用Single_Sample转换模式时,启动一次AD转换后自动停止,使用其他三种转换模式时,AD转换将一直进行,直到调用ADC_StopConvert函数强制停止
void ADC_StopConvert(void)停止AD转换。当一次转换正在进行时调用该函数,ADC组件被复位,已经完成的部分转换结果也不会输出
voidADC_IRQ_Enable(void)使能AD转换完成中断。使用AD转换完成中断之前,应该在main函数中调用“CYGlobalIntEnable”宏命令使能全局中断
void ADC_IRQ_Disable(void)禁止AD转换完成中断
uint8 ADC_IsEndConversion(uint8 retMode)检测ADC转换是否完成
使用 ADC_RETURN_STATUS 作为参数时,函数立刻返回转换结果的状态(若结果不为零,表示转换完成);使用. ADC_WAIT_FOR_RESULT 作为参数时,函数直到AD转换完成才会返回(可以理解为内部执行了while等待循环)
int8 ADC_GetResult8(void) 得到8位的转换结果,如果转换精度大于8位,则只返回低8位的转换结果。当ADC组件配置为8位单端模式时,应该使用ADC_GetResult16()函数,因为该函数返回的是8位有符号数,在8位单端模式时,实际最大结果为255,而8位有符号数实际最大结果为127。
int16 ADC_GetResult16(void)得到16位的转换结果
int32 ADC_GetResult32(void) 得到32位的转换结果.
void ADC_SetOffset(int32 offset)Set offset of ADC. 设置ADC转换结果的偏移量
void ADC_SetOGain(int32 offset) 设置每个单位电压对应的ADC结果值。默认由参考电压和输入范围设定,仅当在输入值已知或者使用参考电压时为了更好的校正ADC组件才需要使用该函数
int16 ADC_CountsTo_mVolts(int32 adcCounts)将转换结果换算成mV
Int32 ADC_CountsTo_uVolts(int32 adcCounts) 将转换结果换算为uV
float ADC_CountsTo_Volts(int32 adcCounts)将转换结果换算成浮点数的V
The ADC output sample is multiplied by the gain correction value after the offset correction has been added.以上函数的计算过程:ADC转换结果值加上偏移量之后 乘以 增益校正值
应用举例:1 简单的例子 参加英文说明文档#include <device.h>void main() { int16result; ADC_DelSig_1_Start(); ADC_DelSig_1_StartConvert(); ADC_DelSig_1_IsEndConversion(ADC_DelSig_1_WAIT_FOR_RESULT); result = ADC_DelSig_1_GetResult16(); } 2 使用中断的例子在ADC_INT.c文件中ADC组件提供了空白的中断响应程序,例如CY_ISR(ADC_DelSig_1_ISR )(注:ADC_DelSig_1是该例子使用的ADC组件的名称)将自定义的代码放置到 " /* `#START MAIN_ADC_ISR`和"/* `#END`*/ " 之间,使得在编译环境重新生成程序时我们自己的代码不被删除具体代码参加英文文档
用户寄存器:Sample Registers 采样结果寄存器 24位 共三个ADC_DEC_SAMPADC_DEC_SAMPMADC_DEC_SAMPHGain Correction Registers 增益校正寄存器 16位 共两个ADC_DEC_GCORADC_DEC_GCORHOffset Correction Registers 偏移校正寄存器 24位 共三个ADC_DEC_OCORADC_DEC_OCORMADC_DEC_OCORH wyzamazon 发表于 2012-9-25 22:02 static/image/common/back.gif
一些中文的组件手册https://www.cirmall.com/bbs/thread-1269-1-5.html
多谢多谢! 楼主有心了,支持继续加油。做成一个系列,这样看着你的帖子就能学一遍了;P 加油啊!!!继续顶~~ 温故而知新。谢谢分享。
页:
[1]