生活随笔
收集整理的這篇文章主要介紹了
【毕业设计】基于stm32的示波器设计与实现 - 单片机 嵌入式
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1 簡介
- 2 主要器件
- 3 實(shí)現(xiàn)效果
- 4 設(shè)計(jì)原理
- 5 部分實(shí)現(xiàn)代碼
1 簡介
🔥 Hi,大家好,這里是丹成學(xué)長的畢設(shè)系列文章!
🔥 對畢設(shè)有任何疑問都可以問學(xué)長哦!
這兩年開始,各個學(xué)校對畢設(shè)的要求越來越高,難度也越來越大… 畢業(yè)設(shè)計(jì)耗費(fèi)時間,耗費(fèi)精力,甚至有些題目即使是專業(yè)的老師或者碩士生也需要很長時間,所以一旦發(fā)現(xiàn)問題,一定要提前準(zhǔn)備,避免到后面措手不及,草草了事。
為了大家能夠順利以及最少的精力通過畢設(shè),學(xué)長分享優(yōu)質(zhì)畢業(yè)設(shè)計(jì)項(xiàng)目,今天要分享的新項(xiàng)目是
🚩 基于stm32的示波器設(shè)計(jì)
🥇學(xué)長這里給一個題目綜合評分(每項(xiàng)滿分5分)
- 難度系數(shù):4分
- 工作量:4分
- 創(chuàng)新點(diǎn):3分
🧿 選題指導(dǎo), 項(xiàng)目分享:
https://blog.csdn.net/molodi/article/details/125933857
2 主要器件
3 實(shí)現(xiàn)效果
4 設(shè)計(jì)原理
學(xué)長設(shè)計(jì)的示波器采用了一套成本低廉但高效的硬件,配合層次化的軟件框架,實(shí)現(xiàn)對常規(guī)低頻信號波形的采集、分析、顯示。
硬件部分的主要工作有:電源管理(5V、2.5V、-5V);對信號的衰減、限幅、偏置。最后將處理好的電壓信號送入MCU的ADC外設(shè),進(jìn)行數(shù)據(jù)采集。由于ADC外設(shè)只能采集正電壓,因此我們通過增加偏置電壓的方式,將負(fù)電壓抬高來采集。
軟件部分的主要工作有:底層驅(qū)動SDK框架、ADC濾波算法、波形數(shù)據(jù)處理、人機(jī)交互界面。SDK提供基本的模塊和外設(shè)驅(qū)動支持,濾波算法去除噪聲和毛刺,波形處理計(jì)算電壓值和頻率,并為波形顯示做準(zhǔn)備;人機(jī)交互界面提供屏幕顯示(OLED屏)和操作方式(旋鈕和按鍵)。
5 部分實(shí)現(xiàn)代碼
部分核心代碼:
void Adc_Init(void)
{ ADC_InitTypeDef ADC_InitStructure
; GPIO_InitTypeDef GPIO_InitStructure
;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
|RCC_APB2Periph_ADC1
, ENABLE
); RCC_ADCCLKConfig(RCC_PCLK2_Div6
); 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
); ADC_InitStructure
.ADC_Mode
= ADC_Mode_Independent
; ADC_InitStructure
.ADC_ScanConvMode
= DISABLE
; ADC_InitStructure
.ADC_ContinuousConvMode
= DISABLE
; ADC_InitStructure
.ADC_ExternalTrigConv
= ADC_ExternalTrigConv_T2_CC2
; ADC_InitStructure
.ADC_DataAlign
= ADC_DataAlign_Right
; ADC_InitStructure
.ADC_NbrOfChannel
= 1; ADC_Init(ADC1
, &ADC_InitStructure
); ADC_Cmd(ADC1
, ENABLE
); ADC_DMACmd(ADC1
, ENABLE
); ADC_ResetCalibration(ADC1
); ADC_RegularChannelConfig(ADC1
, ADC_Channel_6
, 1, ADC_SampleTime_1Cycles5
);ADC_ResetCalibration(ADC1
);while(ADC_GetResetCalibrationStatus(ADC1
)); ADC_StartCalibration(ADC1
); while(ADC_GetCalibrationStatus(ADC1
)); ADC_SoftwareStartConvCmd(ADC1
, ENABLE
); }
void TIM2_PWM_Init(u16 arr
,u16 psc
)
{ GPIO_InitTypeDef GPIO_InitStructure
;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure
;TIM_OCInitTypeDef TIM_OCInitStructure
;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2
, ENABLE
); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA
| RCC_APB2Periph_AFIO
, ENABLE
); GPIO_InitStructure
.GPIO_Pin
= GPIO_Pin_1
; GPIO_InitStructure
.GPIO_Mode
= GPIO_Mode_AF_PP
; GPIO_InitStructure
.GPIO_Speed
= GPIO_Speed_50MHz
;GPIO_Init(GPIOA
, &GPIO_InitStructure
);TIM_TimeBaseStructure
.TIM_Period
= arr
; TIM_TimeBaseStructure
.TIM_Prescaler
=psc
; TIM_TimeBaseStructure
.TIM_ClockDivision
= 0; TIM_TimeBaseStructure
.TIM_CounterMode
= TIM_CounterMode_Up
; TIM_TimeBaseInit(TIM2
, &TIM_TimeBaseStructure
); TIM_OCInitStructure
.TIM_OCMode
= TIM_OCMode_PWM1
; TIM_OCInitStructure
.TIM_OutputState
= TIM_OutputState_Enable
; TIM_OCInitStructure
.TIM_OCPolarity
= TIM_OCPolarity_Low
; TIM_OCInitStructure
.TIM_Pulse
=1000; TIM_OC2Init(TIM2
, &TIM_OCInitStructure
); TIM_CtrlPWMOutputs(TIM2
, ENABLE
);TIM_Cmd(TIM2
, ENABLE
);
}
void MYDMA1_Config(DMA_Channel_TypeDef
* DMA_CHx
,u32 cpar
,u32 cmar
,u16 cndtr
)
{DMA_InitTypeDef DMA_InitStructure
;NVIC_InitTypeDef NVIC_InitStructure
;RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1
, ENABLE
); DMA_DeInit(DMA_CHx
); DMA_InitStructure
.DMA_PeripheralBaseAddr
= cpar
; DMA_InitStructure
.DMA_MemoryBaseAddr
= cmar
; DMA_InitStructure
.DMA_DIR
= DMA_DIR_PeripheralSRC
; DMA_InitStructure
.DMA_BufferSize
= cndtr
; DMA_InitStructure
.DMA_PeripheralInc
= DMA_PeripheralInc_Disable
; DMA_InitStructure
.DMA_MemoryInc
= DMA_MemoryInc_Enable
; DMA_InitStructure
.DMA_PeripheralDataSize
= DMA_PeripheralDataSize_HalfWord
; DMA_InitStructure
.DMA_MemoryDataSize
= DMA_MemoryDataSize_HalfWord
; DMA_InitStructure
.DMA_Mode
= DMA_Mode_Circular
; DMA_InitStructure
.DMA_Priority
= DMA_Priority_High
; DMA_InitStructure
.DMA_M2M
= DMA_M2M_Disable
;