Hej
Har ett litet problem som jag önskar lösa
Har en industrirobot med RS-232 som jag vill styra ett externt servo med. Så här är tanken hur funktionen skall vara.
Servomotorn är kopplad mekaniskt till en växel med utväxlingen 1:40.
För att få servomotorn att snurra i varv måste man skicka 10000 pulser med en PIC med max 500kHz. Detta innebär att på ett varv (360 grader) på utgående axel blir det 400000 pulser.
Från robot controlern kan man skicka Ascii, text eller numeriska värden.
Tanken är att man skickar en siffer sträng från roboten tex 180000,200,010
180000=180 grader
200=PIC pulsar ut med 200kHz
010=10sec.
För att erhålla ett jämt antal pulser så måste man dela 360000/400000=0,9 i PIC programmet.
Detta innebär 1000 pulser/grad
Rotationen skall vara relativ från 0.
Om jag från början skrivit 180000,200,010 och nästa gång skriver 090000,200,10 så skall motorn backa 90 grader.
Någon som har tips på hur ett PIC program skulle kunna se ut ? För den som kan hjälpa mig med detta kan ersättning utgå efter Ök.
//GG
RS232 till PIC
Re: RS232 till PIC
Att pulsa med 500kHz på ett räknat sätt kräver en del av hårdvaran. Det är många pulser att hålla reda på så det blir minst värden på 24 bit men då det inte är standard lär det bli 32-bit värden att räkna med. Hårdvaran ska alltså jobba ganska snabbt.
Men själva dekodningen av text/sträng/värden och styrningen av pulser är det minste problem, det kan klaras ganska enkelt.
Men bara för att du inte ska svara på samma fråga gång efter gång:
* Vilken är den högsta pulsfrekvens som kommer att behövas?
* Vilka signaler ska skapas? Är det Puls & Direction?
* Hur lösas nollningen?
Men själva dekodningen av text/sträng/värden och styrningen av pulser är det minste problem, det kan klaras ganska enkelt.
Men bara för att du inte ska svara på samma fråga gång efter gång:
* Vilken är den högsta pulsfrekvens som kommer att behövas?
* Vilka signaler ska skapas? Är det Puls & Direction?
* Hur lösas nollningen?
Re: RS232 till PIC
Högsta pulsfrekvens är 300kHz
Signaler som ska skapas är puls och riktning (hög eller låg)
Nollningen kan ske genom att tex köra motorn manuellt till markerat läge. Alt göra en nollningssekvens med PIC kretsen. Läsgaffel ge indikering när rätt läge är uppnått.
Signaler som ska skapas är puls och riktning (hög eller låg)
Nollningen kan ske genom att tex köra motorn manuellt till markerat läge. Alt göra en nollningssekvens med PIC kretsen. Läsgaffel ge indikering när rätt läge är uppnått.
Re: RS232 till PIC
Bara ett räkneexempel:
Att räkna upp eller ner en 32-bitars variabel med en 8-bitars µC kommer som mest att ta runt 32 CPU-cyklar.
Att jämföra om rätt antal är uppnådd tar 6 cyklar.
Att skapa en klockpuls tar runt 2 cyklar.
Sedan tillkommer lite overhead på kanske 10 cyklar.
Totalt tar en puls alltså 50 CPU-cyklar. På en PIC behövs då 4* så hög kristallfrekvens, alltså ska den tugga iväg med 60MHz för att klara 300kHz pulsfrekvens.
Alltså ska man välja en PIC32 eller liknande, då är det inte så svårt.
Men medan jag skrev detta inser jag att jag har missat ett enkelt sätt att skapa dessa pulser medelst den inbyggda hårdvaran, därför dyker det upp en fråga mer:
* Maximal pulsfrekvens är 300kHz. Vad är minimal pulsfrekvens? 1kHz?
* Hur exakt måste denna pulsfrekvens vara? Kan man alltså ha den i en viss modulo?
Tänk att det passar hårdvaran med att man har t.ex. värden mellan 1kHz och 3kHz rent faktisk blir 2kHz, är det ett problem?
Att räkna upp eller ner en 32-bitars variabel med en 8-bitars µC kommer som mest att ta runt 32 CPU-cyklar.
Att jämföra om rätt antal är uppnådd tar 6 cyklar.
Att skapa en klockpuls tar runt 2 cyklar.
Sedan tillkommer lite overhead på kanske 10 cyklar.
Totalt tar en puls alltså 50 CPU-cyklar. På en PIC behövs då 4* så hög kristallfrekvens, alltså ska den tugga iväg med 60MHz för att klara 300kHz pulsfrekvens.
Alltså ska man välja en PIC32 eller liknande, då är det inte så svårt.
Men medan jag skrev detta inser jag att jag har missat ett enkelt sätt att skapa dessa pulser medelst den inbyggda hårdvaran, därför dyker det upp en fråga mer:
* Maximal pulsfrekvens är 300kHz. Vad är minimal pulsfrekvens? 1kHz?
* Hur exakt måste denna pulsfrekvens vara? Kan man alltså ha den i en viss modulo?
Tänk att det passar hårdvaran med att man har t.ex. värden mellan 1kHz och 3kHz rent faktisk blir 2kHz, är det ett problem?
Re: RS232 till PIC
Minimal pulsfrekvens blir mist 10kHz
Det viktiga är att man INTE tappar pulser på utgången från PIC kretsen för då förlorar man position.
Vid ren positionering tex vrida från 0 till 90 grader är inte utgångs puls frekvensen något problem. Om man
däremot vill vrida sakta från 0 till 90 grader vid en radie på 150mm blir hastigheten mer viktig.
Med en utgångsfrekvens på 20kHz skulle det ta (1000 pulser/grad x 90 = 90000) x 1/20000 = 4,5sek med 22kHz 4,95 sek.
Det viktiga är att man INTE tappar pulser på utgången från PIC kretsen för då förlorar man position.
Vid ren positionering tex vrida från 0 till 90 grader är inte utgångs puls frekvensen något problem. Om man
däremot vill vrida sakta från 0 till 90 grader vid en radie på 150mm blir hastigheten mer viktig.
Med en utgångsfrekvens på 20kHz skulle det ta (1000 pulser/grad x 90 = 90000) x 1/20000 = 4,5sek med 22kHz 4,95 sek.
Re: RS232 till PIC
OK. Jag ser inte att det skulle vara något större problem att åstadkomma detta. Mjukvaran blir lite "kul" att fixa, inte dekodningen av värden men att styra pulserna rätt.
Jag skulle välja en PIC18F26K22 eller liknande, den klarar jobbet fint.
Jag skulle välja en PIC18F26K22 eller liknande, den klarar jobbet fint.
