首先,你得先說是轉(zhuǎn)成數(shù)字信號還是模擬信號。如果輸知入的正弦波電壓是從0-5V,在數(shù)字電路中,那就是用施密特觸發(fā)器,你上百度圖片輸入“施密特觸發(fā)器”,可以道有很多種實現(xiàn)方式。
如果是正弦波電壓從負電壓到正電壓(即),你就得用運放了,做成“滯回比較器”內(nèi)的電路,同樣你可以在百度圖片里輸入“滯回比較器”
其實施密特觸發(fā)器和滯回比較器的傳輸特性很像,我給你張圖吧,這是我自己畫的哦,上面有注解,分別是這兩個電路
如果想要理解明白,建議再回去看一下數(shù)電模電,把數(shù)電中的施密特容觸發(fā)器和模電中的電壓比較器看一下
我給你設(shè)計了一個電路,如圖。
簡要說明:首先把24V交流電源整流濾波得到32V左右的帶有紋波的直流電壓,以此電源作為工作電源,另外用一片開關(guān)穩(wěn)壓器LM2576給CD4069(COMS六反相器)提供一路15V的工作電源(因為CD40系列器件不能在高于18V的電源電壓下工作),用CD4069中的兩個反相器搭成阻容振蕩電路(這個電路很容易起振,振蕩頻率由R和C決定,具體參數(shù)要你根據(jù)需要的頻率去調(diào)試一下),再用另一個反相器對前面的正弦振蕩電路輸出的正弦波進行整形,得到正方波,然后用功率管(晶體管或場效應(yīng)管均可,圖中選擇的型號是NPN型功率達林頓復(fù)合管)作輸出級驅(qū)動電機。電機繞組并聯(lián)的那個1N5820是用來保護輸出功率管的。
有什么不明白的可以再溝通。
給你一個電路,剛給你畫的,信號整形電路,然后將輸出給單片機的T0,用于計數(shù),然后再給你一個數(shù)字頻率計的程序,AVR的。
#include <iom16v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int uchar led_7[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; uchar position[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; uchar dis_buff[8]; // 顯示緩沖區(qū),存放要顯示的8個字符的段碼值 uchar posit; uchar time_1ms_ok,display_ok=0; uchar time0_old,time0_new,freq_time; uint freq; void display(void) // 8位LED數(shù)碼管動態(tài)掃描函數(shù) { PORTA = 0xff; PORTC = led_7[dis_buff[posit]]; if (posit==5) PORTC = PORTC | 0x80; PORTA = position[posit]; if (++posit >=8 ) posit = 0; } // Timer 2 output compare interrupt service routine #pragma interrupt_handler timer2_isr:4 void timer2_isr(void) { time0_new = TCNT0; // 1ms到,記錄當前T/C0的計數(shù)值 time_1ms_ok = 1; display_ok = ~display_ok; if (display_ok) display(); } void freq_to_disbuff(void) // 將頻率值轉(zhuǎn)化為BCD碼并送入顯示緩沖區(qū) { uchar i,j=7; for (i=0;i<=4;i++) { dis_buff[j-i] = freq % 10; freq = freq / 10; } dis_buff[2] = freq; } void main(void) { unsigned char i; DDRA=0xFF; // LED數(shù)碼管驅(qū)動 DDRC=0xFF; // T/C0初始化,外部計數(shù)方式 TCCR0=0x06; // 外部T0腳下降沿觸發(fā)計數(shù),普通模式 TCNT0=0x00; OCR0=0x00; // T/C2初始化 TCCR2=0x0B; // 內(nèi)部時鐘,32分頻(4M/32=125KHz),CTC模式 TCNT2=0x00; OCR2=0x7C; // OCR2 = 0x7C(124),(124+1)/125=1ms TIMSK=0x80; // 允許T/C2比較匹配中斷 for (i=0;i<=7;i++) dis_buff[i] = 0; time0_old = 0; asm("sei"); // 開放全局中斷 while (1) { if (time_1ms_ok) { // 累計T/C0的計數(shù)值 if (time0_new >= time0_old) freq = freq + (time0_new - time0_old); else freq = freq + (256 - time0_old + time0_new); time0_old = time0_new; if (++freq_time >= 100) { freq_time = 0; // 100ms到, freq_to_disbuff(); // 將100ms內(nèi)的脈沖計數(shù)值送顯示 freq = 0; } time_1ms_ok = 0; } } }。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁面生成時間:3.150秒