PWM signaal via SPI

Hallo,

Ik ben momenteel aan het stage lopen bij Delta Elektronika. Ik heb overlegt met mijn stage begelijder, en van hem mocht ik een forum inschakelen voor dit probleem. Deze vraag is maar een klein onderdeel van mijn project.

Het is de bedoeling dat ik een buzzer kan laten piepen met verschillende tonen, en dat ik een backlight van een LCD kan aansturen. Dit alles moet gebeuren via SPI en zonder microcontroller. Daarnaast moeten de IC's werken op een spanning van 3v3. Het mag ook 5V zijn, maar wel met een 3v3 SPI interface.
Ik heb gezocht op het internet naar een ic wat een PWM kan genereren, en waar ook de frequentie en duty cycle van in te stellen is. Dit was wel te vinden, maar niet met een directe SPI aansluiting. Nu zat ik te denken, dat de backlight wel een vaste frequentie mag hebben, en de buzzer een vaste duty cycle.

Een pwm module kan ik wel vinden, alleen is dat meteen een 16 kanaals LED driver met allerlij overbodige zaken. Het liefst heb ik een of twee kanalen. Het enige wat hij moet kunnen is een dutycycle van ongeveer 0-100% genereren. De frequentie is niet heel belangrijk, het mag alleen niet zichtbaar zijn.

De buzzer is een ander verhaal. Ik had de ML2036 gevonden, alleen die heeft weer een symetrische spanning nodig. En heeft een 5V interface. Nu zou dat mogelijk zijn, alleen heb ik dan weer extra componenten nodig. Het signaal hoeft ook niet perse een sinus te zijn. Het mag ook een blokgolf zijn. De dutycycle maakt niet veel uit, het liefts 50%, maar mag ook wat afwijken. De frequentie moet minimaal in te stellen zijn tussen 1KHz-5KHz in minimaal 4 stappen.

De spanningen die al beschikbaar zijn, 3v3, 5v, +12v en -12v
De SPI bus is 3v3.

Dus in het kort,
Buzzer aansturing: SPI, 3v3, 1KHz-5KHz
Backlight aansturing: SPI, 3v3, PWM, f >= 1KHz, 0% > Duty > 100%

Als jullie suggesties hebben, of meer informatie nodig hebben hoor ik het graag.

Groeten,
Bas

PE2BAS

Waarom mag je geen micro gebruiken? Wat je zoekt is namelijk bij uitstek geschikt om met een micro op te lossen. Of desnoods met een kleine FPGA of zo. Igloo van Actel is mooi hiervoor.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Arco

Special Member

Wat je zoekt is nogal vreemd en exotisch. Met SPI heb je toch meestal een (micro)controller, dus waarom die niet meteen de PWM op laten wekken?
Er zijn wel enkele ic's die dat kunnen, maar niet echt veel. Voorbeeld: de NCV7707 van Onsemi.

[edit] zie net dat die op 5.5v min. werkt, dus daar heb je ook niets aan...

[Bericht gewijzigd door Arco op woensdag 16 september 2015 17:57:54 (12%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Shiptronic

Overleden

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Ik kan me zo voorstellen dat ze liever geen microcontroller willen omdat dat weer een apart ding is waar software in moet, en het programmeren ervan in productie, versiebeheer, etc. geeft wat meer sores dan een hardwarematige oplossing, als die laatste met goed verkrijgbare onderdelen uitgevoerd kan worden.

Een schuifregister werkt ook min of meer met SPI (clock, data in, data uit, enable); misschien kun je daar iets mee doen.

Ik ben ook wel benieuwd waarom deze signalen niet direct uit de aansturende microcontroller kunnen komen, maar er zijn natuurlijk meerdere redenen voor te bedenken. Misschien heeft dat ding gewoon geen pinnen meer over, misschien moet dit aan een bestaand ontwerp toegevoegd worden zonder de bestaande PCB aan te passen, misschien zijn er geen pinnen meer beschikbaar op een connector, of misschien heeft die controller simpelweg geen pinnen met PWM periferals meer over.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Shiptronic

Overleden

@Spark, lijkt wel op de schakelaar die we ooit gesloopt en gemeten hebben , die kon 4/5 leds aansturen en een buzzer, maar dat was geen SPI, maar LIN protocol( wel 3 draads). helaas kan ik zo 123 niet het chip nr. terug vinden. staat er nog iets van in jouw data base ?

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Als er niets speciaals te vinden is ben je denk ik met vijf TTL IC's ook wel klaar: twee schuifregisters met latch, een teller en twee comparatoren.
Kost in SMD op zich weinig ruimte en weinig geld; dat soort discrete logica zal anno 2015 echter ook niet zo super standaard meer zijn.

Ik kan mij wel voorstellen dat men liever niet weer een Uc met firmware er bij heeft.

Waarom PWM?

Waarom geen SPI-gestuurde DA converter pakken?

@Ship: nee, daar heb ik ook niets meer van, geloof ik. Ik weet wel 99% zeker dat het iets van NXP was, maar verder ook niet.

Als je die SPI bus helemaal voor jezelf hebt, en dus niet hoeft te delen met andere devices, is er misschien wel een simpele oplossing (of vieze hack, maar net hoe je het bekijkt). Als je de buzzer via een torretje aan de SPI clock hangt, samen met een ICtje dat via SPI kan praten en alleen een PWM signaal kan maken voor je backlight, kun je met dat IC communiceren door zijn chip select laag te maken en op >> 20kHz te clocken. Als je een geluidje wilt maken, laat je de chip select hoog (IC negeert alles), en stelt in je microcontroller de SPI periferals prescaler in op de frequentie die je wilt maken.

Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken

Hallo,

Ik merk dat dit toch wat lastig te vinden is. Ik heb zelf natuurlijk ook al veel gezocht, maar zonder fatsoenlijk resultaat. De beste oplossing waar ik mee kon komen was van spi naar analoog naar pwm. Uiteraard kan ik ook iets met een vaste clock en een counter doen, maar dat kost toch weer een aantal chippies. Eerlijk gezecht geloofde ik ook niet dat hier helemaal niets voor is.

We willen geen µC omdat dat extra software is, en bij productie is dat weer een extra stap. Ook moet die µC eventueel geupdate kunnen worden en daar moet dan ook weer wat voor verzonnen worden. Verder moet ik de SPI delen met andere chippies dus ik kan niet die lijnen gebruiken voor wat anders. Het moet over SPI omdat dat het enige beschikbare is op de print. De CPU zit namelijk ergens anders, en wordt via een connector aangesloten hierop is alleen SPI beschikbaar. Nog een uitdaging is dat ik maar een deel van de tijd de SPI kan gebruiken.

De PWM is eerlijk gezecht nog niet het grootste probleem, omdat ik een SPI naar analoog en dan een analoog naar PWM kan pakken. Het lastigste is om iets voor de buzzer te vinden.

Bestaat er niet een soort oscillatortje wat je via SPI kan instellen?

PE2BAS
Shiptronic

Overleden

Moeten en er verschillende tonen uit de buzzer komen? anders een buzzer pakken die uit zichzelf lawaai maakt?

Oeps openingspost stond al verschillende tonen ;)

Iets met een DAC ? http://ww1.microchip.com/downloads/en/DeviceDoc/21897a.pdf

[edit] dat had blurp ook al geopperd , eerst maar koffie zetten.

[Bericht gewijzigd door Shiptronic op donderdag 17 september 2015 09:04:40 (12%)

Wie de vraag stelt, zal met het antwoord moeten leren leven.

Een analoog signaal kan ook geen piep genereren, tenzij ik daar dan weer een vco achter zet. Dit zou een mogelijkheid zijn. Maar een kant en klaar ic zou makkelijker zijn.

PE2BAS

Hoezo kan een analoog signaal geen piep genereren? Wat doen luidsprekers dan? Je zult het signaal natuurlijk wel moeten variëren omdat je anders inderdaad een DC signaal hebt.

Eigenlijk zijn er al genoeg suggesties gedaan, dat is de reden dat jij (edit:shiptronic) abusievelijk in de herhaling valt. Je kunt inderdaad prima een buzzer vanuit een SPI DACje aansturen, want je kunt eender welk signaal genereren, dus ook een sinus, blokgolf, etc.

Een TL59xx is ook best een optie, en dan gebruik je gewoon 2 van de 8 (ofzo) kanalen. Die chipjes kosten dubbeltjes. En Aart deed ook nog een suggestie om het discreet op te bouwen.

If you want to succeed, double your failure rate.

Het probleem is dat ik niet genoeg tijd heb om continu de dac van waarde te veranderen. Dit gaat zelfs al niet met een digitale pin. De hoogste frequentie die ik dan kan halen (digitaal) is 2KHz en dat zit onder de spec. De periode is instelbaar in veelvouden van 500µS.

De oplossing van aart had heb ik in mn achterhooft, ik denk dat het een kansmaker is. Wat ook nog zou kunnen is een DAC met VCO daarachter. Nu alleen nog een VCO vinden die in het audio gebied te regelen is, anders kan het altijd nog discreet.

Verder is het de bedoeling dat ik de opties op een rij zet, en dan kan er later de beste keuze gemaakt worden.

Ik neem aan dat je met TL59xx onder andere de TL594 bedoeld? Want ik zie niet zo snel hoe je daarmee de frequentie kan veranderen.

Let op,
Variabele frequentie voor de buzzer.
Variabele dutycycle voor de backlight.

PE2BAS

Volgens mij kan dat zelfs met een 555. M'n parate 555-kennis is wat weggezakt, maar er is info genoeg over. Anders kan het vast ook wel met een paar opamps.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein

Op 17 september 2015 09:15:31 schreef hardbass:
Een analoog signaal kan ook geen piep genereren, tenzij ik daar dan weer een vco achter zet.

Heel goed!

Maar een kant en klaar ic zou makkelijker zijn.

Laat dat IC nou net bestaan. Sterker nog, het is dezelfde chip als waarmee je van een analoog signaal een PWM kunt maken. Kost een duppie, en is al honderd miljoen miljard keer gebruikt door evenzovele hobbyisten en professionals.

Bovendien is er ook een variant die twee exemplaren in een behuizing heeft. Doe er een 2-output SPI DAC bij en je bent met 2 chippies klaar.

Welk chippie? Wereldwijd het meest geproduceerde chippie

@blurp,

Ik snap dat dat mogelijk is, maar met kant en klaar bedoelde ik eigenlijk iets anders. Namelijk: één chip, spi in, frequentie uit.

De opties die ik tot nog toe heb,
1. SPI >> Analoog >> frequentie (bijvoorbeeld met 555).
2. Vaste clock aan counter, deze vergelijken met programmeerbare waarden en uitgang toggelen.

PE2BAS
EricP

mét CE

Je zou wat met een analoge generator kunnen. Met SPI pakt je een I/O extender die iets naar ground kortsluit en zo de frequentie beïnvloed.

Verder moet je ook ff kijken hoe druk je controller is. Botweg een I/O pin van een extender togglen kan ook als het ding niks te doen heeft. Je zegt dat je niet verder komt dan 2kHz, wat is de bottleneck?

Tenslotte vind ik dit nou juist iets voor een μC, al snap ik hun overweging wel. Iets mis met een 8-pin AVR op z'n interne oscillator? Zit alles in 1 chippie. Als SPI traag genoeg is, kun je het bitbangen. Verder zou je (als je het handig in elkaar zet) de 'master' controller de firmware er in kunnen laten schieten. Iets met na startup afvragen 'welke versie heb jij'? Komt er geen antwoord of is de versie lager dan wat je zelf hebt, dan flash je het spul.

Een µC is een optie, maar komt wel met de nodige nadelen. Vandaar dat we dat liever niet willen. Daarnaast is dit maar een klein onderdeel van het project. Ik wil hier zo min mogelijk tijd in kwijd zijn voor het programmeren.

Ik weet niet precies hoeveel informatie ik op internet mag zetten, vandaar dat ik af en toe zech dat iets geen optie is terwijl dat misschien wel een optie lijkt. De IO expander togglen is daarvan een voorbeeld.

Ik denk verder dat ik wel genoeg opties heb. Ik ga ze voorstellen en een keuze maken.

Het enige wat is zo vreemd vond is dat er geen chip is die een pwm met instelbare frequentie en dutycycle is die geprogrammeerd kan worden via SPI.

Bedankt voor het meedenken.

PE2BAS

Een SPI zonder een processor? Ik dacht meteen aan een shiftregister type 74HC595. De minimum werkspanning is 2V en maximum 6V. Wat dat betreft komt dit al in de buurt van je eisen.

Wil je een PWM IC met SPI dat werkt tussen 3.3v en 5 volt, dan heb je misschien iets aan een TLC5947

Op dit breakout-bordje wordt het toegepast

Een TLC59711 doet hetzelfde maar heeft maar 12 PWM-uitgangen ipv 24. Het PWM-signaal is 16bit terwijl dit bij TLC5947 12bit is

[Bericht gewijzigd door depeet op donderdag 17 september 2015 11:10:17 (17%)

Depeet

Op 17 september 2015 10:30:17 schreef hardbass:
Het enige wat is zo vreemd vond is dat er geen chip is die een pwm met instelbare frequentie en dutycycle is die geprogrammeerd kan worden via SPI.

Toch bestaan ze wel: fan controllers. Ik heb er ooit wel eens eentje gebruikt met 6 kanalen. Bestaat dus wel, was wel duur geloof ik.
Persoonlijk denk ik dat je een beetje te moeilijk doet over dat niet gebruiken van een micro. Je probeert een probleem te omzeilen, maar krijgt er ondertussen wel een ander, even groot probleem voor terug. En de oplossing is minder fraai.

"We cannot solve our problems with the same thinking we used when we created them" - Albert Einstein
Arco

Special Member

Ik zie ook weinig versimpeling in SPI i.p.v. PWM. Beide moet je programmeren in de aansturende logica en wijzigen indien nodig.
Enige wat ik zie is juist een nadeel: je krijgt er een extra chip bij...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Potmeter met spi interface, bv MCP41xxx ?
Ben je er nog niet helemaal maar met een paar extra R,C en T schiet het op.

Ja, en dan samen met dit: http://www.circuitsonline.net/schakelingen/40/diversen/toongeneratortj…
Ik denk dat dit wel wat wordt met de MCP41xxx. Ik zal de opties voorleggen.

Had ook al dit gevonden,
http://www.abcelectronique.com/annuaire/montages/schemas/oscillateur-c…

Of gewoon een 555.

@algemeen,
Er is alleen en SPI beschikbaar, PWM rechtstreeks uit de cpu kan dus niet. Daarnaast moet ook de frequentie instelbaar zijn dat lukt niet met de TLC5947.

PE2BAS