查看:
15478
回复: 18 |
进化传说 之 上古蜥蜴 第二帖:电机驱动电路
|
风过琴弦
28
主题
169
回复 |
发表于2017-06-24 23:34:38
|
显示全部楼层
1#
电梯直达
在参赛贴里面说过,电机驱动这类电路不作为项目重点,暂时先尽快弄一个能动的,先玩着,后期再看情况改进。 所以采取一个简单的控制方案: 用现成的常用、低成本电机驱动芯片,由STM32输出PWM驱动,码盘加光耦模块反馈速度,算法采用PID。为简单快速,不做电流环,不做s域(复频域)建模我得意的笑
下面详细分析。 >>>本帖是第二届立创商城电子制作节开源作品参赛《进化传说 -- 上古蜥蜴》的分帖之一,索引主帖:http://club.szlcsc.com/article/details_7053_1.html#floor_5。 编辑原因:增加返回主帖入口 电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
风过琴弦
28
主题
169
回复 |
发表于2017-06-25 23:39:32
|
显示全部楼层
2#
本帖是参赛贴《进化传说之上古蜥蜴》的分贴之一,主贴在此 电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
风过琴弦
28
主题
169
回复 |
发表于2017-08-21 22:11:10
|
显示全部楼层
3#
在第一帖中,电机做过更改,现在用的是带测速的减速电机
http://club.szlcsc.com/article/details_7855_1_16.html#floor_16 -------------------------------------------------------------------------------------------------- 蜥蜴项目作为一个移动装置,肯定要采用电池供电。其中电源至少包含两部分,一是电池管理,包括充放电、电压转换、保护,这个用一片TP5602可以搞定,响应立创商城号召,夹带广告:http://www.szlcsc.com/product/details_81512.html 3A充放电,管理常规3.6V锂离子电池,带各种保护。 第二部分专门给电机用,因为电机是12V额定电压。确实也能找到5V的,但是比较少,猜测是因为效率低或者不得不做成更大体积吧。这样我们就需要一个升压电路。TPS61088,老规矩 http://www.szlcsc.com/product/details_93676.html 直流电机调速比较常规的做法是PWM驱动,仍然需要一个芯片L9110H,像是一个简单的电平转换电路,可以用3.3V输入,控制12V输出,同时内部有相应的缓冲保护电路,所以控制端可以不用其他保护直接接单片机的PWM输出,电机端也不需要其他保护,不会损坏本芯片,也不会将干扰带入单片机。
电机驱动是靠通用版和杜邦线接起来的,原理图就上个手绘: 上图是右侧电机的接线。左侧电机要注意,电机12V电源的正负极要对调。左侧的电机PWM信号占用STM32的PA2和PA3,左侧测速信号占用PC2。 上面两个图是9110。。。。
电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
风过琴弦
28
主题
169
回复 |
发表于2017-08-21 22:15:36
|
显示全部楼层
4#
TP5602本来找官方要的支持,可是他们给的东西真够一说的,原理图和PCB文件完全对不上,原理图不能生成netlist(很多元件缺必要的要素,比如Lib ref),PCB根本不是根据netlist画的。。。我花在整理这份文件上的时间就超过两个工作日,比我从头画一个慢多了,无穷无尽的零散线头。。。但是呢,这样的文档传上来,和原厂的PCB布局基本一样,大家不会说干扰太大是因为我画的电路板不好
PCB有个封装画错了,唉,从小到大不管多小心,总是会有疏忽大意的地方,只能靠多次的修改。。。 5602下面是一堆旧手机电池,加旧充电宝拆出来的,加起来可以给手机充两次电,嘿嘿 电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
风过琴弦
28
主题
169
回复 |
发表于2017-08-21 22:34:59
|
显示全部楼层
5#
5V升12V的是这货: TPS61088。图上这俩电解电容是Φ6的。也就是说,TPS61088加上外围元件,一共不到一节小手指大小,可以轻易提供三十多瓦的能量转换。当然,瓦数大了,散热要注意。 TPS61088和TP5602有个共同的麻烦,就是很难手工焊。后来经过朋友点拨,学会了芯片背面涂锡膏,然后用热风枪焊接的方法,效果还不错,就是前前后后焊坏了好几个芯片。。。
TPS60188的原理图,右边放了一些简单的调试信息 电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
风过琴弦
28
主题
169
回复 |
发表于2017-08-21 23:19:39
|
显示全部楼层
6#
下面该我们的主角上场了,有请好吃不上火的STM32单片机~ 说实话,好多年不玩单片机了。这次又从阁楼上把多年前的开发板翻出来,全都是灰,呛得老婆直咳嗽。。。野火开发板,还有人知道吗 不过,多年过去了,这货依然上电就能运行、装好软件就能联机调试。。。STM32F103VET6,72MHz主频 特意3D打印了两个支架把它竖起来,看看临时拼装起来的金属朋克吧 电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
风过琴弦
28
主题
169
回复 |
发表于2017-08-21 23:33:27
|
显示全部楼层
7#
程序没有太多可说的,大部分是相应外设的初始化及控制、读取
电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
风过琴弦
28
主题
169
回复 |
发表于2017-08-22 13:49:39
|
显示全部楼层
8#
在蜥蜴项目中,STM32由于运算能力的限制,应该担当不了系统大脑的角色。相比之下,它的外设资源丰富,更适合担任小脑和脊髓的角色。STM32的程序也是以外设的操作为主,就像脊髓传递神经信号。
但是,脊髓也能实现一些简单的反射。我们让STM32单片机来完成PID环节的控制。 说起PID,我就顺便罗嗦几句,熟悉的朋友绕道好了 如果你还不了解,花上20分钟,把这层楼认真看完,你就知道了。这里假定你知道微积分的意义,以及在数字系统中的简单近似计算 先说一个简单的概念,控制理论里面有个核心的角色叫做error(这个词很难翻译,叫误差好像不好,误差不是这个意思),error表示当前的实际值离你的控制目标还差多远。比如速度,你设定为10,现在实际值是7,那么error就是3。这个概念其实简单得不能再简单了,对吧,控制理论的目标就是把error减小到0(先不讨论高阶)。 PID是一种控制策略,对error进行三种运算(P就是乘以一个比例系数,I是对其积分,D是对其微分),将三个运算结果分别乘以自己的系数之后加起来,得到一个结果,用这个结果去修正控制量(比如修正现有的PWM占空比),这个算法就是PID算法。 比如先说P。还像上面说的,设定速度为10,当前值为7,那就需要增加动力(比如PWM的占空比),增加多少呢,我们想一下,error大就增加多一点,error小就增加少一点,应该是个合理的方法,对吧?当然你可能想到了,速度和PWM的占空比不是同一种量纲,不能直接加减,需要乘以一个系数。 也就是,我们将当前的PWM占空比的值加上一个修正值ΔPWM,这个ΔPWM等于Kp * error,其实就这么简单也可以完成对速度的控制的。(其实在控制系统中,可以不用把PID三种策略全用上,只用一两个也是可以的)。 Kp是什么呢?是系数。这个系数从哪来的呢?。。。蒙的。没错,古典控制理论的参数就是一点点调的。 简单模拟一下,比如取Kp=0.05,那么PWM的占空比增加Kp*error=0.05*3=15%,假定占空比增加15%之后速度变成了11,那么error=-1,PWM占空比增加 Kp*error=0.05*(-1)= -5%,速度又将降低1.3左右。 所以我们知道了,P的意思就是比例,是对error做比例运算,用运算结果去修正控制量。 ΔPWM = Kp * error。将ΔPWM加到现有的PWM值上进行修正,这就是比例控制 这样的修正显然不会一次就正好调节到error为0,PID在数字系统中是定期计算的,这次PWM占空比加15%,下次减5%,再下次加2%,慢慢达到稳定。 继续深入一下,就涉及到了I,积分。 在上面的计算中,你可能看出来了,Kp不能大,否则被控量不会趋于稳定。比如如果Kp=0.5,第一次PWM修正值就是150%,也就是会增加到“满格”,这样速度会变成最大值,比如20,这样error就是-10,这又导致修正值为-5,也就是-500%,速度将会直接降为0,下次速度再变为20,如此循环。这种现象称为振荡。 为了避免振荡,Kp需要小一些。但是这样的话,有时候就会陷入另一种情况,比如速度为9.95,而Kp*error的结果太小,小于PWM的分辨率,这样error就会一直被忽略,那么速度将总是9.95。这个时候,积分运算就派上用场了。 我们对error进行积分,这次0.05不够大,下次0.03又不够,再下次0.06,加起来就够大了,将这种累加的和(就是离散的积分)再乘以系数,用于对PWM占空比进行修正,就可以弥补长时间的小error,提高控制精度。 D稍微复杂一点,是对error取微分运算。微分的物理意义是变化的速度。也就是说,如果error突然快速增加,虽然此时error绝对值还不大,也仍然则需要进行大幅的修正;另一方面,例如在速度从7变到10的过程中,error在减小,那么error的微分值为负,这样会抵消一部分P,从而减小振荡的可能。而如果error减小得非常快,则表示比如速度由7迅速增加到9.5,那么说明实际的PWM值设定的很可能是高得离谱了,而此时error的微分将是很大的负值,将起到预先减小PWM占空比的效果。 在实际运算中,error定时计算,那么相邻的两个值之差就可以近似为微分值 电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
风过琴弦
28
主题
169
回复 |
发表于2017-08-22 13:58:13
|
显示全部楼层
9#
下面几张图是PID相关的程序,最后一张是核心算法 上图是STM32程序里,SPI中断处理中的一段,用于解释命令字为2的命令,并根据命令设置相关参数
上图为定时器中断,分别用于更新速度测定值以及在PID模式下定时通知主程序进行PID更新计算,在main函数的主循环中: while(1)
PID相关的数据结构
上图为现在使用的PID参数(下半部分为初始值)
PID核心算法,其实很简单,ΔPWM = Kp*P + Ki * I + Kd*d; PWM += ΔPWM就可以了 电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
风过琴弦
28
主题
169
回复 |
发表于2017-08-22 14:20:35
|
显示全部楼层
10#
PID运行演示视频 https://v.qq.com/x/page/x0540pae5xw.html
视频中,PID的参数采用楼上图片中的参数,可以看到明显的PID调整的特点。两次手握住履带后,电机受到阻力立刻减速,然后由于PID算法的作用,PWM占空比增加,履带又顽强地开始加速到目标速度,此时占空比很大,履带底盘在泡沫的架子上咔哒咔哒乱动,尤其第二次更明显。 由于占空比很大,突然松手履带就会转得很快,此时PID调节再次起作用,速度迅速降低,然而存在超调现象,也就是速度降低到预设速度之后并没有停止下降,而是继续减慢。然后又在算法调整下慢慢逼近设定值,这就是超调现象。超调的成因,固然是PID参数(也就是Kp、Ki、Kd)需要精细调整,但是,PID算法很难在大范围内保持良好的性能,例如在负载变化很大的情况下兼顾调节速度与超调量。如果需要更好的性能,需要更“高端”的控制理论。 典型的PID调节过程。当然也可以通过调整参数,让曲线在上升到设定速度2之前停止上升,但是那样调整时间就会变长很多 电源模块(小功率AC-DC)小体积,多年稳定应用,qq:1239283833
|
|