树莓派的PWM模式介绍

描述

树莓派可以同时产生两路独立的pwm。

Linux

每一路可以配置到规定的几个gpio上,而实际能用的只有12、13、18、19,其他都没有引出来。这里的gpio指的是bcm的。

Linux

Linux

在BCM2835 ARM外设手册中对PWM做了详细的介绍。

Linux

树莓派的PWM有两种操作模式:PWM模式和Serialiser模式。PWM模式又有两种模式:N/M模式和M/S模式。我们平时常用的那种固定频率改变占空比的操作是PWM模式的M/S模式。

Linux

PWM由8个寄存器控制,手册上给出的总线起始地址为0x7e20c000,对应的物理地址是0x3f20c000。

Linux

如果不使用FIFO和DMA,配置很简单,主要是设置CTL,使能对应的PWM控制器并设置模式,设置RNG给定PWM的范围,就是上面图片的S,设置DAT给定要输出的值,就是图片中的M。也就是说RNG设置PWM的控制粒度,DAT控制输出高低电平的时间,二者的比值就是占空比。

在设置PWM之前,还有一个重要的地方需要设置,就是PWM的时钟,外设手册只说了一下配置时钟的寄存器是CPRMAN,没有其他信息。但是可以参考bcm2835库的设置方式。

Linux

Linux

Linux

总结一下,树莓派的pwm配置分这么几步:

1、设置对应的gpio为pwm复用功能;

2、设置pwm的时钟;

3、设置pwm的模式并使能;

4、设置pwm的range;

5、设置pwm的dat;

以后控制pwm就只需改变dat的值就可以改变pwm的占空比了。

Linux系统下,使用内存映射mmap可以很方便的操控这些寄存器。PWM需要映射gpio寄存器、时钟寄存器和pwm寄存器,bcm2835的库就是使用的这种方式。

Linux

Linux

我用树莓派18、19获取的pwm波形。

Linux

网上有树莓派只提供了一个硬件pwm输出的说法,在我的3b上证明是错误的,我猜测这种说法应该是针对之前旧版本硬件的。

有这两路PWM做两轮平衡车刚刚好。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
评论(0)
发评论
jf_30553158 2023-04-19
0 回复 举报
大佬,用bcm2835那个库,只能开启一路硬件pwm怎么解啊 收起回复

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分