• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
  • slider image 488
  • slider image 491
:::


Browsing this Thread:   1 Anonymous Users






Re: 有沒有辦法解決精度的問題?
#6
初級會員
初級會員


查看用戶資訊
謝謝您寶貴的意見,我大致上了解了,以後設計時會多加注意此類的問題

發表於: 2008/4/21 20:06
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 有沒有辦法解決精度的問題?
#5
資深會員
資深會員


查看用戶資訊
參照:

程式似乎就如您所說的沒什麼問題,那如果出問題真是在硬體上,若我不使用OP來改善,還有別種改善的方法嗎?


1.用OP降低迴授信號輸出阻抗,這是常識。ADC的輸入阻抗不是無限大。
2.876的AD能接受輸入設備的阻抗值為10K,你的電路已經遠超過可用範圍。
3.迴授電壓應用OP電路處理信號(放大、緩衝),以補償被動元件造成的衰減。

發表於: 2008/4/21 18:24
不要問我哪裡來,我只是個流浪天涯的工程師
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 有沒有辦法解決精度的問題?
#4
版主
版主


查看用戶資訊
1. 電壓的輸入串了 R1 (150K ohm) 這麼高的輸入阻抗足以影響 Sample Hold 電路的取樣準確度。
2. 一次步進的巔壓範圍比較大,這是 AD 轉換器的解析度的問題。用筆算一下就知道了。 5V/1024=5mV, 5mV 在程上電阻的衰減約15倍,5mV * 15 = 75mV;所以跳動 0.1V 是有可能的。要真正解決此誤差只有使用 14-bit 或更高解析度的 ADC,不過在高解析度的 ADC,干擾會變成主要的問題。

發表於: 2008/4/21 18:03
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 有沒有辦法解決精度的問題?
#3
初級會員
初級會員


查看用戶資訊
縮圖

上面是我接的線路
我使用50轉的vr來做調整,發現的是已轉了幾圈,可是它的數值仍然不動,可是轉到數值動了一跳就多很多,例如
13.20轉了幾圈,它仍然維持在13.20,再轉到數值跳上去,已經是13.33了,一差就是0.1V多
我用電錶量測輸入的腳位時(MPU的第三腳),反而變的可以細調整了,就可以調到13.23,13.25,13.28,13.30等等
程式似乎就如您所說的沒什麼問題,那如果出問題真是在硬體上,若我不使用OP來改善,還有別種改善的方法嗎?

發表於: 2008/4/21 17:30
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: 有沒有辦法解決精度的問題?
#2
資深會員
資深會員


查看用戶資訊
你的問題跟程式無關。
一般可變電阻本來精度就是這樣。要嘛你就去買高精度50轉一類的電阻。給ADC的信號最後透過隨耦器緩衝避免阻抗造成量測誤差。

Microchip有幾篇談ADC和數位/類比混合線路問題的文章,去看一下比較好。要不然你的東西問題會一再發生而你卻搞不清楚問題在哪。

發表於: 2008/4/21 10:31
不要問我哪裡來,我只是個流浪天涯的工程師
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


有沒有辦法解決精度的問題?
#1
初級會員
初級會員


查看用戶資訊
static bank1 unsigned int VoltageADC; //電壓回授
static bank1 unsigned int CurrentADC; //電流回授
static bank1 unsigned int Temperature1ADC; //電瓶溫度
static bank1 unsigned int Temperature2ADC; //轉換器溫度
//bit LimitCurrentStatus; //變壓器跳脫狀態
static bank1 unsigned int NGC_Current; //0~5 V -> 0~1024 -> XX.XX~YY.YY A
static bank1 unsigned int D_NGC_Current; //0~5 V -> 0~1024 -> XX.XX~YY.YY A
static bank1 unsigned int NGC_Voltage; //0~5 V -> 0~1024 -> XX.XX~YY.YY V
static bank1 unsigned char NGC_Temperature1; //0~5 V -> 0~1024 -> -20~125(0~155) Deg C
static bank1 unsigned char NGC_Temperature2; //0~5 V -> 0~1024 -> -20~125(0~155) Deg C
static bank2 unsigned int S_NGC_Voltage[5]; //0~5 V -> 0~1024 -> XX.XX~YY.YY V
static bank2 unsigned int S_NGC_Current[10]; //0~5 V -> 0~1024 -> XX.XX~YY.YY A

// ====================================================================
void Mesurement()
{
unsigned char s;
signed int V_temp;
unsigned long TEMP;
CurrentADC=ADC_Conversion(Channel_Current); //電流回授,Channel_Current=0
VoltageADC=ADC_Conversion(Channel_Voltage); //電壓回授,Channel_Voltage=1
Temperature1ADC=ADC_Conversion(Channel_Temperature1); //電瓶補償溫度,Channel_Temperature1=2
//LimitCurrentStatus=RA4; //溫度開關
Temperature2ADC=ADC_Conversion(Channel_Temperature2); //過溫限流補償,Channel_Temperature2=5
NGC_Temperature1=TranslationTemperature(Temperature1ADC);
NGC_Temperature2=TranslationTemperature(Temperature2ADC);

//轉換電流/電壓/溫度值1/溫度值2
for(s=0;s<9;s++)
{
S_NGC_Current[s]=S_NGC_Current[s+1];
}
S_NGC_Current[9]=CurrentADC*Iamp;

for(s=0;s<4;s++)
{
S_NGC_Voltage[s]=S_NGC_Voltage[s+1];
}
S_NGC_Voltage[4]=((((unsigned long)VoltageADC*(unsigned long)Vamp )*(unsigned long)500)/(unsigned long)1024);
//S_NGC_Voltage[4]=(((unsigned long)VoltageADC)*Vamp*500/1024);
D_NGC_Current=NGC_Current;
//電流取10筆資料平均值
TEMP=0;
for(NGC_Current=0,s=0;s<10;s++)
{
NGC_Current+=S_NGC_Current[s];
}
//NGC_Current=TEMP/10;
NGC_Current/=10;
//電壓取5筆資料平均值
TEMP=0;
for(NGC_Voltage=0,s=0;s<5;s++)
{
NGC_Voltage+=S_NGC_Voltage[s];
}
//NGC_Voltage=TEMP/5;
NGC_Voltage/=5;
V_BLK=V_BLK0-(((NGC_Temperature1/5)*TCFV)/100);
V_MAX=V_BLK+(V_BLK*3/100); // 3/100;
V_FLT=V_FLT0-(((NGC_Temperature1/5)*TCFV)/100);
if (V_FLT!=0)
{
V_FLT+=V_FLT1;
}
}

// ====================================================================
unsigned int ADC_Conversion(unsigned char Channel)
{
/*
腳號 功能 Port 設定
RA0 類比輸入(電流回授) Input 規劃Analog Input0(Chip)
RA1 類比輸入(電壓回授) Input 規劃Analog Input1(Chip)
RA2 類比輸入(電瓶溫度補償) Input 規劃Analog Input2(Chip)
RA3 Vref(+5V) Input 規劃Positive Analog Reference Voltage
RA4 數位輸入(過溫跳脫開關) Input 規劃Input Port
RA5 類比輸入(過溫限流補償) Input 規劃Analog Input5(Chip)
*/

switch(Channel)
{
case 0: //電流,RA0
{
CHS2=0;
CHS1=0;
CHS0=0;
}
break;
case 1: //電壓,RA1
{
CHS2=0;
CHS1=0;
CHS0=1;
}
break;
case 2: //電瓶溫度,RA2
{
CHS2=0;
CHS1=1;
CHS0=0;
}
break;
case 5: //轉換器溫度,RA5
{
CHS2=1;
CHS1=0;
CHS0=0;
}
break;
}
asm("NOP");//以下幾行為切換channel時對電容充電時間
asm("NOP");
asm("NOP");
asm("NOP");
asm("NOP");
ADGO=1;
while(ADGO==1);
return (ADRESH*256+ADRESL);
}

上面是我程式裡部份的內容,在電壓部份有一行是
S_NGC_Voltage[4]=((((unsigned long)VoltageADC*(unsigned long)Vamp )*(unsigned long)500)/(unsigned long)1024);
我想問說,這樣寫應該是沒問題吧,程式裡用平均法來取得NGC_Voltage的電壓值,我在線路上,是用VR來調整的,讀出來的也沒什麼大問題,不過卻有個小問題,就是當VR來調整的時候,讀出來的平均值似乎沒辦法做微調,平均後的數值例如
12.58再調VR後就已經到12.64而這中間12.58~12.64卻無法調整到,例如我想調成12.60,VR一轉就跳那麼多,有什麼辦法可以使精度更精密一點呢,電流的部份NGC_Current好像也一樣耶,問題出在哪?

發表於: 2008/4/21 10:23
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------