def _config(self, duty_cycle=0):
if self._function == 'dig':
_mode = machine.Pin.OUT if self._mode == 'out' else machine.Pin.IN
if self._pull == 'pu':
_pull = machine.Pin.PULL_UP
elif self._pull == 'pd':
_pull = machine.Pin.PULL_DOWN
else:
_pull = None
self._pin = machine.Pin(self._name, mode=_mode, pull=_pull, drive=machine.Pin.MED_POWER)
elif self._function == 'ana':
adc = machine.ADC(bits=12)
self._apin = adc.channel(pin=self._name)
else:
self._pwm = machine.PWM(machine.Pin(self.pin_num),duty=duty_cycle * 100,freq=1000)
#timer = machine.Timer(HwPin._TimerMap[self._name][0], mode=machine.Timer.PWM)
#self._pwm = timer.channel(HwPin._TimerMap[self._name][1], freq=20000, duty_cycle=(duty_cycle * 100))
python类PWM的实例源码
def __init__(self, name, pin,
ignore_case=True, on_change=None,
report_change=False,
turn_time_ms=700,
freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.angle_list=None
self.turn_time_ms=turn_time_ms
self.turn_start=None
Device.__init__(self, name, PWM(pin, freq=self.freq, duty=0),
setters={"set":self.turn}, ignore_case=ignore_case,
on_change = on_change,report_change=report_change)
self._init()
def fader_loop(self):
FADER_MAX_STEP = 5
FADER_DELAY = 0.005
fader = PWM(Pin(15))
fader_cur_val = 0
while True:
if self.fader_target_val > fader_cur_val:
step = min(FADER_MAX_STEP, self.fader_target_val - fader_cur_val)
elif self.fader_target_val < fader_cur_val:
step = -min(FADER_MAX_STEP, fader_cur_val - self.fader_target_val)
else:
step = 0
fader_cur_val += step
fader.duty(fader_cur_val)
await asyncio.sleep(FADER_DELAY)
def __init__(self, name, pinr, ping, pinb,
ignore_case=True, on_change=None,
report_change=False):
pin = (PWM(pinr),PWM(ping),PWM(pinb))
RGB_Base.__init__(self, name, pin,
ignore_case=ignore_case,
on_change = on_change,
report_change=report_change)
def __init__(self, name, pin, freq=50, duty=0,
ignore_case=True, on_change=None,
report_change=False):
self._duty = 0
self._freq = freq
Device.__init__(self, name, PWM(pin, freq=freq, duty=duty),
setters={"freq/set":self.set_freq,"duty/set":self.set_duty},
getters={"freq":self.get_freq,"duty":self.get_duty},
ignore_case=ignore_case,
on_change=on_change, report_change=report_change)
def set_duty(self, d):
try:
d=int(d)
except:
print("PWM: received invalid duty value:",d)
else:
self._duty = d
self.pin.duty(d)
def set_freq(self, f):
try:
f=int(f)
except:
print("PWM: received invalid frequency value:",f)
else:
self._freq = f
self.pin.freq(f)
def __init__(self, pin, freq=50, min_us=600, max_us=2400, angle=180):
self.min_us = min_us
self.max_us = max_us
self.us = 0
self.freq = freq
self.angle = angle
self.pwm = PWM(pin, freq=freq, duty=0)
def init_pins(self):
print('* initializing pins')
self.pin_sda = Pin(self.sda)
self.pin_scl = Pin(self.scl)
self.pin_intr = Pin(self.intr, mode=Pin.IN)
self.pin_led = PWM(Pin(self.led, mode=Pin.OUT))
def __init__(self,pinno,pos=77):
self.pinno = pinno
self.pin=machine.Pin(pinno)
self.pin.init(self.pin.OUT)
self.p = machine.PWM(self.pin,freq=50)
self.rot(pos)