1)討論用dac輸出方波與普通io通過翻轉電平輸出方波的延時誤差
dac延時問題
stm32的dac轉換時間是:如果輸入資料變化最大,即從0x3ff變為0,或從0變為0x3ff,則最多需要4us時間;如果輸入資料變化最小,即只有乙個數字量的變化,則最多需要1us時間。簡單計算得1khz方波延時誤差約為1°。
引腳翻轉電平速度:
最快的是
gpioa ->odr = 0x1; gpioa ->odr = 0x0;
和 pa0 = 0x01;pa0 = 0x00;
和 gpioa ->bsrr = 0x01; gpioa ->brr = 0x01;
轉換週期是220ns,4.55mhz
最慢的是 *pao0 = !*pao0 ; 和 pa0 =!pa0; 取反操作浪費不少時間
轉換週期是900ns 1.11mhz
引自 2)
stm32f103的輸出的pwm能否任意改變相位?
回答是:能!
實現方法如下:
stm32的定時器的pwm模式使用timx_arr暫存器控制pwm輸出的頻率,使用timx_ccrx暫存器控制pwm輸出的占空比,如果需要移相,只需要在希望移動相位的時刻臨時增加或減少timx_arr暫存器的內容,過乙個週期之後再恢復timx_arr的內容即可。
這裡的乙個關鍵問題是,timx_arr暫存器擁有影子暫存器,改變它的內容時並不會立即影響輸出的訊號波形,而是在輸出波形的乙個完整週期結束時才會把影子暫存器的內容拷貝到實際操作的暫存器,這樣就可以保證輸出波形的每乙個週期都是完整的。如果沒有影子暫存器,實現這種移相的要求是比較困難的,軟體程式很難能夠精確地對齊輸出波形的週期邊緣。
引自:沒有試驗過,感覺原理上可行。
另外,今天用timer輸出1khz的pwm波,發現與訊號源產生的1khz方波一同顯示在示波器上時,兩個的相位不斷減小,不斷迴圈,後來仔細觀察,發現訊號源輸出的方波頻率不穩定,每隔幾秒會變為999hz,感覺可以側面佐證這個觀點。
3)所以io翻轉電平的方法要比timer實現移相好一些,因為前者可以在每個上公升沿或下降沿進行校正。
2019.7.23.18.53
vue登入外掛程式引來的後續問題
上次介紹了下寫的登入彈框外掛程式,過了幾天發現點選去註冊或者改密碼的跳轉失效。報錯this.router.push is not a function,繼續列印this.router也是undefined this.router.push 嘗試了很久,試了三種方法。需要注意的是 登入彈框是通過thi...
git 問題一覽(後續更新)
當本地建立git倉庫後遠端同樣建立了乙個新的git倉庫,然後兩個倉庫都有檔案導致這兩個倉庫無法關聯 於是呼叫git pull 出現如下錯誤 fatal refusing to merge unrelated histories 拒絕合併不相關的歷史 然後就可以使用 allow unrelated h...
迴圈的後續章節。
迴圈的巢狀 乙個迴圈體內又包含另乙個完整的迴圈結構,成為迴圈的巢狀。內嵌的迴圈中還可以巢狀迴圈,就是多層迴圈。break 用break語句提前終止迴圈,用break語句可以使流程跳出switch結構,繼續執行switch語句下面乙個語句。continue 有時並不希望終止整個迴圈的操作,而只希望提前...