ESP8266 Developer Zone The Official ESP8266 Forum 2016-05-16T15:22:38+08:00 https://bbs.espressif.com:443/feed.php?f=7&t=2169 2016-05-16T15:22:38+08:00 2016-05-16T15:22:38+08:00 https://bbs.espressif.com:443/viewtopic.php?t=2169&p=6919#p6919 <![CDATA[Re: 使用ESP8266_RTOS_ALINK_DEMO输出PWM信号时,GPIO脉冲出现重叠现象如何解决]]>

Code:

void ICACHE_FLASH_ATTR init_key()
{
   led_gpio_init();
   reset_keyinit();
}


调用的gpio口分别是gpio15、gpio12和gpio13 gpio4,这些和我使用的三个io口都不是被复用的(并没冲突),同时测试过关闭其他IO初始化,出来的PWM还是原来那样,并没有改变。

Statistics: Posted by linbomin — Mon May 16, 2016 3:22 pm


]]>
2016-05-16T13:23:06+08:00 2016-05-16T13:23:06+08:00 https://bbs.espressif.com:443/viewtopic.php?t=2169&p=6912#p6912 <![CDATA[Re: 使用ESP8266_RTOS_ALINK_DEMO输出PWM信号时,GPIO脉冲出现重叠现象如何解决]]> Statistics: Posted by ESP_Bill — Mon May 16, 2016 1:23 pm


]]>
2016-05-13T16:35:24+08:00 2016-05-13T16:35:24+08:00 https://bbs.espressif.com:443/viewtopic.php?t=2169&p=6882#p6882 <![CDATA[使用ESP8266_RTOS_ALINK_DEMO输出PWM信号时,GPIO脉冲出现重叠现象如何解决]]> 在实际的测试中发现,ESP8266输出的PWM信号不稳定,具体情况为在一定周期内会出现同一引脚输出双重波形(波形重叠,通过示波器缩小波形可以发现,放大后看波形正常),这样的信号脉冲接入到灯板发现LED灯闪烁(使用其他芯片测试输出PWM没问题、不会闪烁),进而会导致我们的LED驱动灯板烧坏。

问题:
1.使用ESP8266_RTOS_ALINK_DEMO的时候如何设置可以使PWM输出更稳定(像其他单片机一样)的PWM信号?
2.ESP8266的SDK中PWM实现的方式是怎样的(硬件支持还是软件模拟的),为什么会出现双重波形且重叠的现象(单一的gpio)?

图片分别是gpio0输出97%占空比的波形图(缩小、放大)

[img]
pwm0.jpg
[/img]
[img]
pwm0.jpg
[/img]

核心代码如下所示(代码都是根据SDK提供的函数编写)

Code:

……
//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();
……
pwm1.jpg

pwm0.jpg

Statistics: Posted by linbomin — Fri May 13, 2016 4:35 pm


]]>