新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > R/C伺服電機FPGA

        R/C伺服電機FPGA

        作者: 時間:2023-12-22 來源:電子森林 收藏

        適用于控制R / C。 

        本文引用地址:http://www.104case.com/article/202312/454182.htm

        R / C伺服(“遙控”)由一個電機,一些電子設備和一組裝在一個小盒子中的齒輪組成。單軸從伺服器出來。您可以通過向伺服器發送脈沖來精確控制軸的旋轉角度。軸旋轉角度限制為大約270度(它不能旋轉一整圈,而只能旋轉3/4圈)。

        這是一個伺服器的圖片(已被咬住,但已說明了我們的目的)。

        有用的信息鏈接包括:

        • RC伺服控制
        • RC飛機伺服系統使用指南
        • 遙控伺服器101

        R / C Servos用于:

        • 在遙控模型中(汽車,飛機…)。
        • 在機器人技術中。

        伺服系統有3條線:

        • 黑色:地面。
        • 紅色:電源(+ 5V)。
        • 白色:旋轉控制(使用PWM)。

        白線上的PWM控制脈沖長度需要在1ms到2ms之間。
        1.5ms的脈沖使軸在其旋轉范圍的中間旋轉。
        即使不需要更改角度位置,也需要定期發送新脈沖(每10到20ms),否則伺服將停止嘗試保持該脈沖。

        讓我們以8位分辨率(256步,從0到255)控制一個伺服器。這意味著我們需要產生一個1ms(0)到2ms(255)的脈沖,分辨率為1ms / 256 = 3.9μs。
        分鐘
        使用25MHz時鐘(周期為40ns),第一步是對時鐘進行分頻,以產生周期的“滴答聲”,使其盡可能接近3.9μs。

        parameter ClkDiv = 98;    // 25000000/1000/256 = 97.56 
        reg [6:0] ClkCount;reg ClkTick;
        always @(posedge clk) ClkTick <= (ClkCount==ClkDiv-2);
        always @(posedge clk) if(ClkTick) ClkCount <= 0; 
        else ClkCount <= ClkCount + 1;

        使用“ ClkTick”,我們實例化一個12位計數器,該計數器在每個滴答處遞增。

        reg [11:0] PulseCount;
        always @(posedge clk) if(ClkTick) PulseCount <= PulseCount + 1;

        每個滴答持續3.9μs,因此256個滴答持續1ms,12位計數器“ PulseCount”每16ms翻轉一次。正是我們需要定期產生新的脈沖。

        產生PWM脈沖
        當“ PulseCount”等于0時,我們開始每個脈沖。當“ PulseCount”
        在256和511之間時,我們結束每個脈沖。這將在1ms和2ms之間產生脈沖。

        假設“ RCServo_position”是8位位置值(從0到255),我們在其前面連接一個“ 0001”以創建一個范圍為256 ot 511的12位值。最后,我們將這12位與“ PulseCount”進行比較以產生脈沖。

        reg RCServo_pulse;
        always @(posedge clk) RCServo_pulse = (PulseCount < {4'b0001, RCServo_position});


        關鍵詞: FPGA 伺服電機

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 富锦市| 安国市| 鄂尔多斯市| 萝北县| 荆州市| 门头沟区| 绍兴县| 沁源县| 兴仁县| 通州区| 通山县| 玛沁县| 沧州市| 磐安县| 肇州县| 中超| 彰武县| 玛曲县| 平昌县| 都昌县| 讷河市| 旬阳县| 东阿县| 临夏市| 潼南县| 乌兰浩特市| 兴文县| 达拉特旗| 广昌县| 海晏县| 永丰县| 贵德县| 静海县| 长汀县| 观塘区| 新营市| 新宾| 呼图壁县| 通辽市| 达州市| 天等县|