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); //编码器,电机用//配置电机1motor_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

STM32控制电机简易教程相关推荐

  1. stm32 控制电机 舵机Futaba S3010

    电机 频率计算公式 频率设置的相关参数: (1)TIM_TimeBaseStructure.TIM_Period ====== ARR ------>决定周期 (2)TIM_TimeBaseSt ...

  2. 项目分享| DIY STM32控制的电子负载(硬件方案分享,软件代码下载)

    今天分享的项目是基于STM32控制的简易电子负载,具有恒流.恒压.恒电阻以及恒功率功能,最大输入电压为100V,热设计功耗为100W,最大负载电流为12A. 感兴趣的同学可以关注下.感谢! 系统结构图 ...

  3. STM32机器人控制开发教程No.3 使用遥控控制电机/舵机(基于HAL库)

    01 前言 本教程使用的机器人控制板拥有4个带编码器的电机接口,4个舵机接口,串口通信接口.SWD下载调试接口.航模遥控接口.USB5V输出接口以及方便与树莓派直接连接的40PIN接口等,板载资源丰富 ...

  4. STM32循迹小车系列教程(一)—— 使用PWM控制电机

    本章节主要讲解直流减速电机控制原理,电机驱动电路,以及如何使用PWM控制直流减速电机 前言 1.软件准备:STM32CubeMx.Keil5_ MDK 2.硬件准备:STM32F103C8T6核心板. ...

  5. stm32电机控制定时器1_STM32通过PWM控制电机速度

    做STM32智能小车的实验中会用到定时器PWM输出,来改变直流电机的转速.分享本文了解如何通过PWM实现对电机速度的控制. PWM控制电机速度的基本原理 PWM(Pulse Width Modulat ...

  6. GCKontrol与嵌入式系统:STM32实现电机控制案例

    摘要:系统设计与仿真软件GCKontrol能够对控制系统进行建模.仿真与测试.软件基于模型自动生成的代码能够满足嵌入式系统要求.GCKontrol的模型属于"应用层软件",能够与& ...

  7. STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机

    STM32 HAL库PID控制电机 第二章 TB6612FNG芯片驱动GB37-520电机(HAL库) 1 电路图 2 TB6612简介 TB6612是双驱动,可同时驱动两个电机 STBY:接单片机的 ...

  8. STM32 PWM控制电机寄存器配置

    脉冲宽度调制PWM,实现对电机速度的控制. 1.PWM输出原理 假定定时器工作在向上计数 PWM模式,CNT为当前计数值,CCRx为捕获/比较寄存器CCRx的值(预装载值).当 CNT<CCRx ...

  9. STM32控制编码器电机实现【速度闭环控制】与【位置闭环控制】

    一.硬件及接线说明 本实验所基于的硬件分别为: STM32F103C8T6 主控板 TB6612FNG 直流电机驱动模块 6线正交编码器电机(带AB相) 其中硬件接线为: PWMA -- PA8 AI ...

最新文章

  1. 【Linux】延时函数sleep、usleep、nanosleep、select、pselect的比较
  2. @EnableAsync @Async 的详解
  3. HashMap底层实现和原理
  4. 哔哩哔哩_哔哩哔哩,危!!!
  5. 5926. 买票需要的时间
  6. css文件插入背景音乐,h5页面添加背景音乐
  7. php 仿电脑桌面系统,EonerCMS——做一个仿桌面系统的CMS(十-附最新源码)
  8. 免费持久的天气预报web service
  9. 文件跟随_不同类型的文件柜价格是否一样呢
  10. 为什么要用 SpringMVC 的 SessionStatus
  11. 用python写论文_[文章] 编写高质量 Python 的 6 个技巧
  12. python基础--面向对象之继承
  13. java android开发框架_android开发的三大框架是什么?
  14. 三菱FX3U-485ADP-MB通讯三种变频器程序 已实现测试的变频器:施耐德ATV312, 三菱E700,台达VFD-M三款变频器,支持rtu的协议的变频器都可实现
  15. iptable 帮助
  16. JSP 创建 CRUD 示例 MyBatis DAO 用于数据库JSTL 用于遍历记录
  17. python 柱状图折线图共用一个图例_使用python的seaborn绘制折线图与柱状图的组合图...
  18. 2019世界人工智能大会
  19. OpenNi学习笔记
  20. 英文科技论文写作细节

热门文章

  1. HTML+CSS篮球静态网页设计(web前端网页制作课作业)NBA杜兰特篮球运动网页
  2. 软件定义闪存: SSD加速企业数据中心变革
  3. ESX5.1 安装Hyper v
  4. Throttling - Django REST framework
  5. RT-Thread 嵌入式人工智能教学在线研讨会,就在本周六!
  6. 安卓开发-Parcel机制
  7. java 闭锁_从火箭发场景来学习Java多线程并发闭锁对象
  8. python正态分布中的normal函数
  9. 一步搞定IP地址查询:这个在线工具帮你快速掌握设备的位置信息!
  10. 绿色数据中心空调设计 书评_书评:PHP中的实用设计模式