首先,你得先說(shuō)是轉成數字信號還是模擬信號。如果輸知入的正弦波電壓是從0-5V,在數字電路中,那就是用施密特觸發(fā)器,你上百度圖片輸入“施密特觸發(fā)器”,可以道有很多種實(shí)現方式。
如果是正弦波電壓從負電壓到正電壓(即),你就得用運放了,做成“滯回比較器”內的電路,同樣你可以在百度圖片里輸入“滯回比較器”
其實(shí)施密特觸發(fā)器和滯回比較器的傳輸特性很像,我給你張圖吧,這是我自己畫(huà)的哦,上面有注解,分別是這兩個(gè)電路
如果想要理解明白,建議再回去看一下數電模電,把數電中的施密特容觸發(fā)器和模電中的電壓比較器看一下
我給你設計了一個(gè)電路,如圖。
簡(jiǎn)要說(shuō)明:首先把24V交流電源整流濾波得到32V左右的帶有紋波的直流電壓,以此電源作為工作電源,另外用一片開(kāi)關(guān)穩壓器LM2576給CD4069(COMS六反相器)提供一路15V的工作電源(因為CD40系列器件不能在高于18V的電源電壓下工作),用CD4069中的兩個(gè)反相器搭成阻容振蕩電路(這個(gè)電路很容易起振,振蕩頻率由R和C決定,具體參數要你根據需要的頻率去調試一下),再用另一個(gè)反相器對前面的正弦振蕩電路輸出的正弦波進(jìn)行整形,得到正方波,然后用功率管(晶體管或場(chǎng)效應管均可,圖中選擇的型號是NPN型功率達林頓復合管)作輸出級驅動(dòng)電機。電機繞組并聯(lián)的那個(gè)1N5820是用來(lái)保護輸出功率管的。
有什么不明白的可以再溝通。
給你一個(gè)電路,剛給你畫(huà)的,信號整形電路,然后將輸出給單片機的T0,用于計數,然后再給你一個(gè)數字頻率計的程序,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]; // 顯示緩沖區,存放要顯示的8個(gè)字符的段碼值 uchar posit; uchar time_1ms_ok,display_ok=0; uchar time0_old,time0_new,freq_time; uint freq; void display(void) // 8位LED數碼管動(dòng)態(tài)掃描函數 { 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的計數值 time_1ms_ok = 1; display_ok = ~display_ok; if (display_ok) display(); } void freq_to_disbuff(void) // 將頻率值轉化為BCD碼并送入顯示緩沖區 { 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數碼管驅動(dòng) DDRC=0xFF; // T/C0初始化,外部計數方式 TCCR0=0x06; // 外部T0腳下降沿觸發(fā)計數,普通模式 TCNT0=0x00; OCR0=0x00; // T/C2初始化 TCCR2=0x0B; // 內部時(shí)鐘,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"); // 開(kāi)放全局中斷 while (1) { if (time_1ms_ok) { // 累計T/C0的計數值 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內的脈沖計數值送顯示 freq = 0; } time_1ms_ok = 0; } } }。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.150秒