Saya mencoba menemukan cara yang efisien untuk menghitung invers pada AVR (atau perkiraannya).
Saya mencoba menghitung periode pulsa untuk motor stepper sehingga saya dapat memvariasikan kecepatan secara linear. Periode ini sebanding dengan kebalikan dari kecepatan ( p = K/v
), tapi saya tidak bisa memikirkan cara yang baik untuk menghitung ini dengan cepat.
Formula saya adalah
p = 202/v + 298; // p in us; v varies from 1->100
Menguji pada Arduino, divisi tersebut tampaknya diabaikan sepenuhnya p
tetap pada 298
(meskipun mungkin ini akan berbeda dalam avr-gcc). Saya juga telah mencoba menjumlahkan v
dalam satu lingkaran sampai melebihi 202
, dan menghitung loop, tetapi ini cukup lambat.
Saya bisa membuat tabel pencarian dan menyimpannya dalam flash, tapi saya bertanya-tanya apakah ada cara lain.
Sunting : Mungkin judulnya harus "pembagian efisien" ...
Pembaruan : Seperti yang ditunjukkan oleh pingswept, rumus saya untuk periode pemetaan ke kecepatan tidak benar. Tetapi masalah utama adalah operasi membagi.
Sunting 2 : Pada penyelidikan lebih lanjut, divide sedang mengerjakan arduino, masalahnya adalah karena rumus yang salah di atas dan limpahan int di tempat lain.