首页 理论教育 可调脉宽PWM输出的软件设计优化

可调脉宽PWM输出的软件设计优化

时间:2023-06-23 理论教育 版权反馈
【摘要】:1)PWM可调脉宽输出原理导盲系统的振动马达模块是依靠PWM可调脉宽的输出控制的,而经过方案的确定是选择PCA9685多通道PWM模块产生PWM控制信号。而在之前已经了解到PCA9685的工作原理,主要是依靠I2C通信对模块内部的寄存器进行配置,从而对通道以及相应通道的PWM输出信号的频率和占空比进行控制。表6-10MODE1位功能详述表续表2)PWM可调脉宽输出的STM32实现通过对PCA9685内部寄存器的了解,就知道该怎么使用该模块。图6-29PCA9685控制函数程序截图

可调脉宽PWM输出的软件设计优化

1)PWM可调脉宽输出原理

导盲系统的振动马达模块是依靠PWM可调脉宽的输出控制的,而经过方案的确定是选择PCA9685多通道PWM模块产生PWM控制信号。而在之前已经了解到PCA9685的工作原理,主要是依靠I2C通信对模块内部的寄存器进行配置,从而对通道以及相应通道的PWM输出信号的频率和占空比进行控制。

PCA9685模块有6个地址控制脚,通过这些引脚可以控制设备的I2C地址。7位的I2C地址为:0x40+A5:A0,A5到A0如果不做任何处理的话是0,想要把哪一位置1就把那个引脚焊到一起。另外用I2Cdetect检测出还有一个0x70地址一直存在,这是一个通用地址,可以给所有从机下达指令。PCA9685模块总共16个通道,每个通道都有LEDX_ON_L、LEDX_ON_H、LEDX_OFF_L、LEDX_OFF_H 4个寄存器。系统中有一个12位的计数ACK,ACK根据PRE_SCALE寄存器设置的周期进行增加,每增加一次就会和上述4个寄存器对比:当发现ACK==LEDX_ON_H[3:0]:LEDX_ON_L时,X通道输出高电平;当发现ACK==LEDX_OFF_H[3:0]:LEDX_OFF_L时,X通道输出低电平。PRE_SCALE寄存器是用来设置周期的,其计算公式如式(6-9)所示。

式中 osc_clock——时钟值,根据上面的寄存器设置选择是内部25 MHz时钟还是外部时钟;

update_rate——频率值,比如周期是20 ms,那么频率就是50。实际应用中发现有误差,需要加入校准,要把udpate_rate乘以0.915。

一个比较重要的寄存器MODE1不容忽略,此寄存器是设置模块的关键,MODE1位功能详述表如表6-10所示。

表6-10 MODE1位功能详述表

续表(www.xing528.com)

2)PWM可调脉宽输出的STM32实现

通过对PCA9685内部寄存器的了解,就知道该怎么使用该模块。使用此模块的目的有两个,即能对每个通道的PWM的频率和占空比进行控制,因此主要就设计两个函数,一个控制PWM的输出频率函数,一个是控制PWM的通道和占空比的函数。如图6-27所示为PWM频率控制程序流程图,图6-28所示为PWM通道和占空比控制程序流程图。

图6-27 PWM频率控制程序流程图

图6-28 PWM通道和占空比控制程序流程图

通过图6-27和图6-28的程序流程图可以看到PCA9685模块的参数修改步骤是比较清晰的,基本不需要烦琐的循环操作,对于模块的操作只需要修改频率函数和修改通道占空比的函数,而在使用的过程中需要频繁操作的就只有修改通道占空比函数。如图6-29所示为PCA9685控制函数程序截图。

图6-29 PCA9685控制函数程序截图

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈