Hiệu chỉnh Gamma

gamma

Mắt người không phản ứng tuyến tính với cường độ ánh sáng (phi tuyến tính), bạn xuất 1 PWM có giá trị gấp đôi, điện áp trung bình trên led gấp đôi, led sáng cường độ gấp đôi, nhưng chưa chắc mắt bạn đã cảm nhận được độ sáng gấp đôi. Bạn điều khiển 1 bóng led với PWM từ 0 đến 255 thì hầu như từ giá trị thứ 200 trở lên gần như chả có tí khác biệt gì về độ sáng cả T.T

Hiệu chỉnh Gamma là xắp xếp lại các giá trị sáng theo 1 tỉ lệ logarit (hoặc hàm nào đó) ánh sáng phát ra được đẹp nhất

Nếu mục tiêu của bạn là điều khiển LED với 8bit POWM. Bạn có thể tăng số bit PWM lên 9bit 10bit … rồi hiệu chỉnh. Đây là cách rất hay và hiệu quả nhưng đổi lại sẽ hao tốn tài nguyên vi điều khiển hơn do phải xuất pwm độ phân giải cao hơn

1 công thức biến đổi PWM cơ bản có thể như sau:

o = (int)(pow((float)i / (float)max_in, gamma) * max_out

Với:
o là giá trị pwm output
i là giá trị PWM input
max_in là giá trị PWM đầu vào tối đa cho phép
max_out là giá trị PWM đầu ra tối đa cho phép
gamma là hệ số chuyển đổi

Các phép tính toán gamma làm việc với dấu chậm động và các hàm toán học nên sẽ không hiệu quả chút nào nếu cố đưa nó vào code của vi điều khiển, do đó chúng ta sẽ tính sẵn và đưa nó vào bảng tra cho tiện lợi, các bạn có thể dụng đoạn code C sau để xuất ra bảng tra PWM ( chạy trên DEV-C++ hay Code block hoặc 1 ide C,C++ bất kì nhé)

Ví dụ mình cần 1 bảng tra với hệ số gamma là 2.3, đầu vào 7bit(max là 2mũ7 – 1 = 127 và xuất ra 8bit(max là 2 mũ 8 – 1 = 255), chỉnh sửa các giá trị mong muốn và run code sẽ được bảng tra:

1 số tài liệu tham khảo:

 

Từ tác giả:

Có rất nhiều bạn inbox trực tiếp cho mình để hỏi các vấn đề giống nhau, các bạn vui lòng để lại thắc mắc dưới phần bình luận, mình sẽ phản hồi trong vòng 24h. Điều này sẽ giúp những người cùng thắc mắc có thể tự đọc, tìm hiểu mà không cần mất công hỏi lại mình. Like và comment cũng là một cách rất tốt để Google đánh giá cao bài viết và cho hiển thị lên thanh tìm kiếm, điều này sẽ giúp các bài viết tiếp cận được những người cần đến nó !

Nếu thấy các bài viết thật sự có ích đối với bạn, các bạn có thể donate cho mình tại tài khoản:

Giới thiệu Đào Nguyện 28 bài viết
DIY,chế cháo, viết blog chia sẽ kiến thức về lập trình,điện tử - IoT. Rất mong được giao lưu, kết bạn với các bạn cùng đam mê. Địa chỉ Facebook: https://www.facebook.com/nguyendao207

Hãy bình luận đầu tiên

Để lại comment nếu có thắc mắc, mình sẽ phản hồi trong 24h