pythonscriptingsignalsmicrocontrollerpwm

How to simulate a pwm semnal python script


I need to Simulate Saw-Tooth voltage (4.5 - 0.5V) a total of 30 times . And I don't know how to do it only with python scripts without special library or something. I have this function, but how I do it to work?

def PWM(t, frequency, dutyCycle):

    #period = 1 / frequency
    #pt = tt / period
    pt = tt * frequency # "period" time, where 1 unit is 1 period on the "real" time stamp.
    tc = pt - trunc(pt) # cycle time within 1 period. 0..1.
    return 1 if tc < dutyCycle else 0 # where 1 means on and 0 means off

Solution

  • Not sure if this is what you want, but here you can see a function that given a time t returns the amplitude of a saw-tooth signal with a certain frequency and dutyCycle.

    The signal is normalized, you can shift the values if you need

    import numpy as np
    import matplotlib.pyplot as plt
    
    def SawTooth(t, frequency, dutyCycle):
        period = 1 / frequency
        t_on = period * dutyCycle
        t_off = period - t_on
        
        # the modulo will return the remainder of time inside the current period
        remainder = t % period
        if remainder > t_on:
            return 0
        else:
            return remainder / t_on
    
    frequency = 50
    dutyCycle = 0.5
    samplingFreq = 10000
    timeDuration = 0.1
    # Generate 100ms of data with a sampling freq of 10k
    t_ms = np.linspace(0, time_duration*1000, samplingFreq*timeDuration)
    y = []
    for t in t_ms:
        y.append(SawTooth(t/1000, frequency, dutyCycle))
    
    plt.plot(t_ms,y)
    plt.show()
    

    enter image description here