HWPM tot 200kHz

SkalTura

Special Member

Hallo allemaal,

Wat ik nodig heb is het volgende:
een PWM signaal uitsturen wat langzaam op loopt van 500kH naar 200kHz met een dutycycle van 50%.
En dan weer terug van 200kHz naar 500kH.

Ik heb nu in mijn test opstelling een 16F628A met een externe OSC van 20MHz. Als ik het voorbeeld bekijk op picbasic.nl kan ik maar een pulse uitsturen tussen de 1221Hz en 32767Hz.
Dat heb ik getest, en dat klopt.

Maar als ik de datasheet bekijk, zou ik ook hoger moeten kunnen, alleen snap ik niet helemaal hoe dat werkt.
In de datasheet staat onder table 9-3 een voorbeeld dat 208.3kHz zou uit sturen ?

Maar het HPWM kan maar tot 32767. Als ik daar een hogere waarde van maak, krijg ik hele rare dingen te zien op mijn oscilloscope...

pic basic code:


Device 16F628A          
Config HS_OSC, WDT_OFF, PWRTE_ON, CP_OFF, LVP_OFF, MCLRE_OFF, BODEN_OFF
Xtal 20
All_Digital = TRUE
PortB_Pullups = TRUE

TRISB = %00000000
PORTB = %00000000
T2CON = %00000000 'scale zou 1:1 moeten zijn, dus 20Mhz/4 ? 

Symbol LED = PORTB.0
Dim A As Word

Clear
DelayMS 500 

loop:

Toggle LED

For A = 1500 To 32500
HPWM 1, 127, A 'channel 1 = PortB.3
DelayUS 50
Next A

Toggle LED

For A = 32500 To 1500 Step -1
HPWM 1, 127, A
DelayUS 50
Next A

GoTo loop

Kan iemand mij een uitleggen hoe ik dit op kan lossen (in leek taal...) ?

Bij voorbaat dank

In the beginning there was nothing, but even that exploded
Lambiek

Special Member

Ik lees hier toch iets anders.

code:


Hpwm
Syntax
Hpwm Channel, Dutycycle, Frequency
Overview
Output a pulse width modulated pulse train using the CCP modules Pwm hardware, available
on some PICmicros. The Pwm pulses produced can run continuously in the background while
the program is executing other instructions.
Operators
Channel is a constant value that specifies which hardware Pwm channel to use. Some devices
have 1, 2 or 3 Pwm channels. On devices with 2 channels, the Frequency must be the same on
both channels. It must be noted, that this is a limitation of the PICmicro™ not the compiler. The
data sheet for the particular device used shows the fixed hardware pin for each Channel. For
example, for a PIC16F877, Channel 1 is CCP1 which is pin PORTC.2. Channel 2 is CCP2
which is pin PORTC.1.
Dutycycle is a variable, constant (0-255), or expression that specifies the on/off (high/low) ratio
of the signal. It ranges from 0 to 255, where 0 is off (low all the time) and 255 is on (high) all the
time. A value of 127 gives a 50% duty cycle (square wave).
Frequency is a variable, constant (0-32767), or expression that specifies the desired frequency
of the Pwm signal. Not all frequencies are available at all oscillator settings. The highest frequency
at any oscillator speed is 32767Hz. The lowest usable Hpwm Frequency at each oscillator
setting is shown in the table below: -
Xtal frequency Lowest useable Pwm frequency
4MHz 145Hz
8MHz 489Hz
10MHz 611Hz
12MHz 733Hz
16MHz 977Hz
20MHz 1221Hz
24MHz 1465Hz
33MHz 2015Hz
40MHz 2442Hz

Dus waar je zelf al achter gekomen bent klopt, 32767Hz voor HPWM.

Waar jij naar kijkt is de "pwm mode" daarmee kun je zelf een pwm signaal maken via een timer. Dan moet je het register instellen van timer-2. En dat is dus niet de HPWM functie.

Als je haar maar goed zit, GROETEN LAMBIEK.
SkalTura

Special Member

Maar kan ik dan ook een variabele output maken van 500hZ tot 200kHz ?
Want ik snap dat stukje in de datasheet niet helemaal...

In the beginning there was nothing, but even that exploded

Wat wil je nu?
Een signaal dat oploopt van 500Hz tot 200 kHz ?
(500kH naar 200kHz is onzin, je beginwaarde is niet hoger ??)

Als de duty cycle altijd 50% is is het gewoon een blokgolf met variable frequentie. Of is de duty cycle ook variabel?

Voor hogere PWM waardes moet je de PWM module rechtstreeks aansturen. En beter een snellere pic nemen als de 16F1827 (pin compatible)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
SkalTura

Special Member

Ik moet inderdaad gewoon een blokgolf hebben (duty 50%), maar moet wel echt beginnen bij 500Hz (of nog beter gewoon bij 0Hz), en oplopen tot 200kHz.
Het is voor een duurtest van een industriële servo driver die we nu gewoon handmatig met een frequentie generator aansturen.
Dit willen we nu automatisch laten doen met een PICje.
En welke PIC ik daarvoor moet pakken maakt me niks uit.

Ik heb simpelweg nu de 16F628A gebruikt om te testen omdat ik die nog had liggen. Ik heb ook nog een 16F877A liggen als dat beter werkt...

Iemand misschien een kort voorbeeld programmatje liggen waar ik op verder kan borduren om een hogere PWM waarde te krijgen ?

In the beginning there was nothing, but even that exploded

PWM heb je niet nodig, je kunt gewoon een i/o pin direct togglen...
(met daartussen een variable wachttijd die je moet berekenen, kun je eventueel in een tabel zetten)

Arco - "Simplicity is a prerequisite for reliability" - www.arcovox.com
SkalTura

Special Member

Op 18 december 2016 14:55:46 schreef Arco:
PWM heb je niet nodig, je kunt gewoon een i/o pin direct togglen...
(met daartussen een variable wachttijd die je moet berekenen, kun je eventueel in een tabel zetten)

Had ik inderdaad ook geprobeerd, maar vanwege de extra code om een knop te detecteren, kom ik maar maximaal op een output van 100kHz (ongeveer). Of ik moet een PICje pakken waar ik bijvoorbeeld een 48MHz xtal aan kan hangen.

[Bericht gewijzigd door SkalTura op 20 december 2016 08:55:13 (36%)]

In the beginning there was nothing, but even that exploded