Arduin interrupt ENCODER
4 berichten
• Pagina 1 van 1
Arduin interrupt ENCODER
Hallo,
Voor een nieuwe robot arm wil ik graag chihai servo's gebruiken.
Zoiets als dit:
https://nl.aliexpress.com/store/product/Chihai-Motor-CHR-16G-050-ABHL-DC-6-V-12-V-7PPR-Encoder-Motor-Reducer-Carbon/3096049_32833392055.html?spm=a2g0z.search0104.3.99.13561b3fhg0gLT&ws_ab_test=searchweb0_0%2Csearchweb201602_1_10152_5724111_10151_10065_10344_10068_10342_5724211_10343_10340_10341_5724311_10696_5724011_10084_10083_10618_10304_10307_10820_10301_10821_10843_10059_100031_10103_5725011_10624_10623_10622_10621_10620_5724911%2Csearchweb201603_54%2CppcSwitch_5&algo_expid=827da9c9-824b-43e9-8908-d222ab4774f9-14&algo_pvid=827da9c9-824b-43e9-8908-d222ab4774f9&transAbTest=ae803_1&priceBeautifyAB=0
Ik gebruik hiervoor de Encoder.h bibliotheek. De encoder is aangesloten op een interrupt pinnen.
Mijn vraag is het volgende: is het mogelijk om een stuk of 6 van deze 7 of 11 PPR encoders op de arduino aan te sluiten zonder dat de arduino stappen mist ? Uitgaande van max 500hz pulse per motor.
Ik heb ook een Due liggen, die ik eventueel kan aansluiten als de arduino niet "snel" genoeg is.
Wanneer de servo's draaien moet de arduino natuurlijk in de gaten houden waar de motor zich bevind en digitalwrite(stop of start) sturen, dit zal voor alle 6 motoren gelden.
Ik heb een deel van de code bijgevoegd voor 1 motor. Uiteindelijk moeten er nog 5 bijkomen.
En wat denken jullie, is het makkelijk te doen voor arduino of moet ik een "snellere" micro controller nemen ?
cpp code
Voor een nieuwe robot arm wil ik graag chihai servo's gebruiken.
Zoiets als dit:
https://nl.aliexpress.com/store/product/Chihai-Motor-CHR-16G-050-ABHL-DC-6-V-12-V-7PPR-Encoder-Motor-Reducer-Carbon/3096049_32833392055.html?spm=a2g0z.search0104.3.99.13561b3fhg0gLT&ws_ab_test=searchweb0_0%2Csearchweb201602_1_10152_5724111_10151_10065_10344_10068_10342_5724211_10343_10340_10341_5724311_10696_5724011_10084_10083_10618_10304_10307_10820_10301_10821_10843_10059_100031_10103_5725011_10624_10623_10622_10621_10620_5724911%2Csearchweb201603_54%2CppcSwitch_5&algo_expid=827da9c9-824b-43e9-8908-d222ab4774f9-14&algo_pvid=827da9c9-824b-43e9-8908-d222ab4774f9&transAbTest=ae803_1&priceBeautifyAB=0
Ik gebruik hiervoor de Encoder.h bibliotheek. De encoder is aangesloten op een interrupt pinnen.
Mijn vraag is het volgende: is het mogelijk om een stuk of 6 van deze 7 of 11 PPR encoders op de arduino aan te sluiten zonder dat de arduino stappen mist ? Uitgaande van max 500hz pulse per motor.
Ik heb ook een Due liggen, die ik eventueel kan aansluiten als de arduino niet "snel" genoeg is.
Wanneer de servo's draaien moet de arduino natuurlijk in de gaten houden waar de motor zich bevind en digitalwrite(stop of start) sturen, dit zal voor alle 6 motoren gelden.
Ik heb een deel van de code bijgevoegd voor 1 motor. Uiteindelijk moeten er nog 5 bijkomen.
En wat denken jullie, is het makkelijk te doen voor arduino of moet ik een "snellere" micro controller nemen ?
cpp code
//mijn schone "loopje"
void loop() {
newPosition1 = myEnc.read();
//readWrite();
debug();
servoMove();
wait();
afremmen1();
}
void servoMove() {
toGo1();
currentMillis = millis();
if (newPosition1 > servo1[xCnt]) {
if (teGaan1 > 150) {
rem1State = 2;
}
else {
rem1State = 1;
}
rem1Dir = 0;
speed1 = newPosition1;
speed1 = map(speed1, newPos, oldPos, speedMin, speedMax);
dir = 0;
afremmen1();
}
//*****************************************************************************************
//*****************************************************************************************
//*****************************************************************************************
if (newPosition1 == servo1[xCnt]) {
rem1State = 0;
digitalWrite(forward1, HIGH);
digitalWrite(backward1, HIGH);
vrijgave1 = 1; // de timer aka wait() wordt nu aktief gemaakt
readWrite();
delay(1000);
}
//*****************************************************************************************
//*****************************************************************************************
//*****************************************************************************************
if (newPosition1 < servo1[xCnt]) {
rem1Dir = 1;
if (teGaan1 > 150) {
rem1State = 2;
}
else {
rem1State = 1;
}
speed1 = newPosition1;
speed1 = map(speed1, newPos, oldPos, speedMin, speedMax);
dir = 1;
afremmen1();
}
}
void toGo1() {
//hoeveel stappen nog te gaan
if (newPos > newPosition1) {
teGaan1 = newPos - newPosition1;
}
else {
teGaan1 = newPosition1 - newPos;
}
//=========================
}
void remSt1A(){
if(teGaan1<150 && rem1State==1){
if(rem1Cnt==0){
digitalWrite(forward1, HIGH);
digitalWrite(backward1, HIGH);
}
else if(rem1Cnt==1 && rem1Dir==0){
digitalWrite(forward1, HIGH);
digitalWrite(backward1, LOW);
}
else if(rem1Cnt==1 && rem1Dir==1){
digitalWrite(forward1, LOW);
digitalWrite(backward1, HIGH);
}
} //end (teGaan1<150 && rem1State==1){
}
void remSt1B(){
//++++++++++++++++STATE 2
if(rem1State==2){
if(rem1Dir==0){
digitalWrite(forward1, HIGH);
digitalWrite(backward1, LOW);
}
else if(rem1Dir==1){
digitalWrite(forward1, LOW);
digitalWrite(backward1, HIGH);
}
} //end rem2stae
}
void afremmen1() {
//////////State 1
currentMillis = millis();
//Overshooting van de motor zorgt voor -speed1, om dit tegen te gaan is de minimum aantal pulsen "10"
if (speed1 < 10) {
speed1 = 10;
}
//START DE PULS TREIN COUNTER, ALS TEgAAN LAGER IS DAN 150
if (currentMillis - rem1 > speed1) { //speed1 is de snelheid waarmee de PWM wordt geproduceerd
rem1Cnt++;
rem1 = currentMillis;
}
//anders volle snelheid
else {
rem1State = 2; // = volle snelheid aka remSt2
}
remSt1A(); //hunting fase servo1
remSt1B(); //run fase servo1
//PULSE TREIN COUNTER
if (rem1Cnt > 1) { //schakelt remSt
rem1Cnt = 0;
}
}
Advertisement
Re: Arduin interrupt ENCODER
op de arduino zitten maar 2 interupt ingangen, maar je kunt met een pcf8574 dat wel uitbreiden.
paul deelen
shooter@home.nl
shooter@home.nl
Re: Arduin interrupt ENCODER
Hi ja je hebt gelijk, ik wilde mega gebruiken en daar zitten 6 ingangen. Arduino due heeft alle digitale pinnen als interrupt, waar het mij om gaat is dat de due geen pulsen mist als alle 6 encoders 6 * 1khz per sec sturen. Mvg
Re: Arduin interrupt ENCODER
Dat weet je nooit zeker, dus daar zul je bijvoorbeeld een hardware teller voor moeten zetten, dan ben je wel zeker.
bijv de MC14516
bijv de MC14516
paul deelen
shooter@home.nl
shooter@home.nl
4 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 38 gasten