国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊(cè)
搜索

STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖

[復(fù)制鏈接]
樓主
coolice 發(fā)表于 2021-12-15 16:05:35 | 只看該作者 |只看大圖 |倒序?yàn)g覽 |閱讀模式
完整資料下載:
stm32 keil C程序源碼.zip (10.07 MB, 售價(jià): 5 E幣)
上位機(jī)源碼C#.zip (9.84 MB, 售價(jià): 5 E幣)
硬件PCB及模塊電路仿真.zip (2.77 MB, 售價(jià): 5 E幣)
設(shè)計(jì)文檔.zip (60.62 KB)
設(shè)計(jì)文檔附件內(nèi)容:
STM32示波器通信協(xié)議.xlsx
增益計(jì)算表.xlsx
用四個(gè)字節(jié)十六進(jìn)制數(shù)表示單精度浮點(diǎn)數(shù).docx
示波器時(shí)間表.docx
設(shè)計(jì)指標(biāo).docx
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 12.jpg
硬件pcb及模塊電路仿真附件內(nèi)容:
電平平移.ms12
示波器AD板.pdf
示波器AD板最終實(shí)物版圖.PcbDoc
示波器上層板.pdf
示波器上層板最終實(shí)物版圖.PcbDoc
示波器前端電路.ms12
耦合——衰減電路.ms12
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 11.jpg
設(shè)計(jì)指標(biāo):
主控:STM32F103ZET6
液晶屏:4.3寸TFT480×272  65K彩色LCD顯示屏  FSMC
AD:12位1MHz采樣率
最高實(shí)時(shí)取樣率:1MSa/s  12Bits
取樣緩沖器深度:5K  
垂直靈敏度:                            5V,1V,500mV,200mV,100mV,50mV,20mV,10mV;  
水平時(shí)基范圍:2S,1S,500mS,200mS,100mS,50mS,20mS,10mS,5mS,2mS,1mS,500uS,200uS,100uS,50uS,20uS,10uS,5uS,2uS,1uS
輸入阻抗:                                 ≥1MΩ
最高輸入電壓:                       30Vpp
耦合方式:                                 AC/DC
觸發(fā)功能:                                 實(shí)現(xiàn)自動(dòng)、常規(guī)、單次觸發(fā)方式 ,上升或下降邊沿觸發(fā)  
參數(shù)計(jì)算:                                 頻率、周期、占空比、交流峰-峰值、平均值、光標(biāo)追蹤顯示
RUN/STOP

功能:
1、波形發(fā)生器:使用STM32一路DA實(shí)現(xiàn)正弦,三角波,方波,白噪聲輸出。 任意一種波形幅值在0-3.3V任意可調(diào)、頻率在一定范圍任意可調(diào)、方波占空比可調(diào)。調(diào)節(jié)選項(xiàng)可以通過(guò)觸摸屏完成設(shè)置。
2、SD卡存儲(chǔ): SD卡波形存儲(chǔ)輸出,能夠?qū)Ξ?dāng)前屏幕截屏,以JPG格式存儲(chǔ)在SD卡上。能夠存儲(chǔ)1S內(nèi)的波形數(shù)據(jù),可以隨時(shí)調(diào)用查看。
3、數(shù)據(jù)傳輸:  用C#編寫上位機(jī),通過(guò)串口完成對(duì)下位機(jī)的控制。(1)實(shí)現(xiàn)STOP/RUN功能(2)輸出波形電壓、時(shí)間參數(shù)(3)控制截屏(4)控制波形發(fā)生器(5)控制完成FFT(6)波形的存儲(chǔ)和顯示
4、圖形接口:  UCGUI
2、水平掃速:  250 ns*、500ns、1μs、5 μs、10μs、50μs、500 μs、5ms 、50ms
3、垂直電壓靈敏度:10mV/div, 20mV/div, 50mV/div, 0.1V/div, 0,2V/div, 0.5V/div, 1V/div,
2V/div, 5V/div
4、被測(cè)信號(hào)的各種參數(shù)屏幕顯示,包括頻率、電壓峰峰值等。
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 1.jpg
這是上位機(jī)的程序
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 2.jpg
測(cè)試時(shí)候的照片
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 3.jpg
測(cè)試正弦波
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 4.jpg
PCB
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 6.jpg
模擬電路板
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 7.jpg
側(cè)面的照片
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 8.jpg
部分源碼:(完整源碼見相關(guān)附件)
  1. #include "stm32f10x.h"

  2. #include "adc.h"
  3. #include "oscilloscope.h"
  4. #include "ucos_ii.h"
  5. #include "tft_api.h"
  6. /*-----------------------------------------
  7.                             聲明變量
  8. ------------------------------------------*/
  9. extern WaveType WaveInfo;
  10. extern WaveMode WaveCtrl;
  11. volatile u16 ADCConvertedValue[SAMPDEPTH];//AD轉(zhuǎn)換緩沖區(qū),占用RAM 0.8KB

  12. /*-----------------------------------------
  13.                             ADC1端口初始化
  14. ------------------------------------------*/
  15. void ADC1_GPIO_Init(void)
  16. {
  17.         GPIO_InitTypeDef IO_Init;
  18.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
  19.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC,ENABLE);
  20.         //C1模擬輸入
  21.         IO_Init.GPIO_Pin = GPIO_Pin_1;
  22.         IO_Init.GPIO_Mode = GPIO_Mode_AIN;
  23.         GPIO_Init(GPIOC,&IO_Init);
  24. }

  25. /* #define ADC1_DR_Address ((unsigned int)0x40012400+0x4c) */
  26. /* unsigned short int ADC1_DMA_Value; */
  27. /*--------------------------------------------------
  28. 函數(shù)說(shuō)明:配置ADC1完成AD采集,是本示波器最核心的部分.
  29. 配置方案:ADC1由TIM3提供的觸發(fā)事件進(jìn)行觸發(fā)AD轉(zhuǎn)換,控
  30.                    制TIM3的速率就可以完成采樣率的改變.同時(shí)采
  31.                   用DMA完成數(shù)據(jù)傳輸,注入通道1完成內(nèi)部溫度傳
  32.                   感器AD采集.
  33. --------------------------------------------------*/
  34. void ADC1_Mode_Config(void)
  35. {
  36.         //配置DMA
  37.         DMA_InitTypeDef DMA_csh;
  38.         ADC_InitTypeDef ADC_csh;
  39.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  40.         NVIC_InitTypeDef NVIC_InitStructure;

  41.         DMA_DeInit(DMA1_Channel1);                                             //DMA復(fù)位,通道1
  42.         DMA_csh.DMA_PeripheralBaseAddr = ADC1_DR_Address;  //ADC1地址
  43.         DMA_csh.DMA_MemoryBaseAddr = (unsigned int)ADCConvertedValue;  //內(nèi)存地址
  44.         DMA_csh.DMA_DIR = DMA_DIR_PeripheralSRC;  
  45.         DMA_csh.DMA_BufferSize = SAMPDEPTH;                                            //緩沖大小為采樣深度
  46.         DMA_csh.DMA_PeripheralInc = DMA_PeripheralInc_Disable;  //外設(shè)地址固定
  47.         DMA_csh.DMA_MemoryInc = DMA_MemoryInc_Enable;                         //內(nèi)存地址自增
  48.         DMA_csh.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  
  49.         DMA_csh.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  50.         DMA_csh.DMA_Mode = DMA_Mode_Circular;                                          //循環(huán)傳輸
  51.         DMA_csh.DMA_Priority = DMA_Priority_High;                                  //DMA優(yōu)先級(jí)高
  52.         DMA_csh.DMA_M2M = DMA_M2M_Disable;
  53.         DMA_Init(DMA1_Channel1,&DMA_csh);                                                  //寫入DMA1配置參數(shù)
  54.         DMA_Cmd(DMA1_Channel1,ENABLE);                                                           //使能DMA1通道1
  55.         DMA_ITConfig(DMA1_Channel1,DMA_IT_TC,ENABLE);                        //使能DMA CH1中斷

  56.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  57.         NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel1_IRQn;
  58.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  59.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  60.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  61.         NVIC_Init(&NVIC_InitStructure);

  62.         //配置TIM3工作在18MHz,為AD提供觸發(fā)
  63.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  64.         TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
  65.         TIM_TimeBaseStructure.TIM_Period = 1;         
  66.         TIM_TimeBaseStructure.TIM_Prescaler = 99;         //工作在18M,每格最大值時(shí),不至于溢出      
  67.         TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;   
  68.         TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  69.         TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
  70.         TIM_SelectOutputTrigger(TIM3,TIM_TRGOSource_Update); //使用TIM3事件更新作為ADC觸發(fā)
  71.         
  72.         //配置ADC
  73.         ADC_csh.ADC_Mode = ADC_Mode_Independent;                  //獨(dú)立ADC模式
  74.     ADC_csh.ADC_ScanConvMode = DISABLE;                           //關(guān)閉掃描模式
  75.         ADC_csh.ADC_ContinuousConvMode = DISABLE;                  //連續(xù)AD轉(zhuǎn)換開啟
  76.         ADC_csh.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;  //由TIM3提供的觸發(fā)事件進(jìn)行觸發(fā)AD轉(zhuǎn)換
  77.         ADC_csh.ADC_DataAlign = ADC_DataAlign_Right;         //數(shù)據(jù)右對(duì)齊
  78.         ADC_csh.ADC_NbrOfChannel = 1;                                          //要轉(zhuǎn)換的通道數(shù)目1
  79.         ADC_Init(ADC1,&ADC_csh);                                                   //寫入ADC1配置參數(shù)
  80.         ADC_RegularChannelConfig(ADC1,ADC_Channel_11,1,ADC_SampleTime_1Cycles5);//采樣速率1M
  81.         ADC_DMACmd(ADC1,ENABLE);                                                 //使能ADC1 DMA
  82.         ADC_ExternalTrigConvCmd(ADC1,ENABLE);                        //打開ADC1外部觸發(fā)
  83.         
  84.         ADC_InjectedChannelConfig(ADC1,ADC_Channel_16,1,ADC_SampleTime_239Cycles5);         //配置ADC1通道16為注入通道1
  85.         ADC_ExternalTrigInjectedConvConfig(ADC1,ADC_ExternalTrigInjecConv_None);         //軟件觸發(fā)注入通道的轉(zhuǎn)換
  86.         ADC_TempSensorVrefintCmd(ENABLE);                                                                                         //使能溫度傳感器

  87.         ADC_Cmd(ADC1,ENABLE);                                                         //使能ADC1
  88.         ADC_ResetCalibration(ADC1);                                                  //復(fù)位校準(zhǔn)寄存器
  89.         while(ADC_GetResetCalibrationStatus(ADC1));     //等待校準(zhǔn)寄存器復(fù)位完成
  90.         ADC_StartCalibration(ADC1);                                                  //開始校準(zhǔn)
  91.         while(ADC_GetCalibrationStatus(ADC1));                         //等待校準(zhǔn)完成
  92.         TIM_Cmd(TIM3,ENABLE);
  93. }
  94. /*-----------------------------------------
  95. 函數(shù)說(shuō)明:通過(guò)注入通道1轉(zhuǎn)換內(nèi)部溫度傳感器
  96.                    AD值,讀取10次有效數(shù)據(jù)取平均返回
  97. ------------------------------------------*/
  98. u16 GetTempSensor(void)   
  99. {
  100.         u16 temp=0,i,k=0;
  101.         for(i=0; i<10; )
  102.         {
  103.                 ADC_SoftwareStartInjectedConvCmd(ADC1,ENABLE);        //軟件觸發(fā)注入通道的轉(zhuǎn)換
  104.                 k = (0x6EE - ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_1)) / 0x05 + 25;
  105.                 if(k>0 && k<100)
  106.                 {
  107.                         temp += k;
  108.                         i++;
  109.                 }
  110.         }
  111.         temp /= 10;
  112.         return temp;            
  113. }
  114. /*-----------------------------------------
  115. 函數(shù)說(shuō)明:ADC1初始化
  116. ------------------------------------------*/
  117. void ADC1_Init(void)
  118. {
  119.         ADC1_GPIO_Init();
  120.         ADC1_Mode_Config();
  121. }
  122. /*-----------------------------------------
  123. 函數(shù)說(shuō)明:ADC傳輸DMA通道1中斷服務(wù)程序
  124.                    DMA把AD值傳輸?shù)骄彌_區(qū)完成后關(guān)閉定
  125.                   時(shí)器3(作為觸發(fā)AD轉(zhuǎn)換的定時(shí)器)同時(shí)
  126.                   置更新完成標(biāo)志位為1,開定時(shí)器3在應(yīng)
  127.                   用中開啟.
  128. ------------------------------------------*/
  129. void DMA1_Channel1_IRQHandler()
  130. {
  131.       OSIntNesting++;  
  132.       DMA_ClearFlag(DMA1_FLAG_TC1);        //清除DMA傳輸完成中斷
  133.       TIM_Cmd(TIM3,DISABLE);                //關(guān)閉TIM3
  134.       WaveCtrl.UpdatTrue = 1;                //已經(jīng)完成一次波形FIFO,可以批量讀出數(shù)據(jù)
  135.       OSIntExit();
  136. }
  137. /*-----------------------------------------
  138. 函數(shù)說(shuō)明:擦除AD緩沖區(qū)
  139. ------------------------------------------*/
  140. void Earse_AD_FIFO(void)
  141. {
  142.         uint32_t i;
  143.          for(i=0; i<sampdepth; i++)
  144.         {
  145.                 ADCConvertedValue[i] = 0;
  146.         }        
  147. }
  148. ++++++完整密碼詳見附件+++++++
復(fù)制代碼

上位機(jī)支持用visual studio 2022進(jìn)行編譯
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 9.jpg
Keil MDK 5編譯無(wú)措
STM32數(shù)字示波器+詳細(xì)注釋+上位機(jī)C#程序+硬件PCB原理圖 10.jpg
沙發(fā)
怪怪愛(ài)玩 發(fā)表于 2024-7-29 16:37:26 | 只看該作者
頂一下,這個(gè)牛逼!!!!!!!
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則

手機(jī)版|小黑屋|ELEOK |網(wǎng)站地圖

GMT+8, 2026-5-26 00:09

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復(fù) 返回頂部 返回列表