2010年6月19日 星期六

PWM的解析度

今天學弟問了我一個有趣的問題


我拿的pic18F4550 的PWM範例


原本是這樣


OpenPWM1(150);   //頻率20K
CCPR2L=75; //Dutycycle 50%


可是如果使用到


#include <pwm.h>      


寫好的指令後


SetDCPWM1(75*4); 


程式要這樣設定,才會dutycycle 才會變成50%



重新看了一下pic18f4550的datasheet才發現


原來,PIC18F系列 在PWM的模式下,dutycycle會提升4倍的解析度


好厲害的做法


不過可惜的是,我不是很清楚真正提升解析度的做法


雖然我之前用的dsPIC30F 系列 的MCPWM 會提升2倍的解析度


但dsPIC30F寫的就比較清楚了


原來一個簡單的PWM,裡面就有很多有趣的想法和技術在裡面了


 


9 則留言:

  1. ╭陳★小白╯2010年8月4日 凌晨1:57

    你好 , 我想請教你一些問題@@
    我現在再做專題自走車,我用的核心是pic18f4520,以及伺服馬達S03T STD
    用馬達控制左右轉,我的問題是怎麼設定週期20ms給pwm和給1.5ms的duty cycle
    我上網爬文也都是說伺服器週期都要給20ms
    大於或小於1.5ms的duty cycle就會左右轉
    OpenPWM1(150);   //頻率20K
    請問你150怎麼換算成20K@@
    CCPR2L=75; //Dutycycle 50%
    SetDCPWM1(75*4);
    這個怎麼算出是50%
     
    [版主回覆08/04/2010 17:07:07]因為pic18f4550 的pwm的dutycycle的解析度是period的4倍,至於原理,我也不是很清楚,但是是一個很不錯的設計。

    回覆刪除
  2. ╭陳★小白╯2010年8月4日 凌晨2:08

    那請問 你會用pic控制伺服馬達嗎@@
    [版主回覆08/04/2010 17:34:34]嗯,就送pwm 就行了,但是因為PIC18F4550的PWM頻率最低是3K,所以不行用這個模組使用,你要自己寫PWM控制伺服機~

    回覆刪除
  3. 現在日本好像開始用序列式信號控制servo,比較少用PWM了

    我說雙足機器人啦,其領域我不知道是否如此

    [版主回覆08/25/2010 14:02:45]序列控制的好處,就是可以多軸,且方便。但是相對的成本就提高嚕
    台灣最愛的就是cost down

    回覆刪除
  4. 你好我想請問一下因為我也是用PIC18F4550做自走車 想知道能不能夠用PWM來知道馬達轉速 這樣就不用使用編碼器來測轉速了

    回覆刪除
  5. 你好我想請問一下 你會用馬達的霍爾編碼器嗎? 6線式的 找了很多資料可是卻不知道怎麼用 還是你有推薦的教學論壇或網站呢?

    回覆刪除
    回覆
    1. 不是很懂你指的是什麼, 如果是無刷直流馬達的HALL SENSOR的話,那就是配合六步方波使用, 如果是直麼有刷馬達的話,就要接上encoder專用的interface 比較方便使用。 建議你可以和購買的廠商要datasheet or SPEC 來研究一下。

      刪除
    2. 好的謝謝你 我有另一個想法是打算用馬達轉一圈的脈波數並利用一秒鐘有幾個脈波數即可知道馬達轉速 但是現在是不知道如何撰寫程式= =

      刪除
    3. 這個方法不太可行,原因: 1、電壓or電流不準,馬達的輸出力道不同。2、馬達是非線性的。3、負載不同也會有不同的結果。
      最後,你的問題有點大, 你要把問題縮小範圍,我們才有辦法幫你。

      刪除