Hands-On 基于 Flagchip FC7300 MCAL-PWM 驱动 RGB

本文将详细介绍如何使用 EB 工具配置 Flagchip FC7300 MCAL PWM 驱动 RGB,并重点强调了配置 pwm 模块的过程以及对pwm 模块的详细解释。本次示例演示将会使用 FTU1_CH1、FTU1_CH3、 FTU1_CH5 通道来驱动 RBG 灯点亮。

查看原文请点此:
 

硬件平台:旗芯微 FC7300DEMO BOARD V2 开发板

软件平台:EB tresos 28.1.0 、Flagchip_FC_IDE 4.0.7

MCAL:  0.4.0

AUTOSAR VERSION :  V4.6.0

图片

以下是 MCAL PACK中 一些文件的简要说明:

图片

一、 PWM 实例 EB 配置

1.1 导入DemoBoard 例程

打开 Tresos Studio 左上角选择 File→Import→Existing Projects into Workspace,选择 FC7300 MCAL 包中的 DemoBoard/tools/DemoBoard_FC7300F8M_EB_Project 文件夹,如图1.1-1.3所示步骤

图片

图片

图1.3 Tools/DemoBoard

1.2 选择需要用到的模块

由图 1.4 可以看到,导入进来的例程包含多个模块,但是本次只需要用到Common、EcuC、Mcu、Os、Port、Pwm,所以右击工程,选择 Module Configurations,进入图 1.6 所示界面并进行筛选。

图片

图片

1.3 配置 ECUC 模块

在 RGB 灯的MCAL中必须有ECUC模块,在Module Configurations 中添加ECUC模块,选择默认配置即可。

图片

图 1.7  ECUC 模块

1.4 配置OS 模块

在 RGB 灯的MCAL中必须有OS模块,在Module Configurations 中添加OS模块,选择默认配置即可。

图片

图 1.8  OS 模块

1.5 配置 MCU 模块

MCU 模块提供 MCU 初始化、复位、休眠、系统时钟配置、外设时钟配置等功能。

我们需要配置FOSC 使能,先双击 Mcu 模块,进入如图 1.9 所示界面,选择  McuClockSettingConfig,勾选 FOSC Enable。

图片

图 1.9  Mcu 配置界面1

查看原理图如图 1.10 所示,RGB1r 对应 PTC12、RGB1g 对应 PTB29、RGB1b 对应 PTB21。通过查找如图 1.11 所示引脚复用看到可复用到 FTU1_CH5、FTU1_CH3、FTU1_CH1。

图片

图 1.10 原理图

图片

图 1.11 引脚复用

双击图 1.9 index 栏下的 0,选择 PCC 外设时钟配置,添加如图 12  所示的 FTU 时钟并使能。

图片

图 1.12 Mcu 配置界面2

1.6 配置 IO 模块

双击 port,进入到 port 配置模块,如图 1.13 所示。选择 portconfig,现在配置需要用到的 PTB21、PTB29、PTC12。双击 port 前面的 index 栏下的 1,进入 portB 的配置界面。

图片

图 1.13 port配置界面

添加 PTB21、PTB29,名字命名为原理图对应的 RGB 名,如 PTB21 为 RGB_1b。如图 1.14 所示。

图片

图 1.14 portpin配置界面

双击 index 栏下的序号进入 PTB21 的配置界面。配置引脚模式为 FTU1_CH1,输出模式,默认低电平。如图 1.15 所示。同理,PTB29 和 PTC12 也是一样的配置方法,引脚模式分别是 FTU1_CH3 和 FTU1_CH7,输出模式,默认低电平。

图片

图 1.15 PTB21 配置界面

1.7 配置 PWM 模块:

在 Module Configurations 中添加 PWM 模块,在 PWM 模块中的  PwmFtuModule  下添加 FTU 外设如图 1.16 所示。

图片

图 1.16 PWM 配置界面

双击 Index 0 进入PwmFtuModule_0-> Ftu Modules 配置界面,选择 Ftu外 设为 FTU_0,时钟选择为 BUS,参考源为 McuClockReferencePoint_Bus,选择 PWM 计数方式为边沿对齐模式、设置 PWM 频率为 10 Khz。

图片

图 1.17 Ftu Modules配置界面

进入 PwmFtuModule_0->  PwmFtuChannels 的配置界面,添加三个 PWM_FTU_Channal ,将 Name 分别修改为 RGB1_1r、RGB1_1g、RGB1_1b, Ftu Hardware Channel  更改为与引脚定义对应的 FTU_CH5、FTU_CH3、FTU_CH1 通道、将通道设置为相互之间独立。如图 1.18 所示。

图片

进入 PWM->PwmChannelConfigSet的配置界面添加三个 PwmChannel、Name 分别修改为RGB1_RED、RGB1_BLUE、RGB1_GREEN。如图 1.19 所示。

图片

双击 Index 0 进入 RGB1_RED 配置界面,选择 PwmFtuChannel 为刚刚在 PwmFtuModule_0->  PwmFtuChannels 下配置的通道,选择 PWM 极性为高,选择 PWM 空闲时的电平为低。如图 1.20 所示。

图片

二、实例代码解析

2.1 将 EB 配置好的工程编译并更新代码至 FCIDE 中

图片

图 2.1 编译并更新

按照如图 2.1 所示标注依次点击,验证错误,无错误后并生成代码。

2.2 main.c

可以看到如图 2.2 所示的 Pwm 已经添加进来并进行初始化。

图片

把 Bsp_Pwm_20ms_Task_Event 函数添加至任务时间片函数中。

图片

2.3 Pwm_PBcfg.c

我们可以看到 FTU0外设、FTU1_CHx 在EB 工具配置好的属性

图片

图片

2.4 Bsp_Pwm.c 

在 demo 示例中修改 Bsp_Pwm_20ms_Task_Event 函数,如图 2.6 所示

图片

这串代码的解释是:

当前 CPU 是 Core 0,代码将执行 PWM 操作。

代码将 PWM 通道 RGB1_RED、RGB1_GREEN、RGB1_BLUE 的占空比设置为变量 s_u32Rgb2DutyVal 的值。检查变量 s_u8BreathDirection 的值。如果为 0,代码将 RGB1 通道的占空比增加 s_u32Rgb1Step 的值。呼吸效果逐渐变亮。如果占空比超过最大占空比值(PWM_MAX_DUTY),则将 s_u32Rgb1DutyVal 设置为最大占空比值,并将 s_u8BreathDirection 设置为 1。

如果 s_u8BreathDirection 为 1,代码检查当前占空比值(s_u32Rgb1DutyVal)是否大于 s_u32Rgb1Step。如果是,则将占空比减去 s_u32Rgb1Step。呼吸效果体现为逐渐变暗。如果占空比小于或等于 s_u32Rgb1Step,则将占空比设置为 0,并将 s_u8BreathDirection 设置为 0。

由此来设置三色为相同的亮度。可以看到 RGB 灯呈现白光的呼吸效果。

三、烧录和调试

3.1 将工程编译并烧录到开发板

观察 RGB 灯,可以看到 RBG 呈呼吸状态被点亮

图片

四、PWM 模块详解

FC7300 PWM 模块提供独立/互补/同步通道输出,边沿/中心对齐模式,产生可变占空比与周期脉冲等功能

4.1 General 配置

图片

图 4.1 General 配置

①PwmConfigurationOfOptApiServices

  • PwmDeInitApi:复位 PWM 配置

  • PwmGetOutputState:获取 PWM 输出状态

  • PwmSetDutyCycle:设置 PWM 占空比

  • PwmSetOutputToIdle:将 PWM 输出设置为空闲状态

  • PwmSetPeriodAndDuty:设置 PWM 占空比和 PWM 周期使能,只有在 PWM-> PwmChannelConfigSet 下选用了 PWM_VARIABLE_PERIOD 才可以使用

  • PwmVersionInfoApi:读 PWM 模块版本信息

  • PwmGetChannelStateApi:获取 PWM 通道状态

  • PwmEnableTriggerOut :使能 PWM 触发输出

②PwmGeneral

  • PwmDevErrorDetect:是否开启错误检测

  • PwmDutycycleUpdatedEndperiod:选择更新 PWM 占空比的方式,立即更新/周期结束后更新

  • PwmLowPowerStatesSupport:启用 PWM 低功耗模式,电源状态管理相关的函数有 (PWM_SetPowerState、PWM_GetCurrentPowerState、 PWM_GetTargetPowerState、 PWM_PreparePowerState,、PWM_Main_PowerTransitionManager)

  • PwmPowerStateAsynchTransitionMode:不需要配置

  • Pwm Enable User Mode Support:不需要配置

  • PwmIndex:指定此模块实例的编号。如果只有一个实例,则其 Id 应为 0

  • Fault Support Enable:启用故障功能,用于关停 PWM 输出

  • EnableMaskingOperations:启用两个功能函数,分别是强制停止 PWM 通道输出、解除强制停止 PWM 通道输出

4.2 PwmChannel配置

添加在 PwmFtuModule 配置好的通道

图片

图 4.2 PwmChannel

4.2.1 双击Index 进入PwmChannel-> General配置

图片

图 4.3 PwmChannel General 配置

  • PwmChannelId:PWM 通道 Id 号

  • PWM Hardware IP:PWM 的硬件单元选择

  • PwmFtuChannel:选择一个 FTUx Channelx 配置

  • PwmMcuClockReferencePoint:PWM 的 Mcu 时钟参考源

  • PwmChannelClass:PWM 通道类别,可选固定周期,可变周期

  • PwmPolarity:PWM 极性

  • PwmIdleState:PWM 空闲状态电平

  • Default Period(HZ):默认 PWM 输出周期 (unit:Hz)

  • Default Period Value:默认 PWM 输出周期 (unit:s)

  • PwmDutycycleDefault:默认 PWM 占空比

  • PwmNotification:PWM 中断回调函数

4.3 PwmFtuModule配置

最多可添加 FTU 0-7 ,8个FTU硬件外设

图片

4.4 PwmFtuModule

4.3.1 双击 Index0 进入 PwmFtuModule-> PwmFtuModule_0->Ftu Modules 配置界面

图片

4.5 PwmFtuModule-> PwmFtuModule_0->Ftu Modules 配置界面

  • Ftu Hardware Module:选择Ftu 硬件外设

  • Ftu Module Prescaler:Ftu 预分频器

  • Ftu Module clock selection:选择 Ftu 时钟输入源

  • Ftu Module clock Frequency:选择 Ftu 时钟频率

  • Ftu Module's Channels Alignment:选择计数模式

  • Reload Frequency:重新加载次数,例:当选择 LDFQ_EACH1 每次 cnt 计数等于 mod 时进行一次重新加载

  • Default Period:配置 PWM 周期

  • Default Period Value:根据Default Period 点击计算器标识可自动计算出

  • Deadtime Counter:死区时间配置

  • DeadTime Counter Prescaler:死区时间计数分频器

  • Pwm Background Debug Mode configuration:PWM在Debug 时的行为,可选计数停止设立标志位、计数停止输出进入安全模式、计数停止输出冻结、继续进行PWM 输出

  • Pwm Fault Funtionality and Clear Mode:故障控制模式,在使能 Fault Support Enable 可以进行配置,可选所有通道禁用、启用偶数通道故障控制,手动故障清除、启用所有通道故障控制,手动故障清除、启用所有通道故障控制,自动清楚故障。使用手动清楚故障时,需要开启中断。

  • Enable External Trigger Channel x:使能外部信号进行 PWM Channel 输出

  • Enable Reload Trigger:使能重新装载时的触发信号

4.3.2 PwmFtuModule-> PwmFtuModule_0->Ftu Fault配置界面

图片

图 4.6 PwmFtuModule-> PwmFtuModule_0->Ftu Fault 配置界面       

  • Pwm Fault Filter Prescaler: Ftu 故障滤波分频器

  • Pwm Fault Filter Value : Ftu 故障滤波值

  • Channel Output on Fault: 故障通道输出、

  • Fault notification enable: 故障通知使能

  • Fault Input Channel:故障输入通道选择

  • Configure polarity for Fault Input Pin:配置故障输入引脚极性

  • Enable Fault Input Glitch Filter:启动故障输入滤波器

  • PwmFaultNotification:PWM 故障回调函数

4.3.3 PwmFtuModule-> PwmFtuModule_0->PwmFtuChannels 配置界面,每个 FTU 外设最多可配置 8 个 PWM 通道

图片

图 4.7 PwmFtuModule-> PwmFtuModule_0->PwmFtuChannels配置界面

4.3.4 双击 Index0,进入 PwmFtuChannles-> General 配置界面

图片

图 4.8 PwmFtuChannles-> General配置界面

  • Ftu Hardware Channel : FTU 硬件通道选择

  • Edge configuration setting for current channel:当前通道的模式,可配置为独立、同步、互补通道

  • Enable Deadtime on combined channels: 使能互补通道死区时间

4.4 PwmPowerStateConfig配置

图片

图 4.9 PwmPowerStateConfig配置

4.5 PublishedInformation PWM 模块版本信息

图片

图 4.10 PublishedInformation PWM 模块版本信息

4.6 PWM 模块常用函数

图片

1. Pwm_Init:初始化PWM 模块

2. Pwm_DeInit:将 PWM模块复位至默认状态

3. Pwm_SetDutyCycler:设置 PWM 通道占空比

4. Pwm_SetPeriodAndDuty:设置 PWM 周期与通道占空比

5. Pwm_SetOutputToIdle:将PWM输出设置为空闲状态

6. Pwm_GetOutputState:获取PWM通道输出空闲状态

7. Pwm_EnableNotification:使能 PWM 通道事件通知

8. Pwm_DisableNotification:失能PWM 通道事件通知

图片

9. Pwm_GetVersionInfo:获取 PWM 模块版本信息

10. Pwm_GetChannelState:获取PWM通道占空比状态

11. Pwm_EnableTriggerOut:使能PWM通道重载触发输出

12. Pwm_DisableTriggerOut:失能PWM通道重载触发输出

13. Pwm_MaskOutputs:强制停止 PWM 通道输出

14. Pwm_UnMaskOutputs:解除强制停止 PWM 通道输出

图片

15. Pwm_SetPowerState: 进入预先准备好的电源状态

16. Pwm_GetCurrentPowerState: 返回 PWM 硬件单元的当前电源状态

17. Pwm_GetTargetPowerState: 返回 PWM 硬件单元的目标电源状态

18. Pwm_PreparePowerState: 允许 PWM 硬件模块进入请求的电源状态

五、总结

本文以 PWM 驱动 RGB 为示例,介绍了如何配置和使用 FC7300 的 PWM(脉宽调制)模块,通过本文的讲解,读者可以了解到如何正确配置 PWM 模块,以实现脉宽调制的功能。

六、参考文献

(1)  AUTOSAR_SWS_PWMDriver.pdf

(2)  FC7300 Reference Manual V0.6.pdf

(3)  FC7300 DataSheet V0.4.pdf

欢迎关注大大通博主:汽车大牛

了解更多汽车相关应用知识!

登录大大通,提问/评论,获取技术文档等更多资讯!

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

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

相关文章

STM32测测速---编码电机读取速度的计算

1、首先先了解一下计算的公式 速度计算: 轮胎每转一圈的脉冲数取决于编码器的分辨率,可由下面公式进行计算: PPR是电机的线数 以GA25-370电机为例。 图片来源:第四节:STM32定时器(4.JGA25-370霍尔编码器…

XGBoost算法—Python实现

XGBoost(eXtreme Gradient Boosting)是一个优化的分布式梯度增强库,旨在实现高效、灵活和便携的机器学习算法。以下是关于XGBoost的详细解析: 一、定义与背景 定义:XGBoost是一个在梯度提升(Gradient Boo…

【Linux网络】套接字编程

本篇博客整理了 socket 套接字编程的相关内容,包括 socket 网络通信原理、socket 相关的系统调用接口等,分别演示了基于UDP协议、TCP协议的 socket 网络编程,旨在让读者更加深入理解网络通信原理和设计,对网络编程有初步的认识和掌…

OpenAI发布“最具性价比”模型 GPT-4o mini,GPT-3.5 Turbo 已成过去式

GPT-4o mini 相较于 GPT 3.5 在多个方面实现了显著的性能提升: 得分率提升:GPT-4o mini 在 MMLU(一个涉及多种语言理解任务的基准测试)上的得分率为 82%,优于 GPT-4,并且明显高于 GPT-3.5 2。 成本效益&am…

SpringBoot3 + Vue3 学习 Day 1

springboot 基础 和 注册接口的开发 学习视频基础SpringBoot 概述快速启动配置文件基本使用① application.properties② application.yml (更好) yml 配置信息的书写和获取yml 配置信息书写与获取 1 - Valueyml 配置信息书写与获取 2 - ConfigurationPr…

docker的学习(二):docker常用的高级技术总结

简介 docker的一些知识点的总结 UnionFS 分层,轻量级,高性能的文件系统,支持一层层的叠加功能来修改文件系统。 一次同时加载多个文件系统,把各层文件系统叠加起来,最终文件系统会包含所有底层的文件和目录&#xf…

大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: HadoopHDFSMapReduceHiveFlumeSqoopZookeeperHBaseRedis 章节内容 上一节我们完成了: HBase …

独立看门狗IWDG

一,独立看门狗的讲述 独立看门狗(Independent Watchdog,通常缩写为IWDG)主要作用是主要用于检测外界电磁干扰,或硬件异常导致的程序跑飞问题。 1.1 IWDG本质上是一个12位的递减计数器。当计数器的值从某个初始…

C语言编译报错:error: expected declaration or statement at end of input(缺了括号)

文章目录 报错信息分析解决步骤: 排查 报错信息 /userdata/testOtherPrj/20240715_box_circuit_breaker/test/external/modbus_vendorA/src/vendor_a_modbus.c: In function ‘VendorA_PowerStop’: /userdata/testOtherPrj/20240715_box_circuit_breaker/test/exte…

PyQT6---环境搭建

1、虚拟环境搭建 创建虚拟环境 create -n pyqt6_39 python3.9 切换虚拟环境 conda activate pyqt6_39 2、安装pyqt6 安装pyqt6和pyqt6-tools pip install PyQt6 -i https://pypi.tuna.tsinghua.edu.cn/simplepip install pyqt6-tools -i https://pypi.tuna.tsinghua.edu.cn/…

【视语】XR轻量级开发视语(DZRT)技术

视语(DZRT)技术介绍目录 视语(DZRT)介绍 智慧变焦技术 射线追踪技术 一、基本原理 二、实现步骤 三、优化技术 智能框架技术 一、智能框架技术概述 二、智能框架技术的特点 三、应用前景 网格碰撞体优化 1. 使用合适的…

如何采集1688店铺联系方式?

如何获取1688采集店铺联系方式?用大镜山阿里1688商家数据采集软件,打开如下图的窗口,输入采集的关键词,再点“开始采集”和“获取手机”即可。 等待采集完成即可! 点”导出“,即可把采集结果导出。 如果需…

策划人如何写一个好的活动策划?

在营销界摸爬滚打十多年,我深刻体会到,策划一场成功的活动就像是烹饪一道美味的大餐。 你需要精心挑选食材(活动元素)、掌握火候(时间控制)、调配佐料(创意和细节),最终…

Vue3+.NET6前后端分离式管理后台实战(三十)

1,Vue3.NET6前后端分离式管理后台实战(三十)

2024年软考复习策略

针对考试的难点,我们应该如何有效应对?面对这种通过率低、知识覆盖广的考试,选择合适的复习策略和优秀的老师至关重要。 以下是一些建议: 首先,在选择教师方面,推荐选择那些实战经验丰富、能精准把握重点…

NVidia 的 gpu 开源 Linux Kernel Module Driver 编译 安装 使用

见面礼,动态查看gpu使用情况,每隔2秒钟自动执行一次 nvidia-smi $ watch -n 2 nvidia-smi 1,找一台nv kmd列表中支持的 GPU 的电脑,安装ubuntu22.04 列表见 github of the kmd source code。 因为 cuda sdk 12.3支持最高到 ubu…

双向链表<数据结构 C版>

目录 关于链表的分类 双向链表结构体 初始化 尾插 头插 打印 判断是否为空 尾删 头删 查找 指定位置之后的插入 指定位置的删除 销毁 关于链表的分类 根据链表的三大特性,单向or双向、带头or不带头、循环or不循环,可将链表分为2*2*2&#xf…

《昇思25天学习打卡营第23天|RNN实现情感分类》

使用RNN进行情感分类:基于IMDB数据集的LSTM应用 引言 情感分析是自然语言处理(NLP)中的一个重要应用,广泛用于电影评论、社交媒体等文本数据的情感分类任务。本文将介绍如何使用递归神经网络(RNN)实现情感…

人工智能与社交变革:探索Facebook如何领导智能化社交平台

在过去十年中,人工智能(AI)技术迅猛发展,彻底改变了我们与数字世界互动的方式。Facebook作为全球最大的社交媒体平台之一,充分利用AI技术,不断推动社交平台的智能化,提升用户体验。本文将深入探…

昇思25天学习打卡营第02天|张量Tensor

这节学习的张量(Tensor)的内容进行总结 : 1、张量的概念:张量是一种多线性函数,可以表示矢量、标量和其他张量之间的线性关系。张量是MindSpore网络运算中的基本数据结构,类似于数组和矩阵。 2、可以通过直…