Skip to main content

py_pidx: A Python package for PID control.

Project description

py_pidx

PyPI version License Code Quality Documentation

py_pidx is an advanced Python library for PID control that provides robust, real-world-ready features, including:

  • 🧠 Gain scheduling
  • 🧾 Deadband handling (error & output)
  • 🚦 Anti-windup
  • 🔁 Slew rate limiting
  • 🌀 Derivative filtering
  • 🧮 Feedforward support
  • 🧪 Precision control with dynamic time steps
  • 🔄 Integral and derivative-on-measurement option

🔧 Installation

pip install py_pidx
Feature Description
Kp, Ki, Kd Tunable proportional, integral, and derivative gains
GainScheduler Dynamically adjust PID gains at runtime
Deadbands Zero out small control efforts or errors to reduce actuator jitter
Anti-windup Prevents runaway integral values during saturation
Derivative on Measurement Optionally compute D-term from PV instead of error
Integral on Measurement Optionally compute I-term on process variable instead of error
Low-pass Filtering Smooths noisy derivative term using alpha filtering
Feedforward Optional term to improve open-loop response
Slew Rate Limiting Prevents rapid output changes that may shock actuators

🔧 Basic Usage

from py_pidx import PID

pid = PID(Kp=1.2, Ki=0.5, Kd=0.05, setpoint=100)

while True:
    pv = read_sensor()  # Your process variable
    control_signal = pid.run(pv)
    send_to_actuator(control_signal)
    time.sleep(0.01)

🎯 Advanced Features

Gain Scheduling

from py_pidx.gain_scheduler import GainScheduler

class MyScheduler(GainScheduler):
    def get_gains(self, pv):
        if pv < 10:
            return (2.0, 0.1, 0.01)
        elif pv < 20:
            return (1.5, 0.05, 0.005)
        else:
            return (1.0, 0.01, 0.001)

pid = PID(gain_scheduler=MyScheduler())

Deadbands

pid = PID(
    output_deadband_limits=(-0.1, 0.1),
    error_deadband_limits=(-0.05, 0.05)
)

Anti-Windup and Slew Rate

pid = PID(
    Ki=0.3,
    anti_windup=True,
    max_output_rate=10.0  # Max 10 units/sec change
)

Derivative Filtering and Feedforward

pid = PID(
    Kd=0.2,
    derivative_filter=0.3,  # Low-pass smoothing factor (0.0–1.0)
    feedforward=1.5
)

Testing / Resetting / Toggling

pid.set_auto_mode(False)    # Pause control
pid.set_auto_mode(True)     # Resume control
pid.reset()                 # Clear internal state

PID Controller Methods

Method Description
run(pv, delta_time=None) Compute the control output
reset() Clear internal PID state
set_auto_mode(enabled) Enable/disable PID control loop
set_output_limits(min, max) Clamp controller output
__repr__() Debug string with current gains and output

📄 Documentation

👉 Full API Reference and usage examples: 📖 https://mehrabmahdian.github.io/py_pidx/

🧠 Why Use py_pidx?

  • Designed with real control systems in mind
  • Great for robotics, automation, process control, and simulations
  • Extensible and highly configurable
  • Clean, readable, and well-documented

📃 License

This project is licensed under the terms of the MIT license.

🤝 Contributing

Pull requests and feature ideas are welcome! Please open an issue for bugs or enhancement suggestions.

⭐️ Show Your Support

If you find this library useful, consider starring the repo or sharing it with others in the controls/automation community!

📬 Contact

Maintained by Mehrab Mahdian.

If you have questions, feature requests, or would like to collaborate, feel free to reach out:

📧 Email:
memahdian@outlook.com
mehrab.mahdian@taltech.ee

🧑‍💻 GitHub: @mehrabmahdian
💼 LinkedIn: Mehrab Mahdian

I’m always happy to connect with fellow developers, engineers, and researchers.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

py_pidx-1.1.0.tar.gz (8.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

py_pidx-1.1.0-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

Details for the file py_pidx-1.1.0.tar.gz.

File metadata

  • Download URL: py_pidx-1.1.0.tar.gz
  • Upload date:
  • Size: 8.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for py_pidx-1.1.0.tar.gz
Algorithm Hash digest
SHA256 3ef3b0080ea2de527161fef351b18022b51d8a3042b7b743015eafd7ab5ebeec
MD5 50987d6f9cf6bfd45d1e20af0b0692a3
BLAKE2b-256 3210a758b708677f47850249e265758ccc05e18328b91650d8363fe7e900e272

See more details on using hashes here.

File details

Details for the file py_pidx-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: py_pidx-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.10.12

File hashes

Hashes for py_pidx-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0e004f9ebee1ab0b5e293aef2d20a6bc045609313544c9f946da214962e7dfd2
MD5 94345606c3045e41e142e988f69eb73d
BLAKE2b-256 b9f4c71944e35a538483fd105851e756eed4f89aaaa869947e123119ae99f83a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page