【回眸】JupiterTC397的PWM开发

前言

正文部分

电路分频是社么

电路分频怎么分?

PWM  里的结构体开发思路

使用CAN方法发送PWM参数的开发思路

更新PWM输出开发思路

给PWM输出一个初值

设置PWM输出通道的电平状态开发思路

结语


前言


笔者在之前的三周都在准备毕业论文和相关资料的定稿,熬了好几个夜终于完成了定稿和上交。再等一年审查,即将顺利毕业!祈祷不抽中!

近期在写fre和duty相关的demo,里面涉及到一个分频,其实上课的时候肯定都讲过,不然我不会对这个词又熟悉又陌生。

写这篇博客记录一下写这个demo遇到的一些不懂的地方,本博客包含第二大脑的解答,希望用一篇篇博客记录下一个菜鸟的成长。

其实公司不是很严,划水也是没人在意的,但前段时间看到一篇文章,,类似于某“姐姐”的摆烂是否合理,作者用某“姐姐”和格力羽X相比较,具体说了什么笔者已经淡忘了,印象深刻的是作者的结论,可以摆烂,但不可以找借口,可以说一分价钱一分货,但真正有价值的不是拿到手的工资,而是所处的平台带来的看不见的效益,聪明的大脑是女性最好的医美。

正文部分

电路分频是社么

电路中的分频是指将输入信号的频率降低到较低频率的过程。这通常通过使用特定类型的电子元件(例如计数器或滤波器)来实现。分频器可以用于许多应用,例如音频处理、通信系统和数字时钟等。

电路分频怎么分?

分频可以通过使用特定类型的电子元件来实现。其中一种常见的方法是使用计数器。计数器是一种电子元件,它可以在每次接收到一个时钟脉冲时将其输入信号的状态更改为另一个状态。通过将计数器与其他电子元件(例如滤波器)组合使用,可以实现分频。具体来说,通过将计数器的输出与特定的电子元件相连,可以将输入信号的频率降低到所需的较低频率。

软件里的分频通常使用枚举变量存放几个值,并且分别代表不同的波段,比如说可以用 0 代表部不分频,1可以代表分频1/16,2可以代表分频 1/256,3可以代表 分频1/4096,4可以代表分频 1/32768。

"分频32768"通常是指将输入信号的频率降低到32768分之一。这通常用于数字系统中的时钟频率,例如在实时时钟电路中,时钟频率通常为32.768kHz。这个频率是因为它可以被2的15次幂整除,这使得它在数字系统中非常方便。

PWM  里的结构体开发思路

定义了一个结构体类型s_pwm_para,取别名为 t_pwm_para它包含了以下四个成员变量:

  • pwm_gpio_index:表示PWM输出的GPIO引脚的编号,类型为uint8
  • pwm_duty:表示PWM输出的占空比,类型为uint8
  • pwm_freqency:表示PWM输出的频率,类型为uint32
  • pwm_update:表示是否需要更新PWM输出,类型为bool

这个结构体类型可以用来存储PWM输出所需的参数,例如GPIO引脚编号、占空比、频率等。

使用CAN方法发送PWM参数的开发思路

使用一个for循环,循环变量为i,初始值为1,终止条件为i < MAX_CAN_BUS。在每次循环中,代码调用了can_receive_message_asyn函数,该函数用于异步接收CAN总线上的消息。如果成功接收到了消息,代码会将接收到的数据解析成PWM输出所需的参数,并将这些参数存储在一个s_pwm_para类型的结构体变量pwm_para中。最后,代码将pwm_update成员变量设置为true,表示需要更新PWM输出

在接收到CAN消息后,代码使用了一个嵌套的for循环,循环变量为i,初始值为0,终止条件为i < 2。在每次循环中,代码将接收到的数据以16进制格式打印出来,并将第一个数据字节解析成占空比和GPIO引脚编号,将第二个数据字节解析成PWM输出频率。最后,代码使用DbgPrintf函数打印出解析出来的PWM输出参数。

更新PWM输出开发思路

定义一个静态函数pwm_process,该函数用于处理PWM输出。在函数中,代码首先检查变量pwm_update是否为true,如果是,则表示需要更新PWM输出,代码会使用DbgPrintf函数打印出更新的PWM输出参数。接下来,代码将pwm_update成员变量设置为false,表示PWM输出已经更新。最后,代码调用了set_duty_and_freq函数,该函数用于设置PWM输出的占空比和频率。其中,pwm_para.pwm_freqencypwm_para.pwm_duty表示新的PWM输出的频率和占空比。第一个参数为0表示设置的是第一个PWM通道的参数。这个函数的功能是检查是否需要更新PWM输出,并在需要时更新PWM输出的参数。

给PWM输出一个初值

首先将s_pwm_para类型的结构体变量pwm_para的成员变量pwm_update设置为false,表示PWM输出已经更新完成。接下来,代码将pwm_gpio_index成员变量设置为0,表示PWM输出的GPIO引脚编号为0。然后,代码将pwm_duty成员变量设置为50,表示PWM输出的占空比为50%。再然后,代码将pwm_freqency成员变量设置为10000,表示PWM输出的频率为10000Hz。

接下来,代码调用IfxGtm_enable函数,该函数用于启动GTM模块。然后,代码调用了tom_pwm_init函数,该函数用于初始化PWM输出的参数。第一个参数为0表示初始化的是第一个PWM通道的参数。最后,代码调用了tom_pwm_start函数,该函数用于启动PWM输出。第一个参数为0表示启动的是第一个PWM通道的输出。

设置PWM输出通道的电平状态开发思路

函数首先定义一个名为tom_channel_freq的变量,用于存储PWM输出的频率。然后,定义一个IfxGtm_Tom_Pwm_Config类型的结构体变量tom_pwm_config,用于存储PWM输出的配置参数。接下来,代码通过指针config指向结构体变量tom_pwm_config,以便对其进行配置。接下来,代码根据传入的占空比参数duty来设置PWM输出通道的电平状态。如果占空比为100%,则将输出引脚设置为高电平;如果占空比为0%,则将输出引脚设置为低电平。否则,用IfxGtm_Tom_Pwm_initConfig函数来初始化结构体变量tom_pwm_config的默认值,并根据传入的频率和占空比计算出PWM输出的周期和占空比,并将这些值设置到结构体变量tom_pwm_config中。最后用IfxGtm_Tom_Pwm_init函数来初始化PWM输出通道的参数。

配置clock时   IfxGtm_Tom_Ch_ClkSrc_cmuFxclk1  注意这里的数字 1代表1kHZ到40KHZ的频率,这里是根据示波器调试出来在此分频域内不会失真的一个范围,具体可能要通过测试开发板获得正确的数据。// 3 -- < 50Hz // 2 -- < 2000Hz // 1 -- < 40000Hz

结语

本次task目标是用CAN方法控制PWM输出,主要改动的地方有:主函数调用,tom_pwm.c这里需要结合示波器和头文件 IfxGtm_Tom.h文件来判断配置的频率对应的合适的分频值。
bringup.c文件里需要给PWM输出一个初值,且需要定义PWM的结构体,配置PWM控制的GPIO,使用CAN方法发送PWM参数,最后再开发更新PWM参数的函数,需要注意的是,PWM输出需要更新设置的值,需要把CAN发送占空比和频率的地方放在其他功能函数的后面,使主函数一直等待输入占空比参数。

你可能感兴趣的:(c语言,汽车)