基于ESP-IDF4.1

 1 /*
2 * 刷直流电动机控制示例,代码通过L298电机芯片测试
3 */
4
5 #include <stdio.h>
6
7 #include "freertos/FreeRTOS.h"
8 #include "freertos/task.h"
9 #include "esp_attr.h"
10
11 #include "driver/mcpwm.h"
12 #include "soc/mcpwm_periph.h"
13
14 #define GPIO_PWM0A_OUT 15 //设置 GPIO 15 作为 PWM0A
15 #define GPIO_PWM0B_OUT 16 //设置 GPIO 16 作为 PWM0B
16
17 static void mcpwm_example_gpio_initialize(void)
18 {
19 printf("initializing mcpwm gpio...\n");
20 mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, GPIO_PWM0A_OUT);
21 mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, GPIO_PWM0B_OUT);
22 }
23
24 /**
25 * @brief 电机向前移动
26 */
27 static void brushed_motor_forward(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num , float duty_cycle)
28 {
29 mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B);
30 mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_A, duty_cycle);
31 mcpwm_set_duty_type(mcpwm_num, timer_num, MCPWM_OPR_A, MCPWM_DUTY_MODE_0);
32 }
33
34 /**
35 * @brief 电机向后移动
36 */
37 static void brushed_motor_backward(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num , float duty_cycle)
38 {
39 mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_A);
40 mcpwm_set_duty(mcpwm_num, timer_num, MCPWM_OPR_B, duty_cycle);
41 mcpwm_set_duty_type(mcpwm_num, timer_num, MCPWM_OPR_B, MCPWM_DUTY_MODE_0);
42 }
43
44 /**
45 * @brief 电机停止
46 */
47 static void brushed_motor_stop(mcpwm_unit_t mcpwm_num, mcpwm_timer_t timer_num)
48 {
49 mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_A);
50 mcpwm_set_signal_low(mcpwm_num, timer_num, MCPWM_OPR_B);
51 }
52
53 /**
54 * @brief 为有刷直流电机配置MCPWM
55 */
56 static void mcpwm_example_brushed_motor_control(void *arg)
57 {
58 //1. mcpwm gpio 初始化
59 mcpwm_example_gpio_initialize();
60
61 //2. 初始化 mcpwm 配置
62 printf("Configuring Initial Parameters of mcpwm...\n");
63 mcpwm_config_t pwm_config;
64 pwm_config.frequency = 1000; //频率 = 500Hz,
65 pwm_config.cmpr_a = 0; // PWMxA占空比 = 0
66 pwm_config.cmpr_b = 0; // PWMxb占空比 = 0
67 pwm_config.counter_mode = MCPWM_UP_COUNTER;
68 pwm_config.duty_mode = MCPWM_DUTY_MODE_0;
69 mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config);
70 while (1) {
71 brushed_motor_forward(MCPWM_UNIT_0, MCPWM_TIMER_0, 50.0);
72 vTaskDelay(2000 / portTICK_RATE_MS);
73 brushed_motor_backward(MCPWM_UNIT_0, MCPWM_TIMER_0, 30.0);
74 vTaskDelay(2000 / portTICK_RATE_MS);
75 brushed_motor_stop(MCPWM_UNIT_0, MCPWM_TIMER_0);
76 vTaskDelay(2000 / portTICK_RATE_MS);
77 }
78 }
79
80 void app_main(void)
81 {
82 printf("Testing brushed motor...\n");
83 xTaskCreate(mcpwm_example_brushed_motor_control, "mcpwm_examlpe_brushed_motor_control", 4096, NULL, 5, NULL);
84 }

原文:https://gitee.com/EspressifSystems/esp-idf/tree/master/examples/peripherals/mcpwm/mcpwm_brushed_dc_control

ESP32-使用有刷直流电机笔记的更多相关文章

  1. 《Data Structures and Algorithm Analysis in C》学习与刷题笔记

    <Data Structures and Algorithm Analysis in C>学习与刷题笔记 为什么要学习DSAAC? 某个月黑风高的夜晚,下班的我走在黯淡无光.冷清无人的冲之 ...

  2. Python 刷题笔记

    Python 刷题笔记 本文记录了我在使用python刷题的时候遇到的知识点. 目录 Python 刷题笔记 选择.填空题 基本输入输出 sys.stdin 与input 运行脚本时传入参数 Pyth ...

  3. PTA刷题笔记

    PTA刷题记录 仓库地址: https://github.com/Haorical/Code/tree/master/PTA/GPLT 两周之内刷完GPLT L2和L3的题,持续更新,包括AK代码,坑 ...

  4. PAT-甲级刷题笔记和总结

     本帖主要记录一些自己在刷题过程中的一些笔记,包括: 1.常用的函数 2.STL中常用方法 3.常见错误 4.其他常用方法 5.刷题过程中的常见算法:https://www.cnblogs.com/M ...

  5. 《剑指offer》刷题笔记

    简介 此笔记为我在 leetcode 上的<剑指offer>专题刷题时的笔记整理. 在刷题时我尝试了 leetcode 上热门题解中的多种方法,这些不同方法的实现都列在了笔记中. leet ...

  6. Sony Z1 flashtool 刷机笔记

    第一次硬刷,(相较于recovery的卡刷)差点变成无限重启..记录一些关键步骤: 1 unlock bootloader http://developer.sonymobile.com/unlock ...

  7. Ye.云狐J2刷机笔记 | 完美切换内部存储卡和SD卡的改法.vold.fstab

    ================================================================================Ye.完美切换内部存储卡和SD卡成功.v ...

  8. 18.9.10 LeetCode刷题笔记

    本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...

  9. K2路由器刷机笔记

    临近双11,K2路由器广告加的越来越放肆,实在太难忍受就刷了个固件.这里把路由器刷机的一般流程记录一下. 一.开启telnet 刷固件,首先要取得路由器系统的控制权,这样我们才能自由的进行操作. 方法 ...

随机推荐

  1. MarkDown笔记一

    目录 目录 字体 标题 下划线标题 #号标题 加重与斜体 高亮 删除线 上标与下标 脚注 转义字符 分割线 段落 空行 结尾两个空格 区域引用 每行> 每段> 可嵌套 目录 把文档中所有标 ...

  2. .NET平台系列12 .NET未来之开源.NET Core

    系列目录     [已更新最新开发文章,点击查看详细] 微软于2014年11月推出了.NET Core 1.0..NET Core的目标是从我们在过去12年中对.NET Framework的构建.交付 ...

  3. SystemVerilog MCDF检测器

    Monitor:检测DUT的边界信号或者内部信号,并且经过打包整理传送给其他的验证平台的组件(例如checker). 一:大的monitor方案 二:分布式的 两个monitor的比较: 比较下来,选 ...

  4. 『言善信』Fiddler工具 — 6、Fiddler界面布局详解【命令行和状态栏】

    目录 1.命令行 2.状态栏 1.命令行 命令行在Fiddler的左下方的黑色窗口,也叫QuickExec,可以调用 Fiddler的内置命令. 这一系列内置的函数用于筛选和操作会话列表中的sessi ...

  5. python_selenium 之logging模块入门及调用实战

    一.logging模块是什么? 是Python内置的标准模块,主要用于输出运行日志 二.日志的作用 日志是代码的必要组成部分 记录日志能显示程序当前运行状态 出问题后定位当时问题 三.python日志 ...

  6. switch分支语句

    语句句式 Calendar c = Calendar.getInstance(); //获得一周的某天 int i = c.get(Calendar.DAY_OF_WEEK); switch (i) ...

  7. 八、Nginx的TCP/UDP调度器

    nginx 1.9后才可以调用其他应用 1.9前只能调用web 部署nginx服务器----配置----起服务.验证 部署nginx服务器: [root@proxy ~]# yum –y instal ...

  8. 【C++】随机数,rand()与srand()函数

    rand()函数 rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdlib.h, 其值为2147483647. 测试代码: #include<cstdl ...

  9. 【NX二次开发】镜像对象

    使用uf5946获取镜像矩阵注意:uf5946镜像这个函数,只能用#define UF_plane_type=46这种类型的数据作为镜像面,不能用#define UF_datum_plane_type ...

  10. 20204107 孙嘉临《PYTHON程序设计》计算器设计实验二报告

    课程:<python程序设计> 班级:2041 姓名:孙嘉临 学号:20204107 实验教师:王志强 实验日期:2021年4月12日 必修/选修:公选课 ##一.实验内容 设计并完成一个 ...