<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于PSoC的車用單片機(jī)試驗(yàn)裝置設(shè)計(jì)

          基于PSoC的車用單片機(jī)試驗(yàn)裝置設(shè)計(jì)

          作者:倪成群,張希偉 時間:2008-07-17 來源:電子元器件應(yīng)用 收藏

            0 引言

          本文引用地址:http://www.ex-cimer.com/article/85843.htm

            汽車單片機(jī)教學(xué)實(shí)驗(yàn)通常需要信號發(fā)生器、示波器等很多輔助設(shè)備,這不但給實(shí)驗(yàn)及教學(xué)帶來很多的麻煩,而且造價昂貴。為了減少實(shí)驗(yàn)輔助設(shè)備,降低實(shí)驗(yàn)成本,本文在 CY8C29466芯片的基礎(chǔ)上,開發(fā)了一套集成有PWM輸出、不同頻率采集、UATR通信并可通過液晶顯示相應(yīng)數(shù)據(jù)的裝置。該裝置在汽車電子單片機(jī)教學(xué)中可代替現(xiàn)行的大多數(shù)實(shí)驗(yàn)輔助設(shè)備,并可簡化實(shí)驗(yàn)的操作步驟、降低實(shí)驗(yàn)成本,從而給實(shí)驗(yàn)及教學(xué)帶來很大方便。

            1 系統(tǒng)組成結(jié)構(gòu)

            SoC(System on Chip)是將整個電子系統(tǒng)集成在同一芯片上的片上系統(tǒng),或稱為系統(tǒng)級芯片。2000年,Cypress公司推出了完全基于通用IP核,由可編程選擇來構(gòu)成產(chǎn)品的SoC。這種可編程選擇的SoC取名為,它是由多種數(shù)字和模擬器件、微處理器、處理器外圍單元、外圍接口電路構(gòu)成的,在周圍集成的模擬和數(shù)字外圍器件陣列都是動態(tài)可配置,而且利用芯片內(nèi)部的可編程互聯(lián)陣列,還可以有效地配置片上模擬和數(shù)字資源,從而構(gòu)成可編程片上系統(tǒng)。該裝置主要由 CY8C29466芯片并擴(kuò)展以簡單的外圍接口電路構(gòu)成??赏ㄟ^PSoC芯片的開發(fā)工具PSoC Designer4.3軟件來測量未知方波的頻率(0~200kHz)、輸出可調(diào)頻率和占空比的方波(0~500kHz)、進(jìn)行通信并顯示相應(yīng)的數(shù)據(jù)(00H~FFH)等功能。

            本裝置的特點(diǎn)是將測量頻率、PWM輸出和通信集成到了一起,而且測量頻率的范圍比較大,且輸出的PWM精度高,最重要的是可在硬件上節(jié)省一部份外圍設(shè)備,因而縮減了印刷板的空間和功耗。

            1.1 未知方波信號頻率的測量

            該功能可用來監(jiān)測外部的事件和輸入信號。當(dāng)外部事件發(fā)生或信號發(fā)生變化時,將在指定的輸入捕捉引腳上發(fā)生一個指定的沿跳變(上升沿),定時器捕捉到該特定的沿跳變后,捕獲事件將會把計(jì)數(shù)器當(dāng)前的數(shù)值傳輸?shù)綌?shù)據(jù)寄存器中,這樣,捕獲值就可以直接從數(shù)據(jù)讀出。然后,通過記錄輸入信號的跳變沿,就可用該軟件算出輸入信號的周期。

            在其他的單片機(jī)上測量方波信號的頻率也可運(yùn)用定時器的輸入捕捉功能,由于定時器都是固化好的。且一般為8~16位,而PSoC芯片內(nèi)置8~32位的定時器和計(jì)數(shù)器,并且時鐘最高可達(dá)24MHz,故可任意調(diào)用以達(dá)到較高的測量范圍。

            若定時器的系統(tǒng)時鐘SYSCLOCK為24 MHz,分頻之后為FCLOCK=SYSCLOCK/368.3,而周期寄存器的值PERIOD為65536.0;那么,采樣的數(shù)值將為:FSAMPLE=FCLOCK/PERIOD。這樣,當(dāng)定時器有溢出時,頻率fFreqValue的計(jì)算公式如下:

            f=(NFlow×65535+NTick)FSAMPLE;

            而定時器沒有溢出時的計(jì)算公式為:

            f=NTickFCLOCK/NCount;

            式中,NFlow是定時器溢出的次數(shù),NTick是定時器當(dāng)前計(jì)數(shù)值,NCount是計(jì)數(shù)器當(dāng)前計(jì)數(shù)值。

            整個系統(tǒng)選用的是數(shù)字模塊中的16位定時器和24位計(jì)數(shù)器,以及模擬模塊中的比較器。定時器的捕捉使能端與比較器相連,計(jì)數(shù)器的主要作用是為定時器提供一個采樣頻率。比較器的作用是將一個模擬量電壓信號與一個參考電壓相比較,并在二者幅度相等的附近輸出一個電壓的躍變信號,然后再相應(yīng)輸出高電平或低電平。比較器的應(yīng)用既節(jié)省了外圍設(shè)備,又提高了測量的準(zhǔn)確性,同時也給測量帶來了很大的方便。

            1.2 輸出可調(diào)頻率和占空比的方波

            脈寬調(diào)制波(PWM)的輸出是利用定時器的比較功能。通過更改比較寄存器(CompareValue)值在0到周期(Period)寄存器填充值之間變化,定時器就可以輸出一定占空比的方波。當(dāng)比較條件滿足后,定時器輸出高電平;而在Period寄存器自動裝入預(yù)置數(shù)的后一個周期,定時器將輸出低電平。所以,定時器輸出波形的占空比可用下式表示:

            Duty=n/(N+1)

            式中,Duty為輸出波形的占空比,n為比較寄存器的填充值,N為周期寄存器的填充值。

            在計(jì)算定時時間時,可設(shè)置定時器應(yīng)用程序接口以修改計(jì)數(shù)器Period值,其輸出周期值與填充周期的值之間的關(guān)系如下式所示:

            T=t(N+1)

            式中,t為定時器計(jì)一次數(shù)所需要的時間,N為周期寄存器的填充值,N加1是因?yàn)橛?jì)數(shù)器是計(jì)數(shù)到0結(jié)束而不是到1結(jié)束。因此,如果要實(shí)現(xiàn)可調(diào)占空比和周期的輸出,其硬件電路只需要兩個電位計(jì)即可,而在軟件編程中只要將采集到的A/D數(shù)據(jù)寄存器的值經(jīng)過計(jì)算之后再賦給定時器預(yù)置周期寄存器和對應(yīng)通道的輸出比較寄存器中,并通過計(jì)算得出相應(yīng)的頻率和占空比,就可通過調(diào)節(jié)電位計(jì)輸出不同周期和占空比的方波。其PWM輸出原理示意圖如圖1所示。

           

            要實(shí)現(xiàn)可調(diào)頻率和占空比并不難,但要達(dá)到一定的范圍和精度,使用一般單片機(jī)就比較困難了。由于CY8C29466型PSoC芯片的定時器為8~32位,A/D轉(zhuǎn)換器為6~14位可調(diào),所以,本裝置選擇了12位ADCINC和24位計(jì)數(shù)器,并選擇調(diào)節(jié)精度較高的電位計(jì),因?yàn)檫@樣可以輸出較高范圍和精度的PWM波形。

            在與汽車電子有關(guān)的教學(xué)和實(shí)驗(yàn)中,PWM波的應(yīng)用范圍很廣,電動機(jī)控制中也廣泛使用PWM,此外,在發(fā)動機(jī)電子控制中,噴油器噴射油量的控制一般也是由PWM控制的。


          上一頁 1 2 下一頁

          關(guān)鍵詞: PSoC 車用單片機(jī) LCD UART

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();