TLC5940 swtiching arduino >2kHz

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • RandomFace
  • Registratie: April 2014
  • Laatst online: 12-11-2024
Beste Tweakers,

momenteel ben ik bezig met een projectje, en omdat ik veel pwm uitgangen nodig heb, gebruik ik een tlc5940. Nu draait de lib van arduino op een standaard klok van 1khz, wat nogal laag is om nmos te switchen. Graag zou ik deze richting de 20khz zien. Wat ik gevonden heb in de config file, hoe je deze kan vergroten, enkel gaat dit maar tot 2khz (anders word de gsclk<1 en dat werkt niet meer).

weet iemand hoe je grotere frequenties kan bereiken?

Acties:
  • 0 Henk 'm!

  • Springuin
  • Registratie: Juli 2002
  • Laatst online: 08-07 19:01
Je zult iets meer informatie moeten geven. Welke library gebruik je precies? Welke config file? Welke instelling probeer je te veranderen? Wat voor type Arduino gebruik je? Welke klok wil je precies sneller hebben (SCLK?, GSCLK?)?
Heb je al gekeken waar die klok vandaan komt? Hoe wordt de klok ingesteld? Welke registers worden ingesteld? Wat zegt de Atmel datasheet van die chip over die registers?

Acties:
  • 0 Henk 'm!

  • Sissors
  • Registratie: Mei 2005
  • Niet online
Overigens eerst andere vraag: Waarom zou 1kHz laag zijn om NMOS te switchen? Als je hem gewoon voor LEDs ofzo gebruikt is er niks mis mee.

Acties:
  • 0 Henk 'm!

  • RandomFace
  • Registratie: April 2014
  • Laatst online: 12-11-2024
de library die ik gebruik is de standaard arduino library voor de TLC5940: http://playground.arduino.cc/learning/TLC5940

in de library zit een file: tlc_config.h

daarin staat hoe TLC_GSCLK_PERIOD en TLC_PWM_ PERIOD defined zijn.

/** Determines how long each PWM period should be, in clocks.
\f$\displaystyle f_{PWM} = \frac{f_{osc}}{2 * TLC\_PWM\_PERIOD} Hz \f$
\f$\displaystyle TLC\_PWM\_PERIOD = \frac{f_{osc}}{2 * f_{PWM}} \f$
This is related to TLC_GSCLK_PERIOD:
\f$\displaystyle TLC\_PWM\_PERIOD =
\frac{(TLC\_GSCLK\_PERIOD + 1) * 4096}{2} \f$
\note The default of 8192 means the PWM frequency is 976.5625Hz */
/*fosc = 16000000
knowing that I need 20kHz = f_pwm
TCL_PMW_PERIOD= f_osc/(2*f_pwm) = 16000000/(2*20000) = 400
*/
#define TLC_PWM_PERIOD 4096

/** Determines how long each period GSCLK is.
This is related to TLC_PWM_PERIOD:
\f$\displaystyle TLC\_GSCLK\_PERIOD =
\frac{2 * TLC\_PWM\_PERIOD}{4096} - 1 \f$
\note Default is 3 */
/*
TLC_GSCLK_PERIOD = (2*TLC_PWM_PERIOD/4096)-1 = -103/128 <---- Waar ik op vastloop
*/

#define TLC_GSCLK_PERIOD 1

zelf gebruik ik de TLC omdat ik 16 buck converters met 1 controller wil aansturen, en daarin heb je switching mosfets met 10W die gaan zingen, liever heb je dan iets boven de 20kHz

Acties:
  • 0 Henk 'm!

  • Hans1990
  • Registratie: Maart 2004
  • Niet online
De TLC5940 heeft een main clk (GSCLK) en blank (PWM period) pin. De GSCLK is de klok voor de PWM timers in de TLC. De BLANK is de periode klok; die de timers reset.

Al houd je GSCLK hetzelfde en verhoog je BLANK naar 20kHz , verslechter je de PWM resolutie met 20x.
Misschien dat je de GSCLK pin nog kan versnellen, waardoor je hem op '1' moet instellen. Als ik de formule zo lees, gaan ze er vanuit dat je altijd 12-bit resolutie wilt halen.. maar dat is niet mogelijk op 20kHz en de Arduino/TLC5940 chip. Vandaar je waarschijnlijk negatieve waarden uit de formule krijgt. Je hebt dan immers 2^12 x 20E3 = 81.92MHz GSCLK nodig. Dat kan de Arduino niet genereren en de TLC5940 niet aan (max 30MHz).
Met dus 16MHz GSCLK en 20kHz blank pin, haal je 16000/20 = 800 steps/period; ~9,6 bit resolutie.

Heb je toch 12-bit nodig, zou ik aanraden met STM32F3**'s of dsPIC33FJ**GS's aan de slag te gaan. Deze hebben met wat truukjes een interne "GSCLK" van 900MHz of meer, waarmee je dus met gemak 12-bit PWM (of beter) op 100kHz kan maken, en de luxe hebt van fault inputs, deadtime, phase adjust, interrupts etc.

[ Voor 3% gewijzigd door Hans1990 op 14-05-2015 10:59 ]


Acties:
  • 0 Henk 'm!

  • RandomFace
  • Registratie: April 2014
  • Laatst online: 12-11-2024
Hans1990 schreef op donderdag 14 mei 2015 @ 10:58:
De TLC5940 heeft een main clk (GSCLK) en blank (PWM period) pin. De GSCLK is de klok voor de PWM timers in de TLC. De BLANK is de periode klok; die de timers reset.

Al houd je GSCLK hetzelfde en verhoog je BLANK naar 20kHz , verslechter je de PWM resolutie met 20x.
Misschien dat je de GSCLK pin nog kan versnellen, waardoor je hem op '1' moet instellen. Als ik de formule zo lees, gaan ze er vanuit dat je altijd 12-bit resolutie wilt halen.. maar dat is niet mogelijk op 20kHz en de Arduino/TLC5940 chip. Vandaar je waarschijnlijk negatieve waarden uit de formule krijgt. Je hebt dan immers 2^12 x 20E3 = 81.92MHz GSCLK nodig. Dat kan de Arduino niet genereren en de TLC5940 niet aan (max 30MHz).
Met dus 16MHz GSCLK en 20kHz blank pin, haal je 16000/20 = 800 steps/period; ~9,6 bit resolutie.

Heb je toch 12-bit nodig, zou ik aanraden met STM32F3**'s of dsPIC33FJ**GS's aan de slag te gaan. Deze hebben met wat truukjes een interne "GSCLK" van 900MHz of meer, waarmee je dus met gemak 12-bit PWM (of beter) op 100kHz kan maken, en de luxe hebt van fault inputs, deadtime, phase adjust, interrupts etc.
ik heb al geprobeerd de GSCLK op 1 te houden en dan de pwm naar 512, 1024 te zetten, maar dit werkt allemaal neit :'( wat doe ik hierin dan fout of wat zie ik over het hoofd?

EDIT: omdat ik dan nogsteeds uitga van een 12bit resolutie natuurlijk, domme ik :/ maarja dan moet ik dus nu gaan aanpassen wat de nieuwe resolutie is en die doorvoeren in de code, zodat ik niet meer uit ga van 4096 als max

[ Voor 7% gewijzigd door RandomFace op 14-05-2015 12:10 ]

Pagina: 1