2022-12-11

news2024/11/18 9:22:57

文章目录

  • 前言
  • PWM
    • PwmChannel
      • PwmAssignedHwUnit
      • PwmChannelId
      • PwmCoherentUpdate
      • PwmDutycycleDefault
      • PwmIdleState
      • PwmNotification
      • PwmChannelClass
      • PwmPeriodDefault
      • PwmPolarity
      • PwmReferenceChannel
      • PwmSafetySignal
      • PwmShiftValue
    • PWM输出偏移的使用
    • PwmConfigurationOfOptApiServices
      • PwmDeInitApi
      • PwmGetOutputState
      • PwmSetDutyCycle
      • Pwm_SetOutputToIdle
      • PwmSetPeriodAndDuty
      • PwmVersionInfoApi
      • PwmSyncGrpUpdateDutiesApi
    • PwmGeneral
      • PwmChannelCoherentSelection
      • PwmDevErrorDetect
      • PwmDutyShiftInTicks
      • PwmDutycycleUpdatedEndperiod
      • PwmIndex
      • PwmEnable0Or100DutyNotification
      • PwmHandleShiftByOffset
      • PwmNotificationSupported
      • PwmPeriodUpdatedEndperiod
    • PWM初始化
    • PWM输出占空比函数使用
  • 总结

前言

在上一篇文章中,介绍了MCAL GTM-TOM的配置,本文继续介绍TOM的上层模块PWM。该模块是Autosar标准中的模块。本文将结合标准文档及Davinci CFG中的配置进行详细介绍,然后简单介绍在代码中的使用。

PWM

驱动器提供微控制器内部PWM级(脉宽调制)的初始化和控制功能。PWM模块生成具有可变脉宽的脉冲。它允许选择占空比和信号周期时间,如下图所示


polarity决定duty的电平为高还是低。

PwmChannel

PwmAssignedHwUnit

配置对应的硬件单元,也就是前面GTM中配置的TOM模块或ATOM模块。通道的使用需要与实际原理图对应。

CFG中配置:

PwmChannelId


PWM通道的通道Id。此值将分配给从PwmChannel容器短名称派生的符号名称。


CFG中配置:

PwmCoherentUpdate

该配置不是Autosar标准文档中的配置,应该是CFG中新增的,和TOM中的同步异步更新功能类似。
TRUE:周期/占空比的更新在当前生成波形的周期结束时完成(当前波形完成)。也就是TOM同步更新

FALSE:周期/占空比的更新立即完成(服务调用后,当前波形被切断)。也就是TOM异步更新

根据PwmChannelClass,更新结束周期将适用于占空比/占空比和周期。可变周期通道的占空比和周期都将更新,而其他PwmChannelClass通道的占比将仅更新

CFG中配置:

PwmDutycycleDefault


该配置很好理解,即配置PWM默认输出占空比,需要注意的是,值0表示0%,值32768(0x8000)表示100%


CFG中配置:

PwmIdleState


参数PWM_IDLE_STATE表示信号停止后PWM的输出状态(例如调用PWM_SetOutputToIdle,Pwm_17_Gtm_DeInit

CFG中配置:

PwmNotification


如果启用了回调函数,PWM驱动器可以根据每个单独通道的选定边缘调用通知函数。


CFG中配置:

PwmChannelClass


PWM通道类别,Autosar标准文档中定义了三种类型,CFG中多扩展了一种。

PWM_FIXED_PERIOD:PWM通道具有固定周期。只能更改占空比。

PWM_FIXED_PERIOD_SHIFTED:只能更改占空比。周期可以设置偏移(仅当硬件支持时),具体的偏移规则见后面的shift value描述

PWM_VARIABLE_PERIOD:占空比和周期都可以更改。该通道不应被任何其他通道引用,也不应引用任何通道。

PWM_FIXED_PERIOD_CENTER_ALIGNED:CFG中扩展的类型,针对于PWM_FIXED_PERIOD类型的扩展,占空比将正好落在该周期的中间。(没有用过)

CFG中配置:

PwmPeriodDefault


在CFG配置中,输入值是以tick为单位的,例如我们之前TOM通道频率选择为100Mhz,此处period值填入25000,则pwm频率为4000hz。此参数不会影响类PWM_FIXED_PERIOD_SHIFTED和PWM_FICED_PERIOD_CENTER_ALIGNED的通道。

CFG中配置:

PwmPolarity

定义PWM输出的极性


PWM_HIGH:PWM通道输出在循环开始时为高,然后在达到占空比时变低
PWM_LOW:PWM通道输出在循环开始时为低,然后在达到占空比时变高


CFG中配置:

PwmReferenceChannel

该配置也不是Autosar标准配置,CFG中用来了配置关联的通道,只有在PwmChannelClass为PWM_FIXED_PERIOD_SHIFTED或PWM_FIXED_PERIOD_CENTER_ALIGNED的通道可以进行选择,且选择的Reference通道必须为PWM_FIXED_PERIOD类型。后面会统一介绍一下这个功能的使用。


CFG中配置:

PwmSafetySignal

该参数定义Pwm信道是ASIL信号或QM信号的一部分。仅当PwmSafetyEnable设置为True时,此参数才有效


CFG中配置:

PwmShiftValue

该配置也不是Autosar的标准配置。表示的是该通道的占空比相对于ReferenceChannel开始输出的偏移。输入值有两种方式:
当PwmDutyShiftInTicks关闭时,Shift值应以百分比形式输入:

0,表示0%,0x8000表示100%

当PwmDutyShiftInTicks为ON时,Shift值应作为绝对刻度输入:

0,表示0%,值与周期值相同的值表示100%

CFG中配置:

PWM输出偏移的使用

首先定义一个普通输出的PWM通道,类型为PWM_FIXED_PERIOD,设置需要的周期
然后定义需要进行偏移的PWM通道,类型为PWM_FIXED_PERIOD_SHIFTED,该通道不需要设置周期,而是将PwmReferenceChannel设置为前面设置的普通通道,然后设置PwmShiftValue为占空比偏移值,在没有选择PwmDutyShiftInTicks为ON时,输入的值为0-0x8000表示偏移为0-100%

PwmConfigurationOfOptApiServices

选择需要使用的PWM API函数,CFG中配置如下:

PwmDeInitApi


在代码中添加/删除服务Pwm_DeInit()。该函数主要用来卸载PWM模块,包括设置pwm输出为idle state,禁止中断和回调函数等。

PwmGetOutputState


该函数用来获取PWM输出状态,对应的API函数为Pwm_GetOutputState

PwmSetDutyCycle


设置PWM的占空比。这个函数用的最多。

Pwm_SetOutputToIdle


该函数用来将PWM输出设置为Idle状态。

PwmSetPeriodAndDuty


该函数用来设置占空比和周期,只有PWM通道类型为PWM_VARIABLE_PERIOD时才可以使用该函数。

PwmVersionInfoApi


该函数用来获取PWM版本,Pwm_GetVersionInfo

PwmSyncGrpUpdateDutiesApi

该函数不是标准Autosar定义的函数,为CFG的扩展,用来同步输出组内的PWM。目前没有用过。

PwmGeneral

PwmChannelCoherentSelection

该配置不是Autosar标准配置,为CFG的扩展,用于在当前周期结束时启用占空比/周期参数的通道更新的开关。

TRUE:周期/占空比的更新基于PWM通道特定配置参数PwmCoherentUpdate完成。

FALSE:根据全局参数PwmDutycycleUpdatedEndPeriod和PwmPeriodUpdatedEndEndPeriod更新周期/占空比。

CFG中配置:

PwmDevErrorDetect

选择是否开启错误检测




CFG中配置:

PwmDutyShiftInTicks

选择shift是否启用tick计数,这个在前面也有提到。

PwmDutycycleUpdatedEndperiod


选择更新占空比的方式,开启时,在周期结束后更新,关闭时,占空比立即更新。

CFG中配置:

PwmIndex


指定此模块实例的InstanceId。如果只有一个实例,则其Id应为0。

CFG中配置:

PwmEnable0Or100DutyNotification

是否开启在占空比0%或100%时的回调函数


CFG中配置:

PwmHandleShiftByOffset

用于启用移位通道的特殊处理的开关。如果启用了PwmHandleShiftByOffset,则移位的通道将以偏移开始,其工作方式与固定周期通道类似。

如果未选择PwmHandleShiftByOffset,则从参考固定周期通道触发移位通道。本质好像没什么区别?

CFG中配置:

PwmNotificationSupported


允许启用PWM回调函数功能

CFG中配置:

PwmPeriodUpdatedEndperiod

选择更新周期的方式,开启时,在周期结束后更新,关闭时,周期立即更新。

CFG中配置:

PWM初始化

在Mode Management中的Initialization中的Driver Init list1中加入PWM初始化函数。

PWM输出占空比函数使用

#include "Pwm.h"
#include "Pwm_17_Gtm_Cfg.h"

Pwm_17_Gtm_SetDutyCycle(PwmChannelId, Duty);

在程序中调用该函数即可设置PWM的周期,第一个参数为PWM的通道ID,CFG会生成对应的宏定义,格式为Pwm_17_GtmConf_PwmChannel_+配置PWM通道名,例如我们配置的PWM通道名为PwmChannel1,则最终生成的ID的宏定义名为Pwm_17_GtmConf_PwmChannel_PwmChannel1。
Duty为设定的占空比,该占空比最大值为0x8000->十进制为32768,表示占空比为100%.

记得在使用宏定义时对头文件进行包含。

总结

以上,关于Autosar PWM输出的功能就介绍完了。PWM除了作为正常频率输出以外,还可以用来触发ADC采样,后面有空会更新一篇文章来介绍。


若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~ 你的鼓励是对小弟的最大支持~~~

建了一个WX公众h,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/81322.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows 基于 MediaPipe 实现 Holistic

主页: https://google.github.io/mediapipe/solutions/holistic.html MediaPipe Holistic pipelines 集成了姿势、面部和手部组件的独立模型,每个组件都针对其特定领域进行了优化,每个组件的推断输入图不同。 MediaPipe Holistic 首先通过 BlazePose 的姿…

基于极限学习机进行股市预测(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

MySQL-InnoDB的事务隔离级别

MySQL 是一个服务器/客户端架构的软件,对于同一个服务器来说,可以有若干个客户端与之连接,每个客户端与服务器连接上之后,就可以称之为一个会话( Session )。我们可以同时在不同的会话里输入各种…

【图像处理】opencv | 图像的载入,显示,保存 | 视频流的载入,显示,保存

文章目录前言一、cv2读取图片并展示1.1、cv2.imread读取图片1.2、cv2.imshow展示图片1.3、完整代码1.4、封装函数调用1.5、cv2读取为灰度图像1.6、cv2.imwrite保存图像二、cv2读取视频并且展示2.1 展示彩色视频2.2 展示灰度视频2.3 保存视频前言 本文参考视频:唐宇…

二进制搭建k8s——部署etcd集群和单master

二进制搭建k8s——部署etcd集群和单master二进制搭建k8s——部署etcd集群和单master环境1、操作系统初始化配置(全部节点)2、部署 docker 引擎(所有节点)3、部署 etcd 集群准备签发证书环境在 master01 节点上操作在 node01 和 no…

端口隔离实现同一vlan下,二层和三层的互不通

如图:我们要实现下图中,PC1和PC2不通,但都和PC3互通: 配置如下: vlan batch 10 port-isolate mode all # interface GigabitEthernet0/0/1 port link-type access port default vlan 10 port-isolate enable grou…

【golang】 demo 之王realworld,使用golang+gin做后端技术,使用vue做前端项目的开源博客项目

目录前言1,关于realworld项目2,前端项目使用vue3开发的3,后端使用golanggin进行接口开发4,总结前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/108971807 未经博主允许不得转载。 博主CSDN地址是&…

idea中打包docker镜像

idea中打包docker镜像 说明 ​ 构建和推送镜像都是需要docker环境的,这个大家可以使用同一个远程的环境,这里说的就是idea使用服务器上的docker进行镜像的构建和发布, ​ 默认高版本的idea中默认集成了docker插件,这个插件的官…

高并发高可用

一、高并发 1、异步并发 同步阻塞 异步Future 异步CallBack 异步编排CompletableFuture 请求缓存 请求合并 2、扩容 单体应用垂直扩容 单体应用水平扩容 应用拆分 数据库拆分水平/垂直拆分 使用Sharding-jdbc分库分表/读写分离 数据异构 任务系统扩容 3、队列 …

[LeetCode周赛复盘] 第 93 场双周赛20221015-补

[LeetCode周赛复盘] 第 93 场双周赛20221015-补 一、本周周赛总结二、 [Easy] 6261. 数组中字符串的最大值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6262. 图中最大星和1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6263. 青蛙过河 II1. 题目描述2. 思路分析3. 代码实…

【OpenCV学习】第13课:基本阈值操作

仅自学做笔记用,后续有错误会更改 参考文章:https://blog.csdn.net/qq_37835727/article/details/123373339 理论 图像阈值:什么是图像阈值?简单点来说就是把图像分割的标尺, 举个栗子, 现在想象一个场景, 一个桌子上…

BA_重投影误差e对于相机的位姿ξ和对空间点的坐标P的雅可比矩阵的推导

1. 基本思路 重投影误差表示为e, 相机的位姿表示为ξ (或者表示为T(R,t)), 空间点表示为P, 则空间点投影到相机坐标系下的空间坐标点的相机坐标表示为P[X, Y, Z], 则 重投影误差e对于相机的位姿ξ的雅克比矩阵表示为 分别求等式右侧的两半部分(误差对空…

DevExpress WinForms 22.2

DevExpress WinForms 22.2 添加了对Microsoft.NET 7的完全支持。 此版本现在需要.NET 6和Microsoft Visual Studio 2022(v17.0)或更高版本。 这不会影响.NET Framework客户,产品程序集在此发布周期中将继续以.NET Framework 4.5.2为目标。 蒙皮和矢量图标 WXI皮肤的…

每天五分钟机器学习:经典的降维算法——主成分分析法PCA

本文重点 前面我们学习了降维算法的两大应用场景,本节课程我们将学习具体的降维算法PCA,它是主成分分析法。 PCA要做什么? 将二维数据降维到一维,关键就是找到一个方向向量,然后把所有的数据都投射到该向量上,那么什么样的方向向量最好呢? 我们希望投射平均均方误差…

UIPickerView,UIDatePicker,UITextView

文章目录UIPickerView概念应用创建选中数据时的回调代理UIDatePicker概念创建四种模式UITextView概念创建常用属性与方法常用协议方法UIPickerView 概念 UIPickerView是一个列表控件。它可以提供给用户有限个数的可供选择的选项。 他可以设置列数和每一列的行数,然…

Fiddler抓包和Fiddler过滤器

目录 一、Fiddler与其他抓包工具的区别 二、Fiddler的工作原理 三、使用fiddler实现手机抓包 四、Filters过滤器 一、Fiddler与其他抓包工具的区别 1、Firebug虽然可以抓包,但是对于分析http请求的详细信息,不够强大。模拟http请求的功能也不够&…

简述基于JavaEE企业级开发技术

一、绪论 1、学习内容 javaEE企业开发技术概述javaEE容器——SpringORM数据层——MyBatis/JPAWeb层——Spring MVC展现层——JSP/Thymeleaf整合框架——SSM/SSH用户模块分析用户模块功能模块设计 前端框架:Bootstrap,NodeJS,Vue/React/Ang…

[附源码]计算机毕业设计个性化名片网站Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Appium基础 — Appium测试环境搭建总结

1、Appium测试环境搭建整体思路 (1)Android测试环境搭建 Android测试环境需要搭建三个环境,Java,AndroidSDK,Android模拟器。 为什么要安装这三个环境? Java:Android的应用程序层使用的语言是…

理解Linux设备树(DTS)

DTS Dts:DTS即Device Tree Source,是一个文本形式的文件,用于描述硬件信息。一般都是固定信息,无法变更,无法overlay。 Dtsi:可以理解为dts的公共部分,添加、变更非常灵活。Dtsi包含在dts中。 …