ඔබ නව රොබෝ කෙනෙක් නිර්මාණය කිරීමට සැලසුම් කරන්නේ නම්, ඔබට DC මෝටර පාලනය කිරීම ගැන ඉගෙන ගැනීමට අවශ්ය වනු ඇත. DC මෝටර පාලනය කිරීම සඳහා ඇති පහසුම හා මිල අඩු ක්රමයක් වන්නේ L293D motor driver IC එක Arduino සමඟ සම්බන්ධ කිරීමයි. එමගින් DC මෝටර් දෙකක වේගය සහ භ්රමණය වන දිශාව පාලනය කිරීමට එයට හැකිය. එලෙසම , එයට 28BYJ-48 වැනි ඒක ධ්රැවීය ස්ටෙපර් (uni-polar stepper) මෝටරයක් හෝ NEMA 17 වැනි ද්වි ධ්රැවීය ස්ටෙපර් (Bipolar stepper) මෝටරයක් පාලනය කළ හැකිය.
DC මෝටරයක් පාලනය කිරීම |
DC මෝටරයට පූර්ණ පාලනයක් ලබා ගැනීම සඳහා, එහි වේගය සහ භ්රමණ දිශාව පාලනය කළ යුතුය. මෙම ක්රම දෙක ඒකාබද්ධ කිරීමෙන් dc මෝටරයක් සාර්ථකව පාලනය කරගත හැකිය. ඒ සදහා පහත ක්රම දෙක භවිතා කරනු ලැබේ.
- PWM – වේගය පාලනය කිරීම සඳහා
- H-Bridge – භ්රමණ දිශාව පාලනය කිරීම සඳහා
PWM මගින් වේගය පාලනය කිරීම |
DC මෝටරයක වේගය එහි ආදාන වෝල්ටීයතාව වෙනස් කිරීමෙන් පාලනය කළ හැකිය. මෙය සිදු කිරීම සඳහා පොදු ක්රමයක් වන්නේ PWM (Pulse Width Modulation) භාවිතා කිරීමයි. PWM සම්බන්ධව අපි කලින් පාඩමකදි ඉගනගත්තෙමු.
PWM යනු ON-OFF සංඥා මාලාවක් යැවීමෙන් ආදාන වෝල්ටීයතාවයේ සාමාන්ය අගය සකස් කරන තාක්ෂණයකි. සාමාන්ය වෝල්ටීයතාවය ක්රියාකාරී චක්රයක් ලෙස හැඳින්වෙන අතර එය සංඥාවේ පළලට සමානුපාතික වේ.
ක්රියාකාරී චක්රයේ පළල වැඩි වන විට, DC මෝටරයට සැපයෙන සාමාන්ය වෝල්ටීයතාවය වැඩි වන අතර එනිසා මෝටරයේ වේගය වැඩිවේ. ක්රියාකාරී චක්රයේ පළල අඩු වන විට DC මෝටරයට සැපයෙන සාමාන්ය වෝල්ටීයතාවය අඩු වන අතර එනිසා මෝටරයේ වේගය අඩුවේ.
විවිධ ක්රියාකාරී චක්ර සහ සාමාන්ය වෝල්ටීයතා සහිත PWM සංඥා පහත රූපසටහන් මගින් දැක්වේ .
H-Bridge මගින් භ්රමණ දිශාව පාලනය කිරීම |
DC මෝටරයේ භ්රමණය වන දිශාව එහි ආදාන වෝල්ටීයතාවයේ ධ්රැවීයතාව වෙනස් කිරීමෙන් පාලනය කළ හැකිය. මෙය සිදු කිරීම සඳහා පොදු තාක්ෂණයක් වන්නේ H-Bridge එකක් භාවිතා කිරීමයි.
H-Bridge පරිපථයක කේන්ද්රයේ මෝටරය සමඟ සම්බන්ධ ස්විචයන් හතරක් අඩංගු වේ.
විශේෂිත ස්විච දෙකක් එකවර වසා දැමීම මගින් මෝටරයට යොදන වෝල්ටීයතාවයේ ධ්රැවීයතාව ආපසු හරවයි. මෙය මෝටරයේ භ්රමණය වන දිශාව වෙනස් කිරීමට හේතු වේ.
L293D Motor Driver IC |
L293D යනු DC මෝටර යුගලයක් හෝ එක් ස්ටෙපර් මෝටරයක් ධාවනය කළ හැකි ද්විත්ව නාලිකා H-bridge මෝටර් ධාවක IC එකකි..
ඒ කියන්නේ එයට තනි තනිව මෝටර දෙකක් දක්වා ධාවනය කළ හැකි අතර එය රෝද දෙකේ රොබෝවරු තැනීම සඳහා වඩාත් සුදුසු වේ.
විදුලි බලය සපයන ආකාරය
L293D මෝටර් ධාවක IC හි ඇත්ත වශයෙන්ම බලය ලබාදෙන පින් දෙකක් ඇත. එය VCC1 සහ VCC2 වේ.
සපයන වෝල්ටීයතාව 5V විය යුතු අතර එය අභ්යන්තර තාර්කික පරිපථය ධාවනය කිරීම සඳහා VCC1 හරහා භාවිතා කරයි.
VCC2 පින් සිට H-bridge හරහා 4.5V සිට 36V දක්වා මෝටර ධාවනය කිරීමට බලය ලබා ගනී. එම පින් දෙකම එකම පොදු GND පින් එකක් හා සම්බන්ධ වේ .
ප්රතිදාන පින් භාවිත කිරීම
A සහ B මෝටර් සඳහා L293D මෝටර් ධාවකයේ ප්රතිදාන නාලිකා පිළිවෙලින් OUT1, OUT2 සහ OUT3, OUT4 පින් වෙත ගෙන එනු ලැබේ.
4.5 සිට 36V අතර වෝල්ටීයතාවයක් ඇති DC මෝටර දෙකක් ඔබට මෙම පින් වලට සම්බන්ධ කළ හැකිය.
IC හි සෑම නාලිකාවක්ම 600mA දක්වා DC මෝටරයට ලබා දිය හැකිය. කෙසේ වෙතත්, මෝටරයට සපයනු ලබන ධාරාවේ ප්රමාණය ලබාදෙන බල සැපයුම මත රඳා පවතී.
පාලක පින්
සෑම L293D නාලිකාවක් සඳහාම, DC මෝටරවල වේගය සහ භ්රමණය වන දිශාව එකවර පාලනය කිරීමට අපට ඉඩ සලසන පාලන පින් වර්ග දෙකක් තිබේ. ඒවා දිශා පාලන පින් සහ වේග පාලන පින් වේ .
දිශා පාලන පින්
දිශා පාලක පින් භාවිතා කරමින්, මෝටරය ඉදිරියට හෝ පසුපසට කැරකෙනවාද යන්න අපට පාලනය කළ හැකිය. මෙම පින් ඇත්ත වශයෙන්ම L293D IC තුළ ඇති H-bridge පරිපථයේ ස්විචයන් පාලනය කරයි.
සෑම නාලිකාවක් සඳහාම දිශානති පාලක පින් දෙකක් IC සතුව ඇත. IN1, IN2 පින් මඟින් A මෝටරයේ භ්රමණය වන දිශාව පාලනය කරන අතර IN3, IN4 පින් මෝටර් B භ්රමණය වන දිශාව පාලනය කරයි .
මෝටරයක භ්රමණය වන දිශාව මෙම පින් සඳහා තාර්කික HIGH (5V වෝල්ට්) හෝ තාර්කික LOW (GND) යෙදීමෙන් පාලනය කළ හැකිය. පහත වගුවේ දැක්වෙන්නේ මෙය සිදු කරන ආකාරයයි.
IN1 | IN2 | Spinning Direction |
Low(0) | Low(0) | Motor OFF |
High(1) | Low(0) | Forward |
Low(0) | High(1) | Backward |
High(1) | High(1) | Motor OFF |
වේග පාලන පින්
වේග පාලක පින් ලෙස ENA සහ ENB පිළිවෙලින් මෝටර් A සහ මෝටර් B වල වේගය සක්රිය කිරීම, අක්රිය කිරීම සහ වේගය පාලනය කිරීමට භාවිතා කරයි.
මෙම පින් HIGH(5V) ලෙස සැකසීමෙන් මෝටර භ්රමණය වන අතර එය LOW(GND) ලෙස
සැකසීමෙන් මෝටර භ්රමණය වීම නවතිනු ඇත. නමුත්, PWM සංඥා මගින් අපට මෝටරවල වේගය පාලනය කළ හැකිය.
L293D motor driver සමඟ Arduino UNO බෝර්ඩ් එකක් සම්බන්ධ කිරීම
දැන් අපි IC ගැන සෑම දෙයක්ම දන්නා නිසා, අපට එය අපගේ Arduino වෙත සම්බන්ධ කිරීම ආරම්භ කළ හැකිය!
මෝටරයට බල සැපයුම සම්බන්ධ කිරීමෙන් ආරම්භ කරන්න. අපගේ අත්හදා බැලීමේදී අපි සාමාන්යයෙන් භාවිතා කරන්නේ DC ගියර් මෝටර්ස් වේ . මේවා සාමාන්යයෙන් රෝද දෙකේ රොබෝවරුන් තුළ දක්නට ලැබේ. ඒවා 3V සිට 9V දක්වා ශ්රේණිගත කර ඇත. එමනිසා අපි බාහිර 9V බල සැපයුම Vcc2 පින් එකට සම්බන්ධ කරමු
ඊළඟට, අපට L293D හි තාර්කික පරිපථය සඳහා වෝල්ට් 5 ක් සැපයිය යුතුය. Arduino හි 5V නිමැවුමට Vcc1 පින් සම්බන්ධ කරන්න. පරිපථයේ ඇති සියලුම GND පින් Arduino හි GND පින් එක හා සම්බන්ධ කරන්න .
දැන්, L293D IC හි දිශා පාලක සහ වේග පාලක පින් (ENA, IN1, IN2, IN3, IN4 සහ ENB) Arduino ඩිජිටල් පින් හයකට (9, 8, 7, 5, 4 සහ 3) සම්බන්ධ කරගන්න. Arduino හි පින් 9 සහ 3 යන දෙකම PWM සක්රීය කර ඇත එනිසා අප ඒවා වේග පාලක පින් සඳහා භාවිත කරයි.
අවසාන වශයෙන්, එක් මෝටරයක් OUT1 සහ OUT2 හරහාද අනෙක් මෝටරය OUT3 සහ OUT4 හරහාද සම්බන්ධ කරන්න. ඔබට ඔබේ මෝටරයේ සම්බන්ධතා අග්ර අතර හුවමාරු කර ගත හැකිය, මෝටර වල නිශ්චිත අග්ර නොමැත.
ඔබ අවසන් වූ විට පහත රූපසටහනට සමාන යමක් තිබිය යුතුය.
Arduino Code – DC මෝටර පාලනය කිරීම
L293D motor driver මගින් DC මෝටරයක වේගය සහ භ්රමණය වන දිශාව පාලනය කරන්නේ කෙසේද යන්න පිළිබඳ සම්පූර්ණ අවබෝධය පහත දැක්වෙන කේතය මඟින් ඔබට ලබා දෙනු ඇති අතර ප්රායෝගික අත්හදා බැලීම් සහ ව්යාපෘති සඳහා යොදාගැනීමෙන් ඒ පිලිබඳව ඔබට තවදුරටත් අධ්යයන කල හැක.
// Motor A connections int enA = 9; int in1 = 8; int in2 = 7; // Motor B connections int enB = 3; int in3 = 5; int in4 = 4; void setup() { // Set all the motor control pins to outputs pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); // Turn off motors - Initial state digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } void loop() { directionControl(); delay(1000); speedControl(); delay(1000); } // This function lets you control spinning direction of motors void directionControl() { // Set motors to maximum speed // For PWM maximum possible values are 0 to 255 analogWrite(enA, 255); analogWrite(enB, 255); // Turn on motor A & B digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(2000); // Now change motor directions digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(2000); // Turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); } // This function lets you control speed of the motors void speedControl() { // Turn on motors digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // Accelerate from zero to maximum speed for (int i = 0; i < 256; i++) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Decelerate from maximum speed to zero for (int i = 255; i >= 0; --i) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Now turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
කේත පැහැදිලි කිරීම:
Arduino කේතය ඉතා සරල ය. එය ක්රියාත්මක කිරීමට කිසිදු library එකක් අවශ්ය නොවේ. කේතය ආරම්භ වන්නේ L293D හි පාලක පින් සම්බන්ධ කර ඇති Arduino pins ප්රකාශයට පත් කිරීමෙනි.
// Motor A connections int enA = 9; int in1 = 8; int in2 = 7; // Motor B connections int enB = 3; int
setup() function එකෙදී , සියලුම මෝටර් පාලක පින් ප්රතිදාන(OUTPUT) ලෙස ප්රකාශයට පත් කර මෝටර දෙකම අක්රීය කිරීම සඳහා සියලුම පාලක පින් අක්රිය (LOW) ලෙස තබයි .
void setup() { // Set all the motor control pins to outputs pinMode(enA, OUTPUT); pinMode(enB, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); // Turn off motors - Initial state digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
Loop function කොටසේදී අපි තත්පරයක කාල පරතරයකින් පෙර අර්ථ දක්වන ලද ශ්රිත දෙකක් යොදාගනී .
void loop() { directionControl(); delay(1000); speedControl(); delay(1000); }
එම ශ්රිත වනුයේ :
- directionControl() – මෙම ශ්රිතය තුලදී තත්පර දෙකක් සඳහා උපරිම වේගයෙන් මෝටර දෙකම ඉදිරියට ගෙන යයි. එය පසුව මෝටරයේ භ්රමණය වන දිශාව ආපසු හරවා තවත් තත්පර දෙකක් භ්රමණය වේ. අවසානයේ එය මෝටර ක්රියා විරහිත කරයි.මේ සඳහා digitalWrite() ශ්රිතය භාවිත කරයි .
void directionControl() { // Set motors to maximum speed // For PWM maximum possible values are 0 to 255 analogWrite(enA, 255); analogWrite(enB, 255); // Turn on motor A & B digitalWrite(in1, HIGH); digitalWrite(in2, LOW); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); delay(2000); // Now change motor directions digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); delay(2000); // Turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }
- speedControl() – මෙම ශ්රිතය analogWrite() ශ්රිතය භාවිතයෙන් PWM සංඥා නිපදවීමෙන් මෝටර දෙකම ශුන්යයේ සිට උපරිම වේගය දක්වා වේගවත් කරයි, පසුව එය නැවත ශුන්යයට අඩුකරයි . අවසානයේ එය මෝටර ක්රියා විරහිත කරයි.
void speedControl() { // Turn on motors digitalWrite(in1, LOW); digitalWrite(in2, HIGH); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); // Accelerate from zero to maximum speed for (int i = 0; i < 256; i++) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Decelerate from maximum speed to zero for (int i = 255; i >= 0; --i) { analogWrite(enA, i); analogWrite(enB, i); delay(20); } // Now turn off motors digitalWrite(in1, LOW); digitalWrite(in2, LOW); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }