Lödpenna eller luftpenna för att löda ytmonterat

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
ffredrik
Inlägg: 340
Blev medlem: 20 oktober 2009, 17:52:18
Ort: Göinge

Re: Lödpenna eller luftpenna för att löda ytmonterat

Inlägg av ffredrik »

"jag har lödigt i många år"

lödigt ! :shock: :D :D
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lödpenna eller luftpenna för att löda ytmonterat

Inlägg av DanielM »

Telefonen :wink:
Användarvisningsbild
ffredrik
Inlägg: 340
Blev medlem: 20 oktober 2009, 17:52:18
Ort: Göinge

Re: Lödpenna eller luftpenna för att löda ytmonterat

Inlägg av ffredrik »

OK, jag trodde det var du som skrev dina inlägg. :oops:
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lödpenna eller luftpenna för att löda ytmonterat

Inlägg av DanielM »

Självklart inte. Jag är bara en robot. :mrgreen:

Man kan även undra vem den där "Edit:" är också som dyker upp i många andras inlägg.

Jag lägger upp två bilder på två PCB som jag har lödit/lött för hand.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Janson1
Inlägg: 1338
Blev medlem: 1 december 2016, 09:06:02
Ort: Marks Kommun

Re: Lödpenna eller luftpenna för att löda ytmonterat

Inlägg av Janson1 »

Har du tagit bort sista inlägget? Nu när allt är "klart", bara ett halvt års test kvar om det klarar den vanliga miljön som vi har runt om oss... Nu lämnade du ju ut coden till detta som jag hann ladda ner, jag vet inte om jag förstår nåt men ändå. Om jag vore som dig (det är kanske det du kom på) så skulle jag långtidstesta alltihopa i normal miljö, gärna inkopplat ihop med spänning, ström, transienter mm, ja sånt som finns runt elektroniken när den används. Den här processorn är nog en "medium density" och är mer känslig för störningar än min AVR som förmodligen är "Low desity", ändå har jag problem med störningar trots allt. En liten logg från dig ang funktionen över sikt vore önskvärt Daniel!
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lödpenna eller luftpenna för att löda ytmonterat

Inlägg av DanielM »

Jag flyttade inlägget då jag skrev i fel tråd. :)

När jag menar klart, så menar jag klart för denna milstople. Jag har självklart planer att införa ett FTDI chip på kretskoretet. Lite förbättringar förväntar jag mig. Men just nu gäller det att testa kortet och kolla vad det klarar utav. När går det sönder liksom. Redan nyss har en MOSFET gått sönder. Jag lastade på med mer än 3A och då brände jag sönder den. Annars testade jag 24V och 1.6A och det fungerade. Lite varmt dock. Men propotionalstyrning för hydrauliken...inga problem! Jag vill dock använda en annan MOSFET som har högre watt-effekt. Nuvarande är 45W. Helst skulle jag vilja se 60W.

Det är ett företag som ska långtidstesta denna apparat jag har byggt. Har även byggt en Java applikation till den så man kan få upp grafer, CSV filer, loggningar, kalibreringar och allt annat man kan önska sig. Även kameraövervakning.

Du kan få logg från mig när du vill. Företaget som ska testa apparaten har givare för 20+ tusen kronor och är mycket noggrann med att logga. Men de använder stenålders-utrustning t.ex. Hydac HMG 3000. Visst fungerar den. Men det kostar tid att logga.
Nej, jag är inte anställd hos dom och inget jag fakturerar för. Jag har dock jobbat hos dom och har vänner där som jag bygger saker hos dom på fritiden. :tumupp: Jag får låna utrustning av alla olika sorters typer trots att jag är bara en "gäst". P.S Jag är lite av en "uppfinnare" i mitt yrke.

Bilden ni ser nedan är ett skåp där jag har en Raspberry Pi 4B som är den senaste Pajen (Bortsett från Raspberry 400 som kom nyss). Jag har en webbapplikation gjort i Java som kommunicerar med TX och RX pinnarna för att kunna tala med STM32. Java är ett utmärkt verktyg!
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av DanielM 23 december 2020, 22:23:05, redigerad totalt 3 gånger.
ToPNoTCH
Inlägg: 4847
Blev medlem: 21 december 2009, 17:59:48

Re: Lödpenna eller luftpenna för att löda ytmonterat

Inlägg av ToPNoTCH »

Vad har hänt med Q9 ?

Har du bytt dom kontakterna du kommit åt med lödkolven nu ?
DanielM
Inlägg: 2166
Blev medlem: 5 september 2019, 14:19:58

Re: Lödpenna eller luftpenna för att löda ytmonterat

Inlägg av DanielM »

Den gick sönder. Vi skulle kolla hur mycket den höll för. Den började ryka och sen helt plötsligt så var P8 kopplat till GND direkt. Alltså MOSFET:en gick sönder. Nästa gång satsar vi på att gå från 45W till 60W på MOSFET:en. Även att öka bredden koppar spåret av PCB:n. Just nu är det 2 mm. Jag får max plats med 3mm enligt KiCad.

Jag har inte bytt skruvterminalerna och detta kort ni ser på bilden är bara ett testkort. Detta kort ska maxas, testas och utnyttjas tills processorn går sönder. Vi har testat lägga på 24 volt på digitala ingångarna. Det höll. 24 volt direkt på analoga ingångarna. Det höll också.

För er som vill kommunicera med detta kort i Java så rekommenderar jag denna Java klass. Det är jag som har skrivit den.

Kod: Markera allt

import java.util.List;

import javax.annotation.PostConstruct;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import com.fazecast.jSerialComm.SerialPort;

import lombok.Setter;

@Component
@PropertySource("classpath:application.properties")
@Setter
public class Serial {

	private static final byte WRITE_PWM_DAC_PERIODS = 49;
	private static final byte WRITE_PWM_FREQUENCIES = 50;
	private static final int MESSAGE_LENGTH = 25;
	private SerialPort selectedSerialPort;
	private SerialPort[] serialPorts;
	
	@Autowired
	private PWMService pwmService;
	
	@PostConstruct
	public void init() {
		serialPorts = getSerialPorts();
		List<PWM> pwmList = pwmService.findAll();
		if(pwmList.size() > 0)
			selectNewPort(pwmList.get(0).getPortDescription()); // We ONLY have one row in this PWM database
	}
	
	public SerialPort[] getSerialPorts() {
		return SerialPort.getCommPorts();
	}
	
	private void openPort() {
		selectedSerialPort.openPort();
		System.out.println("Is port open? " + isPortOpen());
	}
	
	public void closePort() {
		if(selectedSerialPort != null)
			selectedSerialPort.closePort();
	}
	
	public boolean isPortOpen() {
		if(selectedSerialPort != null)
			return selectedSerialPort.isOpen();
		return false;
	}
	
	public void selectNewPort(String portDescription) {
		for (SerialPort serialPort : serialPorts) {
			if (serialPort.getPortDescription().contains(portDescription)) {
				serialPort.setComPortParameters(115200, 8, 1, SerialPort.NO_PARITY);
				selectedSerialPort = serialPort;
				openPort();
				break;
			}
		}
	}
	
	// frequency has the length 4
	public void trancieve(int frequency[]) {
		if (selectedSerialPort == null)
			return;
		byte[] buffer = new byte[MESSAGE_LENGTH]; // Settings for the PWM timers
		buffer[0] = WRITE_PWM_FREQUENCIES;
		fillBuffer(buffer, frequency, 1);
		selectedSerialPort.writeBytes(buffer, buffer.length);
	}

	// PWM has the length 9. DAC has the length 3
	public void transceive(int[] PWM, int[] DAC) {
		if (selectedSerialPort == null)
			return;
		byte[] buffer = new byte[MESSAGE_LENGTH]; // DAC and PWM have range 0-4095, eg 12-bit, but they have room for 16-bit
		buffer[0] = WRITE_PWM_DAC_PERIODS; 
		fillBuffer(buffer, PWM, 1);
		fillBuffer(buffer, DAC, PWM.length*2 + 1);
		selectedSerialPort.writeBytes(buffer, buffer.length); // Read with uint16_t = (buffer[i + i] << 8) | (buffer[i + i + 1] & 0xFF);
	}

	private void fillBuffer(byte[] byteArray, int[] intArray, int elementsThatHasBeenWritten) {
		for (int i = 0; i < intArray.length; i++) {
			byteArray[i + i + elementsThatHasBeenWritten] = (byte) (intArray[i] >> 8);
			byteArray[i + i + 1 + elementsThatHasBeenWritten] = (byte) intArray[i];
		}
	}

	// ADC has the length 4, SDADC has the length 2. DSDADC has the length 3. DI has the length 6.
	public void receive(int[] ADC, int[] SDADC, int[] DSDADC, boolean[] DI) {
		if (selectedSerialPort == null)
			return;
		int size = selectedSerialPort.bytesAvailable();
		if (size < ADC.length * 2 + SDADC.length * 2 + DSDADC.length * 2 + DI.length)
			return;

		byte[] buffer = new byte[size]; // We will always get a fixed size
		selectedSerialPort.readBytes(buffer, buffer.length);

		// Read ADC, SDADC, DSDADC and DI
		fillArray(buffer, ADC, 0);
		fillArray(buffer, SDADC, ADC.length * 2);
		fillArray(buffer, DSDADC, (ADC.length + SDADC.length) * 2);
		fillArray(buffer, DI, (ADC.length + SDADC.length + DSDADC.length) * 2);
	}


	private void fillArray(byte[] buffer, boolean[] booleanArray, int elementsThatHasBeenWritten) {
		for (int i = 0; i < booleanArray.length; i++) {
			booleanArray[i] = buffer[i + elementsThatHasBeenWritten] == 1 ? true : false;
		}
	}

	private void fillArray(byte[] byteArray, int[] intArray, int elementsThatHasBeenWritten) {
		for (int i = 0; i < intArray.length; i++) {
			intArray[i] = (byteArray[i + i + elementsThatHasBeenWritten] << 8) | (byteArray[i + i + 1 + elementsThatHasBeenWritten] & 0xFF);
		}
	}
}
Skriv svar