work in progress Project: Poncho

Your chance to introduce yourself and your vehicle
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Project: Poncho

Post by Nehrenholz »

Project Poncho is a 1963 Pontiac Parisienne with a 1999 Camaro 5.7L LS1 V8 engine and 4L60E automatic transmission. This is our team's capstone project for Simon Fraser University Mechatronic Systems Engineering, we intend to get the engine running as well as we can, and make any improvement that we can and help out the community.
The engine is set in the rolling chassis of the car so some set up will be involved with installing the fuel tank, radiator, battery, and hopefully mount a work bench with a dedicated computer, scope, and function generator. We will begin by getting the engine running on the OEM PCM. This will allow us to learn the wiring, signals, and operational modes for the stock engine. We've ordered the RusEFI Frankenso 0.4 and look forward to receiving it.
On Monday the frame goes in to the shop to have the driveshaft made and the stainless exhaust welded in.
Attachments
image2.JPG
image2.JPG (1.4 MiB) Viewed 18162 times
image1.JPG
image1.JPG (1.35 MiB) Viewed 18162 times
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
kb1gtt
contributor
contributor
Posts: 3758
Joined: Tue Sep 10, 2013 1:42 am
Location: ME of USA

Re: Project: Poncho

Post by kb1gtt »

Very nice very nice.

I'm guessing you found the wiki, but just in case you didn't http://rusefi.com/wiki/index.php?title=Manual:Start-a-project/en

If you have any questions feel free to ask. It sounds like you have a bit to go before you start to hook up rusEFI.
Welcome to the friendlier side of internet crazy :)
User avatar
AndreyB
Site Admin
Posts: 14332
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Project: Poncho

Post by AndreyB »

I am not sure if this engine has VR cam/crank sensor or Hall-type sensor, and I need to know in order to solder the right resistor into the right position (well, this could also be re-soldered later)

Does 1999 still have Optispark, whatever Optispark is? See http://www.superchevy.com/how-to/0310htp-lt1-ignition-system-understanding-modifying/
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

The LS1 uses hall effect sensor for the position sensors, and it does not have the optispark system that the LT1 had. The ignition on this engine uses 8 individual coils instead of a conventional distributor. Thank goodness, it looks like the optispark ignition is nothing but trouble
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
AndreyB
Site Admin
Posts: 14332
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Project: Poncho

Post by AndreyB »

Any info on trigger signal shape? There is some info at http://ls1tech.com/forums/pcm-diagnostics-tuning/1402042-ls1-cam-crank-scope.html but it's not super-precise.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

I'll look into it right now, I can add you to our Google Docs Folder if you are interested. Hopefully it will help save some research time for everyone.

https://www.mediafire.com/?40mfgeoe4ctti

that has the factory service manuals and wiring schematics that we have been using.
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

Here' a bit of what I found. It looks like the LS1 uses a 24x reluctor wheel causes a varying pulse width encoding. The link you gave is pretty good, it gives us something to look at when we get the engine running on the OEM PCM. Once it's running we can take data from the crank/cams position sensor and see if it matches with that pattern.

http://www.ls1gto.com/forums/archive/index.php/t-190549.htm
http://www.ls2.com/forums/showthread.php/834483-LS-Timing-Reluctor-Wheels-Explained
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
AndreyB
Site Admin
Posts: 14332
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Project: Poncho

Post by AndreyB »

Nehrenholz wrote:It looks like the LS1 uses a 24x reluctor
Did you say reluctor, as in variable reluctance, as in VR type sensor? Sorry if it sounds silly, I am a software guy.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

It's a reluctor wheel, but that basically means that it's a wheel with magnets on it. As it passes the hall effect sensor it produces a force that causes a signal.
Anyway the position sensors in the LS1 are hall effect sensors.
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

Update: The Chassis has returned from the shop. The stainless steel exhaust has been fabricated and installed. The drive shaft has been made and just needs the pinion angles adjusted.
The Frankenso 0.4 has arrived in the mail.
Still a ways from firing the engine, the fuel tank has been received and set up but needs to be plumbed in. The Radiator needs to be mounted and filled. And the Accessory belt has to be sized. Once these tasks are complete we can hook up the original PCM with the BCM bypassed and start sniffing.
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

Update: Tonight we managed to get the workspace, fuel tank, filter regulator, battery, and accessory drive pulleys mounted. Looking forward to the days to come, a few main components left to get ready before beginning the wiring.
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
kb1gtt
contributor
contributor
Posts: 3758
Joined: Tue Sep 10, 2013 1:42 am
Location: ME of USA

Re: Project: Poncho

Post by kb1gtt »

Good to hear.
Welcome to the friendlier side of internet crazy :)
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

We put together the wiring finally. We have wired up the power and switched power to the ECU, relay to the starter solenoid, fused power to the ignition coils and injectors, and fused power to the VATS Passkey II bypass chip. Because the engine had sit for a number of years, we pulled the plugs and soaked the rings before turning the engine over by hand to ensure smooth rotation. After all wired up the engine started up like a charm, though we haven't wired up the O2 sensors properly yet. A breakout board is being produced right now to enable monitoring of the signals while being run by the OEM ECU. Take a look at the YouTube video of the first run:



[video][/video]
https://youtu.be/FpMP4-4LXaI
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
kb1gtt
contributor
contributor
Posts: 3758
Joined: Tue Sep 10, 2013 1:42 am
Location: ME of USA

Re: Project: Poncho

Post by kb1gtt »

Getting running hardware is a good step. For a breakout board you may find this interesting. It's a break out with fuses and such that make it reasonably easy to migrate wires from one system to the other. AKA control cyl 1 with new system while cyl 2 and up are controlled via OEM and operational system.

http://rusefi.com/forum/viewtopic.php?f=4&t=454
Welcome to the friendlier side of internet crazy :)
omalacko
Posts: 3
Joined: Thu Mar 03, 2016 6:09 am

Re: Project: Poncho

Post by omalacko »

We have started wiring to the board. How do we hook up the hall-effect cam and crank shaft position sensors? The pinouts seem to show the positive and negative pins but we have a 12v ref, gnd and a sensor signal wire. Do we need to use an ADC, or does the board have a provision for this?
User avatar
kb1gtt
contributor
contributor
Posts: 3758
Joined: Tue Sep 10, 2013 1:42 am
Location: ME of USA

Re: Project: Poncho

Post by kb1gtt »

Does page 8 of this PDF clear up the question about how to use it as a hall setup? https://svn.code.sf.net/p/rusefi/code/trunk/hardware/frankenso/frankenso_schematic.pdf

First is to check your board is configured for hall. Do this by
-- Make sure W1001 and W1002, are jumpered with a small soldered in wire or 0 ohm resistor.
-- Make sure you have R137 and R141 installed with something around 1kohm to 2.5kohm.
See this picture for additional clarification.
http://rusefi.com/wiki/index.php?title=Manual:Hardware:Frankenso:Hall_input

Then your engine wiring, should have 12V going to the hall sensor, and GND going to GND. This is probably done external to Frankenso, probably somewhere in your harness, or some fuse box some where. You want your 12Vref to be switched, such that you kill power when turned off.

Finally you connect your signal wire for CAM, to CAM - as shown on the bottom side of the PCB. Same for crank, connect the CRANK signal to CRK- on the PCB.

Take note that CAM and CRK are both the same, but on the PCB one is shown as hall, the other is shown as VR. They can both be hall, or both can be VR, or one can be hall while the other one is vr. The silk screen on the PCB is just a reminder of how they can be wired.

Let us know if you have any more questions.
Welcome to the friendlier side of internet crazy :)
omalacko
Posts: 3
Joined: Thu Mar 03, 2016 6:09 am

Re: Project: Poncho

Post by omalacko »

Can the low end drivers (prt # 14nv04) handle 1.5Amps? I can only the find the family of IC's they come from which says they can sink up to 12 amps which seems like crazyness so I just wanted to make sure they can handle the injectors for my high impedance coils.
User avatar
AndreyB
Site Admin
Posts: 14332
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Project: Poncho

Post by AndreyB »

omalacko wrote:Can the low end drivers (prt # 14nv04) handle 1.5Amps?
Yes, that's exactly why we have them there.

See also http://rusefi.com/forum/viewtopic.php?t=249
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
kb1gtt
contributor
contributor
Posts: 3758
Joined: Tue Sep 10, 2013 1:42 am
Location: ME of USA

Re: Project: Poncho

Post by kb1gtt »

Yes they can handle 1.5A. We have over sized driver by using a driver with very low Rds ohms which helps keep the heat down. You may need a heat sink as the voltage clamping portion of the injector pulse will generate some heat. The amount of heat it generates depends on how much of a magnetic field your injectors make. So far we haven't needed a heat sink, but your 1.5A injector seems a bit odd, so it might have more energy stored in a larger magnetic field, and might need heat sink. If the thermal protection kicks in, and prevents the injectors from delivering fuel, you'll want to add a heat sink. That can be done later if it's required.
Welcome to the friendlier side of internet crazy :)
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

Hey, guys thanks for the guidance.
A bit of an update, we started building the breakout board. Ordered and received the board that you suggested above. We'll keep that one as a back-up if we need to.

Our simplified idea is:

Engine harness comes in through our junkyard connector, and each signal and command wire for the engine is plugged into the bread board (transmission wires and 12V ign & GND will be hard wired to the OEM ECU and bypass the breakout board). So with all of the "jumper 1's" installed the engine will run as if only the OEM ECU is in place (the breakout board acts as a harness extension). To sniff the system, we plan to first test the circuits with an oscilloscope, then we can plug our Intronix LogicPort analyser on the digital signals, then we will install "jumper 2" onto the individual signals that we intend to sniff with the Frankenso, and ultimately we will install all the jumper 2s and remove all the jumper 1s to have the Frankenso fully in control.

If you guys can think of any problems with this plan, let me know. Labelling with masking tape is a bit time consuming, wish we had a label maker for heat shrink.
Attachments
Breakout.png
Breakout.png (5.87 KiB) Viewed 17526 times
DSC_0350.JPG
DSC_0350.JPG (1.74 MiB) Viewed 17526 times
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
kb1gtt
contributor
contributor
Posts: 3758
Joined: Tue Sep 10, 2013 1:42 am
Location: ME of USA

Re: Project: Poncho

Post by kb1gtt »

Looks like you have the idea. First is to get CAM and CRANK hall sensors into both, such that a crank decoder can be either configured or decoder created.

You can likely get the CAM, CRANK, TPS, MAP, etc signals going to both the Frankenso and the OEM at the same time. Once this happens, you could measure both ECU's side by side, tuning Franekenso until the fuel pulses and spark pulses match the OEM setup. Once that happens, you can start switching over the fuel and eventually the spark. Once you have all fuel and spark measuring well on Frankenso, you can then move the wires from the break out board one at a time such that you eventually have just the adapter harness.

Lots of baby steps, but it seems you have the general idea. That break out board is handy as the jumpers are fuses, so it helps prevent damage if you make a mistake, and it also makes it easy to connect 2 ECU's at the same time.
Welcome to the friendlier side of internet crazy :)
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

Thanks Kb1gtt, I just got the primary and secondary (cam and crank) signals into the board. It's starting to get a bit more exciting haha.
Do I start configuring the fuel and spark pulses through dev console or through tuner studio? I haven't delved into it yet, just hoping you might know a forum thread that goes through those steps.

I have found "Manual:Software:dev console commands" page it looks like a useful starting page, And I'll let you know how it goes playing with the "messages" tab.

Cheers,
Nate
Attachments
Guages.png
Guages.png (292.82 KiB) Viewed 17120 times
Sensor Readings.png
Sensor Readings.png (199.87 KiB) Viewed 17120 times
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
AndreyB
Site Admin
Posts: 14332
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Project: Poncho

Post by AndreyB »

dev commands are a bit hardcore, TunerStudio is probably a much more efficient way to start making puffs.

If you plan speed density fuel logic check the formulas it would give you an idea which sensors you want to get working. With enought sensor you would get a very rought fuel map right away.

ps: time to update firmware and console ;)
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

FW and console updated. I was going through tuner studio, and it looks like a lot of fun. But some of the configuration parameters aren't loaded in for my engine.
I'll take a look through it and do some searching and write a list of parameters that are needed.
Immediately noticeable are:

Firing order: 1-8-7-2-6-5-4-3
Cam trigger: Will this system need a custom trigger?
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
AndreyB
Site Admin
Posts: 14332
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Project: Poncho

Post by AndreyB »

Sorry I am responding slower than usual these days, this May is a very busy month for me June should be much better.

Just added 1-8-7-2-6-5-4-3 - you would need to wait until http://rusefi.com/build_server/ has a fresh bundle

Just added GM LS 24 custom trigger skeleton - for now it's just a 24 tooth wheel. With that 24 toothed wheel you should be good to make some wave form recordings as described @ http://rusefi.com/wiki/index.php?title=Manual:Software:Trigger#Unknown_trigger_type
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

No problem, We're a little slow at putting the pieces together. Thanks for the help with the firing order and trigger. I see "GM LS 23" Is that the same as "GM LS 24" and just a typo?

I've been setting up the pins through tunerstudio. But I can't get past a FATAL error: ADC mapping error: input PA0 for MAF already used by MAP?

I have the MAP sent into INP3 which goes to PA0. On tuner studio I tried to disable both, tried to set one up with PA0 and the other disabled but no luck. Any ideas?
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
AndreyB
Site Admin
Posts: 14332
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Project: Poncho

Post by AndreyB »

GM LS 23 is a typo, just fixed.

Did you set MAF to none since that's what it is seems to be conflicting with? Another thing is these values are not applied on the fly, you would need to save, disconnect, reset, connect again and see if the message has disappeared.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

Yeah, I put MAF to "disabled" that's the tag at the bottom of the list. I've been resetting, saving, diconnecting and reconnecting, in that order. The HIP9011 is/was also set to PA0 any consequences?
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
User avatar
AndreyB
Site Admin
Posts: 14332
Joined: Wed Aug 28, 2013 1:28 am
Location: Jersey City
Github Username: rusefillc
Slack: Andrey B

Re: Project: Poncho

Post by AndreyB »

Nehrenholz wrote:I've been resetting, saving, diconnecting and reconnecting, in that order. The HIP9011 is/was also set to PA0 any consequences?
resetting the cpu with the black button and then saving? does not make sense.

Same channel could only be used for one thing - so yes, this would be an issue but you would also see hip mentioned in the message not MAP?

Something is not right. Are you using a recent project created based on a recent rusefi.ini? Does TS cay 'compatible' in the first line of the indicators of the bottom of the gauges?

Another way to troubleshoot would be to connect with console and click/type analoginfo.
Very limited telepathic abilities - please post logs & tunes where appropriate - http://rusefi.com/s/questions

Always looking for C/C++/Java/PHP developers! Please help us see https://rusefi.com/s/howtocontribute
User avatar
Nehrenholz
Posts: 49
Joined: Sat Oct 17, 2015 5:02 am
Location: Vancouver

Re: Project: Poncho

Post by Nehrenholz »

resetting the cpu with the black button and then saving? does not make sense.
Reset in the sequence that you mentioned (disconnecting by using File>work offline).
Are you using a recent project created based on a recent rusefi.ini?
I'm using the ini file from Snapshot_20160524_2211 in that folder.

I re-released the firmware to the board opened a new project in Tuner Studio (I didn't have to re-configure the engine and trigger so I might have not flashed it properly, I used the option at Dev Console start up).

I disabled the MAF and Enabled the MAP to PA0.

I set HIP to NONE

The following is the analoginfo showing the MAF disabled:
2016-05-27 19_33: EngineState: confirmation_analoginfo:10
2016-05-27 19_33: EngineState: analogInputDividerCoefficient: 2.00
2016-05-27 19_33: EngineState: ADC is not assigned for hip9011
2016-05-27 19_33: EngineState: ADC is not assigned for fuel gauge
2016-05-27 19_33: EngineState: TPS ADC2 slow PA2 adc=0.00/input=0.01v/divider=2.00
2016-05-27 19_33: EngineState: ADC is not assigned for pPS
2016-05-27 19_33: EngineState: CLT ADC12 slow PC2 adc=0.86/input=1.72v/divider=2.00
2016-05-27 19_33: EngineState: IAT ADC11 slow PC1 adc=0.93/input=1.87v/divider=2.00
2016-05-27 19_33: EngineState: AFR ADC13 slow PC3 adc=0.00/input=0.00v/divider=2.00
2016-05-27 19_33: EngineState: fast enabled=Yes
2016-05-27 19_33: EngineState: MAP ADC0 fast PA0 adc=0.01/input=0.03v/divider=2.00
2016-05-27 19_33: EngineState: ADC is not assigned for A/C sw
2016-05-27 19_33: EngineState: ADC is not assigned for HIP9011
2016-05-27 19_33: EngineState: Vbatt ADC14 slow PC4 adc=0.40/input=3.43v/divider=8.59
2016-05-27 19_33: EngineState: FATAL error: ADC mapping error: input PA0 for MAF already used by MAP?

I've attached the picture of the guage panel, it doesn't say TS compatible.
Attachments
TS Guages.JPG
TS Guages.JPG (134.78 KiB) Viewed 17168 times
Nathan Ehrenholz
Mechatronic Systems Engineering Student
Simon Fraser University
e: nehrenho@sfu.ca | LinkedIn: http://ca.linkedin.com/pub/nathan-ehrenholz/46/b9a/751
Post Reply