这里呢,平衡小车最常用到的是直流编码有刷电机,直流的意思是使用直流电,给引脚通的是恒定电流;编码指的是电机自带编码盘,上面有两个相位正交的编码器,可以利用四倍频技术实现对电机位置和转速的精确追踪;有刷指的是电机内部自带换向器,电机转子每旋转180度,线圈中的电流即自动换向,不需要软件或者硬件驱动的控制。
这种电机通常有6个引脚:电源引脚:5V、GND,PWM输入引脚:IN1、IN2,编码器输出引脚:OUT1、OUT2。
PCB走线时要注意只有编码器引脚是信号线,可以走细一些,其他线mil以上)。
由于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口,用于对电机状态进行控制。
然后是对PWM外设的初始化,这里用定时器1的1、4通道,映射到PA8和PA11两个引脚用来控制两个电机的转速:
在HAL_TIM_PWM_Init()中会调用端口初始化MSP函数,需要用户重定义覆盖HAL库的若定义函数:
然后是中断服务函数,等等,我们设置了自动重装填,不需要中断控制,OK结束。
两个函数,核心是第一个,设置PWM的重装填阈值,相当于控制了占空比,这样就实现了调速的功能。
上面这个是实现功能的函数,Set_pwm函数是根据TB6612电机驱动芯片的真值表来计算的,通过直接访问TIM1的CCR寄存器,注意考虑两个电机的中心对称分布,所以写的时候将一个反向,实现输入两个正数,两个电机的转动都使小车向前走即可。
这里放了一个最简单的一秒正转,一秒反转,因为还没有研究PID的原理,后面会结合MPU6050触发中断来进行数据处理,反馈给电机,来进行最基本的控制。网上找不到HAL库的历程,就搞来FW3.5标准库来研究,慢慢摸索终于把这电机弄转起来了,实现了多轮运动嘿嘿。关键字:STM32引用地址:STM32 TB6612驱动的直流有刷减速电机
ARM7是冯诺依慢结构,三级流水线级流水线结构,所以性能要高一点。ARM9和ARM11大多带内存管理器,跑操作系统好 ...
1 什么是EGLEGL是用来管理绘图表面的(Drawing surfaces),并且提供了如下的机制(1) 与本地窗口系统进行通信(2) 查找绘图表面可 ...
我用的内核是linux2 6 38的,最开始的时候开发板是可以当U盘用的,而使用hid功能的时候出现如下问题:g_hid gadget: hid_setup crtl_reque ...
最近要学习ARM开发板,想按着单片机的套路,首先开发裸机程序。百度了下,大部分的裸机程序都是用RVDS或者ADS开发,用JLink 或者JTag烧写 ...
OK6410 tftp下载内核、文件系统以及nand flash地址相关整理、总结
飞凌官方提供了一键下载烧写linux的方式,相对来说比较方便,但是对于开发来说不够灵活,因此这篇文章把tftp相关的点介绍一下,整理下其中 ...
OK6410 rmmod卸载模块失败:No such file or directory
站点相关:综合资讯51单片机PIC单片机AVR单片机ARM单片机嵌入式系统汽车电子消费电子数据处理视频教程电子百科其他技术STM32MSP430单片机资源下载单片机习题与教程
Copyright © 2024 CQ9电子制造有限公司 版权所有