BeagleBoard logo
Blog Bone Buses
  • LEDs
  • I2C
  • SPI
  • UART
  • CAN
  • ADC
  • PWM
  • TIMER_PWM
  • eCAP
  • eMMC
  • LCD
  • eQEP
  • McASP
  • PRU
Journal About Status: Completed ✔️

© 2023. All rights reserved.

GSoC 2020 BeagleBoard.org

This website is created for keeping track of the Development of "Cape compatibility layer for BeagleBone Black and BeagleBone AI" project..

Using bone bus PWM on BBBWL/BBB/BBAI

22 Jul 2020

In this post we will take a look at how you can use the new compatibility layer along with some new bone bus DT overlays to setup /dev/pwm/* on your BBBWL/BBB/BBAI.

Note: You must correctly install the compatibility layer on your system before following the steps else you'll end up with your board not booting. It is recommended to boot the board from an sdCard so that you can edit back the /boot/uEnv.txt if your board didn't boot!

🐾 Installing the compatibility layer

Please refer to the “Installing compatibility layer on your BBBWL/BBB/BBAI” post for this.

🐾 bone bus i2c

We have these pwm peripherals available, which can be accessed from /dev/pwm/* when enabled,

bone bus BBBWL/BBB BBAI PWM A PWM B
pwm0 PWM0 (ehrpwm0*) N/A P9.22 P9.21
pwm1 PWM1 (ehrpwm1*) PWM3 (ehrpwm2*) P9.14 P9.16
pwm2 PWM2 (ehrpwm2*) PWM2 (ehrpwm1*) P9.19 P9.13

Where PWM A will be /dev/pwm/ehrpwm*a/ and PWM B will be /dev/pwm/ehrpwm*b/.

🐾 Installing DT overlays

  • Clone the repository, $ git clone https://github.com/lorforlinux/bb.org-overlays.git.
  • Change directory, $ cd bb.org-overlays.
  • Change branch, $ git checkout bone_pwm.
  • Compile overlays, $ make.
  • Install bone i2c DT overlays, $ sudo cp src/arm/BONE-PWM{0,1,2}.dtbo /lib/firmware/.
  • To cleanup the binaries you can use, $ make clean.

Now, you are all set to use the overlays!

🐾 Loading the overalys using /boot/uEnv.txt

To load the overlays during boot you have to edit /boot/uEnv.txt. You can use either nano OR vim to edit the file. There are total 8 slots for overlays which we can use, uboot_overlay_{addr0 - addr3} are used to override cape with EEPROM and uboot_overlay_{addr4 - addr7} are used for additional custom capes. I suggest to use uboot_overlay_{addr4 - addr7} for PWM virtual capes but, You can use any to load the overlay.

To load the capes you can uncomment the lines for the slots and add the overlay (/lib/firmware/BONE-PWM*.dtbo), if they are already present in the /boot/uEnv.txt! but commented out as we see on BBBWl/BBB’s uEnv.txt. If by any chance they are not present you can copy paste them form below. You can learn more about u-boot SPL overlays here!


enable_uboot_overlays=1

#uboot_overlay_addr4=/lib/firmware/BONE-PWM0.dtbo
#uboot_overlay_addr5=/lib/firmware/BONE-PWM1.dtbo
#uboot_overlay_addr6=/lib/firmware/BONE-PWM2.dtbo

Now, you can uncomment the overlay(s) you want to load during boot.

🐾 Testing PWM

Before testing it make sure your PWM overlay loaded successfully using $ ls /proc/device-tree/chosen/overlays/. Now, you have to change directory to /dev/pwm/ehrpwm* (see the above table for this). To test the PWM output using LED you need to set period and duty_cycle then enable the output, like this:

For example
$ cd /dev/pwm/ehrpwm0a/

Setup PWM output
$ echo 50000 > period 
$ echo 50000 > duty_cycle 
$ echo 1 > enable

Now you can change the intensity by changing the duty_cycle, 500 = 0% & 50000 = 100%.

Tip: If you have any suggestion/feedback OR facing any problem create an issue in this repository, Thank you :)

Related posts

  • Using bone bus I2C on BBBWL/BBB/BBAI 19 Jul 2020

  • Installing compatibility layer on your BBBWL/BBB/BBAI 19 Jul 2020

  • Testing servo cape on BBBWL/BBB 20 Jun 2020

{ Find me on social media }