日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 技術(shù)學(xué)院 > 技術(shù)前線
[導(dǎo)讀]ESP32電機(jī)PWM簡單應(yīng)用

手上有個42步進(jìn)電機(jī),結(jié)合ESP32開發(fā)板搞騰一下,讓步進(jìn)電機(jī)轉(zhuǎn)起來。

電機(jī)驅(qū)動芯片在小板上,啥型號就不知道了,芯片的pin圖:

ESP32上有針對電機(jī)使用的pwm,在數(shù)據(jù)手冊上有說明:

下面看下具體使用。開發(fā)環(huán)境自行補(bǔ)腦,利用esp-idf\examples\peripherals\mcpwm 目錄下有針對四種類型的電機(jī)pwm案例,這次使用的是兩相四線步進(jìn)電機(jī),我在mcpwm_servo_control下進(jìn)行修改的。

代碼:

/* 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);

}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉