Menu

#94 Software PWM stopped working after hundreds start/stop cycles

Done
pwm (4)
Medium
Defect
2018-10-21
2015-01-22
SPM
No

I've found that using software PWM intensively (calling start/stop for several hundreds) cause that PWM stop working. No error on start call but also it won't change GPIO pin status anymore. After application restart everything works as expected. I have a small setup for reproducing this issue. On RPi #26 GPIO pin is connected LED with resistor. This code in testled.py (yeah, it's very stupid for production but it can reproduce this issue):

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)
GPIO.setup(26, GPIO.OUT)
pwm = GPIO.PWM(26, 1)

def blink_led(cycles):
    for i in xrange(cycles):
            pwm.ChangeFrequency(25)
            pwm.start(50)
            time.sleep(1)
            pwm.stop()

Now when I launch python interpreter, import testled and run blink_led(400). Led starts blinking but after some time LED turns off and is never lightened again. Even when blink_led finish and is runned again it won't turn on LED again. You have to stop python interpreter, run it again and then it works... for a while.

I have some code which only turning GPIO status (without using PWM in this library) and there everything looks OK - even after long time GPIO pins are working properly. So it seems that this is related only to PWM.

Discussion

  • Ben Croston

    Ben Croston - 2015-01-22
    • status: New --> Accepted
    • assigned_to: Ben Croston
     
  • Dragonn

    Dragonn - 2015-04-06

    I have looked a bit into this issue and main problem seems to be related to Linux threads. Library creates/destroys posix thread at every start/stop pwm. On my RPi I am able to create and destroy only 380 threads within single process. After that threshold pthread_create always returns error code 11. See test code in attachment.

    I suggest solution to create thread per GPIO just once and then sleep it with mutex or something to prevent too many create/destroy cycles.

     
  • Kim Wüstkamp

    Kim Wüstkamp - 2018-10-17

    I created a github repo (https://github.com/wuestkamp/raspberry-gpio-python) which solves this issue and describes how to solve this.

     
  • Ben Croston

    Ben Croston - 2018-10-21

    Fix added to source code library. Will be included in next release.

     
  • Ben Croston

    Ben Croston - 2018-10-21
    • status: Accepted --> Done
     

Log in to post a comment.

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.