先来几个图:
- TM1638模块
- ESP32模块
- 达林顿驱动管(TIP41C)电路(PWM控制部分)
特别注意:续流二极管的重要性。
1、实践证明不加续流二极管12V输入电压下峰峰值达到35V之高,加上后峰峰值约13.5V。
2、加续流二极管能有效降低管子发热。
3、驱动脚可直接接普通单片机IO(输出有限,不会烧坏管子),不要随意与VCC等电源短接测试通断,如果要至少接一个限流电阻。
- DC-DC降压模块(降压到5V给ESP32用)
- 找个容器拼凑成品(忽略内部糙乱的连线)
- 功能说明
一、参数设置
模块有5个可用独立按键和一个8位数码管:
S8:上电后在显示当前频率和占空比界面下摁下S8执行设置运行;
S7:停止输出;
S6:切换设置占空比、设置频率、显示当前频率和占空比;
S1:占空比或频率增;
S2:占空比或频率减;
S1、S2用来设置频率和占空比,支持短按(增加或减小一个单位)和长按(快速增加或减小)。
二、模块参数:
1.工作电压:9~36V;
2.频率范围:100Hz~2000Hz(分辨率100Hz)、(风机、马达类调速建议25KHz左右);
3.占空比范围:0.00~1.00(0~100%)可调(分辨率0.01);
4.输出能力:输出电流可达6A(具体根据电源带载能力);
5.输出幅度:PWM幅值与供电电压相等(略高于);
- 主要代码main.py
import machine
import time
import math
import tm1638
from machine import Pin
tm = tm1638.TM1638(stb=Pin(13), clk=Pin(14), dio=Pin(27))
pin = Pin(2, mode=Pin.OUT, pull=None, value=1) #板载LED作为按键按下反馈。
pwm_pin21 = machine.PWM(machine.Pin(21))
pwm_pin21.deinit()
def main():
pwm_duty = 50 #初始占空比值%
pwm_freq = 100 #初始频率
display_count = 3 #显示3种功能界面
display_sta = 2 #初始显示界面状态
brightness_sta = 4 #初始数码管亮度
while True:
pressed = tm.keys()
if pressed ==1:
pin.value(1)
if display_sta%display_count ==0:
pwm_duty = pwm_duty + 1
if pwm_duty > 100:
pwm_duty = 100
if display_sta%display_count ==1:
pwm_freq = pwm_freq + 100
if pwm_freq > 2000:
pwm_freq = 2000
if display_sta%display_count ==2:
brightness_sta = brightness_sta + 1
if brightness_sta > 7:
brightness_sta = 7
if pressed ==2:
pin.value(1)
if display_sta%display_count ==0:
pwm_duty = pwm_duty - 1
if pwm_duty < 0:
pwm_duty = 0
if display_sta%display_count ==1:
pwm_freq = pwm_freq - 100
if pwm_freq < 100:
pwm_freq = 100
if display_sta%display_count ==2:
brightness_sta = brightness_sta - 1
if brightness_sta < 0:
brightness_sta = 0
if pressed ==4:
pin.value(1)
if pressed ==8:
pin.value(1)
if pressed ==16:
pin.value(1)
brightness_sta = brightness_sta + 1
tm.brightness(brightness_sta)
if brightness_sta == 7:
brightness_sta = 0
if pressed ==32:
pin.value(1)
display_sta = display_sta + 1
if display_sta == display_count:
display_sta = 0
if pressed ==64:
pin.value(1)
pwm_pin21.deinit()
tm.leds(0b00000000)
if pressed ==128 and display_sta%display_count ==2:
pin.value(1)
tm.brightness(brightness_sta)
pwm_pin21.init(pwm_freq, int(pwm_duty/100*1023))
tm.leds(0b11111111)
if display_sta%display_count ==0:
tm.show('%6d.%02d'%(pwm_duty/100,pwm_duty%100))
if display_sta%display_count ==1:
tm.show('%8d'%pwm_freq)
if display_sta%display_count ==2:
tm.show('%4d%2d.%02d'%(pwm_freq,pwm_duty/100,pwm_duty%100))
#tm.show('%8d'%brightness_sta)
pin.value(0)
#print(pressed)
time.sleep_ms(150)
if __name__ == '__main__':
main()
MicroPython的TM1638驱动tm1638.py在资源包里,有需要的2积分下载,没积分可留下邮箱。
下载在这里:MicroPython的TM1638模块的驱动