恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

FPGA应用开发和仿真【2.4】

  • 首页
  • 资讯中心
  • /
  • FPGA应用开发和仿真【2.4】

相关资讯

用Python进行机器学习(4)K-Means算法 2026/8/30 19:07:05
Minimax H3视频生成实战:官方skill用法与本地部署全攻略 2026/8/30 19:02:05
Benders分解算法:应对大规模两阶段随机优化问题的核心策略 2026/8/30 19:02:05

最新资讯

Windows平台CVI SDK集成实战:从环境配置到硬件抽象层设计
SQL必知必会:从基础查询到索引优化与SQL注入防护
腾讯音乐春招技术研究岗笔试经验:算法与机器学习全解析
先造车,再进家:一张图看懂未来十年人形机器人的“打怪升级”路线图
写论文别只靠大模型,我从选题到答辩用毕业之家收尾
AI泡沫与铁路泡沫对比:算力基础设施热潮中的判断框架

今日推荐

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

FPGA应用开发和仿真【2.4】

发布时间:2026/8/30 19:07:05
FPGA应用开发和仿真【2.4】 4.10 用户按键和数码LED首先要说明的是用户接口除高分辨率图形界面外基本都是慢速和相对非实时的处理用户接口并非FPGA所擅长。用C/C等语言在CPU包括MCU、MPU等上少量代码能实现的功能可能用Verilog需要数倍甚至数十倍的代码量且由于CPU和程序语言易于灵活分配CPU运行时特别是在有OS时而FPGA的性能规划与资源分配则相对复杂得多用FPGA处理慢速事件也容易造成性能浪费。一般CPU和FPGA协同系统中用户接口都是交给CPU处理的FPGA则负责数据密集型计算和通信。这里介绍用户按键和数码LED主要是因为初学时简单的用户接口在实验中必不可少另外相关处理思路和方法也比较典型。4.10.1 用户按键处理处理按键首先要“去抖”按键在按下时活动触点击打固定触点会有机械振动因而造成输出波形抖动因按键形态和触点材料的不同抖动的过程一般会持续数毫秒金属触点的按键可能达到10ms而软性触点如导电橡胶或薄膜则可能在1ms以内甚至没有抖动。如图4-24所示的按下高电平有效的按键电路在按下时可能出现类似图4-25所示波形。显然这样的波形本身又只代表着一次事件在数字逻辑里是难以直接使用的。图4-24 高电平有效的按键电路图4-25 按键波形的抖动学过MCU的读者可能学到过使用外部中断然后延时判断的去抖动方法这种方法适用于中断应用的教学但并不适用于实际应用。首先为用户按键而占用本应用于应对高实时性事件的外部中断不划算其次延时如在中断中做既浪费CPU运行时、又极有可能阻塞了其他低优先级中断的响应是中断服务函数的大忌。延时如挪到非中断线程中做则提高了系统复杂性。按键去抖动的实用做法是定时查询定时器资源往往是极易复用的一般十毫秒左右的查询间隔对于用户按键也是足够的用户操作按键不可能达到50次每秒按下的持续时间也不可能短于十毫秒。在FPGA中可以使用触发器key_reg在使能en_10ms的控制下间歇地锁定即查询输入以实现去抖。因抖动持续时间一般在10ms以内可以使用10ms一次的使能控制触发器锁定输入信号如图4-26和图4-27所示。图4-26 定时查询去抖波形1图4-27 定时查询去抖波形2如果两次使能恰在抖动前和抖动后则抖动后的使能将控制触发器锁定到高电平。而如果“不幸”某次使能处在抖动期间则这次使能时触发器既有可能锁定到高电平也有可能锁定到低电平而后一次使能时触发器将锁定到高电平。但无论在抖动期间锁定到的是高电平还是低电平输出均不会有抖动区别只是输出上升沿有10ms的时间差。在得到无抖动的按键信号key_reg后再依照4.5.1节所述将其处理为使能信号即可在后续逻辑中方便地使用了。代码4-34中描述了包含去抖和转换为使能功能的按键处理模块KeyProcess其中还包含测试平台。为便于快速仿真和观察波形测试平台使用了10kHz时钟。代码4-34 按键处理模块及其仿真平台图4-28是其仿真波形片段。图4-28 KeyProcess模块仿真波形片段4.10.2 数码LED数码LED是排列成可以显示数字和少量字母的LED阵列。最常见的数码LED是七段数码LED由七个LED排列而成如图4-29所示。七段中的每一段被命名为agag段的不同亮暗组合可以形成数字09和字母af但不能统一大小写许多七段数码LED还在数字右下角增加小数点。图4-29 七段数码LED及0~9和a~f显示如果要将数字逻辑中由二进制表达的数值显示到数码LED上可选择十进制或十六进制。当然通常应使用十进制以符合用户习惯。要做十进制显示首先需要将二进制数值转换成BCD码表达的十进制。BCD码使用4位二进制表达1位十进制虽然4位二进制可表达16种状态但BCD码仅使用其中的09。例如如果将BCD码的二进制内容直接写成十六进制则与十进制字面一致目前BCD码几乎只用于十进制显示在数字系统内部表达数据和计算应只使用二进制码。代码4-35描述了一种二进制到BCD码转换模块。其思路是将输入二进制bin缓存到bin_temp然后逐周期将它与十进制100、10、1比较若大则减去100、10、1并将bcd_temp加上十六进制0x100、0x10、0x1利用其十六进制与表达的十进制字面一致的特点直至减为0时将bcd_temp输出至bcd并清零以备下次转换。其缺点是不同数据转换所需的时钟周期数不一样例如转换100仅需2个周期而转换99则需19个周期并且在转换期间发生的bin输入更改并不会予以响应。但因最终是为了显示给用户看快到接近时钟频率没有意义而短时出现的bin即使被转换和显示肉眼也观察不到所以并不影响预期功能。代码4-35 用于显示的二进制-BCD码转换模块转换为BCD码之后的数据送至数码LED显示之前还需要转换成段码即将数值转换为a~g段的亮暗组合。以1表达点亮为例代码4-36描述的模块可将4二进制数值015转换为0~9和a~f对应的段码送入BCD码则转换为显示十进制0~9的段码送入4位二进制则转换为显示十六进制0~f的段码。代码4-36 数码LED段码转换模块LED适合电流源驱动FPGA IO口输出近似为电压源需串接限流电阻才可以驱动LED。4.11 PWM和死区PWM即脉冲宽度调制Pulse Width Modulation是输出矩形波占空比与输入待调信号瞬时值呈线性关系的调制。可用待调信号与锯齿波作数值比较得到。如图4-30所示锯齿波的频率也是PWM输出信号的频率。图4-30 PWM的产生原理PWM常用于功率元件的驱动如开关电源变换器中的开关器件控制系统中的电机等。PWM也可在低要求的场合用作数模转换相当于采样率为PWM频率的DAC。PWM输出至片外再经过低通重构滤波器可得到与占空比呈正比的输出电压即与数字域待调信号呈线性关系。4.11.1 单端PWM计数器输出即是锯齿波因此PWM调制器模块可以用计数器实现。如代码4-37所示模块还提供了co输出它与PWM周期同步可用于协调前级控制系统的同步工作用于直接或间接控制系统采样率。其输出占空比其输出PWM的频率本小节和4.11.2节所述的所有PWM发生器模块输出的PWM信号频率均符合式4-3。代码4-37 参数化模的PWM发生器有时也需要有符号输入的PWM发生器如代码4-38所示注意模M应为偶数。其输出占空比代码4-38 参数化模的有符号输入PWM发生器4.11.2 差分PWM功率元件也常常用全桥驱动以便在单功率电源时获得双极性的驱动电压。驱动全桥则需要差分PWM差分PWM信号由PPositive和NNegative两个信号构成表达的占空比范围为-11表达形式也有多种。如图4-31所示从左至右分别为差动时间、固定P相、固定N相、固定低电平和固定高电平形式的一个周期波形示例。图4-31 差分PWM的不同形式表4-3罗列了不同形式下的P、N两相各自占空比与差分PWM表达的占空比η间的关系。表4-3 差分PWM不同形式下的占空比计算因电平和驱动能力限制FPGA的输出并不能直接驱动功率桥中的开关器件一般还需要使用驱动电路或专用的IC将FPGA、MCU等IO电平的PWM信号转换为大电流和满足开关器件栅极或基极电压需求的驱动信号去驱动开关器件。多数驱动电路或IC支持上述五种方式中的任何一种但有些因带有栅极电压自举电路P相和N相均不能接受接近1的占空比有些会利用两相均为1的情况控制所有开关器件关断实现驱动禁能比如驱动电机相当于让电机依惯性滑行。因而具体应使用哪种方式、有何限制应该根据驱动电路或IC的需求而定。差动时间方式可以用待调信号及其相反数与同一个计数比较得到比较简单如代码4-39所示注意M应为偶数。其输出的差分占空比代码4-39 差动时间形式的差分PWM发生器其他方式则需要一定的条件判断。代码4-40描述了固定低电平方式的差分PWM发生器注意其M不必为偶数其data输入的范围是-MM-1较相同计数模的差动时间形式范围翻倍可以认为其占空比分辨率提升了一倍。其输出的差分占空比代码4-40 固定低电平形式的差分PWM发生器代码4-41是测试上述四个PWM发生模块的测试平台为便于观察仿真波形PWM发生模块的模均设置得较小。代码4-41 各种形式PWM发生器的测试平台图4-32是仿真波形片段。图4-32 各种形式PWM发生器的仿真波形片段4.11.3 死区开关器件的开通和关断不可能在瞬间完成都会有一个线性过渡区。桥臂的上下两个开关器件如果在驱动其中一个开通的同时驱动另一个关断则两者的线性过渡区会有重叠形成从电源到地的电流通路瞬时功耗极大甚至会损坏器件。所以必须将控制开关器件开通的跳沿延迟一小段时间称为“死区时间”。另一方面多数开关器件的开通要快于关断也是需要增加死区时间的一个原因。有的功率桥驱动电路或IC会带有死区时间控制功能有的则没有这时也可在数字逻辑中增加这一功能。代码4-42描述了这一功能实现方法与代码4-17所示的脉冲展宽模块类似注意该模块在对上升沿延迟DELAY个clk周期的同时也会对下降沿延迟1个clk周期。代码4-42 死区时间模块上升沿延迟代码4-43是仿真平台的代码片段代码中将PWM分成一个桥臂的上下两路pwm_up和pwm_lo并认为上下两路均为高电平控制导通上路直接由PWM增加死区时间得到下路将PWM反相后增加死区时间得到。为方便观察仿真波形两个死区时间控制模块均仅将上升沿延后两个周期。实际应用中所需的死区时间需根据具体器件和电路测算。代码4-43 死区时间模块仿真平台片段图4-33是仿真波形的片段。图4-33 死区时间模块仿真波形片段4.12 正交增量编码器接口编码器广泛应用于运动控制系统中的位置或速率反馈。编码器分为绝对值编码器和增量编码器。前者直接反馈位置或角度为避免竞争冒险常用格雷码接口较为简单将格雷码转换为二进制码即可当然要作同步后者反馈速度或角速度当然也可积分后得到位置或角度为确定位置零点所以一般也会附有额外的零点检测。图4-34 正交增量编码器的输出波形正交增量编码器输出两个相差90°的脉冲可根据相差的正负来判定速度或角速度的正负即方向。图4-34是典型的输出波形。以正交增量旋转编码器为例。编码器会定义一个正转方向正转时A相超前于B相反转时A相滞后于B相。旋转编码器一般使用等角度分布的扇形光栅或磁栅一圈N格并以分布夹角90°k·360°/N的光敏或磁敏传感器检测以实现脉冲输出。每个栅格又称为“一线”每旋转过一线A、B两相各会输出两个跳沿共4个旋转一圈共计会有4N个跳沿输出。图4-34中前4个跳沿是A相超前于B相的情况增量1后4个跳沿是A相滞后于B相的情况增量-1因而可总结为表4-4。只要根据此表控制一个累加器累计增量便可获得编码器的速率或位置信息。表4-4 正交增量编码器的增减情况与按键类似正交编码器的跳沿也可能有抖动但只要两相的抖动不发生重叠就不会影响累加器的正常累计。因为一相电平恒定时另一相反复上下跳累加器会增减抵消因此并不需要特别设计去抖动逻辑。对于FPGA中动辄上百兆的时钟频率编码器的脉冲频率是极低的因此可参考4.5.1节的方法将处理编码器输出的跳沿处理为单周期使能信号之后根据此信号和另一相的电平来决定计数的增减如代码4-44所描述。代码4-44 正交增量编码器接口模块模块的输出acc是给定采样周期由SMP_INVT指定内的累积的脉冲个数有增有减并可以同时与多个正交编码器连接多通道。模块还提供一个acc_valid信号在每个采样周期acc更新的同时输出一次有效可用于控制后级控制系统的采样率。第12行计数器用来产生控制采样周期的co信号。第16行开始的generate生成块用来处理不同通道a_reg和b_reg形成两级触发器用来将跳沿转换为单周期使能第27~30行。第31行开始的always_ff过程驱动内部累加器iacc在每次co有效时由第34行开始的always_ff过程更新到输出acc上并将其清零以备下一周期累积。QuadEncIf模块的参数和端口说明见表4-5。表4-5 QuadEncIf模块的参数和端口说明虽然输出名为acc但实质上表达的是速度。以旋转编码器为例如果编码器线数为N则每脉冲对应转子角为2π/4Nπ/2N而采样周期为TsSintv/fclk所以编码器转子角速度其中acc为模块输出Sintv为参数SMP_INVT的值。如果需要持续累积输出相当于表达角度的输出可以直接输出iacc并且在每次co时不对其清零。但此时应注意考虑长时间持续单向旋转会造成溢出。代码4-45是正交编码器接口模块的测试平台。其中第3行QuadEncGo任务用来模拟编码器转过一线的情况ccw控制正反转qprd为转过一线所需时间的四分之一。代码4-45 正交增量编码器接口测试平台图4-35是其仿真波形片段。注意第二次输出的有效数据两个通道分别是10和5也正确地表达了在这个采样周期内转速的平均值因为两个“编码器”均正转了一段时间而后反转了稍短的时间。图4-35 QuadEncIf模块的仿真波形片段内容由AI生成

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号