• <noframes id="6fok0"><bdo id="6fok0"><listing id="6fok0"></listing></bdo>
    <ruby id="6fok0"></ruby>

    <progress id="6fok0"></progress>
  • <progress id="6fok0"></progress>
    <ruby id="6fok0"><table id="6fok0"></table></ruby>
  • <progress id="6fok0"><u id="6fok0"><form id="6fok0"></form></u></progress>

    24小時(shí)聯(lián)系電話(huà):18217114652、13661815404

    中文

    您當前的位置:
    首頁(yè)>
    電子資訊>
    行業(yè)資訊>
    微控制器以高分辨率將...

    行業(yè)資訊

    微控制器以高分辨率將頻率轉換為電壓


    當您需要將測量信號從數字域轉換為模擬域時(shí),此設計是僅需兩個(gè)芯片的合適解決方案。頻率到電壓的轉換在儀器電路中有許多應用。

    該設計(圖1基于14引腳PIC單片機16F753 ,該單片機具有嵌入式16位計數器和9位數模轉換器(DAC)。此設計的輸入頻率范圍在050 KHz之內,其輸出電壓在04.99 V的范圍內,分辨率為10 mV。


    1. PIC微控制器是該頻率電壓轉換器的中心。

    為了實(shí)現轉換,將輸入頻率分為四個(gè)刻度,這些刻度由輸入SEL1SEL2 (圖2手動(dòng)選擇。

    2.通過(guò)DIP微型開(kāi)關(guān)將輸入頻率分為四個(gè)刻度


    當輸入代碼為1FFh511d)時(shí),DAC的最大值為4.99 V;對于輸入值為000h的最大值,則DAC的最大值為0.000V。對于第一個(gè)比例,我們獲得在以下轉換方程式中替換的最大值和最小值:

     

    替換這些值,我們得到兩個(gè)方程式:

     

    求解兩個(gè)方程,我們得到:

     

    求解M,我們得到:

     

    將兩個(gè)值代入公式1中,我們得到偏移值,結果是公式3

     

    現在,公式3可以用PIC基本代碼實(shí)現。但是首先,我們需要使用TIMER11.00秒的間隔測量輸入頻率,如下所示:

     

    TMR1L = 0;                    清除TIMER1寄存器

    TMR1H = 0;

    T1CON.0 = 1;                 計時(shí)器1已啟用

    暫停1000;                 持續1.00

    T1CON.0 = 0;                定時(shí)器1已禁用

    COUNTER.BYTE0 = TMR1L;    將兩個(gè)寄存器都存儲在兩個(gè)字節中

    COUNTER.BYTE1 = TMR1H;  

     

    現在我們可以將等式3應用于:

     

    DIV =計數器* 1000

    DAC = DIV32 9784

    DAC = DAC +失調;     頻率偏移量= 0;

     

    例如,如果在TIMER1中獲得2500個(gè)脈沖,則可以通過(guò)將讀取的脈沖除以我們先前發(fā)現的常數9.784來(lái)獲得DAC的值:

     

    然后,將其轉換為軟件代碼,我們得到:

     

    現在我們可以確定多少個(gè)脈沖等效于所測量的每個(gè)位(圖3。


    3.該表顯示了刻度2的頻率到電壓的轉換。

    對于每個(gè)刻度,必須通過(guò)執行與公式1、23相同的方法來(lái)獲得常數。因此,對于第二個(gè)刻度(5-10 kHz),我們得到公式4

     

    然后我們確定每個(gè)位相當于多少個(gè)脈沖(圖4。


    4.該表顯示了刻度3的頻率到電壓的轉換。

    對于第三個(gè)音階(10-15 kHz),我們得到 公式5


    然后,我們確定每個(gè)位相當于多少個(gè)脈沖(圖5。


    5.下表顯示了刻度3的頻率到電壓的轉換。

    對于第四刻度(10-50 kHz),我們得到公式6


    然后,最后,我們確定6中的每個(gè)位等效于多少個(gè)脈沖。


    6.該表顯示了刻度4的頻率到電壓的轉換

    7和圖8 顯示了針對不同輸入頻率及其各自的電壓輸出的兩種情況。下面的代碼清單顯示了在PIC16F753中實(shí)現的軟件代碼。



    7.屏幕截圖描繪了以0-5 kHz的比例施加的5.000 kHz輸入頻率,以及其各自的5.04 V輸出。


    8.此屏幕截圖顯示了以0-5 kHz的比例施加的1.000 kHz輸入頻率,以及其各自的1.00 V輸出。

    基于PIC16F753的頻率電壓轉換器的軟件代碼

    '*   名稱(chēng)    FREQ-TO-VOLTAGE.BAS                                      

    '*   作者:里卡多·希門(mén)尼斯和加布里埃爾··阿爾瓦雷斯                              

    '*   版本:1

    ;     PIC16F753                                         

    頻率至電壓轉換器

    ; 0hz-5khz = 0v-5 v;    第一尺度

    ; 5khz-10khz = 0-5v;    第二等級

    ; 10khz-15khz = 0-5v; 第三等級

    ; 10khz-50khz = 0-5v; 第四等級

    ; pic16f753

    振蕩器和PORTS配置

    OSCCON = 26美元;= $ 26; 時(shí)鐘設置為4 MHz

    OSCTUNE = 0;

    TRISA =111110;      RA0是輸出,RA1RA5作為輸入

    ANSELA =000010; RA0RA5數字

    TRISC =0000000;    RC0RC2作為輸入,RC3RC5作為  輸出

    ANSELC =000000;   RC0RC5作為數字

    WPUA =011100;RA2,RA3拉動(dòng)使能

    WPUC =000000

    DEFINE LCD_DREG PORTC'PORTCLCD數據端口

    DEFINE LCD_DBIT 0'PORTC.0是數據LSB

    DEFINE LCD_RSREG PORTC'RS連接到PORTC.4

    定義LCD_RSBIT 4

    DEFINE LCD_EREG PORTC'E連接到PORTC.5

    定義LCD_EBIT 5

    使用DEFINE LCD_BITS 4'4數據線(xiàn)

    DEFINE LCD_LINES 2'2行顯示

    DEFINE LCD_COMMANDUS 1500'使用1500uS命令延遲

    DEFINE LCD_DATAUS 44'使用44uS數據延遲

    ; ---------設置LCD ------------------------------------- -------------------

    LCDOUT $ FE,$ 28;  $ 28功能套裝,4

    LCDOUT $ FE,$ 10;  $ 10 SHIFT顯示

    LCDOUT $ FE,$ 0C;   $ 0C顯示

    LCDOUT $ FE,$ 06;   $ 06進(jìn)入模式設定

    ; ------------定時(shí)器配置----------

    T1CON =10000100;      $ 84定時(shí)器1禁用

    ; --- HPWM設置為250 Hz,需要時(shí)刪除分號-

    ; CCP1CON =00001100; PWM模式選擇和CCPx使能

    ; PR2 = 79;      從方程式獲得的值

    ; T2CON =00000100;    啟用計時(shí)器2,PRESCALER 16

    ; CCP1CON.5 = 0

    ; CCP1CON.4 = 0

    ; CCPR1L =000101000;                      

    ; ADC使能

    ADCON0 =10000111; 使能ADC

    ADCON1 =00000000; FOSC / 2

    ; -------- DAC   配置---------------------------------------

    DAC1CON0 =11100000; $ E0,DAC使能正確

    ; ---------聲明變量

    COUNTER VAR WORD;             聲明計數變量

    ; COUNTER.BYTE0 VAR TMR1L

    ; COUNTER.BYTE1

    DAC VAR WORD;               可能由DAC使用

    SEL VAR BYTE;                    刻度選擇器

    HZ VAR BYTE [5];                 赫茲的數字

    DIV VAR WORD;

    VAR BYTE中;

    VBE var word

    OUT VAR BYTE;

    我是VAR WORD;

    I2 VAR WORD;

    ID VAR BYTE [3];

    VIN VAR WORD;

    VID VAR BYTE [4];

    VED VAR BYTE [4];

    VIN2 VAR WORD;

    INVERT VAR PORTA.2; 資料倒換密碼

    x var字節;

    VO VAR WORD [4];

    OPTION_REG.7 = 0;

    ; --------程序啟動(dòng)---------------- 

    RPT

    ;第一測試,讓我們做第一尺度                                                                      

    ; DAC中的位數= 511,所以5KHZ / 511

    ; 5KHZ / 511 = 9.7843

    ; K = 9.7843

    對于X = 05; 開(kāi)始循環(huán)

    HZ [X] =“ 0”;

    VO [X] =“ 0”;

    VIN = 0;     清算變量

    IN = 0;

    OUT = 0;

    SEL = 0;

    DAC = 0;

    DIV = 0;

    DAC = 0;

    VID [X] =“ 0”;

    ID [X] =“ 0”

    NEXT X;

    LCDOUT $ FE,$ C0,等待縮放

    OBTAIN_PULSES :;   

    LCDOUT $ FE,$ 80,“ HZ =”,HZ [4],HZ [3],HZ [2],HZ [1],HZ [0],“ Vout =”,VO [2],。,“ VO [1],VO [0]; 

    TMR1L = 0;   TIMER1中清除寄存器

    TMR1H = 0;

    T1CON.0 = 1;     啟用計時(shí)器1

    暫停1000;

    T1CON.0 = 0;     定時(shí)器1已禁用

    COUNTER.BYTE0 = TMR1L;   存儲低字節寄存器

    COUNTER.BYTE1 = TMR1H;   存儲高字節寄存器

    對于X = 04;     

    IN = COUNTER DIG X;     獲取數字

    LOOKUP IN,[“ 0123456789”],OUT;   解碼每個(gè)數字

    HZ [X] = OUT;                    存儲數字

    NEXT X; 

    LCDOUT $ FE,$ 80,“ HZ =”,HZ [4],HZ [3],HZ [2],HZ [1],HZ [0],“ Vout =”,VO [2],。,“ VO [1],VO [0];

    ; -----選擇------------

    ;對于X = 0255

    SEL =PORTA&%011000>> 3; 讀取PORTA ANS SHIFT右位3

    ;選擇比例

    如果SEL =00,則GOSUB ESC1;      0-5KHZ

    如果SEL =01 THEN GOSUB ESC2;     10K-50K

    如果SEL =10 THEN GOSUB ESC3;     10KHZ-15KHZ

    如果SEL =11 THEN GOSUB ESC4;     5KHZ-10KHZ

     

    如果INVERT   = 0,則DAC = 511-DAC;    反轉數據IF = 0

    GOSUB V_DAC;

    LCDOUT $ FE,$ 80,“ HZ =”,HZ [4],HZ [3],HZ [2],HZ [1],HZ [0],“ Vout =”,VO [2],。,“ VO [1],VO [0];

    GOSUB DAC_OUT;

    轉到OBTAIN_PULSES; 轉到標簽OBTAIN_PULSES;

    ; ------------------第一尺度  ----------------------------- --

    ESC1 :;                 0HZ 5KHZ

    ;   獲取比例值

    DIV =計數器* 1000

    DAC = DIV32 9784

    如果(COUNTER> 5000THEN DAC = 0; ; 如果不在范圍內,則等于零

    LCDOUT $ FE,$ C0,“ 0-5KHZ DAC =”,dec dac,“       ”

    返回;   

    ; ---------------------- 4th SCALE -------------------

    ESC4 :;                     10KHZ-50KHZ

    DIV =計數器* 100

    DAC = DIV32 7827

    DAC = DAC-127;

    如果(計數器> 50000)或(計數器<10000)然后DAC = 0;如果不在范圍內則等于零

    LCDOUT $ FE,$ C0,“ 10-50KHZ DAC =”,DEC DAC,“     ”

    返回;

    ; ----------------------- 3rd scale -----------------

    ESC3                      ; 埃斯卡拉10KHZ-15KHZ

    DIV =計數器* 1000

    DAC = DIV32 9784

    DAC = DAC-1022;

    如果(COUNTER> 15000)或(COUNTER <10000THEN DAC = 0; 如果不在范圍內則DAC = 0

    LCDOUT $ FE,$ C0,“ 10-15KHZ DAC =”,DEC DAC,“       ”

    返回;

    ; ------------------------------------------------- -----------------------------

    ESC2 :;比例5KHZ-10KHZ

    ; --------------獲取此標度的值

    如果(COUNTER> 10000)或(COUNTER <5000)然后DAC = 0; 如果不在范圍內則DAC = 0

    LCDOUT $ FE,$ C0,“ 5-10KHZ DAC =”,DEC DAC,“        ”

    DIV =計數器* 1000

    DAC = DIV32 9784

    DAC = DAC-511;

    如果(COUNTER> 10000)或(COUNTER <5000THEN DAC = 0

    LCDOUT $ FE,$ C0,“ 5-10KHZ DAC =”,DEC DAC,“        ”

    返回;

    ;-伏打DAC ---------

    V_DAC 

    禁用

    VO [1] = DAC * 976;         DAC獲取電壓

    VO [3] = DIV32 100;       與數字有關(guān)

    啟用

    對于X = 02;           

    IN = VO [3] DIGX + 1;     查找相應的數字

    LOOKUP IN,[“ 0123456789”],OUT;解碼數字

    VO [X] = OUT;               商店數字

    NEXT X;

    返回;

    ; ------------------------------------------------- ------------------------------

    DAC_OUT

    DAC1REFL = DAC.BYTE0;       修改DAC0寄存器

    DAC1REFH = DAC.8;               修改DAC08

    返回;                                

    ; ------------------------------

    結束;

     

    請輸入搜索關(guān)鍵字

    確定
    色鲁99热99re超碰精品_91精品一区二区三区无码吞精_亚洲国产欧洲综合997久久_一级a性色生活片久久无
  • <noframes id="6fok0"><bdo id="6fok0"><listing id="6fok0"></listing></bdo>
    <ruby id="6fok0"></ruby>

    <progress id="6fok0"></progress>
  • <progress id="6fok0"></progress>
    <ruby id="6fok0"><table id="6fok0"></table></ruby>
  • <progress id="6fok0"><u id="6fok0"><form id="6fok0"></form></u></progress>