fbpx
Arduino Lesson 21: Inbuilt motor controller
motor driver
Arduino පාඩම 21

Inbuilt motor controller

මෝටර පාලනය කිරීමට inbuilt motor driver භාවිතා කරන්න

Components Required

Magicbit
Buy

හැඳින්වීම

බොහෝ කාර්යයන් සඳහා අපට මෝටර භාවිතා සිදු‌වේ. සියලුම microcontroller වර්ග 5v හෝ 3.3V යටතේ ක්‍රියා කරයි. එබැවින් මෝටර් පාලනය කිරීම සඳහා විශාල ධාරාවක් සහ වෝල්ටීයතාවයක් සැපයීමට ඔවුන්ගේ ප්‍රතිදානය ප්‍රමාණවත් නොවේ. මෙම අවස්ථාවේදී, අපි මෝටර පාලනය කිරීම සඳහා අතිරේක මොඩියුලයක් භාවිතා කරමු. ඒවා motor driver  ලෙස හදුන්වයි. සෑම මෝටර් ධාවකයක් ම කරන්නේ එකම දෙයකි. එනම් ක්ෂුද්‍ර පාලක සංඥා මත පදනම්ව බාහිර බලශක්ති ප්‍රභවයන් භාවිතා කරමින් මෝටර පාලනය කිරීමයි. මෙම පාලන සංඥා නියත වෝල්ටීයතා අගයන් නොවේ. ඒවා PWM(pulse width modulation) සංඥා වේ. මෙම සංඥා ඩිජිටල් සංඥා වේ. බොහෝ මෝටර් ධාවකයන් මෝටර පාලනය කිරීමට H-Bridge යාන්ත්‍රණය භාවිතා කරයි. ඔබ Arduino board එකක් භාවිතා කරන්නේ නම්, මෝටර් පාලනය කිරීමට ඔබට බාහිර මෝටර් ධාවකයක් භාවිතා කළ යුතුය. නමුත් Magicbit හි ඔබට කිසිදු බාහිර මෝටර් පාලකයක් මිලදී ගැනීමට අවශ්‍ය නොවේ. මන්ද, දැනටමත් inbuilt H-bridge motor driver එකක් ඇත. එබැවින් ඔබට මැජික්බිට් වෙත මෝටර කෙලින්ම සම්බන්ධ කළ හැකි අතර ඔබට ඒවා සමඟ සෙල්ලම් කළ හැකිය.

පාඩමේ අරමුණ:

  • මෝටර පාලනය කිරීම සඳහා ඉන්බිල්ට් මෝටර් ධාවකයක් භාවිතා කිරීම
  • ව්‍යාපෘති සඳහා මෝටර් පාලන ක්‍රියාවලිය යොදා ගැනීම

සිද්ධාන්තය

පළමුව, මෙම සමස්ත ක්‍රියාවලිය සිදු වන්නේ කෙසේදැයි බලමු. සෑම මෝටරයක්ම වැඩ කිරීමට බලශක්ති ‍ ප්‍රභවයක් අවශ්‍ය බව අපි කවුරුත් දනිමු. ඉතින් ඔබ 3v මෝටරයක් ​​මිලදී ගත්තා නම්, නිසි ලෙස ක්‍රියාකිරීම සඳහා 3V සැපයිය යුතුය. මෝටරය හරහා ගමන් කරන ධාරාව මෝටරයේ ව්‍යාවර්තය මත රඳා පවතී. මෝටර් ඇක්සෙල් නිදහසේ වැඩ කරන්නේ නම්, එය අඩු ධාරාවක් ලබා ගනී. මෝටර ඒවායේ අක්ෂය කරකැවීමට අපහසු නම්, එය වැඩි ධාරාවක් ලබා ගනී.

මෝටර පාලනය කිරීම සඳහා අපි වෝල්ටීයතා ප්‍රභවයන් භාවිතා කළෙමු. වෝල්ටීයතා ප්‍රභවයන් යනු නියත වෝල්ටීයතාවයක් යටතේ ඕනෑම ධාරාවක් සපයන පරිපථ වේ. එබැවින් මෝටරවල වේගය වෝල්ටීයතාවය මත රඳා පවතී. අපි අධි වෝල්ටීයතාවයක් සපයන්නේ නම්, මෝටරය වැඩි RPM සහ අනෙක් අතට අඩු RPM ක්‍රියා කරයි. එමනිසා, සැපයුම් වෝල්ටීයතා මට්ටම පාලනය කිරීමෙන් අපට වේගය පාලනය කළ හැකි බව දැන් ඔබට වැටහෙනු ඇත. නමුත් මෙය පැරණි ක්‍රමයක් වන අතර, එය කාර්යක්ෂම හා නිවැරදි නොවේ. නවීන වශයෙන්, අපි PWM ස්පන්දන භාවිතා කරමු.

PWM යනු Pulse Width Modulation යන්නයි. මෙම අවස්ථාවේදී, අපි මෝටර පාලනය කිරීම සඳහා යම් නියත සංඛ්යාතයක් සහිත square wave තරංගයක් ජනනය කරමු. එබැවින් මෙම තරංගයේ පහළ තත්ත්වය ශුන්‍ය වෝල්ට් (0V) ආසන්න වන අතර තරංගයේ ඉහළ තත්ත්වය සැපයුම් වෝල්ටීයතාවයට ආසන්න වේ. එබැවින්, මෝටර් පාලනය කිරීම සඳහා අපගේ සම්පූර්ණ සැපයුම් වෝල්ටීයතාවය භාවිතා කිරීමට අපට හැකි වේ.

නමුත් මෙම ප්‍රමේයය භාවිතා කර මෝටර් වේගය පාලනය කරන්නේ කෙසේද?

ඒක හරිම ලේසියි. අපි තරංගයේ එක් චක්‍රයක් ( Duty Cycle) සලකා බැලුවහොත්, එයට කොටස් දෙකක් ඇතුළත් වේ. එකක් High stage part එක අනිත් එක Low stage part එක.

අප High stage time duration = T1,   Low stage Time duration T2 සහ one cycle time duration = T ළෙස සලකමු.

ඒ නිසා අපිට සරලව පහත සමීකරණය ලියන්න පුළුවන්.

T=T1+T2
T2=0 සහ T=T1 නම්, සෑම චක්‍රයකම පහත් අවස්ථා කොටසක් නොමැත. මේකෙදි මෝටරය සම්පූර්ණ වේගයෙන් වැඩ කරන්නේ අපි හැම වෙලාවෙම මෝටරයට source වෝල්ටීයතාවය දෙන නිසා. නමුත් T1=0 සහ T=T2 නම්, මෝටරයට සැපයුම් වෝල්ටීයතාවයක් සහ ධාරාවක් නොමැත. මෙම අවස්ථාවේදී, මෝටරය සම්පූර්ණයෙන්ම නවතී. එබැවින් වේගය ශුන්ය වනු ඇත.
අපි තවත් තත්වයක් දෙස බලමු. අපි කියමු T1=T2, පසුව T1=T2=T/2. එබැවින් මෙම අවස්ථාවේදී, ඉහළ සහ පහත් තත්වයන් යන කාල පරිච්ඡේද දෙකම සෑම චක්‍රයකට ම සමාන වේ. දැන් තරංගයේ සාමාන්‍ය අගය ප්‍රභව බලයෙන් අඩකි. එබැවින්, මෝටරයට සැපයුම් වෝල්ටීයතාවය ප්‍රධාන සැපයුම් වෝල්ටීයතාවයෙන් අඩක් වේ (සැපයුම් වෝල්ටීයතාවය සහ මෝටර් වේගය අතර විචලනය අපි නොදනිමු මන්ද එය ඔබේ මෝටරය මත රඳා පවතී. ප්‍රතිඵලයක් ලෙස, මෝටර් වේගය එසේ වේ යැයි අපට පැවසිය නොහැක. සැපයුම් වෝල්ටීයතාවයෙන් අඩක් යටතේ උපරිම වේගයෙන් අඩක්). මේ ආකාරයට T1 සහ T2 අතර අනුපාතය වෙනස් කිරීමෙන් අපට සාමාන්‍ය වෝල්ටීයතාවයෙන් 0 සහ ප්‍රභව වෝල්ටීයතාවය අතර සෑම වෝල්ටීයතාවක්ම ලබා ගත හැකිය. PWM සංඥා සාමාන්‍යය මැනීම සඳහා, අපි රාජකාරි චක්‍ර අගය ලෙස හඳුන්වන යම් සාධක අගයක් භාවිතා කරමු. මෙම අගය T1 සහ T අනුපාතයෙහි ප්‍රතිශත අගයකි.
Duty cycle=(T1/T)x100%

https://circuitdigest.com/sites/default/files/projectimage_tut/Pulse-Width-Modulation.jpg

ක්ෂුද්‍ර පාලක වලදී, අපි මෙම රාජකාරි චක්‍ර අගය බිට් අගයෙන් නියෝජනය කරමු. අපි බිටු 8 ක් භාවිතා කරන්නේ නම්, එවිට අපට රාජකාරි චක්‍රය නියෝජනය කිරීමට 0-255 පරාසය ලබා ගත හැකිය. එහිදී, 255 යනු 100% duty චක්‍රය සහ 0 යනු 0% duty චක්‍රය යනාදියයි. දැන් ඔබට මෝටර් පාලන සංඥා පිළිබඳ පොදු අදහසක් තිබේ. මෙම PWM සංඥා මෝටර් පාලන යෙදුම් වලට සීමා නොවේ. මෙම සංඥා බොහෝ අරමුණු සඳහා භාවිතා වේ. මෝටර් පාලන ක්‍රියාවලියේදී මෙම ප්‍රමේයය භාවිතා කරන්නේ කෙසේදැයි ඊළඟට බලන්න.

මෝටර පාලනය කිරීම සඳහා අපි PWM සංඥා ජනනය කිරීමට මයික්‍රොකොන්ට්‍රෝලර් භාවිතා කරමු. හැඳින්වීම විස්තර කරන පරිදි, මෙම වෝල්ටීයතා පරාසයන් සහ PWM සංඥා වල ධාරාව මෝටර පාලනය කිරීමට ප්රමාණවත් නොවේ.  අපි දන්නා එකම දෙය නම් මෝටර වලට විවිධ වේගයෙන් ප්‍රතිවිරුද්ධ දිශාවන් දෙකකින් භ්‍රමණය විය හැකි බවයි, මන්ද එම හේතුව නිසා අපට මෝටරය පාලනය කිරීමට ක්ෂුද්‍ර පාලකයෙන් ප්‍රතිදානයන් දෙකක් ලැබේ. අපට මෝටරය එක් දිශාවකට කරකවීමට අවශ්‍ය නම්, අපි PWM සංඥාවක් ජනනය කිරීමට එක් ප්‍රතිදානයක් භාවිතා කරන අතර අනෙක් එක LOW තත්ත්වයක පවතී. අපට අවශ්‍ය නම් එම මෝටරය ප්‍රතිවිරුද්ධ දිශාවට භ්‍රමණය වීමට නම්, එම අවස්ථාවේ දී, අපි දෙවන ප්‍රතිදාන පින් එකක් භාවිතා කර PWM සංඥාවක් උත්පාදනය කරන අතරම  පළමු පින් එක LOW ට සකසන්නෙමු. මෙම පින් නිමැවුම් වල ධාරාව සහ වෝල්ටීයතාව නොමැතිකම නිසා අපි මෝටර් පාලක ඒකකයක් භාවිතා කරමු. මෙම ඒකකයට H-bridge මාරු කිරීමේ යාන්ත්රණයක් ඇතුළත් වේ. එය ක්‍රියා කරන ආකාරය බලමු. එම කොටසට යාමට පෙර ට්‍රාන්සිස්ටරය යනු කුමක්දැයි බලන්න. ට්‍රාන්සිස්ටරය යනු සංඥා පාලනය කිරීමට භාවිතා කරන අර්ධ සන්නායක උපාංගයකි. ට්‍රාන්සිස්ටර වර්ග ගොඩක් තියෙනවා. නමුත් සෑම ට්‍රාන්සිස්ටරයක්ම ක්‍රියා කරන්නේ එකම මූලධර්මය අනුවයි. ට්‍රාන්සිස්ටරයක පින් තුනක් ඇත. සංඥා සැපයීම සඳහා එක් පින් එකක් භාවිතා කරයි. මෙම සංඥා වෝල්ටීයතා හෝ වත්මන් සංඥා විය හැක. ප්‍රභව ධාරාව වෙනත් පින් හරහා ගමන් කරයි. ආදාන සංඥාව අනුව, මෙම ගලා යන ධාරාව වෙනස් වේ. ආදාන සංඥාව යම් නිශ්චිත අගයකට වඩා විශාල නම්, ගමන් කරන ධාරාව උපරිම වන අතර ආදාන සංඥාව යම් ප්‍රමාණයකට වඩා අඩු නම්, ගමන් කරන ධාරාව නොසැලකිය හැකි තරම් වේ. එබැවින් මෙම අවස්ථා 2 ට්‍රාන්සිස්ටරයේ කැපුම්(cutoff) සහ සන්තෘප්ත(saturation) කලාප ලෙස හැඳින්වේ. මෙම අදියරේදී ට්‍රාන්සිස්ටරය ස්විචයක් ලෙස ක්‍රියා කරයි. එබැවින් අපි ක්ෂුද්‍ර පාලක ප්‍රතිදානය ට්‍රාන්සිස්ටර ආදාන සංඥාවට සම්බන්ධ කළහොත්, ඉහළ සංඛ්‍යාංක සංඥා ට්‍රාන්සිස්ටරය ක්‍රියාත්මක වන අතර අඩු ඩිජිටල් සංඥාවකදී ට්‍රාන්සිස්ටරය ක්‍රියා විරහිත වේ. දැන් ඔබට ට්‍රාන්සිස්ටර යාන්ත්‍රණ පිළිබඳ මූලික අදහසක් ඇත.

දැන් අපි බලමු H-bridge යාන්ත්‍රණය ගැන.

 

https://www.build-electronic-circuits.com/wp-content/uploads/2018/11/H-bridge-switches.png

 

ඔබට පෙනෙන පරිදි s1, s2, s3 සහ s4 යන ස්විච හතරක් ඇත. මෙම ස්විචයන් ඇත්ත වශයෙන්ම ට්‍රාන්සිස්ටර හෝ සමහර මාරු කිරීමේ සංරචක වේ. අපි මෙම රූප සටහන විශ්ලේෂණය කරමු. s1 සහ s4 ක්‍රියාත්මක නම් සහ අනෙක් ඒවා අක්‍රිය නම්, මෝටරය එක් දිශාවකට ක්‍රියා කරයි. සමහර නියත සංඛ්‍යාත සමඟ S1 සහ S4 වල ON සහ OFF කාලය වෙනස් කිරීමෙන්, අපට එම මෝටරය විවිධ වේග වලින් කරකැවිය හැක. s3 සහ s2 ක්‍රියාත්මක නම් සහ අනෙක් ඒවා අක්‍රිය නම්, එවිට මෝටරය අනෙක් පැත්තට යයි. ඒවගේම S2 සහ S3 ස්විච් වල ON සහ OFF වෙලාව වෙනස් කිරීමෙන් අපිට මෝටර් වේගය වෙනස් කරන්න පුළුවන්. සියලුම ස්විච් ක්‍රියා විරහිත නම් හෝ සියල්ල ක්‍රියාත්මක නම්, එවිට මෝටරය නතර වේ.

 

https://www.build-electronic-circuits.com/wp-content/uploads/2018/11/H-bridge.png

 

ඉතින් දැන් ඔයාලට බලාගන්න පුළුවන් කොහොමද ට්‍රාන්සිස්ටර මගින් ස්විච් ප්‍රතිස්ථාපනය කරන්නේ කියලා. Q1, Q2, Q3 සහ Q4 S1, S2, S3 සහ S4 ස්විචයන් නියෝජනය කරයි. මෙම රූප සටහනේ මූලික පින් එක ට්‍රාන්සිස්ටරයේ ආදාන සංඥා පින් එකයි. අපි එම පින් එකට ඉහළ duty cycle එකක් සැපයුවොත් ට්‍රාන්සිස්ටරය සංතෘප්ත වන අතර එම ට්‍රාන්සිස්ටරය සංවෘත ස්විචයක් (ON) ලෙස ක්‍රියා කරයි. එසේ නොමැති නම්, එය විවෘත (OFF) ස්විචයක් ලෙස ක්‍රියා කරනු ඇත. මෙම රූප සටහනෙහි, ට්‍රාන්සිස්ටර සඳහා පාලනය කිරීමට යෙදවුම් හතරක් ඇත. නමුත් අපි මෙම යෙදවුම් හතර ඉහත මාරුවීමේ කොන්දේසි තෘප්තිමත් කරන යෙදවුම් දෙකකට ඒකාබද්ධ කරමු.

Magicbit මෝටර් දෙකක් පාලනය කිරීමේ හැකියාව ඇති L110 මෝටර් ධාවක IC ඇතුළත් වේ. එබැවින් එය නාලිකා දෙකක මෝටර් ධාවක IC වේ. එය Magicbit හි esp32 ප්‍රොසෙසරය හතරකින් අභ්‍යන්තරව සම්බන්ධ කර ඇත. M1A, M1B, M2A සහ M2B යනු L9110 IC හි ප්‍රතිදාන pin වන Magicbit හි පහළ කොටසෙහි pin වේ.

ක්‍රමවේදය

මෝටරය M1A සහ M1B හෝ M2A සහ M2B පින්වලට සම්බන්ධ කරන්න, නැතහොත් Magicbit හි පහළ පැත්තේ වම් කෙළවරේ ඇති වරායට මෝටර් දෙකක් සම්බන්ධ කරන්න. Magicbit එක ඔබේ පරිගණකයට සම්බන්ධ කර පහත කේතය උඩුගත කරන්න.

Code

 

#include <ESP32Servo.h>
int M1A = 16; //motor drive input pins
int M1B = 17;
int M2A = 18;
int M2B = 27;
void setup() {
  pinMode(M1A, OUTPUT); //configure as inputs
  pinMode(M1B, OUTPUT);
  pinMode(M2A, OUTPUT);
  pinMode(M2B, OUTPUT);
}
void loop() {
  for (int i = 0; i <= 255; i++) { //rotate both motors to direction
    analogWrite(M1A, i);//pwm signal
    analogWrite(M1B, 0);
    analogWrite(M2A, i);
    analogWrite(M2B, 0);
    delay(100);
  }
  analogWrite(M1A, 255);//stop for 1 second
  analogWrite(M1B, 255);
  analogWrite(M2A, 255);
  analogWrite(M2B, 255);
  delay(1000);
  for (int i = 0; i <= 255; i++) { //rotate both motors to opposite direction
    analogWrite(M1A, 0);
    analogWrite(M1B, i);
    analogWrite(M2A, 0);
    analogWrite(M2B, i);
    delay(100);
  }
  analogWrite(M1A, 255);//stop for 1 second
  analogWrite(M1B, 255);
  analogWrite(M2A, 255);
  analogWrite(M2B, 255);
  delay(1000);
}
Related Posts
Leave a Reply