痞酷網_PIGOO

 找回密碼
 立即註冊
!!! [系統偵測到廣告阻擋軟體] !!!

如果您覺得痞酷網對您有些許幫助,或者您認同痞酷網的理想,

那麼希望您將痞酷網設定為白名單.

並請在上論壇的時候,動動您的手指,用行動支持我們.

謝謝!
樓主: antlu

簡易電感量測---- 野人獻曝經驗談

  [複製鏈接]
發表於 2012-11-11 06:07:37 | 顯示全部樓層
void Init_Timer1(void)
{
TMOD |= 0x20;          //使用模式2,8位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH1=(256-230);              //给定初值,这里使用定时器最大值从0开始计数一直到256溢出自動重載
TL1=(256-230);
EA=1;            //总中断打开
ET1=1;           //定时器中断打开
TR1=1;           //定时器开关打开
}

你沒設IP暫存器,要設timer1中斷優先權,
IP=0x04;
發表於 2012-11-11 06:42:20 | 顯示全部樓層
單晶片微電腦 發表於 2012-11-11 06:07 AM static/image/common/back.gif
void Init_Timer1(void)
{
TMOD |= 0x20;          //使用模式2,8位定时器,使用"|"符号可以在使用多个定 ...

IP=0x08 才對
 樓主| 發表於 2012-11-11 10:17:48 | 顯示全部樓層
單晶片微電腦 發表於 2012-11-11 06:42 AM static/image/common/back.gif
IP=0x08 才對

我從未設過!! (也不知道如何設定,怎麼設!) 假如我把 TIMER1改成 TIMER0 那是否就不需要設這一個了?
我很有實驗精神!! 我來改一改看會不會精準一些!!  感謝了!!!
發表於 2012-11-11 11:15:23 | 顯示全部樓層
可能問題出在你是用訊號產生器一直產生脈波,程式也沒配合到。
你用stc都可以做出來了,沒有理由用2051做不出來,
2051試一下用真正的電感做看看,訊號從stc那台接過來。
 樓主| 發表於 2012-11-12 22:59:40 | 顯示全部樓層
本帖最後由 antlu 於 2012-11-12 11:07 PM 編輯
單晶片微電腦 發表於 2012-11-11 11:15 AM static/image/common/back.gif
可能問題出在你是用訊號產生器一直產生脈波,程式也沒配合到。
你用stc都可以做出來了,沒有理由用2051做不 ...



今天把問題完成了 89c2051完成版 閃爍也變小了!! 跟公式比較算是"符合"了!! 浮點數佔4BYTE 長度也夠!!

IMG0018A.jpg

IMG0019A.jpg

IMG0020A.jpg


/*-----------------------------------------------
   7段顯示共陰 電感計 89C2051用
                        目前更改中断優先 ip=0x80; 11/11
   閃爍問題 顯示副程式 DataPort=0 放前面
   把顯示的延遲時間降低為10ms
   先把頻率顯示做出來 a*10=1秒的計數 再除以100就是每秒 xxx.xkhz
   最後把公式套進去 本電路使用 100uH 1500pF
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
//#include<stdio.h>
//#include<intrins.h>
bit OVERFLOWFLAG;
bit TIMERFLAG;
unsigned int LVint;
#define DataPort P1//P0.0~P0.7 七段顯示的段顯示(共陰極)
#define DrivePort P3//驅動共陰極顯示器
unsigned char code  dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰7段值0~9
//unsigned char code  dofly_DuanMa[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽7段值0~9
unsigned char code dofly_WeiMa[4]={ 0xfe,0xfd,0xfb,0xf7};//共陰位碼1>>秒, 位碼2>>10秒,位碼3>>分, 位碼4>>10分,
//unsigned char code dofly_WeiMa[8]={ 0x01,0x02,0x04,0x08, 0x01,0x02,0x04,0x08 };//{ 0x01,0x02,0x04,0x08, 0x10,0x20,0x40,0x80 };//共陽位碼1>>秒, 位碼2>>10秒,位碼3>>分, 位碼4>>10分,
unsigned char TempData[4]; //存??示值的全局?量,把段碼的資料存到要顯示的緩衝器上面,利用類似查表的對應方式,送出至顯示器. TempData[ ] 是放置要顯示的7段資料
void Get_L (void);
void Display_Data_Operation(void);
void Display(char n,char Num);
void DelayUs2x(unsigned char t);
void Init_Timer0(void);
void Init_Timer1(void);
void DelayUs2x(unsigned char t);
void DelayMs(unsigned char t);
/*------------------------------------------------
                    主程序
------------------------------------------------*/
main()
{
Init_Timer0();      //初始化定时器0
Init_Timer1();      //初始化定时器1
while(1)
{
  if(TIMERFLAG)      //定时100ms到,做数据处理
    {
         Get_L();//把計數的頻率轉換成LVint成為電感值
     Display_Data_Operation();//把 電感值LV轉成顯示
        }
    Display(0,4);//平常一直顯示
  }
}



/*------------------------------------------------
                    定时器0初始化子程序
                                        本程序用于计数
------------------------------------------------*/
void Init_Timer0(void)
{
TMOD |= 0x01 | 0x04;          //使用模式1,16位计数器,使用"|"符号可以在使用多个定时器时不受影响                     
TH0=0x00;              //给定初值
TL0=0x00;         
EA=1;            //总中断打开
ET0=1;           //定时器中断打开
TR0=1;           //定时器开关打开
}
/*------------------------------------------------
                    定时器1初始化子程序
                                        本程序用于定时
------------------------------------------------*/
void Init_Timer1(void)
{
TMOD |= 0x20;          //使用模式2,8位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH1=(256-230);   //给定初值,这里使用定时器最大值从0开始计数一直到256溢出自動重載
TL1=(256-230);   //11.0592 ---250us
EA=1;            //总中断打开
ET1=1;           //定时器中断打开
TR1=1;           //定时器开关打开
// 你沒設IP暫存器,要設timer1中斷優先權,
IP=0x08;//單晶片微電腦大  建議
}

/*------------------------------------------------
                 定时器0中断子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=00;              //重新给定初值
TL0=00;
OVERFLOWFLAG=1;  //溢出标志
}
/*------------------------------------------------
                 定时器1中断子程序
------------------------------------------------*/
void Timer1_isr(void) interrupt 3
{
  static unsigned int i;//自動載入模式
   i++;
   if(i==400)       //100ms 计数时间单位,得出100ms脉冲个数 x10就是1s中脉冲个数,即为频率 Hz
    {
     i=0;
     TR0=0;        //2个定时器关闭
     TR1=0;
     TIMERFLAG=1;  //标志位清零
   }
}

void DelayUs2x(unsigned char t)
  {   
   while(--t);
  }

void DelayMs(unsigned char t)
  {     
   while(t--)
    {
     DelayUs2x(226);//for 11.0592
         DelayUs2x(226);
    }
   }

//--------------------------------------------------------------------------------------------
void Display_Data_Operation(void)//以時間分秒為共同語言, 數字轉換成7段顯示
{
TempData[3]=dofly_DuanMa[LVint/1000];
if(LVint<1000)//去零顯示
   TempData[3]=0;
TempData[2]=dofly_DuanMa[LVint%1000/100];//
if(LVint<100)
  TempData[2]=0;
TempData[1]=dofly_DuanMa[LVint%100/10];//
TempData[0]=dofly_DuanMa[LVint%10];//
Display(0,4);
}       
//--------------------------------------------------------------------------------------------
void Display(char n,char Num)// 把七段顯示出去,假如Startflag==1 則輸出RELAY,已經不管controlBit了 0516
     {
      unsigned char nu;
      n=0;
          for(nu=0;nu<Num;nu++)
           {
       DataPort=0;//SIMON大建議
           DataPort= TempData[nu]; //
       DrivePort= dofly_WeiMa[nu];      
       DelayMs(10); //減少閃爍
//       DataPort=0;//改到前方 SIMON大建議
       }          
      }


void Get_L (void)
   {
//   unsigned  long int a;變更為float 1770>>1482
    float LV,sq,a;

           a=TL0+TH0*256;//读取计数值 這是1/10 秒的數值
//     a=a*10;
//         sq=(a/1000)*(a/1000);//這很重要,不能改成 (a*a/1000000)
    sq=(a*a/10000);//code= 1482 >>1431
        LV=(1000000/(sq*39.4*0.00146))-90;//顯示成微亨利單位 90uH 1460pF

//     LV=a*10/100;//顯示頻率 a*10 LM311 100uH 1500pF 共振439.5k a=439500所以要再除100
         LVint=LV;//change to 整數
         TR0=1;                     //2个定时器打开
         TR1=1;
         TH0=0;                     //保证计数器初值为0
         TL0=0;

         TIMERFLAG=0;               //打开计时计数标志
    }
發表於 2012-11-13 06:22:17 | 顯示全部樓層
程式還有一些細節問題,像石英你用11.059不像用12M那麼精準,400次下來多少會有一點誤差,
還有自動載入模式是一直在跑的,你有關掉,但是你沒還回原設定值,
if(i==400)       //100ms 计数时间单位,得出100ms脉冲个数 x10就是1s中脉冲个数,即为频率 Hz
    {
     i=0;
     TR0=0;        //2个定时器关闭
   TR1=0;
      TH1=(256-230); //建議     
     TIMERFLAG=1;  //此行可省略

還有下面這邊也是先清再開
LVint=LV;//change to 整數
TH0=0;                     //保证计数器初值为0
TL0=0;
TR0=1;                     //2个定时器打开
TR1=1;

程式越改越漂亮,你有覺得嗎?
      
 樓主| 發表於 2012-11-13 09:17:05 | 顯示全部樓層
單晶片微電腦 發表於 2012-11-13 06:22 AM static/image/common/back.gif
程式還有一些細節問題,像石英你用11.059不像用12M那麼精準,400次下來多少會有一點誤差,
還有自動載入模 ...

單晶片微電腦大:
   感謝您!!  我會把他加進去的!! (但是程式不再公開更新了..)
   這次的確學到很多技巧!!(眉角) 像是先前你建議的計算程式修改簡化,我發現用 浮點運算才可以,用 長整數就不行 同樣佔了4BYTE 但是結果就不同,89C2051的計算值和實際值就符合,而先前的 STC89C52RC的值就還要乘上2.56倍,反而有點不清楚了...計頻跟時間關係很大,真的需要算的很精細,...
發表於 2012-11-13 14:48:25 | 顯示全部樓層
你取0.1秒就是x10啊,我也不知道你x2.56跟x25是做什麼,
總之各位大大都儘量幫你完成程式,就上面的程式而言,還可以精簡很多,
<如果你用VHDL這種寫的話,程式不精簡,以後開發成IC的話,相對邏輯閘多,
製造積體電路的成本也就增加>
 樓主| 發表於 2012-11-13 19:37:09 | 顯示全部樓層
單晶片微電腦 發表於 2012-11-13 02:48 PM static/image/common/back.gif
你取0.1秒就是x10啊,我也不知道你x2.56跟x25是做什麼,
總之各位大大都儘量幫你完成程式,就上面的程式而 ...

單晶片微電腦大:
   VHDL 沒聽過!!以前有聽過 HPBASIC...
 樓主| 發表於 2012-11-13 19:45:31 | 顯示全部樓層
把他包裝起來算是完成品!!

利用以前的軟碟片的盒子以及喇叭輸出端子台還算方便量測電感!!
各方向的照片

IMG0344A.jpg

IMG0345A.jpg

IMG0346A.jpg

IMG0352A.jpg

量測 1000uH & 27uH

IMG0353A.jpg

IMG0355A.jpg

IMG0356A.jpg
IMG0351A.jpg

評分

1

查看全部評分

發表於 2012-11-13 20:53:00 | 顯示全部樓層
水喔!!
發表於 2012-11-13 22:38:47 | 顯示全部樓層
antlu 發表於 2012-11-13 07:45 PM static/image/common/back.gif
把他包裝起來算是完成品!!

利用以前的軟碟片的盒子以及喇叭輸出端子台還算方便量測電感!!

阿乾兄

您的"包裝術"...越來越厲害啦!!!.....什麼都難不倒您!!
 樓主| 發表於 2012-11-13 22:46:28 | 顯示全部樓層
單晶片微電腦 發表於 2012-11-13 08:53 PM static/image/common/back.gif
水喔!!

感謝支持!! 這位美女真"給力"啊!!
 樓主| 發表於 2012-11-13 22:52:04 | 顯示全部樓層
arthur0518 發表於 2012-11-13 10:38 PM static/image/common/back.gif
阿乾兄

您的"包裝術"...越來越厲害啦!!!.....什麼都難不倒您!!

arthur大:
    剛好有"撿到"磁碟片盒子,還有那喇叭接頭的"拆板",已經進出工作是好幾次了!! 一切隨緣!!! 一直向你看齊!!  對了 雄爸那裡有 LED模組喔!! 你的12V50W的燈可以用嗎?
發表於 2012-11-15 10:32:33 | 顯示全部樓層
antlu 發表於 2012-11-12 10:59 PM static/image/common/back.gif
今天把問題完成了 89c2051完成版 閃爍也變小了!! 跟公式比較算是"符合"了!! 浮點數佔4BYTE 長度也夠!!

...

哈..這個大大, 這實在太好了

不過, 俺有一點點小建議, 如果程序可以這樣設計, 會不會更優呢. 例如

TIMER1 固定時間做 ISR,

裡面只是讀取 TIMER2 計數器的脈衝數, 如果沒有 OVERFLOW, 就是 8 BIT 或 16 BIT, 存起來; 有 OVERFLOW, 可能是頻率太高, 可能要加 256 或 65535

然後讀取 7 劃管 的其中一位緩衝區, 點亮對應的那個7 劃管

重設TIMER1計時器

重設TIMER2 計數器

設定下一個 7 劃管 的位置指標 (POINTER)

ISR 完畢



那在 MAIN 裡面, 負責計算 F => L, BCD 換算等等, 存到 7 劃管的四位緩衝區

你看這樣是不是就可以免去 7 劃管 點亮的延遲需要呢, 因為每次 ISR, 7 劃管就被點亮一位, 直到下次 ISR, 點亮下一位, 自動完成了掃描點亮的動作.
 樓主| 發表於 2012-11-15 18:31:31 | 顯示全部樓層
xiaolaba 發表於 2012-11-15 10:32 AM static/image/common/back.gif
哈..這個大大, 這實在太好了

不過, 俺有一點點小建議, 如果程序可以這樣設計, 會不會更優呢. 例如

xiaolaba 大:
   看起來好複雜啊!!(我的IQ只有7~80)再因為年齡所以還要* 0.8=5~60...
   最近開始 從網路上尋找 89C2051 的AD 程式,想要做一下 簡易的 AD 轉換,看可不可以為 ESR表加分一下!!
   感謝提供寶貴意見,看後續時間許可再改寫...
發表於 2012-11-15 22:55:37 | 顯示全部樓層
antlu 發表於 2012-11-15 06:31 PM static/image/common/back.gif
xiaolaba 大:
   看起來好複雜啊!!(我的IQ只有7~80)再因為年齡所以還要* 0.8=5~60...
   最近開始 從網路 ...

AT89C2051 好像沒有內建 A/D, 如果你要做的話也可以, 但是要用軟件, 用P1.0 P1.1 (AN0 / AN1) 配合RC計算充電時間 dV/dt, 就可以了, 再用P3.6的翻轉時間計算電壓, 就是你的A/D值. 不過速度比較慢, 可能到不了0.1K, 不過可以. ATMEL 的官網好像有個 AN, 號碼忘記了, 你找找看.
 樓主| 發表於 2012-11-15 23:15:46 | 顯示全部樓層
xiaolaba 發表於 2012-11-15 10:55 PM static/image/common/back.gif
AT89C2051 好像沒有內建 A/D, 如果你要做的話也可以, 但是要用軟件, 用P1.0 P1.1 (AN0 / AN1) 配合RC計算 ...

xiaolaba大:
    正在拜讀您的大作!! ESR 表 我以前沒有用新閱讀,請見諒!! 你已經把 震盪 和 A/D & D/A 都做出來了,真想直接就 COPY 來做!! 你的 MCU 好特別啊!! 只有8隻腳,更厲害的是 居然 震盪 A/D D/A 都包辦!! 是不是要把 MCU給榨乾!!! 先來三個 膜拜 Orz...Orz...Orz.... 以前在論壇上有人用 PIC 做出555的震盪信號,我已經覺德厲害了!! 我先前說的要做ESR表 真是"關老爺面前耍大刀啊!!" 不知道你的作品願不願意分享啊? 尤其是MCU的程式,可以嗎?
發表於 2012-11-16 01:10:19 | 顯示全部樓層
antlu 發表於 2012-11-13 10:52 PM static/image/common/back.gif
arthur大:
    剛好有"撿到"磁碟片盒子,還有那喇叭接頭的"拆板",已經進出工作是好幾次了!! 一切隨緣!!!  ...

阿乾兄

雄爸那裡的 LED模組....我有看了....目前我手中沒有(多餘的)大瓦數的LED可以用!!!....

那個LED模組有夠亮....但是體積有點大.......還在想辦法塞進球燈裡!!!!.....謝謝啦!!!....

 樓主| 發表於 2012-11-19 20:21:30 | 顯示全部樓層
本帖最後由 antlu 於 2012-11-19 08:54 PM 編輯

修正:
  今天發現 89C2051 的版本使用的電感 100UH 電容器1500PF 請大家要注意!!
  另外 89C2051 因為P1.0 P1.1 特殊輸入,所以要輸出七段顯示的時候需要補上 2隻10K的拉上電阻並且接到5V..

89C2051Lmeter.png
 樓主| 發表於 2012-11-21 21:00:47 | 顯示全部樓層
假如手頭上沒有 LM311 也可以用 LM339 比較器來代用!!
發表於 2012-11-21 21:13:33 | 顯示全部樓層
antlu 發表於 2012-11-21 09:00 PM static/image/common/back.gif
假如手頭上沒有 LM311 也可以用 LM339 比較器來代用!!

大大你好, 研究了一下, 你覺得這個可行嗎?
省略 LM311, 用 AT89C2051 內置的 比較器, 概念大該如下,

AT89C2051 internal comparator.jpg
 樓主| 發表於 2012-11-22 00:18:18 | 顯示全部樓層
xiaolaba 發表於 2012-11-21 09:13 PM static/image/common/back.gif
大大你好, 研究了一下, 你覺得這個可行嗎?
省略 LM311, 用 AT89C2051 內置的 比較器, 概念大該如下,

xiaolaba大:
  這個創意太強了!! 我擔心的是 使用 定義 P3^6=P3^7 他是否會動作? 因為電路之間的動作會隨著指令間運作,但是震盪電路是持續的!! 還是值得試看看!!
發表於 2012-11-22 11:26:28 | 顯示全部樓層
antlu 發表於 2012-11-22 12:18 AM static/image/common/back.gif
xiaolaba大:
  這個創意太強了!! 我擔心的是 使用 定義 P3^6=P3^7 他是否會動作? 因為電路之間的動作會隨 ...

不敢當.

人家用PIC做得出來, 也來嘗試2051可以不.

這是俺覺得玩MCU的最高境界, 設計, 設計, 設計, 還是設計, 全盤計劃, 執行, 看成果.....這才是玩MCU的樂趣, 來來去去給你點個流水燈, 燒別人做好的HEX, 初學就可以, 一陣子以後就會厭倦沒新意. 所以這個 MCU LC meter 是很有學習價值的, 自編自導自演, 你看是不?

加油加油, 期待你的成果...
 樓主| 發表於 2012-11-22 17:56:38 | 顯示全部樓層
xiaolaba 發表於 2012-11-22 11:26 AM static/image/common/back.gif
不敢當.

人家用PIC做得出來, 也來嘗試2051可以不.

xiaolaba 大:
   本來想做 遙控電扇,現在會"延後",因為 AD這快要好好的摸索!!也許會來一個 X溫烙鐵也說不定!! 溫度計...
 樓主| 發表於 2012-12-1 22:44:26 | 顯示全部樓層
第二台電感表!! 使用 89C2051 +LM311+7805 外加電源
這次原先的亮度超弱(電路與上次相同),經過上網查詢發現 P1^0~P1^7 都加上一支 1K電阻,結果亮度提升到很滿意!!

01Dec12.JPG

01Dec13.JPG

01Dec14.JPG

後續進行中 1458+LS373+R-2R
01Dec15.JPG
發表於 2012-12-2 02:34:43 | 顯示全部樓層
antlu 發表於 2012-12-1 10:44 PM static/image/common/back.gif
第二台電感表!! 使用 89C2051 +LM311+7805 外加電源
這次原先的亮度超弱(電路與上次相同),經過上網查詢發現 ...

綠色本來亮度就有點弱。你會用小數點了,是我說的方式嗎?
發表於 2012-12-2 10:31:35 | 顯示全部樓層
阿乾大:
七節式LED,你可以找看看橘色或橘紅色的,亮度較好.
 樓主| 發表於 2012-12-2 12:16:30 | 顯示全部樓層
單晶片微電腦 發表於 2012-12-2 02:34 AM static/image/common/back.gif
綠色本來亮度就有點弱。你會用小數點了,是我說的方式嗎?

單晶片微電腦大:
誤打誤撞的啦!! 開路無震盪的顯示結果!!
 樓主| 發表於 2012-12-2 12:18:26 | 顯示全部樓層
scottwang 發表於 2012-12-2 10:31 AM static/image/common/back.gif
阿乾大:
七節式LED,你可以找看看橘色或橘紅色的,亮度較好.

scottwang大:
   這是拆機品(溫控裡的設定溫度,上次那一個是溫度控制的實際溫度)我是用萬用版所以懶得和一堆連線...
您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2024-11-17 10:35 PM , Processed in 0.371971 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2023 Discuz! Team.