樹莓派可以同時產生兩路獨立的pwm。
每一路可以配置到規定的幾個gpio上,而實際能用的只有12、13、18、19,其他都沒有引出來。這里的gpio指的是bcm的。
在BCM2835 ARM外設手冊中對PWM做了詳細的介紹。
樹莓派的PWM有兩種操作模式:PWM模式和Serialiser模式。PWM模式又有兩種模式:N/M模式和M/S模式。我們平時常用的那種固定頻率改變占空比的操作是PWM模式的M/S模式。
PWM由8個寄存器控制,手冊上給出的總線起始地址為0x7e20c000,對應的物理地址是0x3f20c000。
如果不使用FIFO和DMA,配置很簡單,主要是設置CTL,使能對應的PWM控制器并設置模式,設置RNG給定PWM的范圍,就是上面圖片的S,設置DAT給定要輸出的值,就是圖片中的M。也就是說RNG設置PWM的控制粒度,DAT控制輸出高低電平的時間,二者的比值就是占空比。
在設置PWM之前,還有一個重要的地方需要設置,就是PWM的時鐘,外設手冊只說了一下配置時鐘的寄存器是CPRMAN,沒有其他信息。但是可以參考bcm2835庫的設置方式。
總結一下,樹莓派的pwm配置分這么幾步:
1、設置對應的gpio為pwm復用功能;
2、設置pwm的時鐘;
3、設置pwm的模式并使能;
4、設置pwm的range;
5、設置pwm的dat;
以后控制pwm就只需改變dat的值就可以改變pwm的占空比了。
Linux系統下,使用內存映射mmap可以很方便的操控這些寄存器。PWM需要映射gpio寄存器、時鐘寄存器和pwm寄存器,bcm2835的庫就是使用的這種方式。
我用樹莓派18、19獲取的pwm波形。
網上有樹莓派只提供了一個硬件pwm輸出的說法,在我的3b上證明是錯誤的,我猜測這種說法應該是針對之前舊版本硬件的。
有這兩路PWM做兩輪平衡車剛剛好。
-
ARM
+關注
關注
134文章
9169瀏覽量
369243 -
PWM
+關注
關注
114文章
5198瀏覽量
214900 -
Linux
+關注
關注
87文章
11345瀏覽量
210413 -
GPIO
+關注
關注
16文章
1216瀏覽量
52391 -
樹莓派
+關注
關注
117文章
1710瀏覽量
105882
發布評論請先 登錄
相關推薦
評論