AC motor
AC motor
Helló!
AC motort szeretnék vezérelni Attiny2313-al. 1-3 fázis. Frekvencia válltó ill. servo vezérlő érdekelne. Kapcs. rajz és progira lenne szükségem.
Köszi a segitséget.
AC motort szeretnék vezérelni Attiny2313-al. 1-3 fázis. Frekvencia válltó ill. servo vezérlő érdekelne. Kapcs. rajz és progira lenne szükségem.
Köszi a segitséget.
- nobody_hun
- Bitfaragó
- Hozzászólások: 425
- Csatlakozott: 2005. november 14. hétfő, 7:00
AC motor nem jó, mert a fázisváltó a nagyáramok birodalma...
Léptető ill szervó kapcsán lehet valami.
Mi az adott?
Mire kell? mekkora terhelést kell tudni? AC v. szervó hány voltos?
Mi az amit nem tudsz összehozni? (rajz v. programrészlettel elölrébb lennénk....) Vagy legalább a körvonalazódott rész. Pláne hogy a Tinyvel nem az igazi ez (kicsi hozzá).
U.i.: Itt a fórumon azért a probléma általában úgy vetődik fel, hogy:
a, Itt van ez+ez a rajz. Megépítettem, sztem ez a hiba benne
b, itt a rajz, a szoftverben ez a kódrészlet nem tetszik. valakinak van vmi ötlete?
c, Itt ez az oldal: http://valami.oldal és tovább fejleszteném. arra gondoltam, hogy és így valósítanám meg. Hol van benne buktató? szerintem ... rész lehetne jobb....
U.i.2: Google kidobott valamit ebben a témakörben, ami nem követhető?
U.i.3.: meg ne csináljuk?:)
Léptető ill szervó kapcsán lehet valami.
Mi az adott?
Mire kell? mekkora terhelést kell tudni? AC v. szervó hány voltos?
Mi az amit nem tudsz összehozni? (rajz v. programrészlettel elölrébb lennénk....) Vagy legalább a körvonalazódott rész. Pláne hogy a Tinyvel nem az igazi ez (kicsi hozzá).
U.i.: Itt a fórumon azért a probléma általában úgy vetődik fel, hogy:
a, Itt van ez+ez a rajz. Megépítettem, sztem ez a hiba benne
b, itt a rajz, a szoftverben ez a kódrészlet nem tetszik. valakinak van vmi ötlete?
c, Itt ez az oldal: http://valami.oldal és tovább fejleszteném. arra gondoltam, hogy és így valósítanám meg. Hol van benne buktató? szerintem ... rész lehetne jobb....
U.i.2: Google kidobott valamit ebben a témakörben, ami nem követhető?
U.i.3.: meg ne csináljuk?:)
Ennyi erővel én is feltehettem volna a kérdést, hogy építenél e nekem egy cnc elektronikát nyátervel szoftverrel.
De ehelyett nekiláttam bogarásztam a müködési elvtől egészen a mehanikai elképzelésig és amikor nem boldogultam, na akkor kérdezősködtem és kérdezni is fogok, mert még naon amatőr szinten vok a programozással
Sajna nem repül az ember szájába a sültgalamb, vagyis igen jó pízért bár mi kapható.
Na csak ennyit akartam
Na jó, nem akartam lerázni...
Bocsánat.
Csak a feladat definíciója volt nagyon tág....
Pláne hogy most tervezgetek én is CNC vezérlést. És még ott tartok, hogy hogyan is néz ki egy léptetőmotor... Meg a vezérlési alapok hogyan jönnek elő.
Az elmozdulás mérése macerás, azaz a buktató az egészben.
- léptetőmotor nem lép:) - honnan tudom?
- tengelyelfordulást kell nézni - optikai enkóder aranyáras
- abszolút vagy relatív pozíciót kell tudni....
Mondjuk még csak nagyfloppy léptetőmotorral kísérletezem. Igaz a processzor nem direktben hajtja meg, hanem I2C buszon át. PC oldalról meg USB vagy Ethernetháló! Mondjuk ez utóbbiak vannak többé-kevésbé készen.
Amúgy ha kellően sok idővel bírsz és tőkével, naná hogy bevállalom a komplett nyákterv + építési leírást...
De azért ha már van elképzelés, van ÖTLET, akkor gyerünk. Összedugjuk a fejünket és néhány füsttelen chip és biztosíték árán, de meglesz a program....
Léptetőmotor kezelése ami mentén elindultam, hogy ne csak "káráljak":
Alapok:
http://www.tigoe.net/pcomp/code/archive ... 0245.shtml
Rajz+Bascom minta:
http://www.active-robots.com/products/m ... pper.shtml
Uni- és Bipolár meghajtás, plusz film+Bascom!
http://members.home.nl/bzijlstra/hardwa ... tepper.htm
Unipolár és ami mentén elindultam/ok/:
http://home.wxs.nl/~meurs274/stepper_motor_driver.htm
Csak a feladat definíciója volt nagyon tág....
Pláne hogy most tervezgetek én is CNC vezérlést. És még ott tartok, hogy hogyan is néz ki egy léptetőmotor... Meg a vezérlési alapok hogyan jönnek elő.
Az elmozdulás mérése macerás, azaz a buktató az egészben.
- léptetőmotor nem lép:) - honnan tudom?
- tengelyelfordulást kell nézni - optikai enkóder aranyáras
- abszolút vagy relatív pozíciót kell tudni....
Mondjuk még csak nagyfloppy léptetőmotorral kísérletezem. Igaz a processzor nem direktben hajtja meg, hanem I2C buszon át. PC oldalról meg USB vagy Ethernetháló! Mondjuk ez utóbbiak vannak többé-kevésbé készen.
Amúgy ha kellően sok idővel bírsz és tőkével, naná hogy bevállalom a komplett nyákterv + építési leírást...
De azért ha már van elképzelés, van ÖTLET, akkor gyerünk. Összedugjuk a fejünket és néhány füsttelen chip és biztosíték árán, de meglesz a program....
Léptetőmotor kezelése ami mentén elindultam, hogy ne csak "káráljak":
Alapok:
http://www.tigoe.net/pcomp/code/archive ... 0245.shtml
Rajz+Bascom minta:
http://www.active-robots.com/products/m ... pper.shtml
Uni- és Bipolár meghajtás, plusz film+Bascom!
http://members.home.nl/bzijlstra/hardwa ... tepper.htm
Unipolár és ami mentén elindultam/ok/:
http://home.wxs.nl/~meurs274/stepper_motor_driver.htm
hello!
Én is éppen egy léptető motorral szórakozok. Az lenne a probléma hogy az óramuató járásával ellenkező irányba tök jól megy egyező irányba viszont nem folyamatos néha megakad meg furán viselkedik(csak remeg pl.) mi okozhatja ez? a kontroller egy epson nyomtató alaplapot hajt meg azon van a motorvezérlés is.
szerk: 3 mp-es késletetés esetén teljesen jól müködik? akkor pl 10-en mért nem? még 1 vmit szeretnék tudni, ezt a léptető motoros dolgot hogy lehet összehozni a pwm-el?
a válaszokat előre is köszi!
Én is éppen egy léptető motorral szórakozok. Az lenne a probléma hogy az óramuató járásával ellenkező irányba tök jól megy egyező irányba viszont nem folyamatos néha megakad meg furán viselkedik(csak remeg pl.) mi okozhatja ez? a kontroller egy epson nyomtató alaplapot hajt meg azon van a motorvezérlés is.
Kód: Egész kijelölése
$regfile = "m16def.dat"
$crystal = 8000000
Config Porta = Output
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.3 , Rs = Porta.2
Config Lcdmode = Port
Initlcd
Cursor Off
Config Kbd = Portc
Dim Wa As Integer
Dim A As Byte
Config Portd = Output
Wa = 10
Do
A = Getkbd()
Select Case A
Case 2 : Gosub Ora_egy
Case 1 : Gosub Ora_ell
End Select
Loop
Ora_ell:
Portd = 9
Waitms Wa
Portd = 0
Portd = 3
Waitms Wa
Portd = 0
Portd = 6
Waitms Wa
Portd = 0
Portd = 12
Waitms Wa
Portd = 0
Return
Ora_egy:
Portd = 12
Waitms Wa
Portd = 0
Portd = 6
Waitms Wa
Portd = 0
Portd = 3
Waitms Wa
Portd = 0
Portd = 9
Waitms Wa
Portd = 0
Return
End
a válaszokat előre is köszi!
én a legelső projecteben jártas vók ac motoro több kilówatosat hajtunk és pwm jelel! tökéletesen persze az elektronika nem piskóta dolog!
régebben foglakoztunk léptető motorral és hát nem egyszerrű a remegés az hiba ami a progi ban van csak nem emléxem már rá de azt hiszem a freki okozza!
én úgy oldottam meg hogy a 4 polulú motornál mindíg egymás után kapcsolgattam a polusokat az időkkel játszva gyorsítottam vagy lassítottam!
és előre hátra is ment
ugyan ezt 8 polussal is eljátszottam elképesztő mekkora erő van benne igaz én elég drága motorokkal próbáltam játékgépekből szereltem ki ilyen pénzesekből!
itt a progim
régebben foglakoztunk léptető motorral és hát nem egyszerrű a remegés az hiba ami a progi ban van csak nem emléxem már rá de azt hiszem a freki okozza!
én úgy oldottam meg hogy a 4 polulú motornál mindíg egymás után kapcsolgattam a polusokat az időkkel játszva gyorsítottam vagy lassítottam!
és előre hátra is ment
ugyan ezt 8 polussal is eljátszottam elképesztő mekkora erő van benne igaz én elég drága motorokkal próbáltam játékgépekből szereltem ki ilyen pénzesekből!
itt a progim
Kód: Egész kijelölése
$regfile = "AT26DEF.DAT"
$crystal = 280000
'
Config Portb = Output
Config Porta = Input
'
Dim T As byte
'0 - 255
'0 - 255
'
'*********************
' Sencing (Loop)
'*********************
'
Do
If Pina.2 = 0 And Pina.1 = 0 And Pina.0 = 0 Then Goto Motionstop 'válztozott
If Pina.2 = 0 And Pina.1 = 0 And Pina.0 = 1 Then T = 0 'változott
If Pina.2 = 0 And Pina.1 = 1 And Pina.0 = 0 Then T = 70
If Pina.2 = 0 And Pina.1 = 1 And Pina.0 = 1 Then T = 60
If Pina.2 = 1 And Pina.1 = 0 And Pina.0 = 0 Then T = 50
If Pina.2 = 1 And Pina.1 = 0 And Pina.0 = 1 Then T = 40
If Pina.2 = 1 And Pina.1 = 1 And Pina.0 = 0 Then T = 30
If Pina.2 = 1 And Pina.1 = 1 And Pina.0 = 1 Then T = 20
If Pina.3 = 1 Then Goto Revmode
'
Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0 : Portb.3 = 1
Waitms T
Portb.0 = 1 : Portb.1 = 1 : Portb.2 = 0 : Portb.3 = 0
Waitms T
Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 1 : Portb.3 = 0
Waitms T
Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1 : Portb.3 = 1
Waitms T
Goto Motionstop
'
Revmode:
Portb.0 = 0 : Portb.1 = 0 : Portb.2 = 1 : Portb.3 = 1
Waitms T
Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 1 : Portb.3 = 0
Waitms T
Portb.0 = 1 : Portb.1 = 1 : Portb.2 = 0 : Portb.3 = 0
Waitms T
Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 0 : Portb.3 = 1
Waitms T
Motionstop:
Loop
End
szervo vezérlő hp motorhoz de c-ben írva!
Kód: Egész kijelölése
/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.8e Evaluation
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 7/30/2006
Author : Freeware, for evaluation and non-commercial use only
Company :
Comments:
Chip type : ATmega128
Program type : Application
Clock frequency : 16.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 1024
*****************************************************/
#include <mega128.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=0 State4=T State3=T State2=T State1=T State0=T
PORTB = 0b00000000;
DDRB = 0b00100000;
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;
// Port E initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTE=0x00;
DDRE=0x00;
// Port F initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTF=0x00;
DDRF=0x00;
// Port G initialization
// Func4=In Func3=In Func2=In Func1=In Func0=In
// State4=T State3=T State2=T State1=T State0=T
PORTG=0x00;
DDRG=0x00;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
ASSR=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 2000.000 kHz
// Mode: Ph. & fr. cor. PWM top=ICR1
// OC1A output: Non-Inv.
// OC1B output: Discon.
// OC1C output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR1A=0x80;
TCCR1B=0x12;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1 = 20000;
OCR1A = 1000;
OCR1BH=0x00;
OCR1BL=0x00;
OCR1CH=0x00;
OCR1CL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// Timer/Counter 3 initialization
// Clock source: System Clock
// Clock value: Timer 3 Stopped
// Mode: Normal top=FFFFh
// Noise Canceler: Off
// Input Capture on Falling Edge
// OC3A output: Discon.
// OC3B output: Discon.
// OC3C output: Discon.
// Timer 3 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
// Compare C Match Interrupt: Off
TCCR3A=0x00;
TCCR3B=0x00;
TCNT3H=0x00;
TCNT3L=0x00;
ICR3H=0x00;
ICR3L=0x00;
OCR3AH=0x00;
OCR3AL=0x00;
OCR3BH=0x00;
OCR3BL=0x00;
OCR3CH=0x00;
OCR3CL=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
// INT3: Off
// INT4: Off
// INT5: Off
// INT6: Off
// INT7: Off
EICRA=0x00;
EICRB=0x00;
EIMSK=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
ETIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
while (1)
{
// Place your code here
OCR1A = 1000;
delay_ms(6000);
OCR1A = 2000;
delay_ms(6000);
};
}
A remegés a frekvencia miatt van. Ha a Wa értéket változtatod, akkor nem lesz jobb? Kell a mégneses mező kialakulásához idő, és a fesz elvételekor a mező összeomlásához is. Ha az idő rövid, akkor ez nem tud végbe menni.
Én egy NEMA34-es motorral játszottam (1.7 Nm-es), volt adatlap is hozzá (SH23-1.7)- Itt meg volt adva a fordulat/nyomaték görbe. A várakozást növelve volt csak stabil, 2 lépés közt be kellett rakni ~500 usec várakozást...
Érdemeseb az ún. fullstepet használni (ez 2 tekercset jelent egyszerre, mert erősebb a motor. Illetve a HalfStep is jó lehet, akkor a natív felbontás feleződik.
Kiindulásnak, alapötletnek:
http://www.atmel.com/dyn/resources/prod ... OC3045.PDF
http://www.atmel.com/dyn/resources/prod ... oc4214.pdf
http://www.atmel.com/dyn/resources/prod ... oc8017.pdf
Én egy NEMA34-es motorral játszottam (1.7 Nm-es), volt adatlap is hozzá (SH23-1.7)- Itt meg volt adva a fordulat/nyomaték görbe. A várakozást növelve volt csak stabil, 2 lépés közt be kellett rakni ~500 usec várakozást...
Érdemeseb az ún. fullstepet használni (ez 2 tekercset jelent egyszerre, mert erősebb a motor. Illetve a HalfStep is jó lehet, akkor a natív felbontás feleződik.
Kiindulásnak, alapötletnek:
http://www.atmel.com/dyn/resources/prod ... OC3045.PDF
http://www.atmel.com/dyn/resources/prod ... oc4214.pdf
http://www.atmel.com/dyn/resources/prod ... oc8017.pdf
PWM:
Kell 4! timer SW vagy HW alapon.
Az egyes tekercsekre amik egymás mellett vannak, más PWM-l adsz rá. Pl. a 255-t megosztod 2 tekercs közt. Ekkor a lépés arányosan, áll be a 2 közé.
Pl. az első lépésed a 9-eset jelenti, és ebből kell továbbmenned.
A tekercsek így a következő állapotban vannak:
A pwm ereje 0-100ig van ábrázolva. Kérdés, hogy ennyire finom szabályzásnak van-e értelme.
Alapban a léptteőmotor 1,8 fokos, ez half-steppel 0,9 fokos lesz. Ezt osztod fel (ha a PWM 8 bites) 256 részre. Így a mitorod 0,0035 fokot fog tudni.
Viszont a PWM frekit ha tudod vidd fel 16 kHz fölé, mert különben amotor sípol, azaz fülre hallod.
A belső 8MHz RCről járatva, Prescale=1 timer esetén még hallatszik, így külső kvarcról/RCről kell járatni a "némításhoz".
Kell 4! timer SW vagy HW alapon.
Az egyes tekercsekre amik egymás mellett vannak, más PWM-l adsz rá. Pl. a 255-t megosztod 2 tekercs közt. Ekkor a lépés arányosan, áll be a 2 közé.
Pl. az első lépésed a 9-eset jelenti, és ebből kell továbbmenned.
A tekercsek így a következő állapotban vannak:
Kód: Egész kijelölése
A B C D
100 0 0 0
99 1 0 0
98 2 0 0
. . . .
2 98 0 0
1 99 0 0
0 100 0 0
Alapban a léptteőmotor 1,8 fokos, ez half-steppel 0,9 fokos lesz. Ezt osztod fel (ha a PWM 8 bites) 256 részre. Így a mitorod 0,0035 fokot fog tudni.
Viszont a PWM frekit ha tudod vidd fel 16 kHz fölé, mert különben amotor sípol, azaz fülre hallod.
A belső 8MHz RCről járatva, Prescale=1 timer esetén még hallatszik, így külső kvarcról/RCről kell járatni a "némításhoz".
Szervovezérlés:
Ha a motor belül már tartalmazza a szervót, akkor a Bascomban ez egyszerűen kezelhető:
Bascom/samples servo.bas
Nem próbáltam ki, nincs servomotorom itthon...
Ha a motor belül már tartalmazza a szervót, akkor a Bascomban ez egyszerűen kezelhető:
Kód: Egész kijelölése
'-----------------------------------------------------------------------
' (c) 2001-2005 MCS Electronics
' servo.bas demonstrates the SERVO option
'-----------------------------------------------------------------------
'Servo's need a pulse in order to operate
'with the config statement CONFIG SERVOS we can specify how many servo's we
'will use and which port pins are used
'A maximum of 16 servos might be used
'The SERVO statements use one byte for an interrupt counter and the TIMER0
'This means that you can not use TIMER0 anymore
'The reload value specifies the interval of the timer in uS
'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
$regfile = "2313def.dat"
Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
'as an option you can use TIMER1
'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1
'we use 2 servos with 10 uS resolution(steps)
'we must configure the port pins used to act as output
Config Portb = Output
'finally we must turn on the global interrupt
Enable Interrupts
'the servo() array is created automatic. You can used it to set the
'time the servo must be on
Servo(1) = 10 '10 times 10 = 100 uS on
'Servo(2) = 20 '20 times 10 = 200 uS on
Do
Loop
Dim I As Byte
Do
For I = 0 To 100
Servo(1) = I
Waitms 1000
Next
For I = 100 To 0 Step -1
' Servo(1) = I
Waitms 1000
Next
Loop
Nem próbáltam ki, nincs servomotorom itthon...
