I am looking to have a check to tell me if the servo connected to any given channel is alive, or even installed. When I use the “QR” command I get back the last PW sent to that channel even if there was never a servo installed. I realize I could use “smart servos”, but am looking to see if the SSC-32 board has a means to detect whether a channel is open or not. Basically a quick health check.
If we could get a heartbeat on the health of each servo on each channel that would be sweeeeeeeet.
This is the result of me cooking an older servo that I had running too frequently for too long when I did a stupid this as part of a software burn-in test. Literally cooked it so bad, Justin Wilson came back from the dead to congratulate me on my “Cajun Cookin”. I am going to mount this in epoxy and mount on my wall.
That sounds like an interesting idea. The SSC-32U does not have any input on the output channels. Said differently, each channel RC control signal is driven through multiplexer (8 channels per multiplexer, 4 multiplexers total for 32 channels). There is no input taken of any of the driven signals (which would require a way of reading all 32 inputs that would produce) and it should also be noted there is no direct way of detecting the presence of servomotor on any channel, either.
Do you mean QP? If so, then yes, it will return the current pulse value that the specified control channel currently has.
Could you explain what you mean by “whether a channel is open or not”? Simple to see if there is a control signal being sent? If so, QP should let you know.
What would such a heartbeat represent? If the servo is connected or not? If the servo is “functional”? Please note that RC servomotors expose no outputs by default. Therefore, the only way to know if they are working electrically speaking would be if they draw any current through their VCC/GND pins when the RC control signal is changed.
I’m not sure knowing whether the servo is there / running will prevent it from overheating. Would you care to elaborate?
As for detecting the presence of a servomotor, you could possibly use the input pins available on the SSC-32U. Of course, you would need extra components and you would need to place connections between the SSC-32U pins for the channel and its associated servomotor to detect it.
For a little background, I am building a robotic test apparatus to test software for wearables. The robotics perform the physical motion a user would for certain use cases. The servos are a piece of this and literally rotate 90 degrees to position something (I know I am being vague, you have my apologies). The problem I am trying to solve is a few weeks ago while running a burn-in test of the robotic control software, a servo physically burned out. I opened it up to find the charred remains of the circuitry. I am developing some self-diagnostics / tests so that when the robotics is left running unattended overnight, we will proactively know if a part failed. For example did the component the servo is attached to stop moving? If it did, do the other servos on that SSC-32u board still work? If none do, do we get back meaningful data from the SSC-32u to know if the board is still powered up, etc…
To know if the sub-system perform its function in certain motions, I am looking into adding contact switches and using the analog inputs of the SSC-32u to know if the door is all the way open and all the way closed to detect full movement. I have 4 servos per board so 8 analog inputs is perfect. This solution will not give me the precision to know where the problem is (e.g. did the power wire in the board fall out vs a servo fault), but at least I’ll know whether the sub-system is functioning. With that data we can then have the software take appropriate action up to and including shutting down power to the test rig. I know these self-tests won’t be able to stop a servo from burnout, but if there is a failure we can detect, notify someone, and stop using it to prevent it from getting worse. Maybe before circuit burnout, the servo will cease moving which we can detect.
Since I am working on self-testing and diagnostics, I also would like to know if there is a servo installed where we expect one to be. By “open channel”, I mean is there a physical servo connected to the board at that channel (that is the term you use in the SSC-32 documentation). When I use QP I get a zero if no position signal has been sent to that channel since board reboot whether a servo is physically installed or not.
How can we determine if they are drawing current when a command is given other than physically measuring it with a multi-meter? Is there a serial command for the SSC-32u? If not no worries at least I know. But it is a future firmware enhancement to know if every channel changes its current draw after a command is given.
Thank you for the extra details. This certainly helps us have a better idea of the problems you are trying to solve.
Here are a few ideas:
The best way to know this would most likely be to measure the current used by the servo. More details on that below. A value of ~0 would indicate no servo, a value >0 but within reasonable range would indicate a working servo (different current use at idle, accelerating, holding, etc.) and an excessive amount >0 would indicate a stall (possibly damaging the servo) or a short (servo is already damaged). You can get lots of info from profiling the current of any actuator, including RC servomotors.
Again, that would be best done measuring the current of the servo.
You can send the SSC-32U the “VER” command and check the response to see if it is “alive”. That is what the official Lynxmotion software does for the Lynxmotion AL5D robotic arm kits.
A possible idea here is to connect a temperature measurement device to each of your servomotors. An optimal component would be a temperature sensor that provides an analog voltage output that is [0, 5] V DC. This would allow you to know when the motor is too hot (which is typically what happens before it “burns”).
As mentioned before, the SSC-32/SSC-32U does not have any way of detecting the presence of the RC servomotor since its signal pin is only an digital output pin (actually, it goes through a buffer, too). Therefore the microcontroller on the board has no way of detecting anything. Also, detecting anything for each channel would require 32 extra inputs (impossible on that microcontroller) or extra components such as extra PISO buffers (shift registers).
You can measure it electrically. The simplest (and typical) method is to place a shunt resistor between your power source and load and amplify the voltage difference sensed over this special resistor using an amplification circuit. The output of this circuit is then fed to an analog input.
In your case, you would do the following, assuming you want to measure the current (and presence) of a RC servomotor on channel 7:
]Connect the signal pin between the RC servomotor and channel 7./:m] ]Connect the ground pin between the RC servomotor and channel 7./:m] ]Connect the VCC of the RC servomotor to the Vin+ and the VS1/2 pin of channel 7 to the Vin- of your current sensing circuit./:m] ]Connect the Vout of your current sensing circuit to the analog input channel of your choice (VA/VA/VC/Vd/VE/VF/VG/VH)./:m]
A simple current sensing board you can use would be something like: RB-Spa-901. Please note such a board still needs you to solder a shunt resistor on it, too (to be obtained separately). We strongly recommend to check the documentation for this board first. You can find it on the product page under Useful Links.
Unfortunately, such a change would require additional circuitry for each channel. This would then make the SSC-32U’s price prohibitive for hobbyists and schools, which are the main target market. See the note to above about measuring current.