Re: SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
資深會員
|
long long time ago, 我用 pic 一個帶lcd 的簡易demo board ,做過一個 測速器
單純用16f pic mcu,pwm輸出給 ir led, 再由另一隻pin 接ir 接收器, 從反射回來的波形,可以精確量測0~99999 rpm。 (實測過 20000rpm,在4000rpm的5葉片上,都貼上反射鋁箔,反射的頻率就會變成5倍,利用這樣的方式,模擬出 20000rpm的機器,驗證程式) 當時主要是要做 led 恒溫控制,要監控/測試 散熱風扇的轉速變化/性能。 市售的測速器無法接電腦記錄,只好自己動手做。 以6000 rpm為例, 相當於 1秒 100次,=10ms 一個pulse 以60000 rpm為例,相當於1秒 1000次,=1ms 1個pulse 16次= 16ms 處理一次。不是什麼大問題 但是 240rpm, =1秒4次 一次250ms 如果抓 16次,就要 4sec。這時就要調整 capture 的數量。 實作羅輯並不難 time0_isr{ 定時觸發 uart 將資料丟出。 } 32768 osc 輸入 timer1 time1_isr{ timer1 中斷,表示2秒內沒有軟體重置計數器 =>轉速為0 capture prescale =1, 2秒=>理論可抓到 >30rpm } capture_isr{ reset timer1 (timer1=0)( 這要以asm 寫,才能夠精確計算重置timer1的誤差) 跟據 capture prescale 調整ccpr的值,然後輸出顯示。 (用左移,計算出一個 pulse = 多少 timer1) 更新 time0_uart 的資料 (利用 定時器,定時輸出 轉速值) 跟據 capture的時間,調整 capture prescale if bit7=1 or bit6=1 capture prescale =1 else if bit5=1 capture prescale =4 else capture prescale =16 }
發表於: 2021/5/27 14:22
|
|||
|
Re: SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
資深會員
|
感謝回覆
我在發問時提到的"Timer的Capture範例",就是您說的 \csp_apps_sam_d5x_e5x\apps\tc\tc_capture_mode 從說明檔:/csp_apps_sam_d5x_e5x/docs/apps/tc/tc_capture_mode/readme.html 這個範例用了兩個Timer,一個用來產生800Hz的輸入(compare),來接到另一個capture Timer 我把Timer產生的800Hz換成信號產生器,振幅調成與timer輸出一樣(約3.3V),但量起來有誤差,輸入800Hz只量到795Hz,且頻率上升後誤差還會變大 再來是capture的用法須先註冊callback
void capture_handler( TC_CAPTURE_STATUS status, uintptr_t context)
如果外面沒有pulse輸入時,它就不會被觸發,主程式中偵測的地方就會停下來,我希望這個量測是連續的,即沒有變化時應量到值為0Hz 所以看起來SAM系列並沒有辦法設定Timer的clock source來做counter? (就是說Ryang提到的External Clock,其實並沒有這個功能?) (在plib看到一個FREQM,很高興開起來,結果是用來量internal RC Oscillator的頻率...,有什麼應用會須要用到這個?)
發表於: 2021/5/25 14:42
|
|||
|
Re: SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
管理員
|
SAM系列使用TC 或是 TCC Module來進行Capture
SAME54 有 Harmony TC Capture的範例 \csp_apps_sam_d5x_e5x\apps\tc\tc_capture_mode 這個範例會用到 TC, EXINT, Event System三個Module 主要是用外部中斷腳EXINT, 監測的輸入波型的Rise/Failing edge, 由內部觸發Event System, 來HW Trigger我們的TC or TCC進行count的計數, 因此輸入波型的頻率與TC/TCC的參考頻率之間要有適當的比率, 如果要數慢的頻率時, 則須注意16-bit TC/TCC是否會溢位, 需要降低頻率來對應, 因為使用Event System, 過程中沒有Core軟體介入計算, 計數誤差應該不大. 目前沒有提供使用TCC Capture的範例, 但是用法差不多
發表於: 2021/5/25 14:08
|
|||
|
Re: SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
版主
|
其實 MCU 的基本周邊功能大同小異,SAME54 的 Timer/Count 是比較複雜了點。建議使用 2KHz 作為 External Clock 的輸入給 Count 來計數。
當然你需要一個 0.5Sec 的 Timer 中斷當作計時的基底,每當 0.5Sec 中斷時就先抓取 2KHz 計數值出來,立即將計數值歸零並設定一個旗號交給主程式計算頻率即可。 至於如何設定 TC 使用外部的 Clock (2KHz) 做為輸入源,我會找同事提供樹定資料的。
發表於: 2021/5/25 13:19
|
|||
|
Re: SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
資深會員
|
呃,感謝回應啦
抓pulse我以前在PIC18F67K22上面做過啦,以前就是在INT遞增去數pulse,然後每秒拿出來看數了幾次 現在是因為程式裡要做的事比較多,想說看看是不是MCU自己有提供什麼比較方便的功能可以做到 (理論上要數的頻率也不高,應該也是用INT自己遞增一下counter就行了) 我第一次用Atmel的chip做產品,以前都是用PIC的,兩個功能不太一樣,想說看有沒有人知道MCU有什麼內建的功能可以做這個
發表於: 2021/5/25 10:32
|
|||
|
Re: SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
資深會員
|
頻率 = plus / △t
一般人的羅輯是 一秒幾次 機器的運作則是 χ個plus 要幾秒。 χ 和輸入的頻率有關 輸入的頻率慢,χ 大 會導致反應太慢 , χ 小,在頻率快的情況下,又會一直計算。 你的羅輯一樣是 一秒幾次
發表於: 2021/5/25 9:44
|
|||
|
SAME54 - 請教測量外部輸入的方波頻率
|
||||
---|---|---|---|---|
資深會員
|
我想從外部輸入方波,頻率大概在2K Hz以下
大概500ms取一次頻率值 以前使用PIC18時Timer中有像是T0CKI,參考 (或是直接找可當INT的pin來輸入,再用Timer定時取值) 但在SAME54的Timer中沒有看到類似的腳,參考 請問SAME54有類似的功能嗎?我試著用Timer的Capture範例接信號產生器,值有些誤差,輸入800Hz時值會差到5Hz左右,且沒有信號時因不會觸發中斷,就沒辦法持續測量 請問在SAME54上要量pulse頻率一般是用什麼來做?
發表於: 2021/5/25 8:37
|
|||
|