小车运动控制VHDL描述研发设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
小车运动控制VHDL描述研发设计

Part 1:设计简介及背景知识 控制对象——由两台小型二相步进电机驱动的小车 控制目标——通过档位键盘(对应信号为dang[3..0])和控制键盘(对应信号kong[2..0])实现小车以两级速度前进、前左转、前右转、倒车、左倒车和右倒车。 本设计采用自顶向下的设计方法,分为三个模块(见下页图),队员分工设计。 各模块的相关说明 步进电机的转速和输入脉冲信号的频率成正比,所以可以通过第二模块产生不同的分频信号控制其转速。 本设计采用二相双四拍的电机工作模式,故须在第三模块实现相应的脉冲分配。第三模块同时将脉冲导向不同的电机,实现方向控制。 步进电机启动时不能加太高的频率,否则会啸叫、震动、丢步,无法实现快速、稳定的启动,所以在第一模块对输入的时钟脉冲sr_clk进行处理,再输入下一级以实现控制信号启动部分的过渡。 步进电机的输入脉冲顺序相反时(相当于反接线时),会反转,因此可以通过在第三模块对输出反顺序赋值实现反转控制。 关于仿真的说明 步进电机的工作频率在KHZ级,此频率下可忽略芯片内部演示带来的影响,故一下的仿真大多为功能仿真。 参考资料 《基于VHDL语言与Quartus软件的可编程逻辑器件应用与开发》 郑燕,赫建国,党剑华编著 《基于Quartus II的FPGA/CPLD设计》 李洪伟,袁斯华编著 《VHDL语言设计技术》 陈耀和著 《数字电子技术基础》(第二版) 杨颂华 冯毛官 孙万蓉 初秀琴 胡力山编著 《步进电机综述》 北京市自动化技术研究所,一机部电器科学研究 《新版机器人技术手册》(日) 日本机器人学会编 宗光华 Part 2:各模块代码及详解 第一模块 :脉冲分频 一、模块功能 对信号的起始部分的降频(因启动时需频率较低来过渡),输出最终的控制脉冲clk。 通过对脉冲计数分先后在同一输出clk上实现8、4、2、1(即原频)的输出,以达到缓慢启动。 二、原程序及相关说明 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity fen is port( sr_CLK:IN std_logic; kong:in std_logic_vector(2 downto 0); clk:OUT std_logic ); end fen; architecture div of fen is signal Q:std_logic_vector(2 downto 0);--自定义变量用于计数分频转接输出等。 signal C:std_logic; signal D:std_logic; signal E:std_logic; signal R:std_logic_vector(7downto 0): begin process(sr_CLK) begin if sr_CLKEVENT AND sr_CLK=1 then if(Q=111)then Q=000; else Q=Q+1; end if; end if; end process; C=Q(2);--8分频 D=Q(1);--4分频 E=Q(0);--2分频 PROCESS(sr_CLK,kong) --计数,在前96个脉冲使用某低速,在其后的脉冲使用某中速,在97个脉冲之后使用据横速度 BEGIN if sr_CLKevent and sr_CLK=1 then case kong is when011|101|110= if(then R = R + 1; else R = R; end if; when others= R end case; end if; end process; process(R,C,D,E,sr_CLK) begin if(Rthen clk=0; elsif(Rthen clk= C; elsif((and()then--第1脉冲上升沿开始八分频 clk= C; elsif(Rthen clk= D; el

文档评论(0)

woaitiantian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档