Find Jobs
Hire Freelancers

συμπληρωσης μιας if μέσα σε εναν κωδικας VHDL

€8-30 EUR

已完成
已发布将近 6 年前

€8-30 EUR

货到付款
Μια γεννήτρια παλμών με PWM για έλεγχο servo Για τον έλεγχο του servo πρέπει να παράγουμε μια PWM κυματομορφή. Αυτή η κυματομορφή αποτελείται από δύο τμήματα. Το τμήμα ON στο οποίο η κυματομορφή έχει την μέγιστη τιμή της και το τμήμα OFF στο οποίο έχει την τιμή μηδέν. Το ON τμήμα ονομάζεται Duty Cycle και μετριέται είτε σε μονάδες χρόνου (ms, us κτλ) είτε σε ποσοστό επί της περιόδου. Εφαρμόζοντας μια PWM κυματομορφή στην τροφοδοσία ενός φορτίου επιτυγχάνουμε να ελέγξουμε το ποσοστό της ισχύος που πέφτει πάνω στο φορτίο. Στην περίπτωσή μας ελέγχουμε τις στροφές του servo. Αρχικά θα κατασκευάσουμε την PWM γεννήτρια. Το DE0-nano έχει 50MHz ρολόι δηλαδή 20ns περίοδο. Το servo μας χρειάζεται 20ms περίοδο επομένως 20ms/20ns = 1000000 παλμοί των 20ns ισοδυναμούν σε μια περίοδο των 20ms. Στην συνέχεια πρέπει να ορίσουμε τα άνω και κάτω όρια του duty cycle τα οποία είναι 0.5ns έως και 2.5ns. dcycle_min = 0.5ms / 20ns = 25000 dcycle_max = 2.5ms / 20ns = 125000 dcycle_mid = (dcycle_max – dcycle_min) / 2 = 75000 Για την περιστροφή του servo θα χρησιμοποιήσουμε τα δύο κουμπιά που διαθέτει το DE0-nano. Ο κώδικας VHDL: LIBRARY IEEE; USE [login to view URL]; ENTITY servo_pwm IS PORT( clk : IN STD_LOGIC; reset : IN STD_LOGIC; button_l : IN STD_LOGIC; button_r : IN STD_LOGIC; pwm : OUT STD_LOGIC ); END servo_pwm; ARCHITECTURE Behavioral OF servo_pwm IS CONSTANT period:INTEGER:=1000000; CONSTANT dcycle_max:INTEGER:=125000; CONSTANT dcycle_min:INTEGER:=25000; CONSTANT duty_in:INTEGER:=1000; SIGNAL pwm_reg,pwm_next:STD_LOGIC; SIGNAL duty_cycle, duty_cycle_next:INTEGER:=75000; SIGNAL counter,counter_next:INTEGER:=0; SIGNAL tick:STD_LOGIC; BEGIN --initialize PROCESS(clk,reset) BEGIN IF reset = '1' THEN pwm_reg <= '0'; counter <= 0; duty_cycle <= 75000; --start in the middle ELSIF clk='1' and clk'EVENT THEN pwm_reg <= pwm_next; counter <= counter_next; duty_cycle <= duty_cycle_next; END IF; END PROCESS; counter_next <= 0 WHEN counter = period ELSE counter+1; tick <= '1' WHEN counter = 0 ELSE '0'; --αλλαγή του Duty Cycle PROCESS(button_l,button_r,tick,duty_cycle) BEGIN duty_cycle_next <= duty_cycle; IF tick='1' THEN Συμπληρώστε τον κώδικα του if END IF; END PROCESS; --έξοδος του PWM σήματος pwm <= pwm_reg; pwm_next <= '1' WHEN counter < duty_cycle ELSE '0'; END Behavioral;
项目 ID: 17113644

关于此项目

1条提案
远程项目
活跃6 年前

想赚点钱吗?

在Freelancer上竞价的好处

设定您的预算和时间范围
为您的工作获得报酬
简要概述您的提案
免费注册和竞标工作
颁发给:
用户头像
€34 EUR 在1天之内
5.0 (346条评论)
7.7
7.7

关于客户

GREECE的国旗
Greece
0.0
0
付款方式已验证
会员自5月 5, 2018起

客户认证

谢谢!我们已通过电子邮件向您发送了索取免费积分的链接。
发送电子邮件时出现问题。请再试一次。
已注册用户 发布工作总数
Freelancer ® is a registered Trademark of Freelancer Technology Pty Limited (ACN 142 189 759)
Copyright © 2024 Freelancer Technology Pty Limited (ACN 142 189 759)
加载预览
授予地理位置权限。
您的登录会话已过期而且您已经登出,请再次登录。