关于GPIO4和GPIO5 PWM输出电压问题
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版本
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
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两个占空比数值,没有设置其他值
而现在的问题是改变其中一个通道的占空比值另外两个也跟着一起变了
Re: 关于GPIO4和GPIO5 PWM输出电压问题
Postby mengzawj » Tue Feb 02, 2016 10:03 pm
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口输出却改变了。
所有设置占空比的地方都是调用这段代码的,所以如果中间有其他地方设置占空比,串口会打印出来,现在只有两次打印,所以应该是没有其他地方改变占空比!
Re: 关于GPIO4和GPIO5 PWM输出电压问题
Postby mengzawj » Thu Feb 04, 2016 11:01 pm
另外,还是期望你们的文档能够跟上,至少关键性的数据不能有问题,否则会让我们开发人员走很多弯路,浪费大量时间,因为要证明是你们这边的问题还是要浪费大量无谓的精力的!
顺便再问一个问题,之前你们回复坛友的帖子里说:要停止PWM可以关闭FRC1中断
Code: Select all
RTC_CLR_REG_MASK(FRC1_CTRL_ADDRESS, FRC1_ENABLE_TIMER)
但我使用以后提示无法找到FRC1_ENABLE_TIMER定义,是什么原因?
Who is online
Users browsing this forum: No registered users and 3 guests
Login
Newbies Start Here
Are you new to ESP8266?
Unsure what to do?
Dunno where to start?
Start right here!
Latest SDK
Documentation
Complete listing of the official ESP8266 related documentation release by ESPRESSIF!
Must read here!
- All times are UTC+08:00
- Top
- Delete all board cookies
About Us
Espressif Systems is a fabless semiconductor company providing cutting-edge low power WiFi SoCs and wireless solutions for wireless communications and Internet of Things applications. We are the manufacturer of ESP8266EX.