使用ESP8266_RTOS_ALINK_DEMO输出PWM信号时,GPIO脉冲出现重叠现象如何解决

linbomin
Posts: 3
Joined: Sat Apr 23, 2016 10:55 am

使用ESP8266_RTOS_ALINK_DEMO输出PWM信号时,GPIO脉冲出现重叠现象如何解决

Postby linbomin » Fri May 13, 2016 4:35 pm

在使用ESP8266_RTOS_ALINK_DEMO开发阿里云项目时,需要用到3路PWM信号。使用其包内SDK的pwm.h中的函数初始化引脚和输出脉冲信号。设置的频率为500Hz。其中使用了gpio0,gpio2,gpio14作为输出引脚,信号输出到灯板电路。
在实际的测试中发现,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: 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();
……
Attachments
pwm1.jpg
pwm0.jpg

ESP_Bill
Posts: 2
Joined: Fri Oct 23, 2015 10:00 am

Re: 使用ESP8266_RTOS_ALINK_DEMO输出PWM信号时,GPIO脉冲出现重叠现象如何解决

Postby ESP_Bill » Mon May 16, 2016 1:23 pm

默认RTOS_ALINK_SDK里面,GPIO初始化有被复用的可能,所以,按照此现象,说明GPIO有被初始化为其他的功能,可以看下 key_init()这部分,当用到GPIO是,把这部分关掉,就可以了。

linbomin
Posts: 3
Joined: Sat Apr 23, 2016 10:55 am

Re: 使用ESP8266_RTOS_ALINK_DEMO输出PWM信号时,GPIO脉冲出现重叠现象如何解决

Postby linbomin » Mon May 16, 2016 3:22 pm

在RTOS_ALINK_DEMO的user_demo里,有

Code: Select all

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


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

Who is online

Users browsing this forum: No registered users and 13 guests