ESP32基于Micropython制作的PWM驱动器

先来几个图:

  • TM1638模块

ESP32基于Micropython制作的PWM驱动器_第1张图片

  • ESP32模块

ESP32基于Micropython制作的PWM驱动器_第2张图片

  • 达林顿驱动管(TIP41C)电路(PWM控制部分)

特别注意:续流二极管的重要性。

1、实践证明不加续流二极管12V输入电压下峰峰值达到35V之高,加上后峰峰值约13.5V。

2、加续流二极管能有效降低管子发热。

3、驱动脚可直接接普通单片机IO(输出有限,不会烧坏管子),不要随意与VCC等电源短接测试通断,如果要至少接一个限流电阻。

ESP32基于Micropython制作的PWM驱动器_第3张图片

  • DC-DC降压模块(降压到5V给ESP32用)

ESP32基于Micropython制作的PWM驱动器_第4张图片

 

  • 找个容器拼凑成品(忽略内部糙乱的连线)

ESP32基于Micropython制作的PWM驱动器_第5张图片

  • 功能说明

一、参数设置

模块有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模块的驱动

 

 

 

你可能感兴趣的:(软硬件调试,ESP32,MicroPython,TM1638,PWM,达林顿驱动)