0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于單片機(jī)的簡易示波器設(shè)計(jì)

技術(shù)讓夢想更偉大 ? 來源:gitee.com ? 2023-08-30 09:22 ? 次閱讀

學(xué)習(xí)單片機(jī),通過做簡單的小項(xiàng)目,是成長最快的一種方法。今天就給大家分享一個(gè)制作簡易示波器的小項(xiàng)目,代碼開源,希望對(duì)初學(xué)者有幫助。

一、前言

該項(xiàng)目是基于正點(diǎn)原子精英板制作的一個(gè)簡易示波器,可以讀取信號(hào)的頻率和幅值,并可以通過按鍵改變采樣頻率和控制屏幕的更新暫停。

0812a6ec-4676-11ee-a2ef-92fbcf53809c.png

二、硬件接線

將PA6與PA4相連,可觀察到正弦波。

將PA6與PA5相連,可觀察到三角波/噪聲(默認(rèn)三角波)。

KEY_UP控制波形的更新和暫停。

KEY_1降低采樣率。

KEY_0提高采樣率。

三、信號(hào)的采集

信號(hào)的采集主要是依靠ADC(通過定時(shí)器觸發(fā)采樣,與在定時(shí)器中斷中開啟一次采樣的效果類似,以此來控制采樣的間隔時(shí)間相同),然后通過DMA將所采集的數(shù)據(jù)從ADC的DR寄存器轉(zhuǎn)移到一個(gè)變量中,此時(shí)完成一次采樣。

由于設(shè)定采集一次完整的波形需要1024個(gè)點(diǎn),即需要連續(xù)采集1024次才算一次完整的波形采樣(需要采集1024個(gè)點(diǎn)的原因在后面會(huì)提到)。

因此我們還需創(chuàng)建一個(gè)數(shù)組用于存儲(chǔ)這些數(shù)據(jù),并在DMA中斷中,將成功轉(zhuǎn)移到變量中的數(shù)據(jù)依次存儲(chǔ)進(jìn)數(shù)組(注意此數(shù)組中存入的數(shù)據(jù)是12位的數(shù)字量,還未做回歸處理),完成1024個(gè)數(shù)據(jù)的采樣和儲(chǔ)存,用于后續(xù)在LCD上進(jìn)行波形的顯示和相關(guān)參數(shù)的處理。

此案例用到的是ADC1的通道6(即PA6口)進(jìn)行數(shù)據(jù)的采樣,主要需注意將ADC轉(zhuǎn)換的觸發(fā)方式改為定時(shí)器觸發(fā)(我用的是定時(shí)器2的通道2進(jìn)行觸發(fā),由于STM32手冊(cè)提示只有在上升沿時(shí)可以觸發(fā)ADC,因此我們需要讓定時(shí)器2的通道2每隔固定的時(shí)間產(chǎn)生一個(gè)上升沿)。

將定時(shí)器2設(shè)置成PWM模式,即可令A(yù)DC1在定時(shí)器2的通道2每產(chǎn)生一次上升沿時(shí)觸發(fā)采樣,后續(xù)即可通過改變PWM的頻率(即定時(shí)器的溢出頻率),便可控制采樣的頻率。

四、代碼配置

ADC的配置:

/**********************************************************
簡介:ADC1-CH6初始化函數(shù)
***********************************************************/
voidAdc_Init(void)
{
ADC_InitTypeDefADC_InitStructure;
GPIO_InitTypeDefGPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_ADC1,ENABLE);//使能ADC1通道時(shí)鐘


RCC_ADCCLKConfig(RCC_PCLK2_Div6);//設(shè)置ADC分頻因子672M/6=12,ADC最大時(shí)間不能超過14M

//PA6作為模擬通道輸入引腳
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模擬輸入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

ADC_DeInit(ADC1);//復(fù)位ADC1,將外設(shè)ADC1的全部寄存器重設(shè)為缺省值

ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC工作模式:ADC1工作在獨(dú)立模式
ADC_InitStructure.ADC_ScanConvMode=DISABLE;//模數(shù)轉(zhuǎn)換工作在單通道模式
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//模數(shù)轉(zhuǎn)換工作在非連續(xù)轉(zhuǎn)換模式
ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T2_CC2;//轉(zhuǎn)換由定時(shí)器2的通道2觸發(fā)(只有在上升沿時(shí)可以觸發(fā))
ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//ADC數(shù)據(jù)右對(duì)齊
ADC_InitStructure.ADC_NbrOfChannel=1;//順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目
ADC_Init(ADC1,&ADC_InitStructure);//根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器

ADC_Cmd(ADC1,ENABLE);//使能指定的ADC1

ADC_DMACmd(ADC1,ENABLE);//ADC的DMA功能使能

ADC_ResetCalibration(ADC1);//使能復(fù)位校準(zhǔn)

ADC_RegularChannelConfig(ADC1,ADC_Channel_6,1,ADC_SampleTime_1Cycles5);//ADC1通道6,采樣時(shí)間為239.5周期

ADC_ResetCalibration(ADC1);//復(fù)位較準(zhǔn)寄存器

while(ADC_GetResetCalibrationStatus(ADC1));//等待復(fù)位校準(zhǔn)結(jié)束

ADC_StartCalibration(ADC1);//開啟AD校準(zhǔn)

while(ADC_GetCalibrationStatus(ADC1));//等待校準(zhǔn)結(jié)束

ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能指定的ADC1的軟件轉(zhuǎn)換啟動(dòng)功能

}

定時(shí)器的配置:

/******************************************************************
函數(shù)名稱:TIM2_PWM_Init(u16arr,u16psc)
函數(shù)功能:定時(shí)器3,PWM輸出模式初始化函數(shù)
參數(shù)說明:arr:重裝載值
 psc:預(yù)分頻值
備注:通過TIM2-CH2的PWM輸出觸發(fā)ADC采樣
*******************************************************************/
voidTIM2_PWM_Init(u16arr,u16psc)
{
GPIO_InitTypeDefGPIO_InitStructure;
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;
TIM_OCInitTypeDefTIM_OCInitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//使能定時(shí)器2時(shí)鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);//使能GPIO外設(shè)和AFIO復(fù)用功能模塊時(shí)鐘

//設(shè)置該引腳為復(fù)用輸出功能,輸出TIM2CH2的PWM脈沖波形GPIOA.1
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//TIM_CH2
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用推挽輸出
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIO

//初始化TIM3
TIM_TimeBaseStructure.TIM_Period=arr;//設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值
TIM_TimeBaseStructure.TIM_Prescaler=psc;//設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值
TIM_TimeBaseStructure.TIM_ClockDivision=0;//設(shè)置時(shí)鐘分割:TDTS=Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM向上計(jì)數(shù)模式
TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);//根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位

//初始化TIM2Channel2PWM模式
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//選擇定時(shí)器模式:TIM脈沖寬度調(diào)制模式2
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//比較輸出使能
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;//輸出極性:TIM輸出比較極性高
TIM_OCInitStructure.TIM_Pulse=1000;//發(fā)生反轉(zhuǎn)時(shí)的計(jì)數(shù)器數(shù)值,用于改變占空比
TIM_OC2Init(TIM2,&TIM_OCInitStructure);//根據(jù)T指定的參數(shù)初始化外設(shè)TIM2

TIM_CtrlPWMOutputs(TIM2,ENABLE);//使能PWM輸出

TIM_Cmd(TIM2,ENABLE);//使能TIM2
}

DMA配置:

/******************************************************************
函數(shù)名稱:MYDMA1_Config()
函數(shù)功能:DMA1初始化配置
參數(shù)說明:DMA_CHx:DMA通道選擇
 cpar:DMA外設(shè)ADC基地址
 cmar:DMA內(nèi)存基地址
cndtrDMA通道的DMA緩存的大小
備注:
*******************************************************************/
voidMYDMA1_Config(DMA_Channel_TypeDef*DMA_CHx,u32cpar,u32cmar,u16cndtr)
{
DMA_InitTypeDefDMA_InitStructure;
NVIC_InitTypeDefNVIC_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//使能DMA傳輸

DMA_DeInit(DMA_CHx);//將DMA的通道1寄存器重設(shè)為缺省值
DMA_InitStructure.DMA_PeripheralBaseAddr=cpar;//DMA外設(shè)ADC基地址
DMA_InitStructure.DMA_MemoryBaseAddr=cmar;//DMA內(nèi)存基地址
DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//數(shù)據(jù)傳輸方向,從外設(shè)讀取發(fā)送到內(nèi)存//
DMA_InitStructure.DMA_BufferSize=cndtr;//DMA通道的DMA緩存的大小
DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外設(shè)地址寄存器不變
DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//內(nèi)存地址寄存器遞增
DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord;//數(shù)據(jù)寬度為16位
DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord;//數(shù)據(jù)寬度為16位
DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;//工作在循環(huán)模式
DMA_InitStructure.DMA_Priority=DMA_Priority_High;//DMA通道x擁有高優(yōu)先級(jí)
DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//DMA通道x沒有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏?DMA_Init(DMA_CHx,&DMA_InitStructure);//ADC1匹配DMA通道1

DMA_ITConfig(DMA1_Channel1,DMA1_IT_TC1,ENABLE);//使能DMA傳輸中斷

//配置中斷優(yōu)先級(jí)
NVIC_InitStructure.NVIC_IRQChannel=DMA1_Channel1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);

DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA通道
}

注意:

由于在設(shè)置PWM時(shí)將TIM_Pulse默認(rèn)設(shè)置為1000,因此在初始化定時(shí)器2時(shí),TIM_Period的值不能小于該值,可自行修改。TIM_Pulse的值并不會(huì)影響采樣頻率。

采樣頻率= 定時(shí)器2溢出頻率=SYSCLK/預(yù)分頻值/溢出值因此如果將TIM_Pulse設(shè)為1,TIM_Period設(shè)為2,TIM_Prescaler設(shè)為1,理論上采樣頻率最高可達(dá)36Mhz。

五、數(shù)據(jù)的處理

數(shù)據(jù)的處理主要是要求出信號(hào)的頻率和幅值等相關(guān)參數(shù)。幅值可以通過找出之前存儲(chǔ)1024個(gè)點(diǎn)的數(shù)組中最大最小值,回歸處理過后算出差值。

難點(diǎn)主要在于頻率的求取。一個(gè)信號(hào)中可能包含多種頻率成分,而我顯示的是幅值最大的頻率分量(當(dāng)然其他頻率也可獲得)。這里便用到了STM32提供的DSP庫中的FFT(快速傅里葉變換),DSP庫在最后的源碼中有。

需要采樣1024個(gè)點(diǎn)的原因:FFT算法要求樣本數(shù)為2的n次方,而DSP庫中提供了64,256和1024樣本數(shù)對(duì)應(yīng)的庫函數(shù),因此選用1024最大樣本數(shù)可以使頻率分辨率最小,更加精確。(定義頻率分辨率f0=fs/N,其中fs等于采樣率,N為采樣點(diǎn)數(shù))

需注意:FFT后的輸出不是實(shí)際的信號(hào)頻率,需要經(jīng)過轉(zhuǎn)換。f(k)=k*(fs/N),其中f(k)是實(shí)際頻率,k是實(shí)際信號(hào)的最大幅度頻率所對(duì)應(yīng)的數(shù)。(詳見下面代碼,分享的源代碼中公式有誤,未重新上傳)

獲取頻率的函數(shù):

#defineNPT1024//一次完整采集的采樣點(diǎn)數(shù)

/******************************************************************
函數(shù)名稱:GetPowerMag()
函數(shù)功能:計(jì)算各次諧波幅值
參數(shù)說明:
備注:先將lBufOutArray分解成實(shí)部(X)和虛部(Y),然后計(jì)算幅值(sqrt(X*X+Y*Y)
*******************************************************************/
voidGetPowerMag(void)
{
floatX,Y,Mag,magmax;//實(shí)部,虛部,各頻率幅值,最大幅值
u16i;

//調(diào)用自cr4_fft_1024_stm32
cr4_fft_1024_stm32(fftout,fftin,NPT);
//fftin為傅里葉輸入序列數(shù)組,ffout為傅里葉輸出序列數(shù)組

for(i=1;i>16;
Y=(fftout[i]>>16);

Mag=sqrt(X*X+Y*Y);
FFT_Mag[i]=Mag;//存入緩存,用于輸出查驗(yàn)
//獲取最大頻率分量及其幅值
if(Mag>magmax)
{
magmax=Mag;
temp=i;
}
}
F=(u16)(temp*(fre*1.0/NPT));//源代碼中此公式有誤,將此復(fù)制進(jìn)去

LCD_ShowNum(280,180,F,5,16);
}

六、模擬正弦波輸出

此正弦波輸出是用于調(diào)試示波器,觀察顯示和實(shí)際是否相同。主要利用DAC輸出,在定時(shí)器3的中斷中不斷改變DAC的輸出值,產(chǎn)生一個(gè)正弦波。因此改變正弦波的頻率可以通過更改定時(shí)器3的溢出頻率。(采用的PA4口進(jìn)行輸出)

在初始化時(shí),我將定時(shí)器3的重裝載值設(shè)置為40,預(yù)分頻值設(shè)置為72,正弦波輸出頻率為72Mhz/40/72/1024≈24.5Hz(1024是因?yàn)閷⒁粋€(gè)周期正弦波均分成1024個(gè)輸出點(diǎn),詳見下面函數(shù)InitBufInArray())。

經(jīng)采樣處理后顯示為24-25Hz,與實(shí)際值接近。(但是當(dāng)采樣頻率提高到最大3.6kHz時(shí),頻率顯示為32Hz左右,原因未知)

下面是相關(guān)代碼:

u16magout[NPT];
/******************************************************************
函數(shù)名稱:InitBufInArray()
函數(shù)功能:正弦波值初始化,將正弦波各點(diǎn)的值存入magout[]數(shù)組中
參數(shù)說明:
備注:
*******************************************************************/
voidInitBufInArray(void)
{
u16i;
floatfx;
for(i=0;i=NPT)
i=0;
}

七、模擬噪聲或三角波輸出

模擬噪聲或三角波輸出可直接通過配置DAC,利用芯片內(nèi)部的發(fā)生器產(chǎn)生。DAC2的轉(zhuǎn)換由定時(shí)器4的TRGO觸發(fā)(事件觸發(fā))。同時(shí)需要注意設(shè)置TRGO由更新事件產(chǎn)生。

若為三角波輸出,頻率=72Mhz/定時(shí)器重裝載值/預(yù)分頻系數(shù)/幅值/2;

例如:初始化定時(shí)器的重裝載值為2,預(yù)分頻系數(shù)為36,幅值為最大(4096),即Freq=72Mhz/2/36/4096/2≈122Hz;

具體代碼如下所示:

voidDac2_Init(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
DAC_InitTypeDefDAC_InitType;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA通道時(shí)鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC,ENABLE);//使能DAC通道時(shí)鐘

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//端口配置
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;//模擬輸入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);

DAC_InitType.DAC_Trigger=DAC_Trigger_T4_TRGO;//定時(shí)器4觸發(fā)
DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_Noise;//產(chǎn)生噪聲
//DAC_WaveGeneration_Triangle產(chǎn)生三角波
DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_TriangleAmplitude_4095;//幅值設(shè)置為最大,即3.3V
DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable;//DAC1輸出緩存關(guān)閉BOFF1=1
DAC_Init(DAC_Channel_2,&DAC_InitType);//初始化DAC通道2

DAC_Cmd(DAC_Channel_2,ENABLE);//使能DAC-CH2

DAC_SetChannel1Data(DAC_Align_12b_R,0);//12位右對(duì)齊數(shù)據(jù)格式設(shè)置DAC值
}
voidTIM4_Int_Init(u16arr,u16psc)
{
TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//時(shí)鐘使能

TIM_TimeBaseStructure.TIM_Period=arr;//設(shè)置在下一個(gè)更新事件裝入活動(dòng)的自動(dòng)重裝載寄存器周期的值計(jì)數(shù)到5000為500ms
TIM_TimeBaseStructure.TIM_Prescaler=psc;//設(shè)置用來作為TIMx時(shí)鐘頻率除數(shù)的預(yù)分頻值10Khz的計(jì)數(shù)頻率
TIM_TimeBaseStructure.TIM_ClockDivision=0;//設(shè)置時(shí)鐘分割:TDTS=Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM向上計(jì)數(shù)模式
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);//根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時(shí)間基數(shù)單位

TIM_SelectOutputTrigger(TIM4,TIM_TRGOSource_Update);//觸發(fā)外設(shè)方式為更新觸發(fā)

TIM_Cmd(TIM4,ENABLE);//使能TIMx外設(shè)

}

八、顯示函數(shù)與按鍵控制

顯示波形只需將所獲得的1024個(gè)采樣數(shù)據(jù)選擇一部分進(jìn)行顯示大致思路如下:

u16pre_vol;//當(dāng)前電壓值對(duì)應(yīng)點(diǎn)的縱坐標(biāo)
u16past_vol;//前一個(gè)電壓值對(duì)應(yīng)點(diǎn)的縱坐標(biāo)
//adcx[]數(shù)組及通過DMA存入的1024個(gè)原始數(shù)據(jù)
pre_vol=50+adcx[x]/4096.0*100;
LCD_DrawLine(x,past_vol,x+1,pre_vol);//根據(jù)實(shí)際,打點(diǎn)位置可進(jìn)行相應(yīng)更改
past_vol=pre_vol;

按鍵的控制是在外部中斷中進(jìn)行(正點(diǎn)原子資料中提供相應(yīng)參考代碼)比較重要的是改變采樣頻率。

工程分享

https://gitee.com/silent-rookie/Simple-Oscilloscope

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628385
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    16667

    瀏覽量

    347784
  • 示波器
    +關(guān)注

    關(guān)注

    113

    文章

    6104

    瀏覽量

    183395
  • 開源
    +關(guān)注

    關(guān)注

    3

    文章

    3126

    瀏覽量

    42069

原文標(biāo)題:手把手教你用MCU做一個(gè)示波器(代碼開源)

文章出處:【微信號(hào):技術(shù)讓夢想更偉大,微信公眾號(hào):技術(shù)讓夢想更偉大】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    單片機(jī)原理及應(yīng)用:簡易示波器的設(shè)計(jì)#單片機(jī)

    單片機(jī)
    學(xué)習(xí)硬聲知識(shí)
    發(fā)布于 :2022年11月06日 13:19:54

    基于單片機(jī)簡易示波器

    謝謝各位大哥大姐們幫我一個(gè)忙,我非常想要這個(gè),我在做畢業(yè)論文,感謝你們能夠幫助我,我想一套的仿真與程序設(shè)計(jì),在此再次感謝你們
    發(fā)表于 04-28 22:52

    基于51單片機(jī)簡易示波器的設(shè)計(jì)

    謝謝你們能夠幫到我
    發(fā)表于 04-29 13:57

    基于51單片機(jī)簡易示波器的設(shè)計(jì)

    謝謝你們能幫助我,非常著急,謝謝你們了
    發(fā)表于 04-30 19:47

    基于51單片機(jī)簡易示波器的設(shè)計(jì)

    謝謝你們能幫助我謝謝
    發(fā)表于 05-01 13:42

    求基于單片機(jī)簡易示波器的課程設(shè)計(jì)包括proteus仿真

    求基于單片機(jī)簡易示波器的課程設(shè)計(jì)包括proteus仿真
    發(fā)表于 06-22 10:20

    有沒有會(huì)基于單片機(jī)簡易示波器的,有重謝,謝謝

    要有proteus仿真圖還有用keil程序的
    發(fā)表于 06-22 17:41

    有誰會(huì)基于單片機(jī)簡易示波器

    包括proteus仿真圖和程序,謝謝,必有重謝
    發(fā)表于 06-25 13:13

    基于51單片機(jī)簡易示波器仿真——》Proteus7.5仿真源文件+C語言源工程文件

    基于51單片機(jī)簡易示波器仿真——》Proteus7.5仿真源文件+C語言源工程文件;一切來自互聯(lián)網(wǎng),無私分享!
    發(fā)表于 04-14 10:08

    基于51單片機(jī)簡易數(shù)字示波器制作

    本帖最后由 lijie65 于 2017-8-10 22:53 編輯 之前想在網(wǎng)上找個(gè)基于51單片機(jī)簡易示波器教程,但是找了很久沒有一個(gè)很全了,小編無聊之中自己整理一些資料,參考網(wǎng)上其他人
    發(fā)表于 08-08 23:16

    基于單片機(jī)和FPGA的簡易數(shù)字存儲(chǔ)示波器設(shè)計(jì)

    基于單片機(jī)和FPGA的簡易數(shù)字存儲(chǔ)示波器設(shè)計(jì) l 引言   與傳統(tǒng)模擬示波器相比.?dāng)?shù)字存儲(chǔ)示波器不僅具有可存儲(chǔ)波形、體積小、功耗低,使用
    發(fā)表于 12-03 21:55 ?1240次閱讀
    基于<b class='flag-5'>單片機(jī)</b>和FPGA的<b class='flag-5'>簡易</b>數(shù)字存儲(chǔ)<b class='flag-5'>示波器</b>設(shè)計(jì)

    如何設(shè)計(jì)一個(gè)基于單片機(jī)簡易示波器?

    信號(hào)調(diào)理電路要完成的功能是:程控放大,疊加直流分量。程控放大的作用是:當(dāng)輸入信號(hào)的幅度很小的時(shí)候就需要對(duì)輸入信號(hào)進(jìn)行放大,使得被測信號(hào)可以在LCD上盡可能清楚的顯示出來。疊加直流分量的作用是:ATmega16自帶的A/D是單電源的,沒辦法輸入負(fù)壓而待測信號(hào)又往往有負(fù)壓。這時(shí)候就需要這樣一個(gè)電路,可以把負(fù)壓抬高到0電平以上。
    發(fā)表于 07-23 08:23 ?1.5w次閱讀
    如何設(shè)計(jì)一個(gè)基于<b class='flag-5'>單片機(jī)</b>的<b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>?

    如何使用51單片機(jī)和12864設(shè)計(jì)的簡易示波器?原理圖和程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用51單片機(jī)和12864設(shè)計(jì)的簡易示波器?原理圖和程序免費(fèi)下載。
    發(fā)表于 10-10 08:00 ?65次下載
    如何使用51<b class='flag-5'>單片機(jī)</b>和12864設(shè)計(jì)的<b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>?原理圖和程序免費(fèi)下載

    如何使用51單片機(jī)進(jìn)行簡易示波器的設(shè)計(jì)

    之前玩單片機(jī),有一陣子一直想知道到底某個(gè)引腳是怎么跳變的,有沒有跳變對(duì),苦于沒有示波器,而且示波器也很笨重,帶來帶去也很麻煩,于是乎就自己搞一個(gè)簡單的示波器,勉強(qiáng)可以用過去。這是AD連
    發(fā)表于 06-18 17:44 ?14次下載
    如何使用51<b class='flag-5'>單片機(jī)</b>進(jìn)行<b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>的設(shè)計(jì)

    基于51單片機(jī)簡易示波器設(shè)計(jì)OLED顯示(包含源程序原理圖PCB)

    基于51單片機(jī)簡易示波器設(shè)計(jì)OLED顯示(包含源程序原理圖PCB)(單片機(jī)課程設(shè)計(jì))-?基于51單片機(jī)
    發(fā)表于 07-22 14:50 ?248次下載
    基于51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>簡易</b><b class='flag-5'>示波器</b>設(shè)計(jì)OLED顯示(包含源程序原理圖PCB)