Sistem penggerak#
Perkenalan#
Kelas drivetrain mengontrol cara robot bergerak dan berbelok. Sistem penggerak (drivetrain) terdiri dari motor dan roda yang bekerja bersama untuk menggerakkan robot.
A drivetrain does not use an Inertial Sensor or Gyro Sensor for heading-based or rotation-based turns. It can drive forward or reverse and turn left or right, but it cannot turn to a specific heading or rotation. For heading-based and rotation-based turns, use the smartdrive class.
Kelas Turunan#
Kelas drivetrain berfungsi sebagai kelas dasar untuk kelas turunan berikut:
smartdrive- Kelas ini menambahkan dukungan Sensor Inersia atau Sensor Giroskop untuk memungkinkan belokan berbasis arah dan berbasis rotasi.
Konstruktor Kelas#
1 - Membuat sistem penggerak menggunakan objek motor_group
motor_groupsudah ada untuk sisi kiri (&l) dan kanan (&r).drivetrain( motor_group &l, motor_group &r, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
2 - Membuat sistem penggerak menggunakan objek
motoryang sudah ada untuk sisi kiri (&l) dan kanan (&r).drivetrain( motor &l, motor &r, double wheelTravel = 320, double trackWidth = 320, double wheelBase = 130, distanceUnits unit = mm, double externalGearRatio = 1.0 );
Destruktor Kelas#
Menghancurkan objek drivetrain dan melepaskan sumber daya terkait.
virtual ~drivetrain();
Parameter#
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Motor kiri dan kanan atau kelompok motor. Kedua parameter harus menggunakan tipe yang sama: baik dua objek |
|
|
Keliling roda penggerak. Nilai defaultnya adalah |
|
|
Jarak antara roda kiri dan kanan. Nilai defaultnya adalah |
|
|
Jarak antara roda depan dan belakang. Nilai defaultnya adalah |
|
|
Satuan untuk |
|
|
Rasio gigi yang digunakan untuk menyesuaikan jarak penggerak jika gigi digunakan. Nilai default adalah |
Contoh#
// Create the left and right motor objects
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the drivetrain object
drivetrain myDrivetrain = drivetrain(
leftMotor, // left motor object
rightMotor, // right motor object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Fungsi Keanggotaan#
Ada banyak cara untuk membuat kode drivetrain. Berikut adalah daftar semua fungsi anggota drivetrain:
Aksi - Gerakkan dan putar robot.
drive- Menggerakkan robot maju atau mundur selamanya.driveFor- Menggerakkan robot maju atau mundur sejauh jarak tertentu.turn- Memutar robot ke kiri atau ke kanan selamanya.turnFor- Memutar robot ke kiri atau ke kanan dengan jumlah derajat tertentu.stop- Menghentikan pergerakan robot.
Mutator - Sesuaikan pengaturan sistem penggerak.
setDriveVelocity- Memberi tahu robot seberapa cepat harus bergerak.setTurnVelocity- Memberi tahu robot seberapa cepat harus berbelok.setStopping- Memberitahukan bagaimana robot akan berhenti bergerak: dengan mengerem, meluncur, atau menahan.setTimeout- Mengatur berapa detik robot akan mencoba menyelesaikan suatu gerakan.
Pengambil - Periksa status pergerakan.
isDone- Mengembalikan nilai Boolean apakah robot telah selesai bergerak.isMoving- Mengembalikan nilai Boolean apakah robot sedang bergerak atau tidak.velocity- Mengembalikan seberapa cepat robot bergerak.current- Mengembalikan jumlah arus listrik yang digunakan oleh drivetrain.power- Mengembalikan seberapa cepat sistem penggerak menggunakan energi.torque- Mengembalikan seberapa besar torsi yang digunakan oleh drivetrain.efficiency- Mengembalikan seberapa efisien sistem penggerak menggunakan daya.temperature- Mengembalikan seberapa hangat drivetrain.voltage- Mengembalikan tegangan listrik yang disuplai ke drivetrain.
Sebelum memanggil fungsi anggota drivetrain apa pun, objek drivetrain harus dibuat, seperti yang ditunjukkan di bawah ini:
/* This constructor is required when using VS Code.
Drivetrain configuration is generated automatically
in VEXcode using the Device Menu. Replace the values
as needed. */
// Create the left and right motor objects
motor leftMotor = motor(PORT1, false);
motor rightMotor = motor(PORT9, true);
// Create the drivetrain object
drivetrain myDrivetrain = drivetrain(
leftMotor, // left motor object
rightMotor, // right motor object
259.34, // wheelTravel
320, // trackWidth
40, // wheelBase
mm, // unit
1.0 ); // externalGearRatio
Tindakan#
menyetir#
drive menggerakkan robot maju atau mundur tanpa batas. Robot akan terus bergerak hingga diberi tindakan lain, seperti berbelok atau berhenti. Untuk RPM atau DPS, batasnya diubah oleh rasio gigi dari sistem penggerak.
1 - Menggerakkan menggunakan kecepatan penggerak yang dikonfigurasi saat ini.
void drive( directionType dir );
Parameters2 - Berkendara dengan kecepatan yang ditentukan.
void drive( directionType dir, double velocity, velocityUnits units );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Arah pergerakan robot: |
|
|
Kecepatan penggerak berkisar dari 0% hingga 100% saat menggunakan |
|
|
Satuan kecepatan: |
Fungsi ini tidak mengembalikan nilai.
Notesdrivetidak menunggu; proyek akan terus mengeksekusi baris kode berikutnya segera setelah panggilan.Sistem penggerak akan terus bergerak hingga
stopdipanggil atau fungsi pergerakan sistem penggerak lainnya (sepertidriveForatauturn) dieksekusi.Fungsi seperti
isDonedanisMovingtidak berlaku untukdrive, karena tidak menggunakan pergerakan berbasis target (tidak memilikidistance).
// Drive forward and back
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.drive(reverse, 25, rpm);
wait(2, seconds);
myDrivetrain.stop();
berkendara Untuk#
Perintah driveFor menggerakkan robot maju atau mundur sejauh jarak tertentu. Secara default, proyek akan menunggu hingga robot selesai bergerak sebelum baris kode berikutnya dijalankan. Untuk RPM atau DPS, batasnya diubah oleh rasio gigi dari sistem penggerak.
1 - Mengemudi ke arah yang ditentukan untuk jarak tertentu menggunakan kecepatan mengemudi yang dikonfigurasi saat ini.
bool driveFor( directionType dir, double distance, distanceUnits units, bool waitForCompletion = true );
2 - Menggerakkan ke arah yang bergantung pada jarak menggunakan kecepatan penggerak yang dikonfigurasi saat ini.
bool driveFor( double distance, distanceUnits units, bool waitForCompletion = true );
3 - Menggerakkan ke arah yang bergantung pada jarak dengan kecepatan yang ditentukan.
bool driveFor( double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Bergerak ke arah yang ditentukan sejauh jarak tertentu dengan kecepatan yang ditentukan.
bool driveFor( directionType dir, double distance, distanceUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Arah pergerakan robot: |
|
|
Jarak yang ditempuh robot. |
|
|
Satuan jarak: |
|
|
Kecepatan penggerak berkisar dari 0% hingga 100% saat menggunakan |
|
|
Satuan kecepatan: |
|
|
|
Mengembalikan nilai Boolean yang menunjukkan apakah robot mencapai jarak target atau tidak.
true- Robot mencapai jarak target.false- Robot tidak menyelesaikan pergerakan, atau fungsi kembali sebelum pergerakan selesai karenawaitForCompletiondiatur kefalse.
Menjalankan fungsi pergerakan penggerak lainnya (seperti
driveatauturnFor) sementaradriveForsedang berlangsung akan mengganggu pergerakan saat ini.Karena
driveForberbasis target (menggunakan parameterdistance), fungsi sepertiisDonedanisMovingbekerja dengandriveFor.
// Drive 200 mm, then back 200 mm
myDrivetrain.driveFor(forward, 200, mm);
myDrivetrain.driveFor(reverse, 200, mm);
berbelok#
turn memutar robot ke kiri atau ke kanan selamanya. Robot akan terus berputar hingga diberi tindakan lain, seperti bergerak atau berhenti. Untuk RPM atau DPS, batasnya diubah oleh rasio gigi dari sistem penggerak.
1 - Berbelok menggunakan kecepatan belok yang dikonfigurasi saat ini.
void turn( turnType dir );
Parameters2 - Berbelok dengan kecepatan yang ditentukan.
void turn( turnType dir, double velocity, velocityUnits units );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Arah putaran robot: |
|
|
Kecepatan untuk berbelok berkisar dari 0% hingga 100% saat menggunakan |
|
|
Satuan kecepatan: |
turntidak menunggu; proyek akan terus mengeksekusi baris kode berikutnya segera setelah panggilan.Sistem penggerak akan terus berputar hingga
stopdipanggil atau fungsi pergerakan sistem penggerak lainnya (sepertiturnForataudrive) dieksekusi.Fungsi seperti
isDonedanisMovingtidak berlaku untukturn, karena tidak menggunakan pergerakan berbasis target (tidak memiliki parameterangle).
// Turn right, then left, then stop
myDrivetrain.turn(right);
wait(2, seconds);
myDrivetrain.turn(left);
wait(2, seconds);
myDrivetrain.stop();
putar Untuk#
turnFor turns menggerakkan robot ke kiri atau ke kanan dengan jumlah derajat tertentu. Belokan relatif terhadap posisi robot saat ini. Secara default, proyek akan menunggu hingga robot selesai berbelok sebelum baris kode berikutnya dijalankan. Untuk RPM atau DPS, batasnya diubah oleh rasio gigi penggerak.
1 - Berbelok dengan sudut yang ditentukan menggunakan kecepatan belok yang dikonfigurasi saat ini.
bool turnFor( double angle, rotationUnits units, bool waitForCompletion = true );
2 - Berbelok ke arah yang ditentukan dengan sudut tertentu menggunakan kecepatan belok yang dikonfigurasi saat ini.
bool turnFor( turnType dir, double angle, rotationUnits units, bool waitForCompletion = true );
3 - Putaran dengan sudut yang ditentukan pada kecepatan yang ditentukan.
bool turnFor( double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameters4 - Berbelok ke arah yang ditentukan dengan sudut tertentu dan kecepatan yang ditentukan.
bool turnFor( turnType dir, double angle, rotationUnits units, double velocity, velocityUnits units_v, bool waitForCompletion = true );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Arah putaran robot: |
|
|
Sudut putaran robot. |
|
|
Satuan putaran: |
|
|
Kecepatan untuk berbelok berkisar dari 0% hingga 100% saat menggunakan |
|
|
Satuan kecepatan: |
|
|
|
Mengembalikan nilai Boolean yang menunjukkan apakah robot mencapai sudut target atau tidak.
true- Robot mencapai sudut target.false- Robot tidak menyelesaikan giliran, atau fungsi kembali sebelum giliran selesai karenawaitForCompletiondiatur kefalse.
Menjalankan fungsi gerakan penggerak lainnya (seperti
turnataudrive) sementaraturnForsedang berlangsung akan mengganggu gerakan saat ini.Karena
turnForberbasis target (menggunakan parameterangle), fungsi sepertiisDonedanisMovingbekerja denganturnFor.
// Turn right then left
myDrivetrain.turnFor(right, 90, degrees);
wait(1, seconds);
myDrivetrain.turnFor(left, 90, degrees);
berhenti#
stop menghentikan pergerakan robot. Jika mode penghentian disediakan, mode tersebut mengontrol bagaimana robot berhenti untuk panggilan fungsi ini.
1 - Menghentikan sistem penggerak menggunakan mode berhenti yang saat ini dikonfigurasi.
void stop();
Parameters2 - Menghentikan sistem penggerak menggunakan mode pengereman yang ditentukan.
void stop( brakeType mode );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Cara robot berhenti:
|
Fungsi ini tidak mengembalikan nilai.
Examples// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
Mutator#
setDriveVelocity#
setDriveVelocity memberi tahu robot seberapa cepat ia harus bergerak. Persentase yang lebih tinggi membuat robot bergerak lebih cepat dan persentase yang lebih rendah membuat robot bergerak lebih lambat. Untuk RPM atau DPS, batasnya diubah oleh rasio gigi dari sistem penggerak.
Setiap proyek dimulai dengan robot yang bergerak dengan kecepatan 50% secara default.
Catatan: Kecepatan yang lebih tinggi membuat robot bergerak lebih cepat, tetapi mungkin kurang presisi. Kecepatan yang lebih rendah membuat robot bergerak lebih lambat, tetapi bisa lebih presisi.
Available Functionsvoid setDriveVelocity(
double velocity,
velocityUnits units );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Kecepatan untuk menggerakkan dari 0% hingga 100% saat menggunakan |
|
|
Satuan kecepatan: |
Fungsi ini tidak mengembalikan nilai.
NotesKecepatan penggerak berlaku untuk semua fungsi pergerakan penggerak selanjutnya (seperti
drivedandriveFor) kecuali kecepatan spesifik diberikan dalam panggilan fungsi.
// Drive forward, then coast to a stop
myDrivetrain.setDriveVelocity(100, percent);
myDrivetrain.drive(forward);
wait(2, seconds);
myDrivetrain.stop(coast);
setTurnVelocity#
setTurnVelocity memberi tahu robot seberapa cepat harus berbelok. Persentase yang lebih tinggi membuat robot berbelok lebih cepat dan persentase yang lebih rendah membuat robot berbelok lebih lambat. Untuk RPM atau DPS, batasnya diubah oleh rasio gigi dari sistem penggerak.
Setiap proyek dimulai dengan robot yang berputar dengan kecepatan 50% secara default.
Catatan: Kecepatan yang lebih tinggi membuat robot berbelok lebih cepat, tetapi mungkin kurang presisi. Kecepatan yang lebih rendah membuat robot berbelok lebih lambat, tetapi bisa lebih presisi.
Available Functionsvoid setTurnVelocity(
double velocity,
velocityUnits units );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Kecepatan untuk berbelok dari 0% hingga 100% saat menggunakan |
|
|
Satuan kecepatan: |
Fungsi ini tidak mengembalikan nilai.
NotesKecepatan putaran berlaku untuk semua fungsi putaran drivetrain berikutnya (seperti
turndanturnFor) kecuali kecepatan spesifik diberikan dalam panggilan fungsi.
// Try default, slow, then fast
myDrivetrain.turnFor(right, 360, degrees);
wait(1, seconds);
myDrivetrain.setTurnVelocity(20, percent);
myDrivetrain.turnFor(right, 360, degrees);
wait(1, seconds);
myDrivetrain.setTurnVelocity(100, percent);
myDrivetrain.turnFor(right, 360, degrees);
setStopping#
setStopping mengatur bagaimana robot akan berhenti bergerak: dengan mengerem, meluncur, atau berhenti.
void setStopping(
brakeType mode );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Cara robot berhenti:
|
Fungsi ini tidak mengembalikan nilai.
NotesMode penghentian berlaku untuk semua panggilan
stopberikutnya kecuali mode penghentian khusus disediakan dalam panggilan fungsi.
setTimeout#
setTimeout mengatur berapa detik robot akan mencoba menyelesaikan suatu gerakan. Jika robot tidak dapat menyelesaikannya dalam waktu tersebut, robot akan berhenti mencoba dan melanjutkan ke baris kode berikutnya. Ini mencegah robot terjebak pada suatu gerakan.
void setTimeout(
int32_t time,
timeUnits units );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Jumlah waktu yang dapat diberikan robot untuk mencoba menyelesaikan suatu gerakan. Ini harus berupa bilangan bulat positif. |
|
|
Satuan waktu: |
Fungsi ini tidak mengembalikan nilai.
NotesBatas waktu hanya berlaku untuk fungsi pergerakan penggerak berbasis target (seperti
driveFordanturnFor).
// Start turning if driving takes too long
myDrivetrain.setTimeout(1, seconds);
myDrivetrain.driveFor(forward, 25, inches);
myDrivetrain.turnFor(right, 90, degrees);
Pencari#
Selesai#
isDone mengembalikan nilai Boolean yang menunjukkan apakah robot telah selesai bergerak. Ini dapat digunakan untuk mengontrol waktu perilaku lain berdasarkan pergerakan robot.
bool isDone( void );
Fungsi ini tidak menerima parameter apa pun.
Return Valuestrue- Robot telah selesai bergerak.false- Robot masih bergerak.
sedang pindah#
isMoving mengembalikan nilai Boolean yang menunjukkan apakah robot sedang bergerak. Ini dapat digunakan untuk mengontrol waktu perilaku lain berdasarkan pergerakan robot.
virtual bool isMoving( void );
Fungsi ini tidak menerima parameter apa pun.
Return Valuestrue- Robot sedang bergerak.false- Robot tidak bergerak.
kecepatan#
velocity mengembalikan kecepatan robot saat bergerak.
Nilai positif berarti robot bergerak maju. Nilai negatif berarti robot bergerak mundur.
Available Functionsdouble velocity(
velocityUnits units );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Satuan kecepatan: |
Mengembalikan kecepatan penggerak sebagai double dalam satuan yang dipilih.
// Show velocity before and during motion
Brain.Screen.print("Resting: %f", myDrivetrain.velocity(percent));
myDrivetrain.drive(forward, 100, velocityUnits::pct);
wait(1, seconds);
Brain.Screen.newLine();
Brain.Screen.print("Moving: %f", myDrivetrain.velocity(percent));
myDrivetrain.stop();
saat ini#
current mengembalikan jumlah arus listrik yang digunakan oleh sistem penggerak. Arus adalah jumlah listrik yang mengalir melalui sistem penggerak. Nilainya dapat dikembalikan dalam satuan ampere atau sebagai persentase, tergantung pada satuannya.
Nilai arus yang lebih tinggi berarti sistem penggerak menggunakan lebih banyak arus listrik. Hal ini dapat terjadi ketika robot mendorong suatu objek atau mencoba bergerak saat terjebak.
Ini dapat digunakan untuk memeriksa apakah sistem penggerak mengalami kesulitan selama pergerakan. Jika arus tetap tinggi, sistem penggerak mungkin menjadi lebih panas atau menggunakan daya kurang efisien.
Available Functions1 - Mengembalikan arus listrik sistem penggerak dalam satuan ampere.
double current( currentUnits units = currentUnits::amp );
Parameters2 - Mengembalikan arus listrik penggerak sebagai persentase dari nilai maksimum.
double current( percentUnits units );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Satuan untuk mengembalikan arus: |
|
|
Satuan pengembalian arus: |
Mengembalikan arus penggerak sebagai double dalam satuan yang dipilih.
kekuatan#
power mengembalikan seberapa besar daya yang digunakan oleh sistem penggerak, diukur dalam watt. Daya menunjukkan seberapa cepat sistem penggerak menggunakan energi.
Nilai daya yang lebih tinggi berarti sistem penggerak menggunakan energi lebih cepat. Hal ini dapat terjadi ketika robot mendorong suatu objek atau mencoba bergerak saat terjebak.
Ini dapat digunakan untuk membandingkan pergerakan atau memeriksa apakah sistem penggerak mengalami masalah. Jika daya tetap tinggi, sistem penggerak mungkin menjadi lebih panas atau menggunakan energi kurang efisien.
Available Functionsdouble power(
powerUnits units = powerUnits::watt );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Satuan daya: |
Mengembalikan daya penggerak sebagai double dalam watt.
torsi#
Torsi menunjukkan seberapa kuat sistem penggerak dapat mendorong atau menarik saat roda berputar.
torque mengembalikan nilai torsi yang digunakan oleh sistem penggerak, diukur dalam Newton-meter (Nm) atau inci-pon (InLb).
Nilai torsi yang lebih tinggi berarti sistem penggerak mendorong atau menarik lebih keras. Hal ini dapat terjadi ketika robot mendorong suatu objek atau mencoba bergerak saat terjebak.
Ini dapat digunakan untuk memeriksa apakah sistem penggerak (drivetrain) mengalami masalah atau untuk membandingkan seberapa besar dorongan yang dibutuhkan oleh gerakan yang berbeda.
Available Functionsdouble torque(
torqueUnits units = torqueUnits::nm );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Satuan untuk mengembalikan torsi: |
Mengembalikan torsi penggerak sebagai double dalam satuan yang dipilih.
efisiensi#
efficiency mengembalikan seberapa efisien sistem penggerak menggunakan daya, dalam persentase dari 0% hingga 100%.
Efisiensi menunjukkan seberapa banyak daya sistem penggerak yang digunakan untuk pergerakan. Nilai efisiensi yang lebih tinggi berarti lebih banyak daya sistem penggerak yang digunakan untuk bergerak. Nilai efisiensi yang lebih rendah dapat terjadi ketika sistem penggerak bekerja keras tetapi tidak banyak bergerak, seperti ketika robot terjebak atau mendorong suatu objek.
Ini dapat digunakan untuk membandingkan pergerakan atau memeriksa apakah sistem penggerak membuang daya alih-alih menggunakannya untuk pergerakan.
Available Functionsdouble efficiency(
percentUnits units = percentUnits::pct );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Satuan untuk mengembalikan efisiensi: |
Mengembalikan efisiensi sistem penggerak sebagai double dalam satuan yang dipilih.
suhu#
temperature mengembalikan suhu rata-rata sistem penggerak sebagai persentase dari 0% hingga 100%.
Suhu menunjukkan seberapa panas motor penggerak. Suhu yang lebih tinggi berarti motor semakin panas saat bekerja. Motor harus tetap berada di bawah 55°C agar tetap bekerja dengan performa maksimal.
Jika motor terlalu panas, motor akan menurunkan arus maksimumnya untuk melindungi diri. Pada suhu 70°C, motor akan berhenti beroperasi hingga mendingin.
Ini dapat digunakan untuk memeriksa apakah sistem penggerak menjadi terlalu panas selama gerakan berulang, penggunaan jangka panjang, atau saat menekan suatu objek.
Available Functionsdouble temperature(
percentUnits units );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Unit untuk mengembalikan suhu dalam: |
Mengembalikan suhu rata-rata sistem penggerak sebagai double dalam satuan yang dipilih.
Nilai yang dikembalikan sebesar
50%menunjukkan bahwa suhu motor rata-rata kira-kira45°C(113°F).Kisaran suhu operasi tipikal untuk sistem penggerak adalah sekitar
20°C(68°F) hingga70°C(158°F).
voltase#
voltage mengembalikan tegangan listrik yang disuplai ke sistem penggerak.
Tegangan adalah tekanan listrik yang diberikan ke motor penggerak. Nilai ini dapat digunakan bersama dengan nilai arus dan daya untuk memahami bagaimana sistem penggerak menggunakan energi listrik.
Available Functionsdouble voltage(
voltageUnits units = voltageUnits::volt );
Parameter |
Jenis |
Keterangan |
|---|---|---|
|
|
Satuan tegangan yang akan dikembalikan: |
Mengembalikan tegangan penggerak sebagai double dalam satuan yang dipilih.