測量頻率問題;找不出原因…..請大家幫我除錯 我找不到BUG
這個code是參考網路上大家用msp430g2553量測頻率的方法;外加顯示在LCD身上;我的偵測頻率是0~266HZ
因此我用了兩個中斷源; 一個是TIMER 計時1.2秒鐘 一秒鐘執行讀取訊號值 1.0~1.2秒(0.2)秒的時間執行閃爍LCD一次 顯示抓到頻率值
另一個TIMER則是 採用continues mode & capture mode 捕捉訊號 每32.768ms
偵測觸發上源訊號兩次第一次將continues Timer Value清除為0
第二次 偵測 continues Timer Value 為多少
第二次減去第一次時間差則為偵測到的頻率訊號 時間大小;若溢位則count_clock+1 公式如流程圖下面;
問題1. clock 準確度不準 計時器65536溢位 我用邏輯分析儀觀察的到約 33ms大小的時間 修正後每個clock 為0.508314us 但實際上 設定為0.5us
問題2. 兩個中斷源衝突會發生什麼事? 計算時間1秒的中斷源是每80us 中斷一次 而在中斷80us 每0.5us 又要中斷訊號去偵測上源頻率訊號 發現中斷源有重疊;
問題3.看似有問題 但我的程式可以執行 45HZ~266HZ以上看起來誤差值不多: 但45HZ以下頻率完全不准 甚至有很大的問題
我推測30HZ以下就會有問題 因為看似0~65536(0~32.768ms == 0-30HZ)這個兩次計算時間差的計數器好像問題不大
但有誤差 且數據可以參考但超過65536訊號溢位的值不但沒有參考性且是亂數 好比偵測 同個1HZ大小頻率 卻會跳出4HZ或8HZ 且counter 溢位值
每次都不同且有很大差距;我懷疑問題是出在這裡; 這問題困擾我很久 這個程式設計目前是規劃偵測1~266HZ 超過1秒(1HZ)以下的訊號直接濾掉
由程式直接顯示0
問題4. 若不用中斷源當Timer 計數一秒 程式上有什麼寫法? 請給我個範例 謝謝
請高手幫幫我吧…..
以下是我的流程圖:
流程圖
附上專案資料夾:
MSP430_CP_GetSpeed.7z
Susan Yang:
我看您在E2E英文版也发布了帖子
e2e.ti.com/…/790594
请您继续跟踪上述链接
灰小子:
看了你的代码,你的主时钟貌似用的dco。
这个dco本来就是不是太准的,但官网给出的手册里的数据是正负3%,你这个误差确实有些大。
建议把时钟通过io输出,测量一下确认是不是时钟的误差。
Chen yan-ting:
回复 灰小子:
所有msp series smclk似乎都是dco.
我也在懷疑誤差是怎麼造成的。
難道外掛石英震盪就能解決嗎