基于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. Windows 下QT程序发布

    方法1:利用QT自带打包工具 1.新建文件夹,把编译好的exe文件放入该文件夹 2.使用QT下的命令行 3.进入该exe所在文件,执行windeployqt xxx.exe,若出现找不到命令的情况 4 ...

  2. mysql-redis连接

    # log 数据库连接 class LogMysql(object): conn = None cursor = None def __init__(self): self.conn = pymysq ...

  3. Go语言web开发---Beego路由

    参考链接(查看更多):https://beego.me/docs/mvc/controller/router.md 基础路由 从 beego 1.2 版本开始支持了基本的 RESTful 函数式路由, ...

  4. checkbox,select,radio 选取值,设定值,回显值

    获取一组radio被选中项的值var item = $('input[@name=items][@checked]').val();获取select被选中项的文本var item = $(" ...

  5. 4D雷达成像技术

    4D雷达成像技术 当我们谈及3D捕捉时,总是先想到光学传感器.当我们讨论在第四维度(时间)讨论视觉数据时,倾向于考虑场景数据调度.这些是我们多年来关注激光雷达(LiDAR)和摄影测量,以及用户针对缓慢 ...

  6. 如何保证Qt状态机的最佳性能

    如何保证Qt状态机的最佳性能 How to ensure the best Qt state machine performance 如果您使用Qt进行应用程序开发,并且使用状态机,那么很可能您正在使 ...

  7. JSP三大指令是什么?

    JSP页面中的指令JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言等.语法规则:<%@ 指令名 属性=值 属性=值 ... %>指令可以有很多个属性,它们以键值对的形 ...

  8. python operator操作符函数

    本模块主要包括一些Python内部操作符对应的函数.这些函数主要分为几类:对象比较.逻辑比较.算术运算和序列操作.

  9. jdk,jre.jvm三者的关系

    jdk>jre>jvm jdk=jre+java的开发工具(包括java.exe,javac.exe.javadoc.exe) jre=jvm+java核心类库

  10. Binding(二):控件关联和代码提升

    上节我们讲到,使用Binding,我们可以关联后台代码中的属性,在某些情况下,我们可能需要将两个控件关联起来,借助Binding,我们也可以轻松的实现. 关联控件 设想这样一个场景,界面中有个Chec ...