A. 配置stc15系列單片機內置ADC,輸入引腳未接信號,通電後模擬輸入引腳不
配置stc15系列單片機內置ADC,輸入引腳未接信號,通電後模擬輸入引腳不為零,硬體部分ADC引腳不應該有上拉電阻(或者有其他連接),如果電路正確 那 肯定是 ADC配置 有錯誤,應該配置成 開漏。
B. 一般單片機信號採集作AD轉換的話,採集的是什麼信號電流還是電壓為什麼還有為什麼需要放大
肯定採集電壓信號了,因為ADC的核心是電壓比較器。
如果被採集的信號很弱,比如最大幅度低於參考電壓的10%,那就需要適當放大來減少誤差了。
如果輸入電壓大於參考電壓,那肯定要分壓。輸入阻抗無窮大這樣是最好的,這樣採集的誤差最小,當然一般ADC的輸入阻抗都不算大(10KΩ級別),所以一般用電壓跟隨器進行阻抗匹配,間接增大ADC的輸入阻抗。
C. ADC采樣電路怎麼做到輸入阻抗大於1M
ADC采樣電路,如果是要求差分輸入,就需要在ADC前面放差分運放,輸入阻抗到1M肯定可以做到。如果不要求差分輸入,ADC晶元本身的輸入阻抗到不了1M,或者到了但是會因為其他原因降低,可以考慮用一個運放(如射隨器)在ADC輸入作為隔離,運放本身的輸入阻抗是沒問題的,肯定大於1M,配置成同相放大就沒問題。
D. STC12C5A60S2,這樣的單片機,AD的輸入阻抗大概是多大
AD的輸入阻抗, IO設置為開漏,理論上為無窮大。
E. 求STC12C5204單片機AD功能如何使用,例如,用其中一個I/O做為AD采樣一個2V左右的電壓,並通過數碼管顯示
//本程序主要演示了
//1、12864液晶的編程與使用,包括顯示定位、4位整數、顯示浮點數等
//2、STC12C5A32S2單片機的ADC 采樣功能(以第0、1通道為例)
//
//註:本示例僅僅演示如何進行ADC 和顯示,每ADC 一次就顯示一次,實際應用時,
//應多次ADC 並進行相應處理,比如取平均值後,才能得到比較穩定的AD 值
//廣西民族大學物電學院李映超2010.5.26
/* 板子的硬體連接
1、1602液晶顯示模塊的連接:RS:P2.4、EN:P2.5、數據口: P0
2、蜂鳴器:P2.3 低電平有效(發出聲音)
3、繼電器:P2.2 低電平有效(繼電器吸合、兩輸出腳短路)
4、18B20數據輸出腳(DQ):P2.1
5、紅外遙控輸出腳:P2.0
6、直流電壓精密可調電阻輸出:P1.0 可通過跳線帽斷開
7、光敏電阻:P1.1 可通過跳線帽斷開
8、按鍵:均通過二極體連接到P3.2(外部中斷0口),低電平有效,下降沿觸發
K0:P3.3、K1:P3.4、K2:P3.5、K3:
P3.6、K4:P3.7
9、24C02連接:
SDA:P2.7 (上拉有發光二極體,低電平亮)
SCL:P2.6 (上拉有發光二極體,低電平亮)
*/
#include <reg52.h>
#include<intrins.h>
#include<lcd12864s.h>
#define uint unsigned int
#define uchar unsigned char
sbit light=P2^7;//定義工作指示燈與單片機的連接腳
//---------與STC12C5A32S2單片機ADC 相關的寄存器聲明------------------
sfr P1ASF =0x9d; //P1口模數轉換功能控制寄存器
sfr ADC_CONTR =0xbc; //AD 轉換控制寄存器
sfr ADC_RES =0xbd; //AD 轉換結果寄存器高
sfr ADC_RESL =0xbe; //AD 轉換結果寄存器低
sfr AURX1 =0xa2; //AD 轉換結果存儲方式控制位
//------------------------------------------------------------------
//P1ASF 寄存器:8位,對應P1口8根口線,用於指定哪根口線用作ADC 功能
//哪個口用作ADC 就應置相應的位為「1」,注意:不能位定址
//------------------------------------------------------------------
#define ADC_POWER 0x80 //ADC 電源開
#define ADC_SPEED 0x60 //設為90個時鍾周期ADC 一次
#define ADC_START 0x08 //ADC 啟動控制位設為開
#define ADC_FLAG 0x10 //ADC 結束標志位
/*
ADC_CTRL 寄存器:
ADC_POWER SPEED1 SPEED0 ADC_FLAG ADC_STAR CHS2 CHS1 CHS0
1 2 3 4 5 6 7 8
第1 位: =1 打開ADC 電源;=0 關閉ADC 電源; ADC 前要一定要打開
第2-3位: =1 1 90個時鍾周期ADC 一次; =1 0 180個時鍾周期ADC 一次;
=0 1 360個時鍾周期ADC 一次; =0 0 540個時鍾周期ADC 一次;
第4位: ADC 結束標志位,每次ADC 結束時自動=1,需要用軟體清零才可以進行下一次ADC
第5位: ADC 啟動控制位,置「1」則ADC 轉換開始,轉換結束後為0
第6-7-8位:ADC 通道選擇000-->P1.0 ........111-->P1.7
*/
//-------------------------------------------------------------
void ADC_int(uchar n) //第n 通道ADC 初始化函數
{
n&=0x07; //確保n=0----7通道
AURX1|=0x04; //轉換結果存儲格式:數據的高2位放ADC_RES,低8位放ADC_RESL
P1ASF=1<<n; //將P1.n 設為ADC 采樣功能
}
//---------------------------------------------------------------
uint ADC_GET(unsigned char n) //第n 通道ADC 采樣函數
{
unsigned int adc_data;
n&=0x07; //確保n=0----7通道
ADC_RES=0; //清零
ADC_RESL=0; //清零
ADC_CONTR=0; //清零,以便重構
ADC_CONTR|=(ADC_POWER|ADC_SPEED|n|ADC_START); //打開AD 轉換電源,設定轉換速度、設定通道號、AD 轉換開始
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); //延時4個時鍾周期左右
while(!(ADC_CONTR&ADC_FLAG)); //等待轉換結束=0x10 ADC_FLAG 位=1
adc_data=(ADC_RES&0x03)*256+ADC_RESL; //轉換結果計算,取高位結果存儲器的低2位+ 低位結果存儲器
ADC_CONTR&=~ADC_FLAG;//清零轉換結束標志位(ADC_FLAG 位=0)
return adc_data; //返回ADC 的值(0----1023)
}
void lcd_4_char(unsigned int data_4_char) //在1602LCD 上顯示一個4位的整數
{
unsigned char lcd_table[4];
lcd_table[0]=data_4_char/1000; //獲得千位的數字
lcd_table[1]=data_4_char%1000/100; //獲得百位的數字
lcd_table[2]=data_4_char%100/10; //獲得十位的數字
lcd_table[3]=data_4_char%10; //獲得個位的數字
Lcd_WriteData(lcd_table[0]+0x30); //顯示千位
Lcd_WriteData(lcd_table[1]+0x30); //顯示百位
Lcd_WriteData(lcd_table[2]+0x30); //顯示十位
Lcd_WriteData(lcd_table[3]+0x30); //顯示個位
}
void main()
{ unsigned int ad_0,ad_1;
ad_0=0;
ad_1=0;
Lcd_Init(); //12864液晶模塊初始化
light=0;delayms(1000);light=1; //燈閃一下,表示上電准備工作
ADC_int(0); //ADC 通道0初始化
ADC_int(1); //ADC 通道1初始化
while(1)
{
ad_0=ADC_GET(0);//第0通道進行ADC 采樣
ad_1=ADC_GET(1);
hanzi_disp(0,1,"單片機轉換");
hanzi_disp(1,0,"通道0:");
lcd_4_char(ad_0);
//while(1){;};
//delay_ms(30000);
hanzi_disp(2,0,"通道1:");
lcd_4_char(ad_1);
hanzi_disp(3,1,"--------");
//delayms(1000); //適當延時後再進行下一循環
}
}
F. 關於STC單片機ADC功能的問題:在一個工程中,如果只使用一路ADC轉換,正
使用ADC應該要先初始化寄存器吧,你要先初始化第一個在讀,然後初始化第二個在讀,不能一次初始化一堆
G. stc12c5a60s2這款單片機的ad功能,測5v電壓的話理論上十位ad可以達到1/1024精度,問一下如何編程實現呢
請貼出你全部程序,看看你的變數定義都是什麼型
主要是你變數定義的問題,定義成float就有小數了,int型就不行了,自動省略了小數,那就誤差大了
你先用float計算,然後最後結果取int型進行四捨五入會好些,不然誤差太大,
adc_data=(ADC_RES&0x03)*256+ADC_RESL
0x03就是00000011將ADC_RES&0x03就是將ADC_RES與0x03 ,這樣就是取ADC_RES低二位,作為10位ad的高兩位,乘256轉成10進制,然後加上低八位ADC_RESL,就是實際採集數據轉化的10ad值
H. STC15F2K60S2單片機ADC讀取共地的3.3V電路中的電壓
把ADC電壓輸入腳,設置成高阻輸入就行了,也必須設置成高阻輸入的。如下圖,畫紅圈項。
是不能串聯二極體的,反向串聯3.3V加不到AD腳,正向串,3.3V 電壓要降0.7V,所以,不論怎麼都不能串聯二極體的,這個想法太離譜了 。
I. 請教,STM32的ADC輸入阻抗問題
加了一個0.1uF的電容,然後用239.5采樣周期,可以基本上得到期望的電壓。
有個問題要注意,如果這個AD要在這個直流信號和其它變化較快的信號進行切換,測其它變化較快的信號會不太准。
J. 單片機如何用adc求電阻值
你的電阻的電路圖具體是什麼。你可以通過單片機給adc0832送相應的數據,數值可以在0-255范圍內,如果你用的集成電阻器的話,可以通過這個數值不同范圍選擇不同的電阻。