|
用于STM32F103V的示波器制作 。
有2個(gè)通道
個(gè)人愛好設(shè)計(jì)都DIY可以用20MHZ這樣
專的的200MHZ以上去買現(xiàn)成的。
設(shè)計(jì)指標(biāo):
主控: STM32F103ZET6
液晶屏: 4.3寸TFT480×272 65K彩色LCD顯示屏 FSMC
AD: 12位1MHz采樣速率
最高實(shí)時(shí)取樣率: 1Msps 8Bits
取樣緩沖器深度: 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ì)算: 頻率、周期、占空比、交流峰-峰值、平均值
觸發(fā)電平: 觸發(fā)電平高低位置可調(diào),觸發(fā)時(shí)基位置可調(diào)
實(shí)現(xiàn)RUN/STOP功能
功能預(yù)留:
1、波形發(fā)生器:使用STM32一路DA實(shí)現(xiàn)正弦,三角波,方波輸出。 任意一種波形幅值在
0-3.3V任意可調(diào)、頻率在一定范圍任意可調(diào)、方波占空比可調(diào)。調(diào)節(jié)選項(xiàng)
可以通過觸摸屏完成設(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ī),通過串口完成對(duì)下位機(jī)的控制。初步功能為:(1)實(shí)現(xiàn)STOP/RUN功能(2)輸出波形電壓、時(shí)間參數(shù)(3)控制截屏(4)控制波形發(fā)生器(5)其他
4、圖形接口: 完成UCGUI的移植和使用工作。
5、遠(yuǎn)期計(jì)劃: 添加FFT等等
1、采樣速率:600Sa/s,6kSa/s ,60kSa/s,600kSa/s ,3MSa/s,,6MSa/s,30MSa/s ,60MSa/s
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、被測信號(hào)的各種參數(shù)屏幕顯示,包括頻率、電壓峰峰值等。
硬件電路
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
Multisim原理圖如下(仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- /*------------------------------------------------------------------------------------
- STM32+UCOS+UCGUI示波器
-
- 任務(wù)列表
- +---------------------+-------------+-----------+
- | 任務(wù)名稱 | 任務(wù)優(yōu)先級(jí) | 任務(wù)堆棧 |
- +---------------------+-------------+-----------+
- | TASK_MAIN | 11 | 2048 |
- +---------------------+-------------+-----------+
- | TASK_RTC | 12 | 512 |
- +---------------------+-------------+-----------+
- | TASK_SD | 13 | 512 |
- +---------------------+-------------+-----------+
- | TASK_TOUCHSCREEN | 14 | 512 |
- +---------------------+-------------+-----------+
- | TASK_GUI | 15 | 1024 |
- +---------------------+-------------+-----------+
- | TASK_START | 5 | 64 |
- +---------------------+-------------+-----------+
-
- 時(shí)間: 2013年11月13日 BoX編寫
- -------------------------------------------------------------------------------------*/
- #include "ucos_ii.h"
- #include "stdio.h"
- #include "app.h"
- #include "pincfg.h"
- #include "delay.h"
- #include "tft_api.h"
- #include "oscilloscope.h"
- #include "indkey.h"
- #include "timer.h"
- #include "EXTI.H"
- #include "adc.h"
- #include "iwdg.h"
- #include "tsc2046.h"
- #include "task_main.h"
- #include "task_gui.h"
- #include "task_rtc.h"
- #include "task_sd.h"
- #include "task_touchscreen.h"
- #include "GUI.h"
- /*-----------------------------------------
- 聲明任務(wù)棧
- UCOSII的任務(wù)堆棧沒有8字節(jié)對(duì)齊,在聲明任務(wù)堆
- 棧時(shí),強(qiáng)制8字節(jié)對(duì)齊就可以了,系統(tǒng)默認(rèn)是4字節(jié)
- 對(duì)齊.否則sprintf時(shí)會(huì)出問題,系統(tǒng)會(huì)崩潰.
- ------------------------------------------*/
- __align(8) OS_STK Task_TouchScreen_Stk[TASK_TOUCHSCREEN_STK_SIZE];
- __align(8) OS_STK Task_Main_Stk[TASK_MAIN_STK_SIZE];
- __align(8) OS_STK Task_RTC_Stk[TASK_RTC_STK_SIZE];
- __align(8) OS_STK Task_SD_Stk [TASK_SD_STK_SIZE];
- __align(8) OS_STK Task_GUI_Stk[TASK_GUI_STK_SIZE];
- /*-----------------------------------------
- 聲明變量
- ------------------------------------------*/
- extern u16 ADC1_DMA_Value;
- extern u8 LCD_Buffer[LCD_BUFFER_SIZE];
- extern u16 Tpx,Tpy,ZBX,ZBY; //觸摸屏AD值,坐標(biāo)值
- extern void BSP_Init(void);
- extern WaveType WaveInfo; //波形參數(shù)
- extern WaveMode WaveCtrl; //控制參數(shù)
- extern FG_WaveType FG_WaveInfo; //信號(hào)發(fā)生器參數(shù)
- /*-----------------------------------------
- 開始任務(wù)
- ------------------------------------------*/
- void Task_Start(void *pdata)
- {
- pdata = pdata;
- BSP_Init(); //完成片上外設(shè)的初始化
- OSStatInit(); //初始化統(tǒng)計(jì)任務(wù)
-
- while(1)
- {
- // ShowWelcomeScreen();
- // OSTimeDlyHMSM(0,0,3,0);
- /*觸摸屏任務(wù)*/
-
- OSTaskCreateExt(Task_TouchScreen,
- (void *)0,
- &Task_TouchScreen_Stk[TASK_TOUCHSCREEN_STK_SIZE - 1],
- TASK_TOUCHSCREEN_PRIO,
- TASK_TOUCHSCREEN_PRIO,
- &Task_TouchScreen_Stk[0],
- TASK_TOUCHSCREEN_STK_SIZE,
- (void *)0,
- OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
-
- /*實(shí)時(shí)時(shí)鐘任務(wù)*/
- OSTaskCreateExt(Task_RTC,
- (void *)0,
- &Task_RTC_Stk[TASK_RTC_STK_SIZE - 1],
- TASK_RTC_PRIO,
- TASK_RTC_PRIO,
- &Task_RTC_Stk[0],
- TASK_RTC_STK_SIZE,
- (void *)0,
- OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
- /*SD卡任務(wù)*/
- OSTaskCreateExt(Task_SD,
- (void *)0,
- &Task_SD_Stk[TASK_SD_STK_SIZE - 1],
- TASK_SD_PRIO,
- TASK_SD_PRIO,
- &Task_SD_Stk[0],
- TASK_SD_STK_SIZE,
- (void *)0,
- OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
- /*GUI任務(wù)*/
- OSTaskCreateExt(Task_GUI,
- (void *)0,
- &Task_GUI_Stk[TASK_GUI_STK_SIZE - 1],
- TASK_GUI_PRIO,
- TASK_GUI_PRIO,
- &Task_GUI_Stk[0],
- TASK_GUI_STK_SIZE,
- (void *)0,
- OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
- /*主任務(wù)*/
- OSTaskCreateExt(Task_Main,
- (void *)0,
- &Task_Main_Stk[TASK_MAIN_STK_SIZE - 1],
- TASK_MAIN_PRIO,
- TASK_MAIN_PRIO,
- &Task_Main_Stk[0],
- TASK_MAIN_STK_SIZE,
- (void *)0,
- OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);
-
- // PinCfg_Beep(1); //蜂鳴器響起提示系統(tǒng)啟動(dòng)成功
- OSTaskSuspend(OS_PRIO_SELF); //掛起Task_Start任務(wù)
- }
- }
- /*-----------------------------------------
- 觸摸屏任務(wù)
- ------------------------------------------*/
- void Task_TouchScreen(void *pdata)
- {
- pdata = pdata;
- while(1)
- {
- TP_Read(&Tpx,&Tpy);
- TP_ADtoZB(&Tpx,&Tpy,&ZBX,&ZBY); //計(jì)算觸摸坐標(biāo)
- TouchEventDetected(); //檢測觸摸事件
- BOARD_LED1 = !BOARD_LED1;
- OSTimeDlyHMSM(0,0,0,100);
- }
- }
- /*-----------------------------------------
- Real Time Clock任務(wù)
- ------------------------------------------*/
- void Task_RTC(void *pdata)
- {
- pdata = pdata;
- while(1)
- {
- u8 AlarmTemp;
- GetFrequence(); //獲取時(shí)間參數(shù)并顯示
- AlarmTemp = GetTempSensor();
-
- if(AlarmTemp>60) //芯片保護(hù)溫度報(bào)警定值60℃
- BEEP = 1;
- else if(AlarmTemp>50)
- PinCfg_Beep(3); //接近紅線短鳴3聲
- else
- BEEP = 0;
- OSTimeDlyHMSM(0,0,1,500);
- }
- }
- /*-----------------------------------------
- 主任務(wù)
- ------------------------------------------*/
- void Task_Main(void *pdata)
- {
- pdata = pdata;
- WaveCtrl.TimeBase = 99; //上電默認(rèn)時(shí)基99
- WaveCtrl.Gain = 3; //上電默認(rèn)增益號(hào)3
- while(1)
- {
- // TaskStackChack(); //是否堆棧使用情況檢查
- GetWaveADCValue(); //核心函數(shù)
- IWDG_Feed(); //1000ms內(nèi)喂狗
- BOARD_LED2 = !BOARD_LED2;
- OSTimeDlyHMSM(0,0,0,50);
- }
- }
- /*-----------------------------------------
- SD任務(wù)
- ------------------------------------------*/
- void Task_SD(void *pdata)
- {
- pdata = pdata;
- while(1)
- {
- SendDataToPC(); //發(fā)送編碼數(shù)據(jù)到上位機(jī)
- OSTimeDlyHMSM(0,0,0,999);
- }
- }
- /*-----------------------------------------
- GUI任務(wù)
- ------------------------------------------*/
- void Task_GUI(void *pdata)
- {
- pdata = pdata;
- DrawControlPanel();
- while(1)
- {
- DisplayWaveInfo(); //顯示參數(shù)
- OSTimeDlyHMSM(0,0,0,500);
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
上位機(jī)exe文件以及上位機(jī)源碼.zip
(6.59 MB, 下載次數(shù): 118)
2019-7-7 15:15 上傳
點(diǎn)擊文件名下載附件
設(shè)計(jì)文檔.zip
(60.19 KB, 下載次數(shù): 79)
2019-7-7 15:15 上傳
點(diǎn)擊文件名下載附件
硬件設(shè)計(jì).zip
(2.65 MB, 下載次數(shù): 82)
2019-7-7 15:15 上傳
點(diǎn)擊文件名下載附件
程序.7z
(1.07 MB, 下載次數(shù): 84)
2019-7-8 19:57 上傳
點(diǎn)擊文件名下載附件
|
|