-
Notifications
You must be signed in to change notification settings - Fork 2
/
tb6612_single_channel.py
49 lines (39 loc) · 1.8 KB
/
tb6612_single_channel.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"""
Module that can be used to control four channels via one TB6612.
Note, that only one channel per H-Bridge is allowed to be active at once.
Otherwise, both channels short (so a motor would stop immediatly).
One PWM pin controls the speed of two channels simultaniously.
Voltage can be set in percent, 0% = 0V, 100% = Vin
Usage example:
tb_channel = TB6612_1CH("P22", "P21", "voltage channel")
tb_channel.set_voltage(80) # set voltage to 80%
tb_channel.shut_off() # shut off
"""
from machine import Pin
from machine import PWM
class TB6612_1CH:
def __init__(self, p_pwm_id, p_channel_enable_id, channel_name, pwm_timer_id=0, pwm_channel_id=0):
"""
p_pwm_id -- the id of the pwm pin (e.g, connect pin to PWMA)
p_channel_enable_id -- the id of the motor enable pin (e.g., connect pin to AIN2)
channel_name -- the name of the channel used for logging
pwm_timer_id -- [0], id of the timer, must be 0 to 3
pwm_channel_id -- [0], id of the pwm channel, must be 0 to 7
"""
self.channel_name = channel_name
pwm = PWM(pwm_timer_id, frequency=5000) # use given pwm timer, with a frequency of 5KHz
self.p_pwm = pwm.channel(pwm_channel_id, pin=p_pwm_id, duty_cycle=0.0)
self.p_channel_enable = Pin(p_channel_enable_id, mode=Pin.OUT)
def set_voltage_percent(self, percent):
scale = percent / 100.0
if scale > 1.0:
scale = 1.0
elif scale < 0.0:
scale = 0.0
print("Setting {0} voltage to {1}%".format(self.channel_name, percent))
self.p_channel_enable.value(1)
self.p_pwm.duty_cycle(scale)
def shut_off(self):
print("Disabling {} output".format(self.channel_name))
self.p_channel_enable.value(0)
self.p_pwm.duty_cycle(0.0)