STM32控制电机简易教程

2023-10-31

STM32控制电机简易教程 包教包会

近期,电赛临近,来补习一下电机的使用方式,使用起来非常的方便

首先是在CUBEMX里面配置一些基本内容
在这里插入图片描述
然后是使用PWM去调速
在这里插入图片描述

其他的时钟和调试配置就不多说了。
然后就是初始化了
在这里插入图片描述
同样的,这里使用的是结构体,

typedef struct
{
   float				speed_set;
   float				speed_feedback;
   uint8_t				direction;
   pid_type_def		motor_pid;

   float				mileage_sum;
   TIM_HandleTypeDef	*encoder_tim;

   uint32_t			pwm_channel_1;
   uint32_t			pwm_channel_2;
   TIM_HandleTypeDef	*pwm_tim;

   uint16_t			motor_in1_pin;
   GPIO_TypeDef		*motor_in1_port;
} motor_control_t;
motor_control_t motor_control;

初始化


	float speed_pid_pra[] = {80,10,0};
	float enc_dis = 0;
    //外设初始化
    HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); 
    HAL_TIM_PWM_Start(&htim2 , TIM_CHANNEL_2); 
	HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL); //编码器,电机用
    //配置电机1
    motor_control.encoder_tim 	= &htim1;
    motor_control.pwm_tim			= &htim2;
    motor_control.pwm_channel_2		= TIM_CHANNEL_2;
    motor_control.pwm_channel_1		= TIM_CHANNEL_1;
    PID_Init(&motor_control.motor_pid,PID_POSITION,speed_pid_pra,1000,1000);

我使用的是RZ7899作为电机驱动,所以配置了两个PWM,如果使用L298N的话,可以自行更改,难度不大,如遇问题可以私信我。
然后就是开始闭环控制电机了

	tim_get_encoder(&motor_control);
		PID_calc(&motor_control.motor_pid,motor_control.speed_feedback,motor_control.speed_set);
		motor_set_pwm(&motor_control);
		enc_dis = 100 * motor_control.mileage_sum;//要用距离累计使用
		motor_control.mileage_sum = 0;

相关函数

void tim_get_encoder(motor_control_t *motor)
{
    static s16 encoder = 0;
    static float delta = 0;
    motor->direction = __HAL_TIM_IS_TIM_COUNTING_DOWN(motor->encoder_tim);
    encoder = htim1.Instance->CNT;
    delta = (float)encoder * PI * WHEEL_DIAM/ (CIRCLE_CNT * 4 * GEAR_RATIO);
    motor->speed_feedback = 1000 * delta / TASK_CYCLE;
    motor->mileage_sum += delta;
    __HAL_TIM_SET_COUNTER(motor->encoder_tim,0);
	motor->angel = htim1.Instance->CNT/CIRCLE_CNT *360;;
	motor->angel += motor->angel;
	if(motor->angel >= 360) motor->angel = 0;
	htim1.Instance->CNT = 0;
}
void motor_set_pwm(motor_control_t *motor)
{
    if(motor->motor_pid.out > 0)
    {
		htim2.Instance->CCR1 = my_fabs(motor->motor_pid.out);
		htim2.Instance->CCR2 = 0;
    }
    else
    {
		htim2.Instance->CCR2 = my_fabs(motor->motor_pid.out);
		htim2.Instance->CCR1 = 0;
    }
}

宏定义

#define	CIRCLE_CNT 11  	//编码器线数
#define GEAR_RATIO	50.0f	//减速比
#define WHEEL_DIAM	2.0f	//轮子直径,cm
#define TASK_CYCLE	10 		//控制周期,ms

在这里插入图片描述

作者联系方式:
QQ:488628560

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32控制电机简易教程 的相关文章

  • typescript 扩展第三方库类型,添加属性成员

    preface 之前在使用 axios 的时候 需要在 AxiosRequestConfig 中添加自定义属性 比如说 配置是否使用 loading 效果 配置 业务报错是否 自动提示 我选择了通过过 扩展接口 然后自定义了一个函数 在函数

随机推荐

  • 这才是CSDN最系统的网络安全学习路线(建议收藏)

    01 什么是网络安全 网络安全可以基于攻击和防御视角来分类 我们经常听到的 红队 渗透测试 等就是研究攻击技术 而 蓝队 安全运营 安全运维 则研究防御技术 无论网络 Web 移动 桌面 云等哪个领域 都有攻与防两面性 例如 Web 安全技
  • 华为hcip认证考试内容是什么?hcip认证有哪些方向

    HCIP不同方向考试的科目和内容不一样 有的需要考三门 如 HCNP Routing Switching 路由交换 HCNP Storage 存储 HCNP Security 安全 这三个方向 而其他的认证方向 有的只需要考一门的 少部分则
  • WordPress配置SMTP发送电子邮件(QQ邮箱)

    Wordpress通过PHP自带的mail函数实现电子邮件的发送成功率极低 现有的各类邮箱 例如QQ邮箱 新浪邮箱 163邮箱等 基本不支持PHP语言的mail函数实现的邮件发送 因此 需要配置基于SMTP协议的邮件发送环境 实现Wordp
  • 软件工程基础知识--软件项目管理

    软件项目管理是指软件生存周期中软件管理者所进行的一系列活动 其目的是在一定的时间和预设范围内有效地利用人力 资源 技术和工具 使软件系统或软件产品按原定计划和质量要求如期完成 一 软件项目管理涉及范围 二 软件项目估算 三 进度管理 四 软
  • AutoCAD 2021 for Mac(cad2021)中文版

    AutodeskAutoCAD 2021中文版目前已经正式发布了 CAD2021 全称为AutoCAD2021 这是目前Autodesk公司最新发布的一款非常好用且功能强大二维和三维CAD设计软件 同时该软件内置了专业强大的MEP MAP
  • Linux 之大数据定制篇-Shell 编程

    Linux 之大数据定制篇 Shell 编程 为什么要学习Shell 编程 Linux 运维工程师在进行服务器集群管理时 需要编写Shell 程序来进行服务器管理 对于JavaEE 和Python 程序员来说 工作的需要 你的老大会要求你编
  • 【音视频流媒体】1、图像YUV、视频编码H264、封装格式 FLV、网络协议RTSP 超详细介绍

    文章目录 一 从参数看视频图像 1 1 像素 1 2 分辨率 1 3 位深 1 4 stride 1 5 帧率 fps 帧 秒 1 6 码率 Kb s Mb s 二 颜色空间 YUV RGB YUV4 4 4 YUV4 2 2 YU16 或
  • Java jsp cannot be resolved to a type解决方法之一

    不要在一个文件夹下面建两个名字一样的包和类
  • 团队管理的四大挑战——招人篇

    团队管理的四大挑战 招人篇 招人篇 1 告诉 HR 你的团队需要什么样的人 2 尊重应聘者 3 你不需要套路 4 互补而不是趋同 5 如果犹豫 那么放弃 6 如何面试比你高阶的人 7 面试最重要的目的是识别风险 8 缺点易现 亮点难得 结语
  • 【chineseOCR】踩过的坑

    1 环境 ubuntu16 04 cuda10 tensorflow1 13 2 web py 0 40 dev0 这两个比较重要 不然会报好多奇怪的错 说明tensorflow必须1 13版本 低了不支持cudn10 高了chineseO
  • Android自定义轮播效果(优化)

    创作背景 本文是继上一篇 Android自定义轮播效果 优化问题而写 希望大家能有顺序的看 优化一 实现自动无线轮播 private class myPagerAdapter extends PagerAdapter Override pu
  • 【知识点】单片机USB转TTL模块的相关知识

    前言 USB转TTL模块的作用就是把电平转换到双方都能识别进行通信 单片机通信接口的电平逻辑和PC机通信接口的电平逻辑不同 PC机上的通信 接口有USB接口 相应电平逻辑遵照USB原则 还有DB9接口 九针口 相应电平逻辑遵照RS 232原
  • MFC的Brush与Pen的使用

    Brush的使用 void CMFCApplicationDlg OnBnClickedOk CDC pDC GetWindowDC CBrush brush1 Must initialize brush1 CreateSolidBrush
  • SonarQube代码质量检测的一点坑

    这里解决的问题有以下几点 1 之前用过sonarqube检测过代码的质量 因其自带的CFamily需要license 故在github上找到相关开源免费的C C 插件 针对特定的sonarqube版本都有相对应的sonar cxx c版本
  • 原生js实现导航条动画

    原生js实现毛毛虫导航 直接上代码
  • 计算机毕业设计选题推荐基于nodejs+Vue360学生宿舍系统

    管理员 首页 个人中心 宿舍信息管理 学生管理 宿舍报修管理 访客信息管理 水电费管理 管理员管理 交流论坛 系统管理 学生 首页 个人中心 宿舍报修管理 水电费管理 前台首页 首页 交流论坛 通知公告 个人中心 后台管理 在线沟通等 目
  • win 10 下cmd命令无法使用ssh命令

    在WIN 10 系统下出现cmd命令无法正常使用ssh命令 提示 ssh不是内部命令 出现这种情况要考虑到是环境变量出现问题 1 鼠标右键单击 我的电脑 进入 属性 2 点击 系统高级设置 选择 环境变量 3 找到 path 点击打开 4
  • Qt中使用QTextStream中文乱码的情况解决

    1 前言 今天在做一个文件编辑器 然后发现读取txt文件的时候 中文的显示乱码 然后在网上查了一些方法 没用 自己摸索了一下 找出了一个办法 2 解决办法 QTextStream in new QTextStream file in gt
  • Csharp:TinyMCE HTML Editor in .NET WindowsForms

  • STM32控制电机简易教程

    STM32控制电机简易教程 包教包会 近期 电赛临近 来补习一下电机的使用方式 使用起来非常的方便 首先是在CUBEMX里面配置一些基本内容 然后是使用PWM去调速 其他的时钟和调试配置就不多说了 然后就是初始化了 同样的 这里使用的是结构