PWM Functions
BYTE SATURNPWMConfig(BoardInfo* bi, SATURNPWM* SATURNpwm);
This function configures a PWM for operation. It can optionally start the PWM running.
Input parameters:
Num | int | PWM number, 0-3 |
Rate | float | output frequency in Hz |
Duty | float | initial duty cycle, 0-100 |
Polarity | int | 0 = pulse high, 1 = pulse low |
OutputEnable | int | 0 = disable output, 1 = enable output on DIO pin |
Run | int | 0 = don’t start PWM, 1 = start PWM |
This function operates as follows:
Set page = 3
Write 00001000 + PWM no. to register 11 to stop selected PWM
If Rate >= 5 then use 25MHz clock source else use 1MHz clock source
Write 01100000 to register 11 for 25MHz clock; write 01101000 to register 11 for 1MHz clock
Calculate period divisor = clock source / Rate
Write divisor to registers 8, 9, 10
Write 00010000 + PWM no. to register 11 to program C0 counter (period)
Calculate duty cycle timer value = period divisor x Duty
Write duty cycle time value to registers 8, 9, 10
Write 00011000 + PWM no. to register 11 to program C1 counter (duty cycle timer)
Write 00100000 + PWM no. to register 11 for positive polarity; write 00101000 + PWM no. for negative polarity
If OutputEnable = 1 then:
Write 00111000 + PWM no. to register 11 to enable PWM output
Write 01011000 + PWM no. to register 11 to enable PWM output on Port D I/O pin
Else:
Write 01010000 + PWM no. to register 11 to disable PWM output on Port D I/O pin
Write 00110000 + PWM no. to register 11 to disable PWM output
If Run = 1 then write 01110000 + PWM no. to register 11 to start PWM running
Set page = 0
Exit
BYTE SATURNPWMStart(BoardInfo* bi, int Num);
This function starts a PWM running.
Input parameters:
Num | int | PWM number, 0-3 |
This function operates as follows:
Set page = 3
Write 01110000 + Num to register 11 to start PWM running
Set page = 0
Exit
BYTE SATURNPWMStop(BoardInfo* bi, int Num);
This function stops a PWM.
Input parameters:
Num | int | PWM Number, 0-3 |
This function operates as follows:
Set page = 3
Write 00010000 + Num to register 11 to stop selected PWM
Set page = 0
Exit
BYTE SATURNPWMCommand(BoardInfo* bi, SATURNPWM* SATURNpwm);
This function is used to modify a PWM configuration. For example, it can be used to modify the duty cycle or frequency while the PWM is running.
Input parameters:
Num | int | PWM number, 0-3 |
Command | int | 0-15 = PWM command |
CmdData | int | 0 or 1 for auxiliary PWM command data (used for certain commands) |
Divisor | int | 24-bit value for use with period and duty cycle commands |
This function operates as follows:
Set page = 3
Build command register value from Command, CmdData, and Num:
Command register value = Command x 16 + CmdData x 8 + Num
If Command = 0001 then write Data to registers 8, 9, 10
Write Command register value to register 11
Set page = 0
Exit
BYTE SATURNPWMReset(BoardInfo* bi, int Num);
This function resets a PWM. After a PWM is reset, it stops, and its settings are no longer valid. The config function must be used to configure it for further use. Resetting a PWM releases its DIO pin back to normal operation.
Input parameters:
Num | int | 0-3 = individual PWM; 0xFF = all PWMs |
This function operates as follows:
Set page = 3
If Num = 0-3 then write 01000000 + Num to register 11 to reset selected PWM
If Num = 0xFF then write 01001000 to register 11 to reset all PWMs
Exit
Last updated