目录
硬件
1、ESP32-CAM模块 + USB串口 2、360°舵机 3、180°舵机
接线方式
把电机按照产品描述连接5V跟GND,信号线按照设定PWM的输出GPIO口接,如我,GPIO14为180°电机控制信号,GPIO15为360°电机控制信号。
电机线描述如下图
修改网络摄像头demo程序
1、打开VSCode,打开demo程序
2、在文件夹camera_web_server中的main文件夹中创建电机控制的.c文件,在main文件夹的include中创建电机控制的.h文件 3、打开app_mcpwm.h文件,添加电机控制函数声明。目前需要用到的是以下几个函数
#ifndef _APP_MCPWM_H_
#define _APP_MCPWM_H_
#ifdef __cplusplus
extern "C" {
#endif
void app_mcpwm_main();
void motor_forward(float duty);
void motor_step();
void motor_back();
void motor_stop();
#ifdef __cplusplus
}
#endif
#endif
4、打开app_mcpwm.c文件,开始对电机控制函数进行实现。
#include <stdio.h>
#include "string.h"
#include "app_mcpwm.h"
#include "driver/mcpwm.h"
void moto_init(){
mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0A, 14);
mcpwm_gpio_init(MCPWM_UNIT_0, MCPWM0B, 15);
mcpwm_config_t mcpwmConfig = {
.frequency = 50,
.cmpr_a = 2.5,
.cmpr_b = 7.5,
.counter_mode = MCPWM_UP_COUNTER,
.duty_mode = MCPWM_DUTY_MODE_0,
};
mcpwm_init(MCPWM_UNIT_0, MCPWM_TIMER_0, &mcpwmConfig);
}
void app_mcpwm_main(){
moto_init();
}
void motor_forward(float duty){
mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_A, duty);
}
void motor_step(){
mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, 5);
}
void motor_back(){
mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, 10);
}
void motor_stop(){
mcpwm_set_duty(MCPWM_UNIT_0, MCPWM_TIMER_0, MCPWM_OPR_B, 7.5);
}
5、在app_main.c文件中加入电机控制函数的调用
以上这几部就已经可以写好电机控制的函数了。但是我们的目标是由HTML网页控制电机转动。接着往下。
修改HTML文件
以VScode打开main目录下的WWW目录下的index_ov2640.html
1、我们的目标是添加两个控制电机的控件,可以参考AE Level,在该控件下添加连个一样的布局。 2、打开index_ov2640.html,,找到AE Level的那一行,把真个布局拷贝复制修改如下 这里可以看到在新增控制180和360中,
<input type="range" id="motor2_place" min="-2" max="2" value="0" class="default-action">
注意其中的id=xxx,这个id最中会传到模块中。
修改最大最小值,保存 我们可以看到HTML已经改好了
修改模块的app_httpd.c文件
找到函数
static esp_err_t cmd_handler(httpd_req_t *req)
该函数是HTML操作类请求的入口 最后面添加 此部分为处理关键字名子为motor1_place和motor2_place的函数部分: 1、motor1_place处理中先根据角度转换成对应占空比,在设置到模块中。 2、motor1_place处理中则直接根据1:正转;-1:反转;0:停止来修改不同的占空比。
修改完成后,进行编译烧录,即可完成。
最后说一下占空比怎么计算。
180°电机控制
180°电机的官方使用说明如下 0°~180°对应的脉冲宽度为0.5ms—2.5ms
以频率为50HZ来算,那么周期T T = 1 / 频率 = 1 / 50 =0.02s = 20ms 那么0°~180°对应占空比是0.5/20 — 2.5/20 也就是2.5 — 12.5
设置x为要转的角度,设占空比为y,那么可以得到以下公式:
y = x * (12.5 - 2.5)/180 +2.5
故对于180°电机,初始化占空比为2.5,设置某角度则根据上述公式计算出占空比。
360°电机控制
360°电机的官方使用说明如下
360°电机需要控制的是方向跟速度。 1ms — 1.5ms :正转,且速度越靠近1.5ms越慢 1.5 : 停止 1.5ms — 2ms : 反转,且速度越靠近1.5ms越慢
那么我们设定速度为固定最大,即:
1ms:正转 1.5 : 停止 2ms : 反转
以频率为50HZ来算,那么周期T T = 1 / 频率 = 1 / 50 =0.02s = 20ms 那么
正转对应占空比:5% 停止对应占空比:7.5% 反转对应占空比:10%
|