diff --git a/components/micropython/include/mpconfigboard.h b/components/micropython/include/mpconfigboard.h
index 01b6e1c4e172dd76f860264f7e89662490d01511..6850b8f38ec7caafa447af9bd75226a6ab4fc77d 100644
--- a/components/micropython/include/mpconfigboard.h
+++ b/components/micropython/include/mpconfigboard.h
@@ -3,6 +3,7 @@
 
 #define MICROPY_ENABLE_FINALISER (1)
 #define MICROPY_PY_MACHINE_DAC (0)
+#define MICROPY_PY_MACHINE_PWM (1)
 #define MICROPY_HW_I2C0_SCL (9)
 #define MICROPY_HW_I2C0_SDA (8)
 
diff --git a/components/micropython/vendor/extmod/extmod.cmake b/components/micropython/vendor/extmod/extmod.cmake
index 88b12841d67a0014a694a2ee57288c61212488d5..29ea2d9519eff2e583cd0b0dc318255ee83da68e 100644
--- a/components/micropython/vendor/extmod/extmod.cmake
+++ b/components/micropython/vendor/extmod/extmod.cmake
@@ -9,6 +9,7 @@ set(MICROPY_SOURCE_EXTMOD
     ${MICROPY_EXTMOD_DIR}/machine_bitstream.c
     ${MICROPY_EXTMOD_DIR}/machine_mem.c
     ${MICROPY_EXTMOD_DIR}/machine_signal.c
+    ${MICROPY_EXTMOD_DIR}/machine_pwm.c
     ${MICROPY_EXTMOD_DIR}/modbluetooth.c
     ${MICROPY_EXTMOD_DIR}/modframebuf.c
     ${MICROPY_EXTMOD_DIR}/modlwip.c
diff --git a/components/micropython/vendor/extmod/machine_pwm.c b/components/micropython/vendor/extmod/machine_pwm.c
index 220d34d7da5826952ca9751ae664917f721ee660..8a633b37939d4128b04a4446c76d7220fc98772e 100644
--- a/components/micropython/vendor/extmod/machine_pwm.c
+++ b/components/micropython/vendor/extmod/machine_pwm.c
@@ -34,13 +34,11 @@
 #include MICROPY_PY_MACHINE_PWM_INCLUDEFILE
 #endif
 
-#if MICROPY_PY_MACHINE_PWM_INIT
 STATIC mp_obj_t machine_pwm_init(size_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
     mp_machine_pwm_init_helper(args[0], n_args - 1, args + 1, kw_args);
     return mp_const_none;
 }
 STATIC MP_DEFINE_CONST_FUN_OBJ_KW(machine_pwm_init_obj, 1, machine_pwm_init);
-#endif
 
 // PWM.deinit()
 STATIC mp_obj_t machine_pwm_deinit(mp_obj_t self_in) {
@@ -82,8 +80,6 @@ STATIC mp_obj_t machine_pwm_duty(size_t n_args, const mp_obj_t *args) {
 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_pwm_duty_obj, 1, 2, machine_pwm_duty);
 #endif
 
-#if MICROPY_PY_MACHINE_PWM_DUTY_U16_NS
-
 // PWM.duty_u16([value])
 STATIC mp_obj_t machine_pwm_duty_u16(size_t n_args, const mp_obj_t *args) {
     machine_pwm_obj_t *self = MP_OBJ_TO_PTR(args[0]);
@@ -114,21 +110,15 @@ STATIC mp_obj_t machine_pwm_duty_ns(size_t n_args, const mp_obj_t *args) {
 }
 STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(machine_pwm_duty_ns_obj, 1, 2, machine_pwm_duty_ns);
 
-#endif
-
 STATIC const mp_rom_map_elem_t machine_pwm_locals_dict_table[] = {
-    #if MICROPY_PY_MACHINE_PWM_INIT
     { MP_ROM_QSTR(MP_QSTR_init), MP_ROM_PTR(&machine_pwm_init_obj) },
-    #endif
     { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&machine_pwm_deinit_obj) },
     { MP_ROM_QSTR(MP_QSTR_freq), MP_ROM_PTR(&machine_pwm_freq_obj) },
     #if MICROPY_PY_MACHINE_PWM_DUTY
     { MP_ROM_QSTR(MP_QSTR_duty), MP_ROM_PTR(&machine_pwm_duty_obj) },
     #endif
-    #if MICROPY_PY_MACHINE_PWM_DUTY_U16_NS
     { MP_ROM_QSTR(MP_QSTR_duty_u16), MP_ROM_PTR(&machine_pwm_duty_u16_obj) },
     { MP_ROM_QSTR(MP_QSTR_duty_ns), MP_ROM_PTR(&machine_pwm_duty_ns_obj) },
-    #endif
 };
 STATIC MP_DEFINE_CONST_DICT(machine_pwm_locals_dict, machine_pwm_locals_dict_table);
 
diff --git a/components/micropython/vendor/ports/esp32/modmachine.c b/components/micropython/vendor/ports/esp32/modmachine.c
index 6779a6bcfc3fb29a24880bf6016d3f65ceb0bf55..3f4315ffe10dd34774ed82a17dcb98fd33f4e7b1 100644
--- a/components/micropython/vendor/ports/esp32/modmachine.c
+++ b/components/micropython/vendor/ports/esp32/modmachine.c
@@ -294,6 +294,7 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
     #if MICROPY_PY_MACHINE_DAC
     { MP_ROM_QSTR(MP_QSTR_DAC), MP_ROM_PTR(&machine_dac_type) },
     #endif
+    { MP_ROM_QSTR(MP_QSTR_PWM), MP_ROM_PTR(&machine_pwm_type) },
     { MP_ROM_QSTR(MP_QSTR_RTC), MP_ROM_PTR(&machine_rtc_type) },
     { MP_ROM_QSTR(MP_QSTR_UART), MP_ROM_PTR(&machine_uart_type) },