OskarBot小车驱动(一)、硬件基础
【目录】
- 1、硬件参数
- 1.1 直流电机参数
- 1.2 编码器参数
- 1.3 舵机参数
- 2、直流电机驱动电路与硬件资源
- 2.1 直流电机简介
- 2.2 电机驱动芯片TB6612
- 2.3 电机与MCU引脚对应关系
- 2.4 直流电机控制
- (1)正反转与制动
- (2)PWM调节与转速控制
- (3)PID控制
- 3、电机编码器电路与硬件资源
- 3.1 霍尔编码器介绍
- 3.2 电机编码器与MCU引脚对应关系
- 3.3 获取编码器计数:定时器捕获PWM输入信号
- 3.4 编码器的软件设置与相关计算
- (1)转速计算
- (2)指令速度(待解决)
- (3)软件优化:定时器检测周期自适应调整
- 4、舵机驱动电路与硬件资源
- 4.1 舵机介绍
- (1)舵机简介
- (2)舵机控制原理
- 4.2 舵机驱动电路
- 4.2 舵机硬件资源
1、硬件参数
OskarBot_servo_dualMotor_car_全功能控制板:STM32F103RCT6;
OskarBot小车:舵机拉杆转向,后轮双电机驱动。
1.1 直流电机参数
型号:CM-520-12100
原始转速:12100rpm(转/分钟)
电机电压:6~12V;额定功率:约7W(12V供电)
减速比:1:30;减速后空转转速 12100/30=403r/min;
1.2 编码器参数
霍尔编码器:AB相输出,每转每相各输出360个脉冲;
线速:基础脉冲数(PPR) X 齿轮减速比
线速= 12x30=360。(以减速器输出轴测量,编码器转30圈,小车的轮子才转一圈)
1.3 舵机参数
产品尺寸: 40.7*19.9*42.9mm
产品拉力: 15KG.cm(6V)
反应速度: 0.17sec/60度(4.8v无负载);0.14sec/60度(6v无负载)
工作电压: 4.8-6V;工作温度: 0℃-55℃;齿轮形式: 金属齿轮
工作死区: 2us (微秒)
舵机接头三条线:黄--信号 红--正极 褐--负极
主板默认舵机驱动电压 4.2V 左右,可根据实际需要调高或者调低。用螺丝刀旋转“舵
机驱动电压调节电位器”上的旋钮,可以调节舵机驱动电压。电压调节范围满足大多数主流
舵机工作范围。
2、直流电机驱动电路与硬件资源
2.1 直流电机简介
直流减速电机,带减速箱。带霍尔编码器。
2.2 电机驱动芯片TB6612
TB6612FNG是双驱动,也就是可以驱动两个电机;TB6612FNG每通道输出最高1.2 A的连续驱动电流,
启动峰值电流达2A/3.2 A(连续脉冲/单脉冲);4种电机控制模式:正转/反转/制动/停止;PWM支持频率高达100 kHz。
VIN是12V电源输入;
电机接口
2.3 电机与MCU引脚对应关系
电机驱动,PWM输出信号来自PB8与PB9,通用定时器Timer4(CH3和CH4通道);
PWM信号占空比,调节电机驱动电压,控制转速。
电机驱动,转向控制信号,来自PC0~PC3。高低电平控制,正转与反转。
2.4 直流电机控制
(1)正反转与制动
改变施加电机上面直流电压的极性,即可实现电机换向。
参考【玩平衡小车系列—TB6612FNG与直流电机控制教程】
来自 <https://blog.csdn.net/qq_38721302/article/details/83447870>
(2)PWM调节与转速控制
PWM调速原理:调整PWM信号的空占比,直流电机两端的有效电压改变(电枢电流大小变化)使电机转速变化。
电机的转速,和外接的电压是正相关的。
来自 <https://www.ncnynl.com/archives/201606/142.html>
例如:采用100Hz的PWM波形,占空比从100%改变到0,在驱动模块申压为12v的情况下,在马达连接的情况下(工作状态),实测A+、A一两端的电压从10.68v调节到0.01v,电压低于0·8V左右,马达停转。
需要说明的是,对于不同型号的直流电机,其PWM调速所用的频率(周期)是不一样的。这个频率参数需要由生产厂家提供,或通过实验获得。这是在本例实验中得到的一个经验。如果毫无依据地设置一个频率参数,轻则会出现诸如堵转等现象,严重的情况下甚至会发生烧毁电机的问题。
本例中,通过实验证明100Hz是最佳PWM频率。
(3)PID控制
如果我们想控制小车以一米每秒的速度做直线,但由于地面的摩擦阻力的影响,会造成左右轮速度与我们想控制的速度不同,所以会走不直,这时我们就需要加入PID控制。
PID控制的思想就是实时的把轮子真正的速度采集回来和控制的速度对比,差则补,多则减。
这样基本就可以实现理想控制。
3、电机编码器电路与硬件资源
3.1 霍尔编码器介绍
霍尔正交编码电路
如果两个信号相位相差90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向。
对编码器的A、B相进行捕获,很容易得到电机的转速和转向。
3.2 电机编码器与MCU引脚对应关系
Timer2和Timer8 两个车轮的编码器计数。
PA0和PA1引脚,通用定时器TIM2,CH1与CH2通道,用于捕获MOTOR1的编码器的脉冲(左电机?右电机?)
PC6和PC7引脚,高级定时器TIM8,CH1与CH2通道,用于捕获MOTOR2的编码器脉冲(左电机?右电机?)
3.3 获取编码器计数:定时器捕获PWM输入信号
编码器的测量我们可以从原理上得出有3种方式可以获得:
一、采用STM32的外部中断计数来实现计算
缺点:不够精确,电机在运动过程中,稍微接线有些抖动就会产生误差。
中断计数的缺点是不准,而且不停进中断,要是想做点其它事就会受限制。
二、采用STM32的输入捕获,跟第一种方法类似
缺点:不够精确,电机在运动过程中,稍微接线有些抖动就会产生误差。
三、采用STM32定时器的编码器接口(选择此方案)
缺点:存在零点问题,可以软件处理
来自 <https://blog.csdn.net/zhu751191958/article/details/79322140>
3.4 编码器的软件设置与相关计算
参考: https://blog.csdn.net/qq_34071268/article/details/73499005
(1)转速计算
假定:小车速度0.1m/s,轮子转速0.1m/s; 已知:车轮直径65mm;周长:0.065*3.14(m)
每秒转过的圈数:0.1/(0.065*3.14)=0.49(圈);
每秒输出脉冲数(每相):0.49*360≈176 个脉冲;一圈输出脉冲数 176/0.49≈359 个脉冲;
软件4倍频技术:上下沿同时检测,检测到的脉冲数。通过A,B相输入,一个周期检测上升沿,下降沿一共四个。
已知:编码器,每转每相输出360个脉冲;车轮直径,65mm。
每秒脉冲数(定时器捕获) ,当转速为0.1m/s时,脉冲数:360*4*0.1/(0.065*3.14)=705 (个脉冲/s);
每米脉冲数 = 360*4/(0.065*3.14)=7051.78≈7051(个脉冲/m);
转速= 每秒接收脉冲数(计数值,定时器获取)/每米脉冲数(7051,固定不变)= 705/7051=0.1m/s;
(2)指令速度(待解决)
参考:
硬件:编码器脉冲数 X个脉冲/轮子每圈,轮子直径; 软件:软件4倍频,PID控制频率(30Hz); 指令速度 = 目标速度*每米脉冲数/(PID控制频率)=0.1*7051/30=23.5≈23。 想让轮子以0.1m/s的速度旋转,上位机向USB虚拟串口发送指令 m 23 23(两轮同速旋转) |
(3)软件优化:定时器检测周期自适应调整
假设光每秒输出128个脉冲,即频率为128Hz,属于低频范围。为了提高测量精度,同时兼顾实时性,以200ms作为检测脉冲周期,周期越大检测精度越高,但实时性越差。
如果定时器的检测周期随转速有一定的自适应调整能力,那就更加理想了。 即低速时,定时器定时时间(相当于闸门时间)较长,高速时则较短,也就是根据转速的变化自动调整定时时间(闸门时间),从而可提高测量转速的精度和实时性。 例如,在开始测量时,首先将测量时间(闸门时间)定在200ms,然后随着转速的提高,从200ms开始逐渐减少,转速高时为10ms。
实现原理其实很简单,就是在闸门时间内检测输入脉冲的个数,这里就是检测脉冲的上升沿,本次上升沿与下次上升沿之间计为一个脉冲。闸门时间就是定时器的定时周期。脉冲计数通过定时器的计数功能加以实现。 闸门时间越长,检测精度越高,但是实时性越差为了兼顾精度与实时性,可采用动态自适应周期法: 周期不是固定的,而是根据转速自行调整的。即先粗测,再精测。 |
4、舵机驱动电路与硬件资源
4.1 舵机介绍
参考:【智能车学习(十七)——舵机学习 - Blue Mountain - 博客园】
链接: https://www.cnblogs.com/BlueMountain-HaggenDazs/p/5772316.html
参考:【DIY机器人必备基础认知2-舵机的认知】
来自 https://www.arduino.cn/thread-75729-1-1.html
(1)舵机简介
舵机简单的说就是集成了直流电机、电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元。能够利用简单的输入信号比较精确的转动给定角度的电机系统。
舵机安装了一个电位器(或其它角度传感器)检测输出轴转动角度,控制板根据电位器的信息能比较精确的控制和保持输出轴的角度。这样的直流电机控制方式叫闭环控制,所以舵机更准确的说是伺服马达,英文servo。
(2)舵机控制原理
转速由舵机无负载的情况下转过60°角所需时间来衡量,常见舵机的速度一般在0.11/60°~0.21S/60°之间。
内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。
4.2 舵机驱动电路
4.2 舵机硬件资源
Timer3用于舵机控制
舵机信号线 |
芯片引脚 |
功能 |
SERVO1 |
PB12 |
TIM1_BKIN 断路功能 |
SERVO2 |
PC12 |
|
SERVO3 |
PB15 |
|
SERVO4 |
PA8 |
|
SERVO5 |
PB5 |
|
SERVO6 |
PB4 |
|
SERVO7 |
PB3 |
|
第一个舵机信号,PWM控制使用的是高级定时器,带断路/刹车功能
第二个开始的舵机信号,都只是一般的GPIO引脚。
第二个高级定时器TIM8,带断路/刹车功能,
已经被SPI接口的W25Q64的Flash存储器占用。