Autosar PWM配置及使用

news2025/1/11 14:49:28

文章目录

  • 前言
  • 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/82751.html

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

相关文章

Coreform Cubit (csimsoft Trelis)

Coreform Cubit (csimsoft Trelis) Coreform Cubit(csimsoft Trelis)是Coreform公司开发的最强大、最高效的工程工具之一。通常,公司都会启动自己的Mash项目。对于CFD分析,他们有FEA。这个软件可以开始你的工作,添加你自己的印第安形状&#…

2023年湖北建设厅七大员建筑八大员考试什么时候报名?甘建二

2023年湖北建设厅七大员建筑八大员考试什么时候报名? 建设厅七大员和建筑八大员有什么关系呢?有区别吗? 甘建二老师告诉你,建设厅七大员和建筑八大员没有区别,只是叫法不一样而已,都是一个东西。 七大员和…

Kunbernetes——二进制单节点部署

常见的k8s部署方式 1.Mini kube Minikube是一个工具,可以在本地快速运行一个单节点微型K8s,仅用于学习预览K8s的一些特性使用 部署地址: https://kubernetes.io/docs/setup/minikube 2.Kubeadmin Kubeadmin也是一个工具,提供kubeadm init和…

基于python的opencv中SGBM立体匹配算法实现

文章目录前言一、SGBM和SGM的区别?1.预处理2.代价计算3.动态规划4.后处理二、SGBM的python-opencv的实现SGBM 参数选择参考文章前言 SGBM的核心是SGM算法,自OpenCV2.4.6开始就已经被开源,非常的方便,并被广泛使用。 一、SGBM和SGM…

几何角度理解相机成像过程

本笔记从几何角度来理解相机的成像过程,我们生活在三维世界中,相机所捕捉到的画面是2D的,3D空间中的点是如何投影到2D平面的过程是本笔记关注的。 预设场景 本笔记讨论的东西基于以下场景: 在一个房间内放了一台相机,…

入职阿里的秘密武器,阿里内部“Java学习笔记”,由浅入深,通俗易懂!

导言 提起阿里,行外人联想到的关键词无非是“交易”、“淘宝”、“支付宝”,但对于程序员来说,阿里庞大的技术体系才是最吸引人的。实际上阿里作为国内一线互联网公司的头把交椅,内部的技术体系和发展都是备受关注的,…

Network-UART VHDL设计及仿真实现

设计内容: 实现UART及实时系统完成收发UART操作的测试系统,要求如下: 本工程包括一个测试系统,UART. UART包括baud波特率模块、UART的transfer and receive模块等 1 Objective The objective of this project is to design and build a complete UART in VHDL. Upon comp…

为什么电子商务物流对电商商家的业务很重要?

正是电子商务物流的推动推动了企业发展包括最大渠道在内的整体生态系统;店内提货、电子商务、分销商、经销商、合作伙伴和全球制造商,推动新客户的增长。电子商务巨头的目标是推动更多的销售并提高客户忠诚度。  无论是内部还是第三方物流公司,改进的电…

【小塔秉匠地图】

运行对应地图 1.先清空url运行一遍 2.填上url再次运行就可以了 对地图操作的方法 handleRowClick(row, column, event) {if (row) {this.send(camToAnchor,{name: row.ancName}) // camToAnchor:定位到锚点;ancName锚点的唯一标识} },send(funcName, options) {console.l…

优维低代码:Theme Mode 页面主题和模式

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 连载…

React 18:state概念与使用、注意问题

一、概念与基本使用 props中的所有属性都是不可变的,这使得React组件不能随着props的改变而改变。但在实际的开发中,我们更希望的是数据发生变化时,页面也会随着数据一起变化。React为我们提供了state用来解决这个问题。 state和props类似&…

类的赋值与浅拷贝

类的浅拷贝与深拷贝 变量的赋值操作 只是形成两个变量,实际上还是指向同一个对象浅拷贝 Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝因此,源对象与拷贝对象会引用同一个子对象深拷贝 使用copy模块的deepcopy函数…

[附源码]JAVA毕业设计疫情防控期间网上教学管理(系统+LW)

[附源码]JAVA毕业设计疫情防控期间网上教学管理(系统LW) 项目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 …

window下生成SANs证书给ingress用

1.安装openssl openssl下载地址:http://slproweb.com/products/Win32OpenSSL.html http://slproweb.com/products/Win32OpenSSL.html 下载指定版本exe安装。 2. 修改openssl配置 为了方便我们copy一份openssl.cfg,用来修改 C:\Users\vamcl\Deskto…

做自媒体18个月,倒欠38万,一个自媒体创作者的自述

做自媒体18个月,倒欠38万,一个自媒体创作者的自述 疫情开始后,长期居家,工作和生活都受到了明显影响,偶然在网上看到了自媒体这个行业,号称日入几千几万。 前前后后花非不少钱买设备、买课、买会员等等,花费近40w颗粒…

Java网络编程,超详细

计算机网络分为网络协议和网络体系结构 通过网络发送数据是一项复杂的操作,必须仔细地协调网络的物理特性以及所发送数据的逻辑特征。通过网络将数据从一台主机发送到另外的主机,这个过程是通过计算机网络通信来完成。 网络通信的不同方面被分解为多个…

爆火的OpenAI及ChatGPT注册详细说明

1 准备条件 ① 需要梯子 ② 准备一个能够接收openai的手机号,用于接收注册验证码 (如果没有也不要紧,下面会介绍通过第三方接码平台来注册) 2 注册手机号接收验证码 网址:https://sms-activate.org/cn/getNumber 2.1 点击右上角注册 这里…

在word表格中一键生成序号,如何操作?

在word表格中一键生成序号,如何操作? 目录 在word表格中一键生成序号,如何操作? 1、首先选中需要填序号的这一列​ 2、在【开始】菜单中找到【多级列表】点击,再点击【定义新的多级列表】​ 3、点击【修改级别中的1…

ELK企业级日志收集

目录 一、ELK简介 二、ELK各组件介绍 ElasticSearch: Kibana: Logstash: 三、ELK可以添加的其他组件 Filebeat: 缓存/消息队列(redis、kafka、RabbitMQ等): Fluentd: 四、为…

【C初阶】第五篇——数组

一维数组的创建和初始化 数组的创建 数组的初始化 一维数组的使用 一维数组在内存中的存储 二维数组的创建和初始化 二维数组的创建 二维数组的初始化 二维数组的使用 二维数组在内存中的存储 数组越界 数组作为函数参数 冒泡排序函数的错误设计 数组名是什么? …