SimonLiu的ESP8266与AliOS Things 学习教程系列之五:PWM库(全网第一篇)
欢迎加入交流群:ESP8266 AliOS Things 群 号: 107723112
系列文章目录:
SimonLiu的ESP8266与AliOS Things 学习教程系列目录
很遗憾的告诉你,目前
AliOS Things
对ESP8266
的PWM
HAL
适配尚未完成(参考AliOS Things Issue #626 和 AliOS Things Issue #681),但是已经有了一个库libpwm.a, 链接编译这个库就可以实现pwm
。
关于ESP8266
的PWM
设定,详细内容请阅读 ESP8266 Technical Reference__CN。我们知道,默认ESP8266
non_os SDK
只能支持100Hz
-1000Hz
的PWM
频率,当频率为1KHz
的时候,pwm duty
范围是0-22222
,而且因为官方算法问题,即使duty
为22222
,也无法达到100% duty cycle
。但是这个AliOS的库还是和官方库有些差别,根据我的测试,当频率为1KHz的时候,duty cycle
的值0-1023
对应0%-100%
,但是应该同样无法达到真正的100%
duty cycle
。
使用AliOS ESP8266 PWM库的步骤如下:
1. 修改一些文件:
-
在文件
platform\mcu\esp8266\bsp\include\driver\gpio.h
中
添加
#include "../espressif/esp8266/pin_mux_register.h"
(aos 2.1.0中不需要添加) -
在项目文件夹下的
aos.mk
文件的$(NAME)_COMPONENTS += esptimer
这一行后面添加一行:
$(NAME)_PREBUILT_LIBRARY += ../../platform/mcu/esp8266/bsp/lib/libpwm.a
(在aos 2.1.0中需要使用相对路径)
2. 代码来了,我在代码中每隔2s更改一次pwm duty cycle
,并且输出到uart1。
占空比值范围是0-1023
@1KHz
(此时period
=1000ms
)
#include <aos/aos.h>
#include <hal/soc/uart.h>
#include "driver/uart.h"
#include <hal/soc/soc.h>
#include "../../../platform/mcu/esp8266/bsp/include/driver/gpio.h"
#define PWM_CHANNEL 1
#define PWM_0_OUT_IO_MUX PERIPHS_IO_MUX_GPIO5_U
#define PWM_0_OUT_IO_NUM 5
#define PWM_0_OUT_IO_FUNC FUNC_GPIO5
static void pwmInit(void);
static void dimming(void);
static void pwmrun(void);
static void pwmInit(void)
{
const uint32_t period = 1000;
uint32 pwm_duty_init[PWM_CHANNEL] = {1000};
uint32_t io_info[PWM_CHANNEL][3] =
{
{PWM_0_OUT_IO_MUX, PWM_0_OUT_IO_FUNC, PWM_0_OUT_IO_NUM},
};
pwm_init(period, pwm_duty_init, PWM_CHANNEL, io_info);
}
static void dimming(void)
{
static uint32_t duty = 0;
static bool dimFlag = true;
if ( dimFlag )
{
duty +=64;
if (duty>=1000)
dimFlag = false;
}
else
{
duty -= 64;
if (duty<=0)
dimFlag = true;
}
printf("Duty = %d \r\n",duty);
pwm_set_duty(duty,0);
pwm_start();
}
static void pwmrun(void)
{
dimming();
aos_post_delayed_action(2000, pwmrun, NULL);
}
int application_start(int argc, char *argv[])
{
uart_config_t uartConfig;
uartConfig.baud_rate = 9600;
uart_dev_t uart;
uart.port = 1;
uart.config = uartConfig;
hal_uart_init(&uart);
pwmInit();
aos_post_delayed_action(1000, pwmrun, NULL);
aos_loop_run();
return 0;
}
一图胜千言:
相关文章
- Android教程-DelphiXE Android的所有权限按照分类总结说明
- 【学习总结】Git学习-参考廖雪峰老师教程-期末总结
- 【学习总结】Git学习-参考廖雪峰老师教程六-分支管理
- Python视觉深度学习系列教程 第三卷 第6章 在ImageNet上训练GoogLeNet
- Python视觉深度学习系列教程 第三卷 第16章 从头开始训练SSD
- Python视觉深度学习系列教程 第三卷 第3章 准备ImageNet(2)
- Python视觉深度学习系列教程 第三卷 第2章 什么是ImageNet?
- Python视觉深度学习系列教程 第三卷 第12章 年龄和性别预测
- Python视觉深度学习系列教程 第三卷 第9章 Kaggle竞赛:情绪识别
- Python视觉深度学习系列教程 第三卷 第10章 校正图像方向
- Python视觉深度学习系列教程 第三卷 第4章 在ImageNet上训练AlexNet
- Python视觉深度学习系列教程 第二卷 第2章 网络作为特征提取器
- Python视觉深度学习系列教程 第一卷 第16章 学习率调节器
- Python视觉深度学习系列教程 第一卷 第19章 神经网络架构可视化
- Python视觉深度学习系列教程 第一卷 第5章 图像分类数据集
- Python视觉深度学习系列教程 第一卷 - 第8章 参数化学习
- ABAP 标准培训教程 BC400 学习笔记之一:ABAP 服务器的架构和一个典型的 ABAP 程序结构介绍
- DL之IDE:深度学习环境安装之NVIDIA驱动程序安装图文教程(根据Anaconda的CUDA版本去安装对应匹配的NVIDIA)之详细攻略
- Scala学习教程笔记三之函数式编程、集合操作、模式匹配、类型参数、隐式转换、Actor、
- Kubernetes集群方方面面实战教程学习线路指南
- Deep Learning 深度学习 学习教程网站集锦
- Python基础(适合初学-完整教程-学习时间一周左右-节约您的时间)
- 深度学习matlab图像分类,手把手教程系列