esp32外设使用-MCPWM故障处理模块使用

  • 概述
  • 关键函数说明
  • 示例代码

概述

每个MCPWM 外设都连接来自GPIO 矩阵的3 个故障信号(FAULT0,FAULT1 和FAULT2)。这些信号用于指示
外部故障状况,并且可由故障检测模块预处理后生成故障事件。
在检测到故障时强制PWMxA/B输出固定信号,并能支持一次性跳闸模式(OST)和周期跳闸模式(CBC):

  • OST模式时: 故障解除时仍保持PWMxA/B输出保护状态
  • CBC模式时: 故障解除时恢复PWMxA/B故障前输出状态

关键函数说明

//初始化故障处理模块
ESP_ERROR_CHECK(mcpwm_fault_init(MCPWM_UNIT_0,        // MCPWM_UNIT_0 / MCPWM_UNIT_1MCPWM_LOW_LEVEL_TGR, // MCPWM_HIGH_LEVEL_TGR / MCPWM_LOW_LEVEL_TGRMCPWM_SELECT_F0));   // MCPWM_SELECT_F0 / MCPWM_SELECT_F1 / MCPWM_SELECT_F2//设置单次跳闸模式(OST)
ESP_ERROR_CHECK(mcpwm_fault_set_oneshot_mode(MCPWM_UNIT_0,             // MCPWM_UNIT_0 / MCPWM_UNIT_1MCPWM_TIMER_0,            // MCPWM_TIMER_0 / MCPWM_TIMER_1 / MCPWM_TIMER_2MCPWM_SELECT_F0,          // MCPWM_SELECT_F0 / MCPWM_SELECT_F1 / MCPWM_SELECT_F2MCPWM_ACTION_FORCE_LOW,   // PWMxA动作: MCPWM_ACTION_NO_CHANGE / MCPWM_ACTION_FORCE_LOW/HIGH / MCPWM_ACTION_TOGGLEMCPWM_ACTION_FORCE_LOW)); // PWMxB动作: MCPWM_ACTION_NO_CHANGE / MCPWM_ACTION_FORCE_LOW/HIGH / MCPWM_ACTION_TOGGLE
//设置周期跳闸模式(CBC)
ESP_ERROR_CHECK(mcpwm_fault_set_cyc_mode(MCPWM_UNIT_0,             // MCPWM_UNIT_0 / MCPWM_UNIT_1MCPWM_TIMER_0,            // MCPWM_TIMER_0 / MCPWM_TIMER_1 / MCPWM_TIMER_2MCPWM_SELECT_F0,          // MCPWM_SELECT_F0 / MCPWM_SELECT_F1 / MCPWM_SELECT_F2MCPWM_ACTION_FORCE_LOW,   // PWMxA动作: MCPWM_ACTION_NO_CHANGE / MCPWM_ACTION_FORCE_LOW/HIGH / MCPWM_ACTION_TOGGLEMCPWM_ACTION_FORCE_LOW)); // PWMxB动作: MCPWM_ACTION_NO_CHANGE / MCPWM_ACTION_FORCE_LOW/HIGH / MCPWM_ACTION_TOGGLE

示例代码

该程序采用外部IO4模拟故障信号,硬件上连接IO4和IO5输入故障信号,PWM启动后每5s输出一次50ms的故障信号。

#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"#include "string.h"
#include "driver/mcpwm.h"
#include "driver/gpio.h"
#include "soc/mcpwm_struct.h"
#define io_num(x) xvoid app_main(void)
{ESP_ERROR_CHECK(gpio_reset_pin(io_num(4)));ESP_ERROR_CHECK(gpio_set_direction(io_num(4), GPIO_MODE_OUTPUT));ESP_ERROR_CHECK(gpio_set_level(io_num(4), 1));// mcepwm IO配置mcpwm_pin_config_t mcpwm_pin = {.mcpwm0a_out_num = io_num(14), //实际IO号.mcpwm0b_out_num = io_num(15),.mcpwm1a_out_num = -1,.mcpwm1b_out_num = -1,.mcpwm2a_out_num = -1,.mcpwm2b_out_num = -1,.mcpwm_cap0_in_num = -1,.mcpwm_cap1_in_num = -1,.mcpwm_cap2_in_num = -1,.mcpwm_sync0_in_num = -1, // Not used.mcpwm_sync1_in_num = -1, // Not used.mcpwm_sync2_in_num = -1, // Not used.mcpwm_fault0_in_num = io_num(5),.mcpwm_fault1_in_num = -1, // Not used.mcpwm_fault2_in_num = -1  // Not used};ESP_ERROR_CHECK(mcpwm_set_pin(MCPWM_UNIT_0, &mcpwm_pin));//设置PWM定时器分辨率ESP_ERROR_CHECK(mcpwm_group_set_resolution(MCPWM_UNIT_0, 10000000));               // MCPWM号(0/1)、分辨率(默认:10,000,000)ESP_ERROR_CHECK(mcpwm_timer_set_resolution(MCPWM_UNIT_0, MCPWM_TIMER_0, 1000000)); //定时器号(0/1/2)、分辨率(默认:1,000,000)mcpwm_config_t mcpwm_conf = {.frequency = 100, //输出pwm波形频率 Hz.cmpr_a = 30,     //操作器A输出占空比, i.e duty_a = 62.3.cmpr_b = 50,     //操作器B输出占空比, i.e duty_a = 42.8/********************************************duty_mode (占空比类型):* MCPWM_DUTY_MODE_0: 高有效,例如:%20占空比 == 高电平20%*  MCPWM_DUTY_MODE_1: 低有效,例如:%20占空比 == 低电平20%*  MCPWM_HAL_GENERATOR_MODE_FORCE_LOW: 输出强制为低*  MCPWM_HAL_GENERATOR_MODE_FORCE_HIGH:输出强制为高*  MCPWM_DUTY_MODE_MAX:Num of duty cycle modes********************************************/.duty_mode = MCPWM_DUTY_MODE_0,/***************************************** counter_mode (计数模式):*     MCPWM_FREEZE_COUNTER: 计数器冻结*    MCPWM_UP_COUNTER:  计数器递增,左对齐,频率不变*   MCPWM_DOWN_COUNTER: 计数器递减,右对齐,频率不变*  MCPWM_UP_DOWN_COUNTER:计数器递增递减,中间对齐,频率减半********************************************/.counter_mode = MCPWM_UP_COUNTER};ESP_ERROR_CHECK(mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &mcpwm_conf)); //启动定时器0ESP_ERROR_CHECK(mcpwm_fault_init(MCPWM_UNIT_0,        // MCPWM_UNIT_0 / MCPWM_UNIT_1MCPWM_LOW_LEVEL_TGR, // MCPWM_HIGH_LEVEL_TGR / MCPWM_LOW_LEVEL_TGRMCPWM_SELECT_F0));   // MCPWM_SELECT_F0 / MCPWM_SELECT_F1 / MCPWM_SELECT_F2//ESP_ERROR_CHECK(mcpwm_fault_set_oneshot_mode(//    MCPWM_UNIT_0,             // MCPWM_UNIT_0 / MCPWM_UNIT_1//    MCPWM_TIMER_0,            // MCPWM_TIMER_0 / MCPWM_TIMER_1 / MCPWM_TIMER_2//    MCPWM_SELECT_F0,          // MCPWM_SELECT_F0 / MCPWM_SELECT_F1 / MCPWM_SELECT_F2//    MCPWM_ACTION_FORCE_LOW,   // PWMxA动作: MCPWM_ACTION_NO_CHANGE / MCPWM_ACTION_FORCE_LOW/HIGH / MCPWM_ACTION_TOGGLE//    MCPWM_ACTION_FORCE_LOW)); // PWMxB动作: MCPWM_ACTION_NO_CHANGE / MCPWM_ACTION_FORCE_LOW/HIGH / MCPWM_ACTION_TOGGLEESP_ERROR_CHECK(mcpwm_fault_set_cyc_mode(MCPWM_UNIT_0,             // MCPWM_UNIT_0 / MCPWM_UNIT_1MCPWM_TIMER_0,            // MCPWM_TIMER_0 / MCPWM_TIMER_1 / MCPWM_TIMER_2MCPWM_SELECT_F0,          // MCPWM_SELECT_F0 / MCPWM_SELECT_F1 / MCPWM_SELECT_F2MCPWM_ACTION_FORCE_LOW,   // PWMxA动作: MCPWM_ACTION_NO_CHANGE / MCPWM_ACTION_FORCE_LOW/HIGH / MCPWM_ACTION_TOGGLEMCPWM_ACTION_FORCE_LOW)); // PWMxB动作: MCPWM_ACTION_NO_CHANGE / MCPWM_ACTION_FORCE_LOW/HIGH / MCPWM_ACTION_TOGGLE// 5s后IO模拟故障while (1){vTaskDelay(pdMS_TO_TICKS(5000));ESP_ERROR_CHECK(gpio_set_level(io_num(4), 0));vTaskDelay(pdMS_TO_TICKS(50));ESP_ERROR_CHECK(gpio_set_level(io_num(4), 1));}
}

效果:
一次性跳闸模式(OST):
示波器1和2通道分别为PWM0A和B输出,3通道为同步信号输出。

周期跳闸模式(CBC):

esp32外设使用-MCPWM故障处理模块使用相关推荐

  1. esp32外设使用-MCPWM基本使用方法

    esp32外设使用-MCPWM基本使用方法 概述 主要用途 PWM基本输出配置 关键函数 动态控制函数 示例程序 死区时间设置 原理说明 函数说明 示例程序 定时器同步 关键函数说明 示例程序 参考 ...

  2. 几款常用esp32外设差异

    几款常用esp32外设差异 官网器件信息比较链接 从淘宝上看到这几款esp32卖的比较多,对比了下他们差异,感觉基本都差不多,主要差异点在ROM大小,SRAM,蓝牙,处理器核心,其中ESP32-S2的 ...

  3. (64)SPI外设驱动用户发送模块(三)(第13天)

    (64)SPI外设驱动用户发送模块(三)(第13天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)SPI外设驱动用户发送模块(三)(第13天) 5)技术交流 6 ...

  4. (58)UART外设驱动用户发送模块(三)(第12天)

    (58)UART外设驱动用户发送模块(三)(第12天) 1 文章目录 1)文章目录 2)FPGA初级课程介绍 3)FPGA初级课程架构 4)UART外设驱动用户发送模块(三)(第12天) 5)技术交流 ...

  5. ESP32开发之旅——RC522模块的使用

    ESP32开发之旅--RC522模块的使用 前言 在本文中,您将学会如何使用ESP32连接RFID模块RC522,本文提供了简单的示例供学习参考. 需要注意的是,本文中的ESP32是使用Micro P ...

  6. arduino使用oled代码_【教程】在ESP32上使用E32433T LoRa模块

    [点击上方「蓝字」关注我们,一起成为技术颜控!] 正文共:2020字11图 预计阅读时间:6分钟 (为方便阅读,已标注重点) ESP32简介 ESP-WROOM-32(ESP32)是乐鑫最新发布的新一 ...

  7. ESP32设备驱动-TEA5767收音机模块驱动

    TEA5767收音机模块驱动 1.TEA5767介绍 TEA5767HN 是一款用于低压应用的单芯片电子调谐 FM 立体声收音机,具有完全集成的中频 (IF) 选择性和解调功能,频率范围从76-108 ...

  8. 物联网外设学习笔记-语音识别模块

    LDV7 语音识别模块使用 1.初次使用测试步骤 (1)连接 USB 下载器,接上 GND.RXD.TXD. 5V,注意 RXD/TXD 必须交叉连接,才能进行一 收一发通信,在 PC 机上打开串口调 ...

  9. 物联网外设学习笔记-蓝牙模块

    DX- BT05 4.0 蓝牙模块 概述 DX-BT05 4.0 蓝牙模块用 美国 TI 公司 CC2541 芯片, 配置 256Kb空间,遵循V4.0 BLE 蓝牙规范. 支持 AT 指令 ,用户可 ...

最新文章

  1. 【Python面试】 说说Python可变与不可变数据类型?
  2. 对 /sbin/nologin 的理解
  3. NOSQL系列-Redis精简版安装与Ruby测试
  4. 字符串以及内存操作相关函数
  5. 查看Apache的并发请求数及其TCP连接状态
  6. 微软超融合私有云测试08-SCVMM部署之SQL Server与前置条件安装
  7. 去了家新公司,技术总监不让用 IntelliJ IDEA!!想离职了。。
  8. Android轩辕剑之ActionBar之四
  9. 网络信息安全实验 — 网络攻击技术实验(Kali系统,John、lc7、arpspoof、ettercap、SQL注入...)
  10. 【oracle】获取近30天日期、近5年、近6个月
  11. KmdKit4D 0.01正式版发布了(0.02版已放出)
  12. PHP 中openssl_pkey_get_private函数获取私钥返回 FALSE 的问题
  13. Flink Joining
  14. #Python3中检测字符串是否只由大写英文字母或者数字组成issupper()
  15. 解题报告 (十三) 尺取法
  16. 动漫免费在线观看,实时更新,资源全
  17. 拼多多风波不断,上市是危机还是契机?_创成汇
  18. mysql导入数据 导出数据系列语句
  19. 07_Ensemble Learning and Random Forests_Bagging_Out-of-Bag_Random Forests_Extra-Trees极端随机树_Boosting
  20. 郑州天梵是否为正统古法易筋洗髓经传承者能否达到养生的目的呢?

热门文章

  1. js 根据汉字首字母排序(省份排序) 或 根据英文首字母排序——za排序 az排序
  2. SpringBoot yaml语法详解
  3. 决策树算法-理清每个细节-附R+Python代码
  4. 视频转图片-人脸识别-合成视频
  5. messaging_Google Cloud Messaging:可折叠消息
  6. android 按钮修改边框颜色代码,Android CheckBox修改大小、边框颜色,以及自定义CheckBox;...
  7. 网址铺吧网址导航源码程序最大特点本系统改变了以往网址站一成不变的模式
  8. python编程无师自通pdf_Python编程无师自通:专业程序员的养成 PDF下载
  9. TMS320F2812介绍
  10. bin文件数据处理,读取一个文件数据写入另一个文件中