在实际的测试中发现,ESP8266输出的PWM信号不稳定,具体情况为在一定周期内会出现同一引脚输出双重波形(波形重叠,通过示波器缩小波形可以发现,放大后看波形正常),这样的信号脉冲接入到灯板发现LED灯闪烁(使用其他芯片测试输出PWM没问题、不会闪烁),进而会导致我们的LED驱动灯板烧坏。
问题:
1.使用ESP8266_RTOS_ALINK_DEMO的时候如何设置可以使PWM输出更稳定(像其他单片机一样)的PWM信号?
2.ESP8266的SDK中PWM实现的方式是怎样的(硬件支持还是软件模拟的),为什么会出现双重波形且重叠的现象(单一的gpio)?
图片分别是gpio0输出97%占空比的波形图(缩小、放大)
[img] [/img]
[img] [/img]
核心代码如下所示(代码都是根据SDK提供的函数编写)
Code: Select all
……
//PWM Init params
#define PWM_0_OUT_IO_MUX PERIPHS_IO_MUX_GPIO0_U
#define PWM_0_OUT_IO_NUM 0
#define PWM_0_OUT_IO_FUNC FUNC_GPIO0
#define PWM_1_OUT_IO_MUX PERIPHS_IO_MUX_GPIO2_U
#define PWM_1_OUT_IO_NUM 2
#define PWM_1_OUT_IO_FUNC FUNC_GPIO2
#define PWM_3_OUT_IO_MUX PERIPHS_IO_MUX_MTMS_U
#define PWM_3_OUT_IO_NUM 14
#define PWM_3_OUT_IO_FUNC FUNC_GPIO14
#define PWM_CHANNEL 3
#define PWM_DUTY_COUNT 1040
uint32 io_info[PWM_CHANNEL][3] =
{
{PWM_0_OUT_IO_MUX, PWM_0_OUT_IO_FUNC, PWM_0_OUT_IO_NUM},
{PWM_1_OUT_IO_MUX, PWM_1_OUT_IO_FUNC, PWM_1_OUT_IO_NUM},
{PWM_2_OUT_IO_MUX, PWM_2_OUT_IO_FUNC, PWM_2_OUT_IO_NUM},
{PWM_3_OUT_IO_MUX, PWM_3_OUT_IO_FUNC, PWM_3_OUT_IO_NUM},
{PWM_4_OUT_IO_MUX, PWM_4_OUT_IO_FUNC, PWM_4_OUT_IO_NUM}
};
uint32 duty[PWM_CHANNEL];
memset(duty, 0, sizeof(duty));
pwm_init(2000, duty , PWM_CHANNEL, io_info);
pwm_set_duty(((100 * PWM_DUTY_COUNT) / 100), 0);
pwm_set_duty(((50 * PWM_DUTY_COUNT) / 100), 1);
pwm_set_duty(((100 * PWM_DUTY_COUNT) / 100), 2);
pwm_start();
……