关于GPIO4和GPIO5 PWM输出电压问题

mengzawj
Posts: 24
Joined: Mon Feb 01, 2016 12:06 am

关于GPIO4和GPIO5 PWM输出电压问题

Postby mengzawj » Mon Feb 01, 2016 12:15 am

你好!
我参照PWM接口文档开了三路PWM,分别是GPIO12、GPIO4、和GPIO5,其中GPIO4、和GPIO5不管是设置占空比等于0还是等于最大值22222(频率1KHz),输出电压变化很小,变化范围在2.9V~3.1V之间,但GPIO12是正常的,三路PWM的控制过程都是一致的,这是什么原因?

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: 关于GPIO4和GPIO5 PWM输出电压问题

Postby ESP_Faye » Mon Feb 01, 2016 1:51 pm

您好,

请问您的芯片是 ESP8266 还是 ESP8266EX ?

mengzawj
Posts: 24
Joined: Mon Feb 01, 2016 12:06 am

Re: 关于GPIO4和GPIO5 PWM输出电压问题

Postby mengzawj » Mon Feb 01, 2016 4:04 pm

Espressif_Faye wrote:您好,

请问您的芯片是 ESP8266 还是 ESP8266EX ?



芯片是ESP8266EX,在GPIO4、GPIO5、GPIO12上共开通三路pwm,初始化信息如下:

Code: Select all

{PERIPHS_IO_MUX_GPIO4_U, FUNC_GPIO4, 4},
{PERIPHS_IO_MUX_GPIO5_U, FUNC_GPIO5, 5},
{PERIPHS_IO_MUX_MTDI_U, FUNC_GPIO12, 12}


设置占空比部分的代码如下:

Code: Select all

   if (duty != s_pwmCurrDuty[channelNo]) {
      pwm_set_duty(duty, channelNo);
      s_pwmCurrDuty[channelNo] = pwm_get_duty(channelNo);
      pwm_start();
      DEBUG_PRT("Duty setted: channel=%d, duty=%d\r\n", channelNo, pwm_get_duty(channelNo)); //只要某个通道的占空比改变,就会通过串口输出设置的值
   }

运行中间串口输出的记录如下:
Duty setted: channel=0, duty=0
Duty setted: channel=0, duty=22222

存在的问题:
1. 运行期间,只改变了通道0的占空比(从串口打印结果来看输入参数也应该是没问题的),但结果是三路pwm跟着一起变了,接LED观察和用万用表测量电压都显示这个结果。
2.另外测试改变通道1和2,也是另外两个跟着一起变。而且这时存在另外一个现象就是:duty值是从0~22222变化,而改变通道1或者2的时候,输出电压是在2.9V~3.05V之间变化(万用表测量结果)

这是什么问题?已经两天了,没有找到原因,用串口监控打印输入SDK PWM接口函数的参数,都是没有问题的。

SDK是用的RTOS SDK版本

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: 关于GPIO4和GPIO5 PWM输出电压问题

Postby ESP_Faye » Tue Feb 02, 2016 12:08 pm

您好,

非常抱歉,RTOS 的 PWM 描述没有更新,RTOS 下 PWM 频率最大值为 1K, duty 精度级数为 1023。

您可以参考附件更新 RTOS PWM。
Attachments
RTOS_PWM_Light.zip
(2.97 KiB) Downloaded 1116 times

mengzawj
Posts: 24
Joined: Mon Feb 01, 2016 12:06 am

Re: 关于GPIO4和GPIO5 PWM输出电压问题

Postby mengzawj » Tue Feb 02, 2016 9:48 pm

Espressif_Faye wrote:您好,

非常抱歉,RTOS 的 PWM 描述没有更新,RTOS 下 PWM 频率最大值为 1K, duty 精度级数为 1023。

您可以参考附件更新 RTOS PWM。


您好,非常感谢回复!

我现在的频率设置就是1K
至于精度等级,我只设置了0和最大值22222两个占空比数值,没有设置其他值
而现在的问题是改变其中一个通道的占空比值另外两个也跟着一起变了

mengzawj
Posts: 24
Joined: Mon Feb 01, 2016 12:06 am

Re: 关于GPIO4和GPIO5 PWM输出电压问题

Postby mengzawj » Tue Feb 02, 2016 10:03 pm

这是设置duty的代码

Code: Select all

   if (duty != s_pwmCurrDuty[channelNo]) {
      int i;

      pwm_set_duty(duty, channelNo);
      s_pwmCurrDuty[channelNo] = pwm_get_duty(channelNo);
      pwm_start();
      DEBUG_PRT("Duty setted: channel=%d, duty=%d\r\n", channelNo, pwm_get_duty(channelNo));
      DEBUG_PRT("Other dutys:\r\n");
      for (i = 0; i < PWM_CHANNEL_NUM; i++) {
         if (i != channelNo) DEBUG_PRT("channel=%d, duty=%d\r\n", i, pwm_get_duty(i));
      }
   }


每次设置完duty会把本次设置以后本次设置通道和其他通道的duty值用pwm_get_duty()读取打印一遍

运行后代码中DEBUG_PRT串口输出是

Code: Select all

Duty setted: channel=1, duty=22222
Other dutys:
channel=0, duty=22222
channel=2, duty=0
Duty setted: channel=1, duty=0
Other dutys:
channel=0, duty=22222
channel=2, duty=0


从打印结果来看,在设置通道0的duty以后,其他通道的duty并没有改变,但实际硬件IO口输出却改变了。
所有设置占空比的地方都是调用这段代码的,所以如果中间有其他地方设置占空比,串口会打印出来,现在只有两次打印,所以应该是没有其他地方改变占空比!

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: 关于GPIO4和GPIO5 PWM输出电压问题

Postby ESP_Faye » Thu Feb 04, 2016 4:40 pm

您好,

请问,占空比从 22222 改为 1023 还是会有问题吗?

mengzawj
Posts: 24
Joined: Mon Feb 01, 2016 12:06 am

Re: 关于GPIO4和GPIO5 PWM输出电压问题

Postby mengzawj » Thu Feb 04, 2016 11:01 pm

您好! 按照您说的将最大占空比改成您说的1023,之前的所有异常都没了,一个数值会导致这样的问题还真是有点奇怪。总之问题得到解决,再次表示感谢!
另外,还是期望你们的文档能够跟上,至少关键性的数据不能有问题,否则会让我们开发人员走很多弯路,浪费大量时间,因为要证明是你们这边的问题还是要浪费大量无谓的精力的!

顺便再问一个问题,之前你们回复坛友的帖子里说:要停止PWM可以关闭FRC1中断

Code: Select all

RTC_CLR_REG_MASK(FRC1_CTRL_ADDRESS, FRC1_ENABLE_TIMER)

但我使用以后提示无法找到FRC1_ENABLE_TIMER定义,是什么原因?

ESP_Faye
Posts: 1646
Joined: Mon Oct 27, 2014 11:08 am

Re: 关于GPIO4和GPIO5 PWM输出电压问题

Postby ESP_Faye » Fri Feb 05, 2016 10:15 am

您好,

FRC1_CTRL_ADDRESS 的定义在 ESP8266_RTOS_SDK\include\espressif\esp8266\Timer_register.h 中。

感谢您对 ESP8266 的关注!

Who is online

Users browsing this forum: No registered users and 3 guests