开源硬件
Arduino
客制化键盘
Arduino_寄存器
二进制运算
寄存器+二进制运算
LCD-逐字显示
密码依次录入
等待输入
WiFi Duck(无线击键注入攻击平台)
WiFi Duc-New
WiFi Duc-Old
蓝牙无线烧录
ESP8266
ESP-NOW
ESP8266看门狗
ESP8266-休眠模式
ESP01/01S使用说明
WIFI_SD
ESP8266-Web服务器
ESP8266-WIFI自动认证
ESP32
ESP32 ADC2
ESP32_PWM
ESP32_CAM
ESP32 小坦克
ESP32_限电保护
Arduino IDE 添加 ESP32
ESP32-iPhone BLE攻击
STM32
STM32F103-虚拟键盘
STC
STC8G1K08(A)
树莓派-触摸屏
Arduino IDE
Arduino_自制库
Arduino库收集
常见排序算法
冒泡排序
选择排序
插入排序
希尔排序
归并排序
快速排序
计数排序
预处理
millis(运行时长)
Arduino IDE 2.X-修改数据位置
Mixly
Mixly安装教程
Mixly 模块介绍
Mixly-添加ESP32CAM支持
Mixly-库定制工具
模块
4G模块连接物联网
GPS模块
语音模块(JQ8900)
安信可VB语音识别
28BYJ-48(5V步进)
FreeRTOS
FreeRTOS-多任务基础
FreeRTOS-任务共享全局变量
FreeRTOS-多核多任务
FreeRTOS-MUTEX
FreeRTOS-常规程序改多任务
FreeRTOS-定时器
LaserGRBL(激光雕刻)
LaserGRBL-GRBL
GRBL-CNC Shield v4
MicroPython
Scratch
Wokwi(在线仿真)
html转无符号数组
待做开源项目
本文档使用 MrDoc 发布
-
+
首页
ESP32_PWM
ESP32 PWM 和 Arduino 的还是有一些区别的 无法直接使用 `analogWrite` 来执行,以下一些常见的`PWM`方式 [esp32_gitee](https://gitee.com/jnzqt/arduino-esp32/tree/master) ## analogWrite ``` // 使用 analogWrite 前需要加载这个库 #include <analogWrite.h> //然后就可以使用这个正常使用了 analogWrite(pin, freq) ``` > 在 `ESP32_CAM` 中使用发现,只要执行了 `analogWrite` ,CAM 图像就进行报错 >  ## ledc `LEDC`总共有16个通道(0~15),分辨率最高16(0~16,8为0~255,10为0~1023,16为0~65535),频率由分辨率决定 `LEDC`16个通道(0~15),分为高低速两组,高速通道(0~7)由80MHz时钟驱动,低速通道(8~15)由 1MHz 时钟驱动 ``` ** LEDC 通道=> 组 / 通道 / 计时器映射 ** ledc: 0 => Group: 0, Channel: 0, Timer: 0 ** ledc: 1 => Group: 0, Channel: 1, Timer: 0 ** ledc: 2 => Group: 0, Channel: 2, Timer: 1 ** ledc: 3 => Group: 0, Channel: 3, Timer: 1 ** ledc: 4 => Group: 0, Channel: 4, Timer: 2 ** ledc: 5 => Group: 0, Channel: 5, Timer: 2 ** ledc: 6 => Group: 0, Channel: 6, Timer: 3 ** ledc: 7 => Group: 0, Channel: 7, Timer: 3 ** ledc: 8 => Group: 1, Channel: 0, Timer: 0 ** ledc: 9 => Group: 1, Channel: 1, Timer: 0 ** ledc: 10 => Group: 1, Channel: 2, Timer: 1 ** ledc: 11 => Group: 1, Channel: 3, Timer: 1 ** ledc: 12 => Group: 1, Channel: 4, Timer: 2 ** ledc: 13 => Group: 1, Channel: 5, Timer: 2 ** ledc: 14 => Group: 1, Channel: 6, Timer: 3 ** ledc: 15 => Group: 1, Channel: 7, Timer: 3 ``` 常见的一些函数 ``` // 使用前加载 esp32-hal-ledc 库 #include <esp32-hal-ledc.h> ledcSetup(uint8_t channel, double freq, uint8_t resolution_bits); //设置通道(0~15)的频率(取决于分辨率)和分辨率(0~16,常见8为0~255,10为0~1023) ledcWrite(uint8_t channel, uint32_t duty); //设置通道占空比,常规使用 ledcWriteTone(uint8_t channel, double freq); //设置通道频率 ledcWriteNote(uint8_t channel, note_t note, uint8_t octave); //输出需要的音阶 ledcRead(uint8_t channel); //读取某个通道的占空比 ledcReadFreq(uint8_t channel); //读取通道频率 ledcAttachPin(uint8_t pin, uint8_t channel); //将通道与引脚绑定 ledcDetachPin(uint8_t pin); //解绑引脚与通道的关系 ``` 引脚使用`PWM`前需要设置`通道的频率和分辨率`并且`将通道与引脚绑定`之后才可正常使用 > 可在`ESP32-CAM`中使用,15引脚无效,原因未知 ### 驱动舵机 常见舵机为(0~180°),0.5ms~2.5ms,周期为20ms ``` ledcAttachPin(2, 8); //绑定2号引脚到 低速 通道(8~15通道) ledcSetup(8, 50, 10); //设置通道频率50(20ms周期),分辨率10(0~1023) //计算舵机PWM int servo_pwm(int ds){ const float servo_min = 25.6; //MIN 0.5ms //0.5ms/(20ms/1024[分辨率]) const float servo_max = 128; //MAX 2.5ms //2.5ms/(20ms/1024[分辨率]) return (int)(((servo_max - servo_min)/180)*ds+servo_min); //(MAX-MIN)/180*度数+MIN } //执行 ledcWrite(8,servo_pwm(90)); //在通道8上设置度数90 ``` ## SigmaDelta `SigmaDelta`总共有8个通道(0~7),占空比0~255,频率1220-312500 和 `LEDC` 佷相似,通道少一些 ``` //SigmaDelta 功能引用该库 #include <esp32-hal-sigmadelta.h> sigmaDeltaSetup(uint8_t channel, uint32_t freq); //设置通道频率 sigmaDeltaWrite(uint8_t channel, uint8_t duty); //设置通道占空比(0~255),实际使用 sigmaDeltaRead(uint8_t channel); //读取通道 sigmaDeltaAttachPin(uint8_t pin, uint8_t channel); //引脚连接通道 sigmaDeltaDetachPin(uint8_t pin); //释放引脚 ``` ## DAC 注意,`DAC` 只支持 `25、26` 这两个引脚  ``` //DAC 功能引用该库 #include <esp32-hal-dac.h> dacWrite(uint8_t pin, uint8_t value); //只支持25/26引脚,输出0~255 ``` 
造物者W
2022年1月11日 19:02
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码