?? pwm.vhd
字號:
---- 本模塊的功能是驗證實現和PC機進行基本的串口通信的功能。需要在--PC機上安裝一個串口調試工具來驗證程序的功能。-- 程序實現了一個收發一幀10個bit(即無奇偶校驗位)的串口控--制器,10個bit是1位起始位,8個數據位,1個結束--位。串口的波特律由程序中定義的div_par參數決定,更改該參數可以實--現相應的波特率。程序當前設定的div_par 的值是0x104,對應的波特率是--9600。用一個8倍波特率的時鐘將接受每一位bit的周期時間--劃分為8個時隙以使通信同步.--字符串(串口調試工具設成按ASCII碼接受方式);PC可隨時向CPLD發送0-F的十六進制--數據,CPLD接受后顯示在7段數碼管上。library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PWM IS PORT ( clk : IN std_logic; width_word : IN std_logic_vector(6 DOWNTO 0);--width_word為0的時候方向盤最左,為63(換成十進制候)正中,為127時最右 to_servo : OUT std_logic ); END PWM;ARCHITECTURE arch OF PWM IS --//////////////////inner reg//////////////////// SIGNAL div_reg : std_logic_vector(6 DOWNTO 0);--分頻計數器,分頻值由脈寬步進決定。分頻后得到clk_servo時鐘,周期為步進脈寬 SIGNAL clk_servo : std_logic; --步進電機時鐘 SIGNAL div_reg_pwm : std_logic_vector(11 DOWNTO 0); --////////////////////////////////////////////// CONSTANT div_par : std_logic_vector(6 DOWNTO 0) := "1111101"; --分頻參數,產生脈寬步進時鐘,也就是說產生的時鐘周期為脈寬步進6.25us BEGIN PROCESS(clk) BEGIN IF(clk'EVENT AND clk='1')THEN IF (div_reg = div_par - "0000001") THEN div_reg <= "0000000"; clk_servo<= NOT clk_servo; --得到6.25ms步進時鐘 ELSE div_reg <= div_reg + "0000001"; END IF; END IF; END PROCESS; PROCESS(clk_servo) BEGIN IF(clk_servo'EVENT AND clk_servo='1')THEN IF div_reg_pwm = "110001111111" THEN--6.25ms步進時鐘3200分頻得到20ms周期的鋸齒波 div_reg_pwm<= "000000000000"; ELSE div_reg_pwm <= div_reg_pwm + "000000000001"; END IF ; END IF; END PROCESS; PROCESS(clk_servo) BEGIN IF(clk_servo'EVENT AND clk_servo='1')THEN IF div_reg_pwm>="101111001101"-width_word THEN -------width_word 從"0000000"到"1111111"變化----------為"0000000"對應1120us脈寬,為"1111111"對應1920us脈寬-- to_servo<='1'; ELSE to_servo<='0'; END IF; END IF; END PROCESS;END arch;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -