Feeder controller board redesign

Started by trev, August 31, 2021, 12:23:17 PM

Previous topic - Next topic

trev

Hi all.

I invested some time on trying to get a feeder working better with plastic tape. I hated the noise the stepper motor drive assembly made and components moving around is really annoying. I lost all confidence I could get decent performance. Paper tape and larger capacitors on plastic tape seemed to be okay but 0603 and sot23 sized components are just a nightmare.

I have prototyped an initial idea based on a new stepper motor driver using a TMC2208 which offers super smooth movement. I also believe one thing that might have improved things is that when the pin moves the tape forward, I think sometimes it rubs on the tape as it drops down again. So before the pin drops down, backing the pin off slightly appears to help.

Attached is a video of the new movement. You can see it is almost silent compared to the original feeder. I will finalise code to get one feeder working properly and put it on test. I think I shall then get a board layout done.

https://www.youtube.com/watch?v=cCyK2nTpS0M

Trev





trev


Mike

Can't say I've had many issues with plastic tapes, apart from one occasion with some 0603 LEDs that came on really thin stuff that would bounce 50% of parts out as the tape advanced. Of course that was on a crazy-urgent job where I had to place about 10K of them... After a day of messing about with masking etc, I got it down to 10%, and fortunately Digikey had enough extra stock!
Those Trinamic drivers are pretty close to magic.
Something I'd definitely do if I were doing a new feeder board would be to manually select single/double feed, as it's a PITA having to do new feeder definitions if you have a mix of 4 & 8mm part pitches.

trev

I find the feeders so noisy. I did manage to get along okay with sot23 but it wasn't brilliant, always shaking a little as the tape moves. Even the odd 1206 capacitor would ping out of the tape. Each feeder stepper motor had a different noise too. Always felt like the thing was about to shake to pieces. I have had quite a lot of 0603 leds to place so it has been an ongoing torture for me.

I have done a feeder control board design, built a prototype and currently it is on a feeder and appears to be working. The feeder is almost silent apart from the harsh pin hammering the plate. If they had just made the pin slightly different, it would not hit the plate but limit at the base of the solenoid body. If I can adjust that the feeder will be pretty much silent and I think create virtually no vibration during tape movement. I did notice putting a weight on the tape end did tension the tape and help with vibrations from the pin hitting the plate.

Wish I could find a silent vacuum pump. That noise really does start to wear on you after a few hours.

Anyway, here are some pics of the first prototype. I bought the TMC2208 from Farnell as I tried some previously from Amazon and think they are not quite right. They worked kinda but I just didnt trust them. I used the TMC2208 rather than the TMC2209 because the 2208 has a higher voltage rating of 39V which is needed to work with the existing transformer.

https://uk.farnell.com/trinamic/tmc2208-silentstepstick/stepper-driver-board-2-phase-motor/dp/2822166

The design uses an Arduino Mega as it was easy to prototype with and test and has loads of io, etc. I bought it from Amazon and the board appears to work fine. I do not understand how they can sell them so cheap but the board does appear to be working. If I get any problems I can just swap it out for a genuine Arduino Mega.

https://www.amazon.co.uk/gp/product/B06XKMZ3T9/ref=ox_sc_saved_title_6?smid=AZF7WYXU5ZANW&psc=1

The board uses the existing transformer and supports the current wiring plugs for solenoids, motor and the dip switches. It has a RS232 driver IC so that takes care of the power supply issues between versions of feeders.

After building the prototype, correcting a few mistakes and adding some wiring help on the silkscreen I created issue 1.0. Image attached of the cad. I have ordered some bare boards.

I am thinking of removing the dip switch panel and adding one of these usb panel mount cables. This will enable you to plug a usb cable into the board without having to dismantle the feeder. 

https://www.amazon.co.uk/gp/product/B01KMSGR2E/ref=ox_sc_act_title_1?smid=AO0LUWUCC7MI3&psc=1

This will create a virtual com port for the board which will enable configuration to be done from any terminal application. My current thoughts are:

Press 0 - 9 will index that lane. No need to press return. Tap a few times and it will index a few times. Should make loading a feeder a lot easier.

Bb is used to set BANK address.  b being 'A' - 'H'. So BA would set address to Bank A for example.

Lln will set the lane index multiplier. l represents lane, n the feed multiplier. So L02 will set lane 0 to index 2 times for every index cmd received.


Some wish list commands

Sls will set the speed for each lane. l - represents lane, s represents speed from 1 - 10. Idea being that some parts you can move faster than others if you want to. It should help with experimentation but reckon a speed would probably be found that just works for all.

Mln will set number of steps for an index. l - represents lane, n is the number of steps. This might be useful for creating half index movements for 0402 but not sure it is worth the hassle. Anyone tried 0402 on an rv?

Anybody got any other suggestions for features?

Being a terminal based interface means it should work with any PC, etc. Also the USB port means that firmware upgrade of the boards is really easy via Arduino IDE and does not require opening a feeder up. You will not even have to power the feeder, the USB cable will power the board so configuring the feeder can be done without mains power or needing to be near the machine.

Once it is all working I shall likely release all the files open source. I might make a batch of boards if there is interest. Would probably be the basic board without the drivers and arduino as people can choose where they want to source these from. I think this would make the board pretty cheap really.




Mike

Quote from: trev on September 05, 2021, 08:56:26 AM

Wish I could find a silent vacuum pump. That noise really does start to wear on you after a few hours.
I've considered offboarding the pump and putting it in a soundproof box. Not sure if turn-on delay or flow rate might be an issue, obviously you'd want to keep the vacuum valve in the arm near the nozzle.
Quote
I am thinking of removing the dip switch panel and adding one of these usb panel mount cables. This will enable you to plug a usb cable into the board without having to dismantle the feeder. 
TBH I'd much rather have physical switches, as having to mess with USB connections, USB drivers  and other software can be a faff, especially as running USB-serial under Win98 might be a challenge.

How about this :
Location switches stay as normal
Set SW8, and send an index command from within RV place - this increments the index count for the selected lane 1,2,3,4 then back to 1
Instead of actually indexing, maybe just click the pin solenoid <n> times to indicate the number of indexes

This avoids the need for any other software or connection, uses the UI you'll already be using when setting feeders up, and only needs two DIP switch clicks to set up a whole feeder.

The only minor issue is if you forget to set SW8 back off afterwards, you don't want it to reprogram the indexes if you then run a job. Maybe have it click a pin periodically as a reminder, or have a timeout after setting SW8.

Quote
Anyone tried 0402 on an rv?
I've done 0402 LED matrices - pretty sure they were on 2mm tape - I think the "half index" option (by alternating pick position) works OK, and unlike the normal index counts, it's in the right place, i.e. the CDF and not the feeder def, so not as inconvenient to use.
Not sure how you'd even do half indexing sensibly within the feeder



trev

Index idea.

Using SW8 is an interesting idea. If set, then an index command would increment that lane index count and the pin would flip up and down <indexcount> number of times to feedback instantly current set value. The pins can be pulsed quickly enough for it not to be annoying I think and that would provide instant feedback. It is a neat idea that does keep everything contained. Maybe SW8 when triggered would toggle all the pins to indicate you are in that mode. Then a timeout would be set for several minutes. Timeout reset upon receiving an indexing command. At the end the pins would do the toggle sequence again to indicate you have exited the mode. 

I had another idea. For those with a laptop at hand, it is so quick to upload firmware with Arduino IDE. We could have a section at the top of the code file or a header file with defines in it and just re-flash the feeder to change settings.

// SECTION IN CODE
#define INDEX_ADDR 'A'
#define LANE0_INDEXCOUNT=2
#define LANE1_INDEXCOUNT=1
..
#define LANE2_INDEXCOUNT=4
//


SW4 could be used to select mode. If SW4 is on then the flash programmed values are used. If it is off then SW0-SW2 set the address and SW8 can be used to program the indexcounts. That seems most natural as normal use is for SW4 to be off and the feeder would act as normal I think.

Any other features?

Trev










Mike

Quote from: trev on September 06, 2021, 09:48:36 AM
Index idea.

Using SW8 is an interesting idea. If set, then an index command would increment that lane index count and the pin would flip up and down <indexcount> number of times to feedback instantly current set value. The pins can be pulsed quickly enough for it not to be annoying I think and that would provide instant feedback. It is a neat idea that does keep everything contained. Maybe SW8 when triggered would toggle all the pins to indicate you are in that mode. Then a timeout would be set for several minutes. Timeout reset upon receiving an indexing command. At the end the pins would do the toggle sequence again to indicate you have exited the mode. 

I think the easy answer is simply to have a pin "tick" every couple of seconds while SW8 is set, disabled for a 5 sec timout after the last index is set before it starts ticking again. I think that would be enough to remind you to unser SW8, but not so annoying if you need to walk away in the middle of setting up
Quote
I had another idea. For those with a laptop at hand, it is so quick to upload firmware with Arduino IDE. We could have a section at the top of the code file or a header file with defines in it and just re-flash the feeder to change settings.

Except when you've not used the machine for a month or two, you then have to dig out the laptop, remember how to do it all etc. For people not familiar with Arduino it's a big faff.

Mike

Quote from: trev on August 31, 2021, 01:10:22 PM
This video shows the backing off idea for the pin.

https://www.youtube.com/watch?v=1AR7i8RnFxg
Hard to see from the vid, but I think you may be backing off a bit too much, risking hitting the back of the hole on a paper tape.

trev

The general operation is as follows.

1. The stepper moves back until it detects the limit switch. This is the starting position and thus is used to home the pins.

2. Upon an index cmd, the pin solenoid is energised and we wait 100ms.

3. Stepper is moved forward x number of steps. With 1/16 setting on the TMC2208 I think I am at around 480 to 500 steps. Configurable and good resolution to fine adjust.

4. Back off 30 steps I think. Not final value.

5. De-energise the solenoid and wait 100ms.

6. Back off whilst checking every step if we have hit the limit switch. This homes the pin ready for the next cmd. Check every step in case the pin got jammed and did not move forward properly.

This appears to give a reliable positioning method every time.

I did experiment with a crude acceleration method. 125 steps slow, 250 normal speed, 125 slow again. I think going slow to start with might help to reduce slippage of the tape winder band whilst also reducing any vibrations initially. 

Also it is easy to move forward nice and slow and then move back quicker.



Mike

with proper acceleration and deceleration, you may be able to reduce motor current without missing steps, so the driver runs cooler.

trev

When I first started development with the tmc2208 the motor was running very hot. I started disabling the motor after each index to try to cool it down. Once I set the threshold current on the driver to approx. 300mA the motor now runs with no noticeable temperature and I do not disable the motor at all. It appears to have good torque to it. What is great is that it is all programmable so tweaking is no issue.

The driver is supposed to detect when no power is required but I have not enabled this feature yet and tested it.

trev

The stepper motor is not pushing the driver very hard. It doesn't need any heatsink. Only issue I had was the motor itself getting warm as mentioned above.

trev

For those interested in the USB version, the USB adapter fits perfectly where the dip switch board went without any case modification.

I do not see an issue to have dual interface. People can leave the dip switches in place and fit the USB elsewhere if they want.

So if you plug the USB in you can connect via a terminal application and configure the system. If you flip SW8 then you can also program via indexing method Mike suggested. Terminal interface will display all settings by pressing enter.


trev

I assembled the feeder and ran into issues with the pin action creating massive vibration when it hit the plate. With the current setup I measure a voltage of 39V on the solenoid pins under no load which seems too high. I had previously seen around 37V. It depends on the load the transformer is under but it seems very high.

I stripped the whole feeder down again to see what I could do. After a lot of tinkering I felt the pin was hitting the plate very hard so I decided to take a bit of the shoulder off the pin. You can see the before and after in the images attached.

The sound before I did this mod was a hard metal hitting metal sound. I think it was a very sharp impact which was causing the leds to bounce out of the tape or flip upside down. The sound now is more of a thud from the metal plate that moves the pin hitting the base of the solenoid. It seemed still though to be very hard and I could see 0603 leds still bounce a bit. It was better but not ideal.

So next I changed the solenoid voltage. I connected my bench power supply and found that the solenoid moves from as low as 15V. I know at 39V the solenoid gets really hot  if you are doing repeated operations. I settled the PSU on approx. 19V and this seems to have good pin movement but reduces the energy of the pin movement impact. I settled on 19V because this is the voltage created when the mains transformer is wired in parallel instead of in series. I am not sure if over time the solenoids need more voltage to move pins. Maybe dirt build up makes the pin harder to move. Maybe temperature has an impact. I do not know but I am convinced at present 39V is just too high.

I have some boards to make which will enable me to test the feeder with several thousand component placements so I think this will provide me with good data. For now this latest video shows decent feed of 0603 leds with approx. 19V powering the solenoid and the stepper. I also tweaked the speed and acceleration/deceleration profile.

https://youtu.be/xdlcmy4m140


Mike

I wonder if there may be some mileage in ramping the solenoid current using PWM to reduce the speed?