FeatherHard

Heb je een goed idee of ben je net met bouwen gestart? Laat het ons zien!

Moderator: Moderators

Alexander
Posts: 1068
Joined: Tue Aug 23, 2005 9:46 pm
Location: Delft
Contact:

Postby Alexander » Tue Jun 05, 2007 9:21 pm

mooi dingetje :)
[sig?]

User avatar
g-lap
Posts: 455
Joined: Thu Sep 04, 2003 10:27 am
Contact:

Postby g-lap » Tue Jun 05, 2007 10:51 pm

Als alles een beetje meezit kunnen we volgende week een filmpje laten zien om te bewijzen dat dit "ding" ook echt werkt 8)

User avatar
A-men
Posts: 195
Joined: Tue Sep 30, 2003 10:35 pm
Location: Vilvoorde België

Postby A-men » Sun Mar 16, 2008 4:52 pm

Ik heb besloten om het nog maar eens over een controller te hebben.

Met deze ga ik hier een stevige poging doen om heel in detail uiteen te zetten hoe je een degelijke controller voor een Feather bouwt. We bouwen hem op gaatjesplaat en maken alleen gebruik van klassieke componenten die je zo in de handel kan vinden (geen SMD). Iedereen die deftig met een soldeerbout overweg kan zou hiermee een degelijke controller moeten kunnen bouwen.
Zelf zal ik in de komende weken wel een versie bouwen op een zelf ontworpen print plaat en daarbij wel gebruik maken van SMD onderdelen. Die versie is geoptimaliseerd voor gebruik met een Graupner Speed 700 BB Turbo 12V motor. Dat is volgens mij de ideale motor voor gebruik in een Feather (13.6 kg). Ik heb daar een paar weken geleden eens een gans weekeinde aan gerekend. Je hebt een voor een Feather een 150W motor nodig als je erop rekent dat je een elektromotor 20% van de tijd 150% van zijn nominale vermogen mag doen leveren. Naar analogie heb ik toen ook uitgerekend dat de ideale motor voor een 100kg robot een 1100W motor is. De GPA 750 levert 960W (40A, 24V).

De specificaties voor onze controller zijn ongeveer als volgt.
De continu uitgangsstroom is wat een IRF1405 FET aan kan. Met een degelijke koelvin (en onze controller zal een degelijke koelvin hebben) kan dat oplopen tot 70A.
Ik heb een dergelijke controller eens aangesloten op een geblokkeerde motor omdat ik een stroombegrenzing wou testen. De stroombegrenzing werkte prima en beperkte de stroom tot 70A. Na een 15 tal seconden ben ik gestopt omdat de motor te heet werd en stonk. De controller was toen nog niet voelbaar warm.
Een Graupner Speed 700 BB Turbo 12V heeft bij 12V een blokkeerstroom van 43A. Met deze motor zou onze controller bij een voedingsspanning tot 16.8V (de hoogste spanning die je uit een LiPo cel kan halen) in staat zijn om een geblokkeerde motor continu aan te kunnen.

De batterijspanning is beperkt tot wat de 78L09 kan verwerken. Dat is hier een spanning van minstens 11 tot zeker 16V. Dat is optimaal voor het gebruik met 3 LiPo cellen.
Als je een hogere voedingsspanning wil kunnen gebruiken kan je de 78L09 spanningsregelaar vervangen door een 78L15. Met de 78L15 mag je op een toelaatbare voedingsspanning van 24V rekenen.
Grotere spanningen zijn in deze opzet niet mogelijk. Je zou dat wel kunnen als je gebruik zou maken van een LM317T. Maar die past niet in ons kleine en goedkope ontwerp.

En dan ga ik nu het schema eens deftig uitteken.... tot binnen een paar uur.

Groetjes
Jan

User avatar
iiyama87
Posts: 649
Joined: Wed Sep 15, 2004 2:40 pm
Location: Bij bergen op zoom
Contact:

Postby iiyama87 » Sun Mar 16, 2008 5:47 pm

Ben benieuwd A-men, maar een 78L09 kan toch max 35V hebben aan de ingang? Of is de schakeling om de regelaar heen zelf de beperking tot een hogere voedingsspanning?

In iedergeval...leuk om weer elektronica post te zien op het forum :)

User avatar
Bugs
Site Admin
Posts: 5433702
Joined: Sun Jul 27, 2003 9:13 pm
Location: Delft
Contact:

Postby Bugs » Sun Mar 16, 2008 6:15 pm

Hangt een beetje af van welke je treft. Maar meestal gaan ze niet zo hoog. Daarnaast werkt het niet omdat hij dan veel te veel warmte kwijt moet.

User avatar
iiyama87
Posts: 649
Joined: Wed Sep 15, 2004 2:40 pm
Location: Bij bergen op zoom
Contact:

Postby iiyama87 » Sun Mar 16, 2008 6:43 pm

Dan zou een 7809 toch een betere optie zijn ? Ja die zijn wat groter maar ze zijn net zo goed verkrijgbaar en kunnen max 1A mits goed gekoeld. Duur zijn ze ook niet.

User avatar
A-men
Posts: 195
Joined: Tue Sep 30, 2003 10:35 pm
Location: Vilvoorde België

Postby A-men » Sun Mar 16, 2008 9:40 pm

Het schema :

Image

Bespreking van het schema :

Deel I : De voedingsspanningen

De voedingsspanning komt over de aansluitingen +VBat en –Vbat. –Vbat is ook de aarding.
Er is geen opto coupler. Al mijn vorige controllers hadden wel een opto coupler. Ik heb in de praktijk echter altijd mijn controller de voeding laten leveren voor de ontvanger (BEC). In FeatherHard II was dat een voedingsspanning van 21,6 V. Dat gaf geen problemen dus neem ik aan dat werken zonder opto coupler bij een spanning van hooguit 17V ook geen probleem zal opleveren.

De spanning voor de H-Bridge FET driver (de HIP 4082) komt van een 78L09. De HIP4082 heeft een under voltage treshold op hoogstens 8,5V en om daar zeker boven te blijven heb ik gekozen voor een 9V voeding.
Het verbruik van de controller is ongeveer 50mA (gemeten op een proefschakeling met een aangesloten ontvanger). Als er 17V voedingsspanning is dan staat er over de regelaar een spanning van 17 – 9 = 8V. Bij een stroom van 50 mA geeft dat een vermogen van 0,4W. Een 78L09 in TO92 verpakking kan bij een omgevingstemperatuur van 40°C een vermogen leveren van 0,6W. We komen dus aardig in de buurt.
De voedingsspanning van 17V hebben we echter alleen direct na het laden van de cellen. Na een paar seconden rijden zal dat al eerder 15V zijn. 15 – 9 = 6V. Dat geeft dan een vermogen van 6 * 0,05 = 0,3 W. Dat is dan de helft van wat de regelaar aan kan. Dat lijkt me een veilige waarde.

Klassiek voor elke regelaar is de dikke condensator aan de ingang. Die moet ervoor zorgen dat er geen overspanning op de FET’s terecht komt. Die overspanning zal ontstaan als de FET’s uitschakelen en de zelfinductie van de voedingslijn probeert de stroom te handhaven. Bij een stoom van 40A en meer heb je niet veel inductie nodig om deftig wat lading kwijt te moeten.
Ik heb daarover heel wat simulaties laten gaan en je mag aannemen dat je met goede condensatoren met een lage ESR voldoende hebt aan een 860 µF condensator zolang de voedingsleiding niet meer dan 0,1 MH inductie heeft. (en dat hebben de meeste aansluitkabels niet).
Hoe dan ook het is belangrijk om korte draden te gebruiken om de regelaar aan te sluiten op de batterij en die draden zeker niet te gaan torsen. (Wat in de industrie wel de gewoonte is voor de aansluitdraden van de controller naar de motor).
Aan de ingang van de 9V regelaar heb ik toch nog een 0,33 µF keramische condensator voorzien… kwestie van niet te durven rekenen op een snelle reactie van de ELCO.

Voor de 5V voeding heb ik een 78L05 in gebruik genomen. Daarvan mogen we zeker zijn dat hij niet meer dat 50 mA zal moeten leveren en dat de spanningsval over de regelaar niet meer dan 9 – 5 = 4 V zal zijn. Die moet dan en vermogen leveren van hooguit 0,2 W. Dat kan de 78L05 makkelijk aan.

Op de kleine print is er slechts een heel kleine afstand tussen de regelaars en verbruikers. We kunnen de traditionele condensatoren (0,1 µF) over de digitale IC’s (de HIP en de ATtiny) dan ook weglaten. De 0,1 µF condensatoren aan de uitgang van de spanningsregelaars volstaan.

Morgen ga ik hiermee verder. Voor vandaag is het laat genoeg geworden.

Groetjes
Jan
Last edited by A-men on Mon Mar 17, 2008 11:08 pm, edited 1 time in total.

User avatar
A-men
Posts: 195
Joined: Tue Sep 30, 2003 10:35 pm
Location: Vilvoorde België

Postby A-men » Mon Mar 17, 2008 10:54 pm

Deel II : De H-bridge FET driver HIP 4082

De voeding van de H-bridge FET driver is aangesloten via een 10R weerstand. De reden daarvoor is dat het laden van de bootstrap condensatoren heel wat storing veroorzaakt en die wil ik zo ver mogelijk van de microcontroller houden.

Een FET heeft de ietwat vervelende eigenschap dat hij sneller open gaat dan dat hij sluit. Om dat op te lossen heeft elk FET bridge driver de mogelijkheid om een vertraging (delay) in te stellen tussen het moment waarom hij een FET in één tak sluit en de andere FET in dezelfde tak opent.
Bij een HIP 4081A die ik in al mijn vorige ontwerpen gebruikte kan je die vertraging niet lang genoeg instellen. Dat werd dan opgelost door een relatief grote weestand (150R) in de gate aansturing van de FET op te nemen (wat een vertraging geeft bij het openen van de FET) en het ontladen van de gate van de FET te laten verlopen over een schottky diode die parallel staat aan de gate weerstand waardoor het ontladen sneller gaat. Gezien het doel hier is om een eenvoudige maar degelijke regelaar te bouwen wou ik me verlossen van die shottky diodes.
De HIP4082 die ik in deze schakeling als H-bridge FET driver gebruik stelt me wel in staat om een voldoende lange vertraging in te stellen. Dat doe ik hier met een 12k weerstand aangesloten op de DEL-pin. Met die weerstand heb ik een vertraging van 800 ns volgens de data sheet. De waarde heb ik niet uitgerekend maar proefondervindelijk vastgesteld door een potmeter te gebruiken. Nu het probleem met de vertraging is opgelost kan ik ook een kleine (10R) weerstand gebruiken om de FET aan te sturen. De FET's gaan hier dan ook sneller schakelen wat een voordelige invloed heeft op de noodzakelijke koeling.

De HIP 4081A heeft een charge pump. Die maakt het mogelijk om ook de bovenste FET "forever" open te houden. De HIP4082 heeft geen dergelijke charge pump. Door een beetje verlies in de FET en/of de bootstrap condensator kan je de bovenste FET niet lang (seconden) open houden. Daarom ben ik genoodzaakt om de bootstrap condensator regelmatig bij te laden. Dat doe ik door de open tijd voor de bovenste FET te beperken tot 99% van de PWM-periode. Misschien lukt het ook met 99,5% dat heb ik nog niet geprobeerd.

De AHI en BHI ingangen zijn aangesloten op 12V. Het resultaat is dat we met het aansturen van ALI en BLI met een PWM signaal de complete sturing van de FET’s kunnen verzorgen. Het voordeel daarvan is dat ik minder IO-lijnen van de microcontroller nodig heb. En gezien het doel is om een eenvoudige controller te bouwen is een eenvoudige microcontroller natuurlijk mooi meegenomen.

Daarmee is het H-Brigde FET driver hoofdstuk afgesloten.

Over de FET’s kunnen we heel kort zijn… klassieke H-Bridge inderdaad !

Morgen een woordje over de Microcontroller en dan kunnen we aan de bouwbeschrijving beginnen.

Groetjes
Jan

User avatar
MJM
Moderator
Posts: 2878
Joined: Tue Jul 29, 2003 8:43 am
Location: Rijnmond

Postby MJM » Tue Mar 18, 2008 8:29 pm

Half off-topic:
Ik heb vandaag met een electronica-directeur gesproken die aanbood componenten te leveren. Waarschijnlijk heeft hij dat Rick ook al eens aangeboden.
Marien
Roboteer
Scraptosaur, Midnight Oil, Lt Lee, Mecha Knights, Rockey, Race Robots, Linefollowers.

User avatar
A-men
Posts: 195
Joined: Tue Sep 30, 2003 10:35 pm
Location: Vilvoorde België

Postby A-men » Tue Mar 18, 2008 10:23 pm

Deel III : De microcontroller

Ik heb ooit wel met MicroChip controllers gewerkt maar sinds een paar jaar werk ik uitsluitend met Atmel AVR’s. Deze schakeling heeft dan ook zo een AVR, een ATtiny85 om precies te zijn.

De ATtiny85 is een 8 pin IC. Hij kan tot 6 polivalent bruikbare IO lijnen leveren (AD converter, comparator, PWM uitgang, interrupt ingang, clock aansluiting, …).

Ik blijf het ongelofelijk vinden, een 8 bit 20MHz RISC CPU (1 instructie per clock cycle voor bijna alle instructies) en dus bijna 20 MIPS en dan nog een zak aan periferie inclusief een eigen ingebouwde clock en dat allemaal In System Programmable in een dikke seconde en bijna onbeperkt heerprogrammeerbaar. Toen ik in de elektronica stapte in 1980… kon je daarmee een ganse eurocard vullen en was je allicht ook meer dan 70 euro armer.


Wij gebruiken hier 4 io-lijnen van de AVR.
1) De eerste is een ingang die we gaan gebruiken om de lengte van de binnenkomende RC puls te lezen.

2) De tweede is een ingang aangesloten op S1 die we gaan gebruiken om de controller aan te passen aan de zender/ontvanger-combinatie. In essentie komt het erop neer dat we de neutrale stand, vol vooruit en vol achteruit in de EPROM van de AVR programmeren.
Dat gaat als volgt in zijn werk. Je zet je zender aan en laat de gas-knuppel in de neutrale stand staan. Je houdt S1 ingedrukt en sluit de voedingsspanning aan op de controller. Je laat S1 los en wacht tot je de aangesloten motor één keer hoort “biep” zeggen. Je zet de gas-knuppel op de zender op maximum en drukt nog eens op S1. Je wacht tot de motor 2 maal “biep” zegt. Tenslotte zet je de gas-knuppel op maximaal achteruit en je drukt nog eens op S1. Je wacht tot de motor 3 keer “biep” zegt. Voedingspanning eraf en er weer op…klaar !
Op mijn eerste controllers was dat niet voorzien en dat heeft mij heel wat extra werk gekost… en veel frustratie voor een paar gebruikers.

2 en 3) Verder hebben we nog 2 uitgangen nodig die we beiden gebruiken voor PWM signalen OC1B en OC1A. De ene is de vooruit en de andere is de achteruit. Deze 2 pinnen heb je niet te kiezen, het moeten de PWM uitgangen zijn. De andere pinnen kan je wel vrij kiezen. Ik heb dat gedaan in functie van de opbouw van de printplaat en heb wel een geslaagde poging gedaan om pin PB5 NIET te gebruiken. PB5 is ook de reset en als je die als IO pin gebruikt dan kan je geen In-System-Programmatie meer doen.

Ik laat de AVR draaien op de interne RC oscillator (8MHz). Die is voldoende stabiel voor onze toepassing. Mocht hij van een koude winterdag naar een hete zomerdag toch een beetje te veel variatie vertonen dan zullen we de controller wel effe herprogrammeren. Dat is in 20 seconden “gepiept”.

De programmatie van de AVR zal ik in C doen. Al ben ik er nog niet helemaal uit of ik dat programma ook ga publiceren. Ik speel met het idee om het gratis te leveren (in een AVR die ik dan wel zowat aan kostprijs plus portkosten lever aan DRG leden. Maar dat ik voor “vreemden” iets aanreken om een geprogrammeerde AVR te leveren. In ieder geval gratis voor DRG leden, laat ik daar geen misverstand over ontstaan.
Wat ik in ieder geval wel zal publiceren is een omschrijving van wat de code doet. Iets als initieer alle io pinnen zet de timer klaar, meet de inkomende puls…in een vorm van speudo-BASIC.

Voila, daarmee is de ganse schakeling zowat omschreven. Ik zou natuurlijk nog veel meer in detail kunnen gaan over de keuze van de FET’s, de keuze van Gate weerstanden, de beschrijving van de HIP’s interne werking… ik denk dat de kenner er zelf wel achter komt en dat het de leek geen bal kan schelen.

En dan zou ik graag afsluiten met een foto van een afgewerkte controller…om de goesting op te voeren…

Image

Morgen een uitleg van wat je hier ziet.

Groetjes
Jan

User avatar
iiyama87
Posts: 649
Joined: Wed Sep 15, 2004 2:40 pm
Location: Bij bergen op zoom
Contact:

Postby iiyama87 » Tue Mar 18, 2008 10:35 pm

Ziet er goed uit, heb je dat RC signalen uitlezen met een Uc jezelf aangeleerd? Of heb je nog eventuele handige links daarvoor?
Zou dat graag in asm met een PIC willen programmeren.

User avatar
A-men
Posts: 195
Joined: Tue Sep 30, 2003 10:35 pm
Location: Vilvoorde België

Postby A-men » Tue Mar 18, 2008 11:29 pm

Ik heb de code zelf geschreven.
In assembler op een AVR heb ik het hier op het forum al staan op een pagina veel vroeger...maar die code meet de RC puls en maakt tegelijk de PWM signalen aan ...dat is niet erg didactisch.

Ik ben zeker dat je de ASM code op AVR freaks.net kan vinden.

Ik kan het je wel uitleggen maar de allereerste vraag is ...mag ik een teller gebruiken of moet het puur in code ?
Als je een teller gebruikt dan kan het meten van de RC puls op de achtergrond gebeuren.
Als je het puur met code doet...heb je een teller die je voor iets anders kan gebruiken.

Jan

User avatar
iiyama87
Posts: 649
Joined: Wed Sep 15, 2004 2:40 pm
Location: Bij bergen op zoom
Contact:

Postby iiyama87 » Wed Mar 19, 2008 4:35 pm

Als je de Uc nog voor iets anders kunt gebruiken zou mooi zijn, dus liefst met teller.

User avatar
stef
Posts: 1026
Joined: Sun Dec 04, 2005 2:09 pm
Location: aalsmeer, nederland
Contact:

Postby stef » Wed Mar 19, 2008 4:52 pm

ik ben ook wel eens bezig geweest met avers heb hier thuis een atmega16 ligen en een attiny2313 nooit gelukt om er een programma op te laden :( heb ook zoon speciale programmer ook nooit mee gelukt :( zit me gewoon niet mee.

stef

User avatar
A-men
Posts: 195
Joined: Tue Sep 30, 2003 10:35 pm
Location: Vilvoorde België

Postby A-men » Wed Mar 19, 2008 9:36 pm

Hier mijn poging om uit te leggen hoe je een RC pulse meet als je gebruik maakt van de timer en een interrupt.

Code: Select all

********************************************************************************
In een soort PSEUDO BASIC
********************************************************************************
Initialize RC_Signal_Input_Pin as input
Initialize timer (Have special attention for the pre scaler)
Initialize RC_Pulse-variable/register. //Will hold last measured RC pulse lenght
Enable pin change interrupt on RC_Signal_Input_Pin

YOUR MAIN PROGRAM

PIN_CHANGE_INTERRUPT ROUTINE {
   If RC_Signal_Input_Pin = High
      Start timer
   Else
      Stop timer
      RC-pulse = timer //maybe ad conversion calculation here
      Timer = 0
   End
}

Code: Select all

********************************************************************************
In GCC C-code
********************************************************************************
#include <stdint.h>
#include <avr/io.h>
#include <avr/interrupt.h>

#define SETBIT(PORT,BIT)  ((PORT) |=  (1<<(BIT)))
#define CLRBIT(PORT,BIT)  ((PORT) &= ~(1<<(BIT)))

int main(void){
CLRBIT (DDRA ,2);//Set RC/S_IN-pin to input
//Initialise TC1
   TCCR1A = 0;   TCCR1B = 0;   TCCR1C = 0;   TIMSK1 = 0;   TIFR1  = 0;
   //Initialise Pin Change Interrupt (needed to measure RC pulse)
   PCMSK0 = 0x04;       //Set Pin Change Interrupt MASK (Enable pin PCINT2)
   SETBIT(GIMSK,PCIE0);    //Enable Pin Change Interrupt 0

YOUR  MAIN PROGRAM
}

ISR (PCINT0_vect) {

   int16_t Delta;   
   int32_t Temp;

   if ((PINA & (1<<2)) > 0 ) { //If signal on RC_IN is high
      TCCR1B = 1; //Start TC1
   }
   else { // If signal on RC_IN is low
      TCCR1B = 0; //Stop the counter
      Temp = TCNT1;
      TCNT1  = 0; //Clear the counter value (in c H and L are handled by the compiler)
}

Op basis hiervan zou het niet zo moeilijk mogen zijn om het in assembler te herschijven. Als je AVR studio hebt kan je allicht gewoon de code bijelkaar kopiëren uit de assembler listing van het C project na compilatie

In de hoop je hiermee van dienst te zijn.

En wat zou mijn publiek nu liefst hebben dat ik eerst doe :
A) De code uitleggen/documenteren
B) De hardware van de controller opbouwen/documenteren.

Groetjes
Jan


Return to “Nieuwe Robots”

Who is online

Users browsing this forum: No registered users and 4 guests