树莓派是一个卡片大小的微型电脑,用它可以做出很多好玩的东西。PWM波是很常用的一种控制外设的方式,本经验就介绍如何使用树莓派输出PWM波。
工具/原料
树莓派
方法/步骤
1、树莓派可以同时产生两路独立的pwm
2、每一路可以配置到规定的几个gpio上,而实际能用的只有11119,其他都没有引出来。这里的gpio指的是bcm的。
3、树莓派的PWM有两种操作模式:PWM模式和Serialiser模式。pwm模式又有两种模式:N/M模式和M/S模式。我们平时常用的那种固定频率改变占空比的操作是PWM模式的M/S模式。
4、PWM由8个寄存器控制,手册上给出的总线起始地址为0x7e20c000,对应的物理地址是0x3f20c000。
5、在设置PWM之前,还有一个重要的地方需要设置,就是PWM的时钟,外设手册只说了一下配置时钟的寄存器是CPRMAN,没有其他信息。但是可以参考bcm2835库的设置方式。
6、如果不使用FIFO和DMA,配置很简单,主要是设置CTL,使能对应的PWM控制器并设置模式,设置RNG给定PWM的范围,就是上面图片的S,设置DAT给定要输出的值,就是图片中的M。也就是说RNG设置PWM的控制粒度,DAT控制输出高低电平的时间,二者的比值就是占空比。
7、Linux系统下,使用内存映射mmap可以很方便的操控这些寄存器。PWM需要映射gpio寄存器、时钟寄存器和pwm寄存器,bcm2835的库就是使用的这种方式。
8、总结一下,树莓派的pwm配置分这么几步:设置对应的gpio为pwm复用功能;设置pwm的时钟;设置pwm的模式并使能;设置pwm的range;设置pwm的dat;以后控制pwm就只需改变dat的值就可以改变pwm的占空比了。