基于 SemiDrive E3110 SSDK PTG1.1 PWM&ICU 的场景应用

关键字 :SemiDriveE3110

一、应用场景

①应用需求

有图(1)所示的应用场景,E3110 输出周期为 100ms,占空比 1% 的 PWM 波给 Sensor, Sensor 在检测到 PWM 波形上升沿后输出一个电压,给 E3110做 Adc 采集。且在检测到上升沿后 0.28ms – 0.35ms 这个时间区间内,输出电压最精确。

②解决方案

 针对以上需求,计划采用图(2)所示的解决方案

解决方案说明:

        PWM 采用 CMP-A channel,参考计数器 G0 工作频率为 250MHZ,即一个计数为 4ns,输出通道 A0 的比较时间 CMP00 在计数值达到 22500000 时触发,电平上拉,即低电平持续 90ms。A1 通道设置为 22500000 + 80000 时触发 CMP10 事件,即比 A0 滞后 0.32ms 上拉。在 G0 计数值达到25000000 时触发OVF 事件,此时 A0, A1 同时下拉,这时就可以得到 图(2)所示的 PWM 波形。

        A0 输出的 PWM 通过 XTRG 路由给 GPIO,连接到 Sensor,A1 输出的 PWM 波形通过 XTRG 输出给 E3110 内部 eTIMER 的 CPTA 通道做捕获,在检测到上升沿时候触发 eTIMER 中断,在中断处理函数中做 ADC 采样。

 

 

二、操作方法与演示

        ①下载补丁链接:https://pan.baidu.com/s/1rov3QeazEiG7ioGNzNfP5g  提取码:lw0d

        ②补丁文件如图(3)所示:

  • 将 etimer 文件夹替换掉 drivers\taishan\etimer 路径下在文件夹
  • 将 icu 文件夹添加到 examples\taishan\drivers 路径
  • 将h 文件 添加到 include\driver\taishan\etimer
  • 将c, pinmux_cfg.h, pwm_cfg.c 文件替换掉 boards\e3_176_ref\sf\configs 路径下对应的文件
  • 将c 文件替换掉 drivers\taishan\epwm 路径下对应的文件
  • 将c 文件替换 examples\taishan\drivers\pwm 路径下对应的文件

 

 ③  .mk 和 Kconfig文件修改

        Etimer 和 icu 文件夹有新增的文件,对应文件夹以及上级文件夹下的 Kconfig 和 rules.mk 需要修改,这里不做详细说明,读者参考其他模块书写语法自行添加。

④配置修改

双击根目录下的 setup-env 批处理文件,在命令行窗口输入 sh tools\menuconfig.sh -b e3_176_ref -p ref -c sf 命令。按照图(4)打开所需的编译选项。

      



⑤编译工程:输入 sh build.sh -b e3_176_ref -p ref 编译工程。图(5)

 

⑥下载镜像:使用Semidrive sd tools 下载工具,将编译后的镜像 boards\e3_176_ref\build\ref\gcc\ospi_e3_176_ref.pac 下载到开发板。图(6)

⑦ demo 运行:启动开发板,依次输入  epwm_app 0,icu_app。打印结果如图(7)

 

三、代码说明

①epwm 代码修改:

  • c 和 pinmux_cfg.h 将 GPIO_S0, GPIO_S1 设置为 XTRG IO mux,用于 PWM 波输出
  • c 将 ePWM CMP 通道 A 配置为单比较模式,双路输出。修改见图(8)

  • c 针对 0.28ms – 0.35ms 做了驱动修改,在 sdrv_epwm_cmp_val_upd()函数中,对 A1 的比较计数值在 A0 的基础上加 80000。见图(9)。注意:由于底层驱动的改动,其他 PWM 的配置将不能使用单比较模式双通道输出模式,X1 Channel会出现波形不正确。如有需要,建议将此应用场景的需求重新定义一个函数。原有的保持不变。

  • c 用于配置并启动 PWM 输出。关键代码见图(10)

  • PWM 输出测试如图(11)。符合预期。

② eTimer ICU 功能代码修改

  • etimer 文件夹中 c 文件为新增加代码,用于 eTimer ICU 功能实现的用户 API。sdrv_etimer.c 和

sdrv_etimer.h 用于实现 low level driver,相比较 SSDK PTG3.0, 有一些功能没有实现,因此这两个文件也有少许改动。

  • h 为针对 ICU 功能的头文件,为新增文件。导出 etimer_icu_drv.c 中的 API 函数。
  • icu 文件夹为新增文件夹,主要是增加 c 文件,用于实现 eTimer ICU 捕获功能。见图(12)说明。


参考文献:

  1. 12.pdf
  2. 0.pdf
  3. 12.pdf
欢迎在博文下方留言评论,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com
作者:Sim Guo / 郭夕峰

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论