Robot protection
I am designing a robot arm for an exhibit at the science center but need to protect teh motors from being damaged by being over driving·either past their limit or pushing against an obstacle.
Is there a simple·circuit where I can detect whether the motor is stalled (current should shoot up very heigh while it is stuck)?· Are there·any standard solutions?
Al Najjar·
Is there a simple·circuit where I can detect whether the motor is stalled (current should shoot up very heigh while it is stuck)?· Are there·any standard solutions?
Al Najjar·

Comments
If you you want to keep it simple, you can use a mechanical hard limit switch, like a object on the arm that activates a micro switch, or proximity switch, photosensor , etc. that can send a signal to stop the motor. Another route is to use a positional encoder that is a software controlled " soft stop" that the processor monitors the motors postion and the limits are set by programming. I would recommend the hard stop, easy to set up, inexpensive, and reliable.
kelvin
I have tried getting a signal from the pot embedded in the servos of the arm but that is unreleable since I cannot read it in isolation of its own circuitry.
I am not sure why you said that the current detection is not reliable,· there is a very pronounced spike in the current when the motor is stalled or near stalled. I was thinking of using a comparator with adjustable reference and then provide the output to the BS2 to shutdown that motor.· Considering that the robot don't have much load to move around, there should be a big difference between free and stalled motor current.
Al Najjar
of a robotic grip using DC motors. This way when the grip is fully closed and DC motor stalls (stop turning)
it drops the voltage a few volts (like 0.5 volts).·
With this simple circuit i measure time it takes to charge the capacitor under stress and compare the
result with a measure I take in the beginning of the program tha held as reference for no-stress voltage
level.
This is a sample·from my program (comments are in greek - sorry!)
' -----[noparse][[/noparse] Variables ]------------------------------------------------------- grip_open VAR Bit ' Μεταβλητή κατάστασης για τέλος διαδρομής ανοίγματος πένσας grip_closed VAR Bit ' Μεταβλητή κατάστασης για τέλος διαδρομής κλεισίματος πένσας measureRC VAR Word ' Μεταβλητή για τη μέτρηση της σταθεράς του χρόνου RC limit_beak VAR Word ' Μεταβλητή ορίου τέλους διαδρομής για τα ράμφη M1a CON 14 ' Σταθερές σχετικές με τις θύρες των κινητήρων DC M1b CON 15 ' M1 = Κινητήρας DC στο X2 ' -----[noparse][[/noparse] Initialization ]------------------------------------------------- 'DEBUG "Wait until grip limits are adjusted", CR ' Βρες την οριακή τιμή για την πένσα LOW M1a: HIGH M1b ' Κλείσε τα ράμφη της πένσας GOSUB RCT ' Πέρνα στη subroutine μέτρησης RC limit_beak = measureRC ' Βάλε τη μέτρηση που βρήκες σαν όριο PAUSE 50 LOW M1a: LOW M1b ' Σταμάτησε τον κινητήρα PAUSE 10 HIGH M1a: LOW M1b ' Ανοιξε τα ράμφη της πένσας GOSUB RCT ' Πέρνα στη subroutine μέτρησης RC limit_beak = (limit_beak + measureRC) /2 ' Βάλε τον μεσο ορο απο τις μέτρησεις που βρήκες σαν όριο PAUSE 50 LOW M1a: LOW M1b ' Σταμάτησε τον κινητήρα measureRC = 0 --------main code part ----------- CASE 63 GOSUB snap CASE 56 GOSUB unsnap ---------------------------------- ----------------Subroutines----------------------- snap: DO grip_open = 0 IF grip_closed = 1 THEN RETURN LOW M1a: HIGH M1b: GOSUB RCT 'DEBUG "κλείσε " 'μετράει RC IF measureRC < limit_beak -2 THEN GOSUB L_Closed LOOP WHILE (IN8 = continue) AND (grip_closed = 0) GOSUB motor_off RETURN unsnap: DO grip_closed = 0 IF grip_open = 1 THEN RETURN HIGH M1a: LOW M1b: GOSUB RCT 'DEBUG "άνοιξε " 'μετράει RC IF measureRC < limit_beak -2 THEN GOSUB L_Open LOOP WHILE (IN8 = continue) AND (grip_open = 0) GOSUB motor_off RETURN RCT: measureRC = 0 HIGH limit_RC PAUSE 1 RCTIME limit_RC, 1, measureRC ' Μέτρησε την τιμή της σταθεράς του χρόνου RC του κυκλώματος ' που συνδέεται με τη θύρα limit_RC PAUSE 100 RETURN L_Open: grip_open=1 'debug "ανοικτό!",CR GOSUB motor_off RETURN L_Closed: grip_closed=1 'debug "κλειστό!",CR GOSUB motor_off RETURN motor_off: LOW M1a: LOW M1b ' Σβήνει τους κινητήρες RETURN