首页 > 解决方案 > PWM/PPM 输出丢失一些边沿

问题描述

我正在使用 ESP8266(NODEMCU 3.0 或其他版本)制作四轴飞行器。我已经将 ardu pro mini 连接到 RC 接收器,所以我正在从中读取 PPM 值。Pro mini 通过 tx 向 ESP8266 发送数据。ESP 使用 115200 波特率的软件串行读取它。我也通过 I2C 与 MPU9255 (Waveshire) 通信。

我的问题是我无法完全控制我的无刷电机。当我使用 arduino 而不是 ESP8266 时,伺服库是最好和可靠的。但是ESP的伺服库不同,因为它不是AVR,所以会出现问题。首先伺服库不想在大多数频率上工作。我的意思是默认值为 50Hz (20000uS),在这种状态下,电机的 ESC 确实启动了,但不幸的是,当变化又快又短 (1250-> 1370 -> 1250) 时,它确实错过了这种变化,就像没有发生一样……这使我的 D 值在 PID 控制器中无用...有时在 100Hz 频率上一切正常,但有时却不行...当我开始使用模拟写入时,只有 500Hz 工作正常,其余频率不想武装 ESC。

PS。我正在为 PPM/PWM 引脚使用 3.3V 到 5V 转换器,所以我确信信号对于 ESC 来说是好的。PS2。不幸的是,我没有任何示波器。

标签: arduinomicrocontrolleresp8266arduino-esp8266pwm

解决方案


模块上的ESP82266是一个射频收发器集成电路,可以处理 WiFi 通信,既可以配置为微控制器的从属设备,例如各种 Arduino 板上的微控制器,也可以通过板载 Tensilica L106 32 作为独立芯片位处理器通过外部 SPI 闪存进行编程。如果用作从设备,例如 Arduino 和 ESP82266 之间的通信可以使用不同的协议完成,例如 SPI / SDIO 或 I2C / UART 接口。在互联网上搜索全面的 Tensilica L106 用户指南似乎不是一件容易的事,而且看起来好像有些人已经找不到了。如果您想为您的四轴飞行器添加 Wi-Fi 功能,我建议的解决方案是让 Arduino 控制伺服系统、电机等,并通过 SPI 将消息传递给您的 ESP82266 模块。如果这不是您要寻找的答案,请尝试更清楚地了解它,也许找人为您做英文翻译。

但是,如果这是您关心的问题,并且您想将 ESP82266 模块用作独立解决方案,请链接其内置处理器数据表和可能需要调试的四轴飞行器代码的相关部分。


推荐阅读