AVR servodriver för DC motorer
Postat: 20 mars 2007, 17:19:48
Det finns flera DIY servodrivers, men dom flesta har inte öppen källkod så jag drar mig för att använda dom, då jag inte vill vara beroende av att någon ska tillhandahålla färdigprogramerade chip. Tänk om något går sönder efter något år och varken chipet eller koden finns tillgängligt! Dessutom är det kul att designa egna grejer 
Jag har börjat rita på en driver och "skissa" på koden. Målet är en generisk, diy driver som klarar upp till 150V och 20A och kostar 250-300 kr per enhet.
Delarna för en enhet (exklusive FETar) kostar kring 400 kr från elfa.
Köper man delar för 10 enheter kostar dom ca 300 kr styck. Elfa är ju inte direkt känt för att vara billigt så jag tror man kan komma en bit lägre utan större problem! Transistorer går att få tag riktigt billigt! Jag köpte t.ex. 200 st IRFP460LC för 5 kr styck! (dom går på 190 spänn på Elfa)
Jag tänkte att man får anpassa FETar och laminattjocklek beroende på vilken ström man vill drivern ska klara. Strömbegränsningen ska ställas in via mjukvara och gå upp till 20A
Detta är lite kod jag knapprat ihop för PID loopen:
Den ska köras i kring 2kHz.
Variablerna som ej är initierade är globala och påverkas av andra funktioner som t.ex. step/dir input, enkoder input, USART för inställningar osv.
Edit: Här är Kopplingschemat
Har inte ritat in step/dir och enkoderingångarna ännu.
Edit: Fixat koden lite

Jag har börjat rita på en driver och "skissa" på koden. Målet är en generisk, diy driver som klarar upp till 150V och 20A och kostar 250-300 kr per enhet.
Delarna för en enhet (exklusive FETar) kostar kring 400 kr från elfa.
Köper man delar för 10 enheter kostar dom ca 300 kr styck. Elfa är ju inte direkt känt för att vara billigt så jag tror man kan komma en bit lägre utan större problem! Transistorer går att få tag riktigt billigt! Jag köpte t.ex. 200 st IRFP460LC för 5 kr styck! (dom går på 190 spänn på Elfa)

Jag tänkte att man får anpassa FETar och laminattjocklek beroende på vilken ström man vill drivern ska klara. Strömbegränsningen ska ställas in via mjukvara och gå upp till 20A
Detta är lite kod jag knapprat ihop för PID loopen:
Kod: Markera allt
void PID()
{
OCR0A = 0;
OCR0B = 0;
if(!Fault)
{
PWM = 0;
Error = Target - Position;
Derivate = Error - PreviousError;
PreviousError = Error;
Integration += Error;
if(Integration > IntegrationLimit) Integration = IntegrationLimit;
if(Integration < (0 - IntegrationLimit)) Integration = 0 - IntegrationLimit);
if((Error > DeadBand) || (Error < (0 - DeadBand)))
{
float Result = 0;
Result = Kp * Error;
Result += Ki * Integration;
if((Derivate > DerivateDeadBand) || (Derivate < (0 - DerivateDeadBand)))
Result -= Kd * Derivate;
PWM = int(Result);
}
//Direction A, negative error
if(PWM < 0)
{
PWM = abs(PWM);
PWM += Offset;
if(PWM > MaxPWM) PWM = MaxPWM;
OCR0A = PWM;
}
//Direction B, positive error
if(PWM > 0)
{
PWM += Offset;
if(PWM > MaxPWM) PWM = MaxPWM;
OCR0B = PWM;
}
}
}
Variablerna som ej är initierade är globala och påverkas av andra funktioner som t.ex. step/dir input, enkoder input, USART för inställningar osv.
Edit: Här är Kopplingschemat
Har inte ritat in step/dir och enkoderingångarna ännu.
Edit: Fixat koden lite