




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
基于STM32內(nèi)置ADC實(shí)現(xiàn)簡易示波器的程序設(shè)計(jì)與實(shí)現(xiàn)做一個數(shù)字采樣示波器一直是我長久以來的愿望,不過畢竟這個目標(biāo)難度比較大,涉及的方面實(shí)在太多,模擬前端電路、高速ADC、單片機(jī)、CPLD/FPGA、通訊、上位機(jī)程序、數(shù)據(jù)處理等等,不是一下子就能成的,慢慢一步步來唄,呵呵,好歹有個目標(biāo),一直在學(xué)習(xí)各方面的知識,也有動力:)由于高速ADC涉及到采樣后的數(shù)據(jù)存儲問題,大量的數(shù)據(jù)涌入使得單片機(jī)無法承受,因此通常需要用外部高速RAM加CPLD配合,或者干脆用大容量的FPGA做數(shù)據(jù)存儲處理等,然后通知單片機(jī)將數(shù)據(jù)發(fā)送出去。這部分實(shí)在是難度比較大,電路非常復(fù)雜,自己是有心無力啊,還得慢慢地技術(shù)積累。。。正好ST新推出市場的以CORTEX-M3為核心的STM32,內(nèi)部集成了2個1Msps12bit的獨(dú)立ADC,并且內(nèi)部高達(dá)72MHZ的主頻,高達(dá)1.25DMIPS/MHZ的處理速度,高速的DMA傳輸功能,靈活強(qiáng)大的4個TIMER等等,這些真是非常有吸引力,何不用它來實(shí)現(xiàn)一個低頻的數(shù)字示波器功能呢,我的目標(biāo)是暫時只要定量定性地分析20KHZ以下的低頻信號就行了,目標(biāo)不高吧,用STM32可以方便地實(shí)現(xiàn),等有了一定經(jīng)驗(yàn)之后慢慢再用FPGA和高速ADC搞個100Msps采樣的示波器!
1、ADC轉(zhuǎn)換:STM32增強(qiáng)型芯片內(nèi)置的2個獨(dú)立ADC,可以有16個通道,并且2個通道可以并行的同步采樣,觸發(fā)方式很靈活,可以通過TIMER以及外部電平等方式觸發(fā),并行方式下ADC2自動同步于ADC1;ADC在最高速采樣的時候需要1.5+12.5個ADC周期,在14M的ADC時鐘下達(dá)到1Msps的速度,因?yàn)槲抑黝l是72M所以4分頻后稍微高了點(diǎn),18MHZ的ADC時鐘,采樣速度應(yīng)該高于1M了。ADC采樣2路同時采樣方式,用TIM2CC2來生成時鐘信號觸發(fā)ADC來實(shí)現(xiàn)指定頻率的采樣。ADC1/ADC2采樣的結(jié)果是一個word2、采樣頻率控制:由于STM32內(nèi)部的4個TIMER非常強(qiáng)大,每個TIMER又有4個通道,再加上獨(dú)立的預(yù)分配器,實(shí)際上可以實(shí)現(xiàn)任意分頻,因此用TIM2CC2來產(chǎn)生指定頻率的時鐘,用來觸發(fā)ADC1連續(xù)采樣。3、采樣數(shù)據(jù)傳輸及每次采樣深度控制:ADC產(chǎn)生的轉(zhuǎn)換數(shù)據(jù)通過高速DMA通道1來傳輸置指定的內(nèi)部RAM中,并且將DMA通道一設(shè)置成最高優(yōu)先級,以保證數(shù)據(jù)準(zhǔn)確,并且用DMA每次傳輸?shù)膫€數(shù)來控制采樣的深度,例如我要采集100個點(diǎn)那么就設(shè)置DMA傳輸100個次,每次從32位ADC轉(zhuǎn)換寄存器傳輸一個word到RAM中,等完成了100次傳輸后,DMA通道自動停止(實(shí)際上ADC是一直按照要求的采樣頻率連續(xù)在后臺采樣,只是我去取數(shù)據(jù)而已),下次采集的時候我只要再設(shè)置下采樣的個數(shù)使能DMACHANNEL1就行了。4、與上位機(jī)通訊:通訊也是個難題,要達(dá)到快速地將大量數(shù)據(jù)發(fā)給上位機(jī)的目的,傳輸?shù)乃俾士隙ǖ筒涣?,開始我想先用串口,不過很快就放棄了,一則即使我用外部USB轉(zhuǎn)串口的芯片最高也只能達(dá)到1M的速度,并且數(shù)據(jù)會丟失;后來還是采用了網(wǎng)絡(luò)傳輸?shù)姆绞?,用SPI接口的ENC28J60芯片,這個芯片我在MEGA32和AT91SAM7S64上都用過,接口簡單挺方便的,速度還可以,在SAM7S64上DMA凡是用UDP協(xié)議單向發(fā)送的速度可以達(dá)到400KB/S以上,這次用了STM32發(fā)現(xiàn)速度大增,經(jīng)過我用STM32的DMA傳輸后,同樣UDP協(xié)議單向發(fā)速度竟然達(dá)到了500KB/S以上,甚至最高可以達(dá)到600KB/S,這個真是意外的收獲。5、上位機(jī)程序:還是用VS2005,我還是喜歡用C#,主要是微軟的C#做得是在太舒服了,編輯器智能化程度真高,我只要剛剛輸個開頭的字母,馬上就感知出來一堆讓你選擇,連挨個敲字符的功夫都省了,還不用擔(dān)心拼寫出錯到時候找原因的麻煩,呵呵,缺點(diǎn)就是程序執(zhí)行時候CPU利用率要高點(diǎn),什么時候它的C++編輯器也到這個程度我就換回C++,哈哈。波形顯示還是用NI的measurementStudio8來實(shí)現(xiàn),一個是漂亮方便,另外最要緊的就是MeasurementStudio8里面有一大堆數(shù)據(jù)處理的庫,從簡單的波形有效值計(jì)算,頻率計(jì)算,到各種各樣的函數(shù)濾波器功能,還有FFT頻域分析,時域分析等等,但凡要用到的儀器相關(guān)處理里面都有,另外本來我打算要在模擬前端里面加一個相位鎖定的電路,以固定顯示的波形起點(diǎn),后來發(fā)現(xiàn)MeasurementStudio8里面有個PeakDetector的類,用這個來實(shí)現(xiàn)波形的鎖定連這個電路都可以省了。用MeasurementStudio8來實(shí)現(xiàn)實(shí)在是非常方便,并且準(zhǔn)確。只是我沒啥資料,還在探索當(dāng)中顯示的界面及部分照片:數(shù)據(jù)采樣后輸出到PC上顯示的圖形很精確,包括MAX038產(chǎn)生的正弦波上部的小尖峰也很清楚,STM32的ADC精度很穩(wěn)定性相當(dāng)好,對于音頻范圍的低頻信號來說,1Msps的采樣也基本夠用了。只要采集足夠的點(diǎn)送給measurementsudio提供的函數(shù)來分析,可以達(dá)到非常精確的程度,12BIT的分辨率相當(dāng)于數(shù)字表的3位半的效果,用來測試信號的頻率、真有效值、峰值、峰峰值等等非常方便和精確,和我用硬件實(shí)現(xiàn)的頻率計(jì)和真有效值的讀數(shù)相同(這也說明了我做的信號發(fā)生器的硬件是準(zhǔn)確的,哈哈,之前跟數(shù)字表總對不上,看來是數(shù)字表準(zhǔn)確度差),實(shí)現(xiàn)完全可以當(dāng)作低頻示波器來用,再加上個模擬前端電路,完全可以實(shí)用化了正弦波:點(diǎn)擊查看圖片上位機(jī)的程序:上位機(jī)的程序還處在對于measuremenStudio的摸索當(dāng)中,只是初步了解到了幾個函數(shù),用它來實(shí)現(xiàn)數(shù)據(jù)處理實(shí)在是方便,lookpublicvoidDataReceived_Proc()//UDP數(shù)據(jù)接收、數(shù)據(jù)處理、數(shù)據(jù)顯示函數(shù){try{while(bStates){myudpcomm.Receive(refCommReceiveBuffer);Received_Command=Bytes2Struct(refCommReceiveBuffer);//textBox3.Text=Received_Command.SampleRate.ToString()+(acEstimate++).ToString();dADC1_Result=newdouble[Received_Command.SampleDepth];dADC2_Result=newdouble[Received_Command.SampleDepth];//數(shù)據(jù)處理,將通訊接收區(qū)中的ADC數(shù)據(jù)傳入繪圖用數(shù)組中for(inti=0;i《(int)(Received_Command.SampleDepth);i++){dADC1_Result=(BitConverter.ToUInt16(CommReceiveBuffer,40+4*(i+0)))*(3.3/4096.0);dADC2_Result=(BitConverter.ToUInt16(CommReceiveBuffer,40+4*(i+0)+2))*(3.3/4096.0);}str=“通道A(綠色)\r\n”;//測試真有效值Measurements.ACDCEstimator(dADC1_Result,outacEstimate,outdcEstimate);//交流(AC方式相當(dāng)于信號通過一個電容隔直后進(jìn)行測量)和直流(DC直通方式進(jìn)行測量)真有效值測量str+=“AC方式有效值:”+((int)(acEstimate*1000)).ToString()+“mV”+“DC方式有效值”+((int)(dcEstimate*1000)).ToString()+“mV\r\n”;//測試信號頻率、振幅VpmySingleToneInformationADC1=newSingleToneInformation(dADC1_Result,Received_Command.SampleRate);str+=“頻率:”+((int)(acEstimate*1000)==0?0int)mySingleToneInformationADC1.Frequency).ToString()+“Hz”+“振幅Vp:”+((int)mySingleToneInformationADC1.Amplitude*1000).ToString()+“mV\r\n”;str+=“\r\n通道B(紅色)\r\n”;//測試真有效值Measurements.ACDCEstimator(dADC2_Result,outacEstimate,outdcEstimate);//交流(AC方式相當(dāng)于信號通過一個電容隔直后進(jìn)行測量)和直流(DC直通方式進(jìn)行測量)真有效值測量str+=“AC方式有效值:”+((int)(acEstimate*1000)).ToString()+“mV”+“DC方式有效值”+((int)(dcEstimate*1000)).ToString()+“mV\r\n”;//測試信號頻率、振幅VpmySingleToneInformationADC2=newSingleToneInformation(dADC2_Result,Received_Command.SampleRate);str+=“頻率:”+((int)(acEstimate*1000)==0?0:(int)mySingleToneInformationADC1.Frequency).ToString()+“Hz”+“振幅Vp:”+((int)mySingleToneInformationADC1.Amplitude*1000).ToString()+“mV\r\n”;textBox3.Text=str;//ThresholdPeakDetector.Analyze用來找出從波谷到波峰上升沿頂點(diǎn)的數(shù)組序號//可以用于固定顯示波形從上升沿的某固定點(diǎn)開始,相當(dāng)與硬件的同步觸發(fā)電路功能//b=ThresholdPeakDetector.Analyze(dADC2_Result,2,10);//foreach(intkinb)//{//textBox3.Text+=k.ToString()+“”;//}//for(inti=0;i《Received_Command.SampleDepth-b[1];i++){//dADC1_Result=dADC2_Result[i+b[1]];}//textBox3.Text+=b[b.Length-1].ToString();//bIsUdpDataReceived=true;//表示接收到了UDP數(shù)據(jù),允許進(jìn)行再次發(fā)送bIsDataReadyForPlot=true;myGraphPlotProc();//繪圖輸出*///myD1=newmyMethodDelegate(h);//myD1(1);}}catch(Exceptione1){timer1.Enabled=false;MessageBox.Show(e1.ToString());}finally{timer1.Enabled=false;}}/*************************************************************************************繪圖輸出過程函數(shù)供,mygGraphPlotThread進(jìn)程調(diào)用*始終循環(huán)檢測bIsDataReadyForPlot,一旦為真則進(jìn)行繪圖,繪圖完成后置標(biāo)志為false***********************************************************************************/publicvoidmyGraphPlotProc()//繪圖輸出函數(shù){//while(true){if(bIsDataReadyForPlot){waveformPlot1.PlotY(dADC1_Result);waveformPlot2.PlotY(dADC2_Result);bIsDataReadyForPlot=false;}}}下位機(jī)的程序:下位機(jī)的程序,也還在完善,現(xiàn)在只做到了基本的功能,還不穩(wěn)定,主要問題還是在傳輸上的,這次為了一次傳輸比較多的數(shù)據(jù),要將UDP數(shù)據(jù)包分解,分成多個小于1518字節(jié)的幀發(fā)送,因此發(fā)現(xiàn)當(dāng)數(shù)據(jù)發(fā)送快的時候很容易導(dǎo)致數(shù)據(jù)停止發(fā)送,以前用MEGA32和SAM7的時候沒注意過,當(dāng)時的處理速度也慢,沒暴露出來,想來想去可能是由于連續(xù)發(fā)送的時候速度太快導(dǎo)致的沖突,ENC28J60出錯掛起了,還是ENC28J60沒有吃透,對于里面的流控、以太網(wǎng)沖突檢測這些還需要進(jìn)一步研究。/********************(C)COPYRIGHT2007STMicroelectronics*********************STM32F10***雙通道ADC數(shù)據(jù)采集并通過ENC28J60實(shí)現(xiàn)UDP通訊傳輸*作者:alien2006*環(huán)境:keilforarmmdk3.15b*版本:V0.2*時間:20071202*說明:V0.2*一、網(wǎng)絡(luò)通訊部分*1、先采用STM32SPI輪詢方式進(jìn)行傳輸試驗(yàn),ping00-l1400-n10*在輪詢方式下未改進(jìn)SPI1_SendByte()函數(shù)(內(nèi)部直接用ST提供的函數(shù)語句)需avg=9ms時間*輪詢方式下將SPI1_SendByte()函數(shù)中的4條語句修改為直接寄存器存取后avg提高到7ms*輪詢方式下取消SPI1_SendByte()直接代之以函數(shù)中四語句avg提高到6ms*經(jīng)過上述的逐步修改,傳輸U(kuò)DP1400個字符時雙向傳輸(接收1400個字節(jié)再發(fā)送這1400個字節(jié))間
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新穎獨(dú)特的2025年軟件設(shè)計(jì)師試題及答案
- VB語言的學(xué)習(xí)路徑與策略題目及答案
- 軟件水平考試技巧與試題及答案
- 基于數(shù)字孿生的醫(yī)療設(shè)備創(chuàng)新設(shè)計(jì)研究
- 系統(tǒng)架構(gòu)設(shè)計(jì)中的常見問題與解決技巧試題及答案
- 2025年軟件考試網(wǎng)絡(luò)管理員新趨勢試題及答案
- 澳大利亞投資移民項(xiàng)目風(fēng)險(xiǎn)評估協(xié)議
- 影視動畫制作項(xiàng)目投資合作框架協(xié)議
- 元宇宙醫(yī)療場景互動式體驗(yàn)與智能醫(yī)療設(shè)備集成服務(wù)協(xié)議
- 經(jīng)濟(jì)增長中的技術(shù)創(chuàng)新與制度創(chuàng)新研究試題及答案
- GB/T 13663.1-2017給水用聚乙烯(PE)管道系統(tǒng)第1部分:總則
- GB 2725.1-1994肉灌腸衛(wèi)生標(biāo)準(zhǔn)
- 受處分以來的思想工作生活情況【4篇】
- 課件:第四章 社會工作項(xiàng)目的執(zhí)行(《社會工作項(xiàng)目策劃與評估》課程)
- 冷庫施工組織設(shè)計(jì)施工方案
- 登桿作業(yè)課件共
- 吸痰技能操作及評分標(biāo)準(zhǔn)(評分表)
- 尼可地爾調(diào)研
- 發(fā)酵法生物制氫技術(shù)課件
- 機(jī)械制造技術(shù)基礎(chǔ)(第7章完成)課件
- 主動脈夾層護(hù)理查房-PPT課件
評論
0/150
提交評論