当前位置:首页 > 技术学院 > 技术前线
[导读]ESP32电机PWM简单应用

手上有个42步进电机,结合ESP32开发板搞腾一下,让步进电机转起来。

电机驱动芯片在小板上,啥型号就不知道了,芯片的pin图:

ESP32上有针对电机使用的pwm,在数据手册上有说明:

下面看下具体使用。开发环境自行补脑,利用esp-idf\examples\peripherals\mcpwm 目录下有针对四种类型的电机pwm案例,这次使用的是两相四线步进电机,我在mcpwm_servo_control下进行修改的。

代码:

/* servo motor control example

This example code is in the Public Domain (or CC0 licensed, at your option.)

Unless required by applicable law or agreed to in writing, this

software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR

CONDITIONS OF ANY KIND, either express or implied.

*/

#include

#include "freertos/FreeRTOS.h"

#include "freertos/task.h"

#include "esp_attr.h"

#include "freertos/queue.h"

#include "driver/gpio.h"

#include "driver/mcpwm.h"

#include "soc/mcpwm_reg.h"

#include "soc/mcpwm_struct.h"

//You can get these value from the datasheet of servo you use, in general pulse width varies between 1000 to 2000 mocrosecond

#define SERVO_MIN_PULSEWIDTH 1000 //Minimum pulse width in microsecond

#define SERVO_MAX_PULSEWIDTH 2000 //Maximum pulse width in microsecond

#define SERVO_MAX_DEGREE 90 //Maximum angle in degree upto which servo can rotate

static void mcpwm_example_gpio_initialize()

{

printf("initializing mcpwm servo control gpio......\n");

mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, 15);

mcpwm_gpio_init(MCPWM_UNIT_1, MCPWM1A, 16);

}

/**

* @brief Configure MCPWM module

*/

void mcpwm_example_servo_control(void *arg)

{

//1. mcpwm gpio initialization

mcpwm_example_gpio_initialize();

//2. initial mcpwm configuration

printf("Configuring Initial Parameters of mcpwm......\n");

mcpwm_config_t pwm_config;

pwm_config.frequency = 100; //frequency = 50Hz, i.e. for every servo motor time period should be 20ms

pwm_config.cmpr_a = 50.0; //duty cycle of PWMxA = 0

pwm_config.cmpr_b = 50.0; //duty cycle of PWMxb = 0

pwm_config.counter_mode = MCPWM_UP_COUNTER;

pwm_config.duty_mode = MCPWM_DUTY_MODE_0;

mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &pwm_config); //Configure PWM0A & PWM0B with above settings

vTaskDelay(5000);

pwm_config.duty_mode = MCPWM_DUTY_MODE_1;

mcpwm_init(MCPWM_UNIT_1,MCPWM_TIMER_1, &pwm_config); //Configure PWM0A & PWM0B with above settings

while (1)

{

}

}

void app_main()

{

printf("intializing test signal...\n");

gpio_config_t gp;

gp.intr_type = GPIO_INTR_DISABLE;

gp.mode = GPIO_MODE_OUTPUT;

gp.pin_bit_mask = GPIO_SEL_12;

gpio_config(&gp);

gpio_set_level(GPIO_NUM_12, 1); //Set high

printf("Testing servo motor.......\n");

xTaskCreate(mcpwm_example_servo_control, "mcpwm_example_servo_control", 4096, NULL, 5, NULL);

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

学好电子技术基础知识,如电路基础、模拟电路、数字电路和微机原理。这几门课程都是弱电类专业的必修课程,学会这些后能保证你看懂单片机电路、知道电路的设计思路和工作原理;

关键字: 单片机 编程 电路设计

单片机编程需要使用专门的软件工具,这些工具能够帮助程序员编写、调试和烧录程序到单片机中。以下是一些常用的单片机编程软件:

关键字: 单片机 编程 软件工具

在这篇文章中,小编将对pwm的相关内容和情况加以介绍以帮助大家增进对它的了解程度,和小编一起来阅读以下内容吧。

关键字: pwm 脉冲宽度调制

在下述的内容中,小编将会对PWM控制器的相关消息予以报道,如果PWM控制器是您想要了解的焦点之一,不妨和小编共同阅读这篇文章哦。

关键字: pwm 控制器 pwm控制器

Java语言和C语言是两种不同的编程语言,它们在语法、特性和应用领域上有许多差别。下面将详细介绍Java语言和C语言之间的差异以及它们各自的技术特点。

关键字: Java语言 C语言 编程

嵌入式系统是现代生活中无处不在的一部分。它们包括了我们的家电、汽车、智能手机、医疗设备等等。这些系统的工作必须高效、可靠,因为它们往往控制着生活中的关键方面。而C语言作为一种广泛用于嵌入式系统开发的编程语言,其质量和稳定...

关键字: 嵌入式系统 C语言 编程

在嵌入式系统开发领域中,C语言是使用最广泛的编程语言之一。它具有高效、灵活和可移植的特点,成为嵌入式系统设计师的首选语言。本文将介绍C语言编程的基本概念、特点以及在嵌入式系统开发中的应用。

关键字: 嵌入式系统 C语言 编程

在编程和计算中,运算符优先级是解释和计算表达式的一个关键因素。本文旨在阐述运算符优先级的概念、规则及其在表达式中的应用,以帮助读者更好地理解和运用运算符优先级。

关键字: 表达式 运算符 编程

泰克科技组合软件总经理Rick Khulman:“激发孩子们——尤其是女孩们对STEM的兴趣,对我本人乃至广大工程界都至关重要。”

关键字: 编程 机器人 示波器

PIC单片机采用精简指令集,例如对于PIC16F716单片机,只有35条单字节指令。要用这么少的指令实现复杂的控制或计算,显然要在程序设计上多做文章,以下就程序设计需要注意的问题谈一些看法。 美国微芯公司开发的CMOS工...

关键字: 单片机 控制 编程
关闭
关闭