完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用的MCU为ADuC7060,使用ADC2通道,主ADC,单端工作模式,使用外部基准电压2.4V,外部基准电压接在VREF+/VREF-上。
出现的问题: 1.当ADC2输入的模拟电压达到1.2V时,ADC0DAT寄存器的值就满了,达到了0xFFFFFF,这显然与我的初衷不一致,按理说当ADC输入的模拟电压达到2.4V时,ADC0DAT寄存器的值才能到0xFFFFFF。看起来似乎外部基准电压2.4V未起作用。 2.我还想问一下,当我的外部基准电压接2.4V时,ADC的输入能否输入0V到2.4V? 3.ADC0CON寄存器的12位HIGHEXTREF0的解释“当ADC0的外部基准电压高于1.35V时,必须将该位置1.这样,可以将基准电压源二分频”,解释中的将基准电压二分频是什么意思啊?难道是说基准电压超过1.35V后,若将该位置1,则实际基准电压只有外部基准电压的一半,即ADC的输入电压不能超过1.2V? 下面附上我的程序: #include #include "stdio.h" #include "string.h" #include "user/bit.h" unsigned char szTemp[16] = ""; // Used to store ADC result before printing to UART volatile unsigned long ulADC0Result = 0; // Variable that ADC0DAT is read into in ADC0 IRQ //函数声明 void ADCInit(void); void UARTInit(void); void Delay(int a); float CodeToAV(unsigned long ulCode,int iPGA,float fVref); /****************************************************************************** 函数名 : int main(void) 描述 : 主函数 输入 : void 返回 : NONE *******************************************************************************/ int main(void) { unsigned char i = 0; unsigned char nLen = 0; POWKEY1 = 0x1; POWCON0 = 0x78; // Set core to max CPU speed of 10.24Mhz POWKEY2 = 0xF4; UARTInit(); ADCInit(); IRQEN = BIT10 + BIT11; // Enable ADC and UART interrupts while (1) { } } /****************************************************************************** 函数名 : void IRQ_Handler(void) __irq 描述 : IRQ中断服务程序 输入 : void 返回 : void *******************************************************************************/ void IRQ_Handler(void) __irq { unsigned long IRQSTATUS = 0; unsigned char ucCOMIID0 = 0; IRQSTATUS = IRQSTA; // Read off IRQSTA register if ((IRQSTATUS & BIT11) == BIT11) //UART interrupt source { ucCOMIID0 = COMIID0; if ((ucCOMIID0 & 0x2) == 0x2) // Transmit buffer empty { } } if ((IRQSTATUS & BIT10) == BIT10) //If ADC0 interrupt source { ulADC0Result = ADC0DAT; // Read ADC0 conversion result } } /****************************************************************************** 函数名 : void ADCInit(void) 描述 : 初始化ADuC7060的ADC的ADC2通道。 输入 : void 返回 : void *******************************************************************************/ void ADCInit(void) { // // 配置ADC2通道连续转换模式,采样速率4Hz,单端工作模式,使用主ADC // ADCMSKI = BIT0; // Enable 主ADC result ready interrupt source ADCFLT = 0xFF1F; // Chop on, Averaging, AF=63, SF=31, 4Hz ADCCFG = 0; ADC0CON = BIT4 + //使用外部基准电压输入(VREF+/VREF-)2.4V,主ADC增益为1 BIT7 + BIT8 + // ADC2/ADC5(单端模式)。 BIT10 + // Unipolar ADC output BIT12 + //ADC0的外部基准电压为2.4V高于1.35V。 BIT15; // Enable Primary_ADC. ADCMDE = BIT0 + BIT4 + BIT7; // continuous conversions } /****************************************************************************** 函数名 : void UARTInit(void) 描述 : 初始化ADuC7061的主UART,9600-8-N 输入 : void 返回 : void *******************************************************************************/ void UARTInit(void) { // Initialize the UART for 9600-8-N GP1CON = BIT0 + BIT4; // Select UART functionality for P1.0/P1.1 COMCON0 = BIT7; // Enable access to COMDIV registers COMDIV0 = 0x21; // Set baud rate to 9600. COMDIV1 = 0x00; //COMDIV2 = 0x21 + BIT11; // Enable fractional divider for more accurate baud rate setting COMCON0 = BIT0 + BIT1 + BIT2; COMIEN0 = BIT0 + BIT1; // Enable UART interrupts when Rx full and Tx buffer empty. } /****************************************************************************** 函数名 : float CodeToAV(unsigned long ulCode,int iPGA,float fVref) 描述 : 单端模式下将ADuC7060的主ADC或者辅助ADC转换得到的数据量换 算为相应的模拟电压值。 输入 : ulCode为ADC0DAT或者ADC1DAT寄存器中的值, iPGA为主ADC或者辅助ADC中的增益放大器的设置值, fVref为基准电压值。 返回 : 转换得到的模拟电压,float类型。 *******************************************************************************/ float CodeToAV(unsigned long ulCode,int iPGA,float fVref) { float fAINV; fAINV = ((ulCode / 16777215.0) * fVref) / iPGA ; return fAINV; } /****************************************************************************** 函数名 : void Delay(int a) 描述 : 延时函数 输入 : int a 返回 : void *******************************************************************************/ void Delay(int a) { int i,j; for(i = 1 ; i < a ; i++) for(j = 1 ; j < 1000 ; j++); } |
|
相关推荐
3个回答
|
|
ADUC7060内部有参开电压分压电路,当您的输入参考超过1.3V时会对其进行分压至外部参考的一半。所以其输入值无法达到1.2V以上。
|
|
|
|
如果用差分输入能? 手册上写的主通道绝对输入电压范围是0.1~VDD-0.7,在使用内部参考电压的情况下。那么用外部参考电压的时候是不是也是这样?谢谢 |
|
|
|
非常抱歉,虽然ADC的输入范围是0.1~VDD-0.7 ,但是其转换量程只能到1.2V。详细您可以参考数据手册的表43 HIGHEXTREF0处的描述。
|
|
|
|
只有小组成员才能发言,加入小组>>
2261个成员聚集在这个小组
加入小组给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1270 浏览 2 评论
ADP5092 SYS端口为2.09V,但是REG_OUT为0是什么原因?
1874 浏览 1 评论
ad7193差分输入ain1与ain2差是正值时,读到电压与实际值误差小,但为负值值,误差就变的很大
4220 浏览 2 评论
8970 浏览 1 评论
3122 浏览 1 评论
ADC3442采集,分析数据出现有规则毛刺,请问是哪方面的问题啊?
1384浏览 3评论
AD7190状态寄存器一直是0x80,连续转换模式下RDY不拉低
1628浏览 2评论
1584浏览 2评论
给ADUM4223 增加信号驱动15V电压就不正常, 波动很大会被烧是什么情况?
1270浏览 2评论
1370浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 14:40 , Processed in 0.703147 second(s), Total 49, Slave 44 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号