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 term
  • 🧪 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.1.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.1-py3-none-any.whl (7.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: py_pidx-1.1.1.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.1.tar.gz
Algorithm Hash digest
SHA256 6a6a5953e35e34b594fa30bac45a1c25b3f8a02da93024c9c0c4f701721a1061
MD5 24e83b1f36c6e7711a8523a7a06bf4e5
BLAKE2b-256 7c079f9a021654a07d7280d548ab2dc2f201543a89a05dd4b3071d24ceb3eb8e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: py_pidx-1.1.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e438ff22d175a4cf1146cc909d8ecee19fc69cb36ed5ee62f2a3b02cea24b4af
MD5 31e811005c44f29166bff6ebd12221cc
BLAKE2b-256 853b5e385b2f1c13f89689b68ca700de43607179518530dd91e2f16ff08f4d9d

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