Aysoft
20.05.2014, 19:33
Hallo
ich könnte ein bisschen Hilfe von euch gebrauchen komm einfach nicht weiter
ich lasse ein Schrittmotor erst rechts und dann links herum drehen es klappt auch gut was leider noch nicht klappt ist das die schritte nicht mitgezählt werden und bei erreichen einer Anzahl Impulse würde dann ein Interrupt ausgelöst.
habe PWM ausgang Port 38 mit Timer Port 33(COUNTA_2) verbunden
mein Controller ist
C-Control PRO AVR32-Bit Unit + Applicationboard
int stop;
dword richtung, puls;
word cnt;
void main(void)
{
Port_Attribute(P2, PORT_ATTR_OUTPUT|PORT_ATTR_INIT_LOW);
Port_Attribute(P4, PORT_ATTR_OUTPUT|PORT_ATTR_INIT_LOW);
puls = 2000; // Kleinste drehzahl
Port_WriteBit(P2,0 ); // Dir
PWM_Init(1, PWM_64, PWM_ENAB_HIGH|PWM_ENAB_LOW); // Port 38
motor_rechts(30);
motor_links(30);
PWM_Disable(1);
Timer_Disable(2 );
Port_WriteBit(P2,0 );
Port_WriteBit(P4,1 );
}
void count_irq(void)
{
cnt++;
Irq_GetCount(INT_TIMER2);
PWM_Disable(1 );
Timer_Disable(2 );
}
void motor_rechts(int gradzahl)
{
cnt = 0;
Irq_SetVect(INT_TIMER2, count_irq);
Timer_ConfigCounter(2, COUNTA_2,CNT_RISING,200); // Port38 (PWM) mit Port 33(COUNTA_2)
Port_WriteBit(P2,0 ); // Dir
while(1)
{
puls = puls - 3;
PWM_Update(1, puls, puls/2, 0, 0);
AbsDelay(10);
if(puls < 340) break;
if(stop==1) break;
}
AbsDelay(5000 );
while(1)
{
puls = puls + 3;
PWM_Update(1, puls, puls/2, 0, 0);
AbsDelay(10);
if (puls > 2000) break;
if(stop==1) break;
}
}
void motor_links(int gradzahl)
{
cnt = 0;
Irq_SetVect(INT_TIMER2, count_irq);
Timer_ConfigCounter(2, COUNTA_1,CNT_RISING,gradzahl);
Port_WriteBit(P2,1 ); // Dir
//Port_WriteBit(P4,0 ); // Dir
while(1)
{
puls = puls - 3;
PWM_Update(1, puls, puls/2, 0, 0);
AbsDelay(10);
if(puls < 340) break;
if(stop==1) break;
}
AbsDelay(5000 );
while(1)
{
puls = puls + 3;
PWM_Update(1, puls, puls/2, 0, 0);
AbsDelay(10);
if (puls > 2000) break;
if(stop==1) break;
}
}
mfg
ich könnte ein bisschen Hilfe von euch gebrauchen komm einfach nicht weiter
ich lasse ein Schrittmotor erst rechts und dann links herum drehen es klappt auch gut was leider noch nicht klappt ist das die schritte nicht mitgezählt werden und bei erreichen einer Anzahl Impulse würde dann ein Interrupt ausgelöst.
habe PWM ausgang Port 38 mit Timer Port 33(COUNTA_2) verbunden
mein Controller ist
C-Control PRO AVR32-Bit Unit + Applicationboard
int stop;
dword richtung, puls;
word cnt;
void main(void)
{
Port_Attribute(P2, PORT_ATTR_OUTPUT|PORT_ATTR_INIT_LOW);
Port_Attribute(P4, PORT_ATTR_OUTPUT|PORT_ATTR_INIT_LOW);
puls = 2000; // Kleinste drehzahl
Port_WriteBit(P2,0 ); // Dir
PWM_Init(1, PWM_64, PWM_ENAB_HIGH|PWM_ENAB_LOW); // Port 38
motor_rechts(30);
motor_links(30);
PWM_Disable(1);
Timer_Disable(2 );
Port_WriteBit(P2,0 );
Port_WriteBit(P4,1 );
}
void count_irq(void)
{
cnt++;
Irq_GetCount(INT_TIMER2);
PWM_Disable(1 );
Timer_Disable(2 );
}
void motor_rechts(int gradzahl)
{
cnt = 0;
Irq_SetVect(INT_TIMER2, count_irq);
Timer_ConfigCounter(2, COUNTA_2,CNT_RISING,200); // Port38 (PWM) mit Port 33(COUNTA_2)
Port_WriteBit(P2,0 ); // Dir
while(1)
{
puls = puls - 3;
PWM_Update(1, puls, puls/2, 0, 0);
AbsDelay(10);
if(puls < 340) break;
if(stop==1) break;
}
AbsDelay(5000 );
while(1)
{
puls = puls + 3;
PWM_Update(1, puls, puls/2, 0, 0);
AbsDelay(10);
if (puls > 2000) break;
if(stop==1) break;
}
}
void motor_links(int gradzahl)
{
cnt = 0;
Irq_SetVect(INT_TIMER2, count_irq);
Timer_ConfigCounter(2, COUNTA_1,CNT_RISING,gradzahl);
Port_WriteBit(P2,1 ); // Dir
//Port_WriteBit(P4,0 ); // Dir
while(1)
{
puls = puls - 3;
PWM_Update(1, puls, puls/2, 0, 0);
AbsDelay(10);
if(puls < 340) break;
if(stop==1) break;
}
AbsDelay(5000 );
while(1)
{
puls = puls + 3;
PWM_Update(1, puls, puls/2, 0, 0);
AbsDelay(10);
if (puls > 2000) break;
if(stop==1) break;
}
}
mfg