![Smile :)](./images/smilies/icon_smile.gif)
FeatherHard
Moderator: Moderators
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
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
Het schema :
![Afbeelding](http://users.skynet.be/fa241813/Graphics/Simple_Speedo_Schema2.jpg)
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
![Afbeelding](http://users.skynet.be/fa241813/Graphics/Simple_Speedo_Schema2.jpg)
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
Laatst gewijzigd door A-men op ma mar 17, 2008 11:08 pm, 1 keer totaal gewijzigd.
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
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
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…
![Afbeelding](http://users.skynet.be/fa241813/Graphics/controller_af.JPG)
Morgen een uitleg van wat je hier ziet.
Groetjes
Jan
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…
Morgen een uitleg van wat je hier ziet.
Groetjes
Jan
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
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
Hier mijn poging om uit te leggen hoe je een RC pulse meet als je gebruik maakt van de timer en een interrupt.
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
Code: Selecteer alles
********************************************************************************
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: Selecteer alles
********************************************************************************
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)
}
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