完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
电机的基本认识
这里呢,平衡小车最常用到的是直流编码有刷电机,直流的意思是使用直流电,给引脚通的是恒定电流;编码指的是电机自带编码盘,上面有两个相位正交的编码器,可以利用四倍频技术实现对电机位置和转速的精确追踪;有刷指的是电机内部自带换向器,电机转子每旋转180度,线圈中的电流即自动换向,不需要软件或者硬件驱动的控制。 这种电机通常有6个引脚:电源引脚:5V、GND,PWM输入引脚:IN1、IN2,编码器输出引脚:OUT1、OUT2。 PCB走线时要注意只有编码器引脚是信号线,可以走细一些,其他线建议走粗一些(30mil以上)。 电机驱动:TB6612 由于STM32的引脚只能提供3.3V电压,且功率输出能力很弱,因此需要功率放大器件对电机进行控制,并且为了保持控制的实时性,以及精准性,需要高速的功率控制器件,这就需要一款专用的电机驱动芯片。 这里使用体积较小,同时有较大驱动能力的TB6612驱动芯片,可以同时驱动两路电机,利用其内部的高速H桥,向电机输出PWM波,控制其正传,反转,制动,自由转动(不加动力也不加阻尼力),以及转速的调节。 驱动芯片除了电源引脚以及使能引脚之外,还有各两组,两种功能的引脚: 来自MCU的3个引脚:1个PWM输入引脚,用于控制转速,2个控制引脚,用于控制正反,制动,空挡(不施加力)。 输出给电机的2个引脚:OUT1,OUT2,通过输出PWM波控制电机的全部功能,搭载较大电流。 驱动编写 通过对电机以及电机驱动的功能分析,我们知道了控制1个电机,需要3个引脚,1个输出PWM波用于控制速度,2个高速推挽输出,通过切换高低电平,即可实现对电机的驱动状态控制。 平衡车有2个电机需要控制,因此用于驱动电机的引脚有6个,2个是定时器的PWM功能映射的引脚。 这里我为了节省定时器资源,使用一个定时器TIM1,该定时器的1、4通道(分别对应PA8,PA11引脚),来输出两路频率相同,但是占空比互不影响,独立可调的PWM信号,然后另外找4个普通IO口,用于对电机状态进行控制。 电机驱动 MOTOR.h 这里干了几件事: 电机控制引脚宏定义 PWM占空比改变宏定义 两个初始化函数宏定义 MOTOR.c 首先是对4个控制引脚的初始化,高速下拉推挽输出: 然后是对PWM外设的初始化,这里用定时器1的1、4通道,映射到PA8和PA11两个引脚用来控制两个电机的转速: 在HAL_TIM_PWM_Init()中会调用端口初始化MSP函数,需要用户重定义覆盖HAL库的若定义函数: 然后是中断服务函数,等等,我们设置了自动重装填,不需要中断控制,OK结束。 如何使用电机:实践 控制集成封装 这里集成了控制小车所需的代码,现在只添加电机控制这一模块 CONTROL.h 两个函数,核心是第一个,设置PWM的重装填阈值,相当于控制了占空比,这样就实现了调速的功能。 CONTROL.c 上面这个是实现功能的函数,Set_pwm函数是根据TB6612电机驱动芯片的真值表来计算的,通过直接访问TIM1的CCR寄存器,注意考虑两个电机的中心对称分布,所以写的时候将一个反向,实现输入两个正数,两个电机的转动都使小车向前走即可。 mian函数: 这里放了一个最简单的一秒正转,一秒反转,因为还没有研究PID的原理,后面会结合MPU6050触发中断来进行数据处理,反馈给电机,来进行最基本的控制。网上找不到HAL库的历程,就搞来FW3.5标准库来研究,慢慢摸索终于把这电机弄转起来了,实现了多轮运动嘿嘿。 |
|
|
|
只有小组成员才能发言,加入小组>>
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 12:58 , Processed in 0.477878 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号