欢迎来到纳米网!
首页 > 公众号文章>正文

FPGA实现FOC算法:PWM模块设计详解

一.简介

哈喽,大家好,从今天开始正式带领大家从零到一,在FPGA平台上实现FOC算法,整个算法的框架如下图所示,如果大家对算法的原理不是特别清楚的话,可以先去百度上学习一下,本教程着重介绍实现过程,弱化原理的介绍。那么本文将从PWM模块开始进入FOC算法中去。

6faaa3e0-5c54-11f0-baa5-92fbcf53809c.png

二. PWM模块设计

我们知道有些驱动芯片是需要输入互补的PWM,例如FD6288,而有些驱动芯片则只需要输入PWM,芯片内部会自动将其转为互补的PWM进行工作,例如DRV8313和MP6540。单路FOC开发板使用的是MP6540,多路电机驱动板使用的是FD6288,因此设计的PWM模块需要兼容这两种模式。

1. 模块端口信号

模块端口信号如下所示,命名和工作模式借鉴了STM32定时器的工作方式。

moduletimer_top #(
 parameter   DEFAULT_ARR  =16'd1500 , //5000
  parameter    DEFAULT_CCR   = 16'd750  , //2500
 parameter   COUNT_MODE   ="UP"   , //UP DOWN CENTRE
 parameter   TRIG_ENABLE  ="ENABLE" , //ENABLE DISABLE
 parameter   PWM_OUT    ="NONE"  , //NONEP PN
 parameter   PWM_OUT_MODE  ="MODE1"  , //MODE1 MODE2
 parameter   PWM_DEATH_TIME =3'd0     // 0 ~ 10 sys_clk
)(
  input      sys_clk_i      , 
  input      sys_rst_n_i     ,


  input      pwm_clk_200M_i   ,


  input      timer_wr_type_i   ,
  input      timer_write_en_i  ,
  input[15:0]   timer_write_data_i ,
  input      timer_read_en_i   ,
  output[15:0]  timer_read_data_o  ,


  output     timer_trig_o    ,
  output     timer_pwm_o     ,
  output reg   timer_pwm_n_o   
);

首先给大家介绍一下端口参数

DEFAULT_ARR: 默认的定时器计数周期。

DEFAULT_CCR: 默认的定时器比较输出值。

COUNT_MODE: 定时器工作模式,分为向上计数、向下计数和中心计数三种模式,这是和STM32的三种模式保持一致。

TRIG_ENABLE:中断输出是否使能,当计数器计数到CCR寄存器值的时候,是否输出一个中断信号。

PWM_OUT: PWM输出,分为三种模式,其一是不输出,其二是只输出一路PWM,其三是输出互补两路PWM。

PWM_OUT_MODEL: PWM输出的模式,也就是但计数器小于CCR的时候,是输出高电平,还是输出低电平。

PWM_DEATH_TIME: 死区时间,最大为10个时钟周期,也就是50ns,加上芯片内部基本上都内置了死区补偿,这个时间是够用了的。

然后就是端口信号

sys_clk_i,sys_rst_n_i: 100Mhz系统时钟和系统复位

pwm_clk_200M_i: PWM输出的参考时钟,为200Mhz,这个时钟频率越高,PWM的分辨率也就越高。

timer_trig_o: 中断信号输出

timer_pwm_o,timer_pwm_n_o: PWM信号输出

其他:动态调整定时器的计数周期ARR和比较值CCR,从而可以调整PWM的频率和占空比,实际使用的过程中,只会调整占空比。

2. 设计细节

PWM模块设计原理比较简单,其中有两点需要注意一下,这两点中好了 ,设计起来就毫无压力~。

1. 跨时钟同步: 定时器时钟频率为200Mhz,而系统时钟频率为100Mhz,模块只会涉及到中断信号的同步,定时器时钟域同步到系统时钟域下,快时钟域同步到慢时钟域下,也是同步场景中最为常见的一种,这里直接将脉冲信号作为使能信号,对另外一个信号进行取反,然后检查其边沿即可实现同步。

always@( posedge pwm_clk_200M_i or negedge sys_rst_n_i )begin
 if( sys_rst_n_i ==1'b0 )
    timer_trig_pluse 

1.互补PWM输出死区控制:死区控制的目的是为了防止短时间内两路PWM输出同时为高的情况发生,从而导致上下臂同时导通,了解了这个之后,就只需要将互补PWM输出信号中,输出为高电平的那个信号提前拉低即可,在实现的过程中要结合配置的定时器模式进行输出,会涉及到多重判断的情况,如下图所示,大家可以通过多级判断,去优化这部分时序。

6fc04088-5c54-11f0-baa5-92fbcf53809c.png

最后给大家展示一下仿真结果

6fd2aa7a-5c54-11f0-baa5-92fbcf53809c.png

来源:本文转载自FPGA之旅公众号

原文标题:FPGA从零到一实现FOC(一)之PWM模块设计

文章出处:【微信号:FPGA研究院,微信公众号:FPGA研究院】欢迎添加关注!文章转载请注明出处。

猜你喜欢

  • 艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    艾为电子AW9967FSR:高效升压型WLED驱动芯片详解

    在消费电子持续追求轻薄化与长续航的当下,背光系统能效成为关键瓶颈。传统方案在轻载场景效率低下,散热性能不足,严重制约设备续航并带来可靠性风险。数模龙头艾为电子推出新一代升压型WLED驱动芯片——AW9967FSR,以科学先进的热管理技术,打造卓越的散热...

    2025-12-01
  • Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    Microchip发布MCP服务器:革新AI驱动的产品数据访问方式

    该服务器支持跨AI平台获取可信产品信息,简化工作流程、加速设计并提高生产力 为进一步兑现公司为嵌入式工程师开发AI解决方案的承诺,Microchip Technology Inc.(微芯科技公司)今日推出模型语境协议(MCP)服务器。作为AI接口,MCP服务器可直接连接兼容的AI...

    2026-01-23
  • Microchip第22届中国技术精英年会北京站成功闭幕,下一站深圳

    Microchip第22届中国技术精英年会北京站成功闭幕,下一

    Microchip第22届中国技术精英年会(MASTERs)北京站于今日圆满落幕!来自各地的技术专家、行业伙伴和客户齐聚一堂,共同探讨前沿技术与创新应用。活动伊始,Microchip大中华区副总裁Edward Ho先生为本站致开幕词,欢迎各位嘉宾的到来,并分享了对行业发展的展望...

    2026-01-23
  • 国星半导体车规级LED芯片获2025年广东省名优高新技术产品

    国星半导体车规级LED芯片获2025年广东省名优高新技术

    近日,广东省高新技术企业协会正式发布《2025年第二批广东省名优高新技术产品名单》,国星半导体自主研发的车规级LED芯片与垂直LED芯片两大系列产品成功入选。该认定严格围绕技术创新性、质量稳定性、市场成熟度及产业化能力四大维度进行评审,是广东省...

    2025-12-02
  • 云英谷科技荣登2025中国半导体企业影响力百强,专注OLED显示驱动芯片

    云英谷科技荣登2025中国半导体企业影响力百强,专注OLED

    11月14日,世界集成电路协会(WICA)主办的“2025全球半导体市场峰会”在上海成功召开。本次峰会发布了2026全球半导体市场趋势展望暨2025中国半导体企业影响力百强及集成电路新锐企业50强报告。云英谷科技股份有限公司荣登“2025中国半导体企业影响力百...

    2026-01-23
^