Điều khiển động cơ servo với mạch VIA B

  • Sơ lược về động cơ servo

Servo là một hệ thống truyền động điều khiển hồi tiếp vòng kín, nhận tín hiệu và thực hiện một cách nhanh chóng và chính xác theo lệnh từ PLC. Bộ servo bao gồm 1 bộ điều khiển servo (servo drive), 1 động cơ servo và 1 encoder để phản hồi tín hiệu từ động cơ về bộ điều khiển. Servo được sử dụng để điều khiển vị trí chính xác, điều chỉnh mô-men phù hợp với các ứng dụng khác nhau và thay đổi tốc độ cực kỳ nhanh (đáp ứng ở ms).

Động cơ servo là một thành phần trong hệ thống servo. Động cơ servo nhận tín hiệu từ bộ điều khiển và cung cấp lực chuyển động cần thiết cho các thiết bị máy móc khi vận hành với tốc độ và độ chính xác cực kỳ cao.

Có thể nói, servo là 1 loại động cơ có thể điều chỉnh để quay được 1 góc cụ thể.

  • So do dau noi day

https://lh4.googleusercontent.com/G23A2K6UkwWVEJVGZX73yRa6ALEgirW3ANuZO4vH-nBHYAuDQQ849UPL2QxZ1GceBW4yuETRf1YpCCbhrNRiqtuI4WzOfH1MP1hHP99vOhTncEvrSmgMhw1qBZSKoM7-PZ5TV9MYDqfE00hJy8Aqiyk

  • Nguyên lý điều khiển:

Chế độ hoạt động servo được hình thành bởi những hệ thống hồi tiếp vòng kín. Động cơ servo nhận một tín hiệu xung điện (PWM) từ bộ điều khiển để hoạt động và được kiểm soát bằng bộ mã hóa (encoder).

Khi động cơ vận hành thì vận tốc và vị trí sẽ được hồi tiếp về mạch điều khiển này thông qua bộ mã hóa (encoder). Khi đó bất kỳ lý do nào ngăn cản chuyển động và làm sai lệch tốc độ cũng như vị trí mong muốn, cơ cấu hồi tiếp sẽ phản hồi tín hiệu về bộ điều khiển. Từ tín hiệu phản hồi về, bộ điều khiển servo sẽ so sánh với tín hiệu lệnh và đưa ra điều chỉnh phù hợp, đảm bảo động cơ servo hoạt động đúng theo yêu cầu đạt được tốc độ và vị trí chính xác nhất.

  • Code

#define Servo kênh servo // kênh servo [2,3,4,5,6,7]
// ví dụ: #define Servo 4
//ham set goc tu goc cu den goc moi

void setGocSer180(int channel,int oldAngle, int newAngle)
{
int pulseTime = map(newAngle,0,180,1000,2000); /* convert from angle to Pulse Time: 0 degree = 1000 microSecond, 180 degree = 2000 microsecond*/
pwm.writeMicroseconds(channel,pulseTime);
delay((200*(abs(newAngle - oldAngle)))/60);/*60 do -> 200ms -> n do can delay nhu cong thuc nay*/
}

/* điều khiển góc servo
setGocSer180(kênh servo,góc cũ, góc mới);
VD: setGocSer180(4,75,0);
servo ở kênh số 4 quay từ góc 75 độ về góc 0 độ
*/

Mục lục