脉冲宽度调制(Pulse Width Modulation,PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。产生PWM主要有两种方式,一种是硬件产生,一种是软件产生。
1)输出方式的选择
(1)STM32软件实现
单片机软件实现PWM脉宽调制是一种比较简单的实现方式。STM32的定时器除了TIM6和TIM7,其他的定时器都可以用来产生PWM输出。其中高级定时器TIM1和TIM8可以同时产生多达7路的PWM输出,而通用定时器也能同时产生多达4路的PWM输出,这样,STM32最多可以同时产生30路PWM输出。而导盲系统最多只需要8路PWM输出,从STM32所能提供的资源上来讲,完全可以满足系统设计的PWM需求。
使用单片机软件实现PWM输出需要注意一个问题,如果需要使用的PWM输出通道数目过多,会不会发生PWM输出引脚不够用的情况。每个定时器的PWM输出都有对应的引脚,而这引脚即便算上重映射的引脚,也会发生重复。更重要的是这些引脚会不会被其他外设资源占用,并且超声波测距模块的回响引脚就是定时器的输入捕获引脚,因为测距使用的方式为定时器输入捕获。综合这些因素,采用软件实现PWM的方式在本次设计的系统中很有可能不可取,可行性需要进一步进行验证。
(2)PWM模块实现
PWM模块所输出的PWM波不占用STM32的CPU资源,从理论上来说可以满足系统设计的需求。
PCA9685是一个16路12位PWM信号发生器,可用于控制舵机、led、电机等设备,I2C通信,能够节省主机资源。PCA9685 16路舵机是一个采用I2C通信、内置PWM驱动器和一个时钟,不需要不断发送信号占用单片机的资源。
模块可控制16路通道的四种工作模式:关、开、PWM、可变PWM。模块拥有约1.6 kHz输出,为设备输出12位分辨率,60 Hz的更新率将能够达到4 μs分辨率,可以配置推拉输出或开路输出,输出使能引脚能够快速禁用所有输出。模块有6个地址控制脚,通过这些引脚可以控制设备的I2C地址。如表6-5所示为PWM模块的性能参数表,图6-9为PCA9685 16路PWM模块实物图。(www.xing528.com)
表6-5 PCA9685 16路PWM模块性能参数表
图6-9 PCA9685 16路PWM模块实物图
2)硬件电路的设计
本节选用PCA9685模块输出PWM。模块有一个OE反使能脚,这个引脚低电平使能,不接的话模块内部默认已经接地使能了,为了稳定不受外界干扰,OE脚将接入STM32的GND引脚;模块的VCC引脚和V+引脚都接入STM32提供的5V电源引脚;模块的GND接入STM32的GND引脚;接完基本的电源以及地线后就只剩通信接口了,模块采用I 2C通信协议进行通信,STM32开发板的2号I 2C接口已经使用,剩下的1号I 2C接口将作为与PCA9685模块通信的接口。PB6(时钟线SCL)接入PCA9685模块的SCL引脚,PB7(数据线SDA)接入PCA9685模块的SDA引脚。如图6-10为PCA9685模块硬件电路设计图。
图6-10 PCA9685模块硬件电路设计图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。