|
最近,在学习PID算法,算是大致了解了一下,同时也准备了PID算法实现的准备工作(智能小车)。
实验目的:
①让小车左右两轮物理速度相等,使其走直线;
②可以对小车左右轮子进行调速,使其做各种运动;
先说下我的思路,
我是用PWM来控制电机的转速,改变占空比来改变其速度状态。问题是在相同的占空比下,两个电机因为各种因素速度是不一样的。
所以我就需要调节其占空比来调节两轮子的速度,在调节之前,我要知道两轮子的实际物理速度,于是我就在两个电机分别旁加了
编码器(光栅盘+光电开关),用的理论是外设中断上升沿触发的方式来进行脉冲计数。一定时间内,脉冲的多少就代表着小车的速
度的快慢,取其一个轮子为定值,这样,我就知道另一个轮子是快了还是慢了,我就可以用PID算法来进行调节了。
关于‘PID’本身的实现过程先不说,这一部分,我参考了很多资料,也在论坛上找了相应的源码,但是想要深入了解,还需要其整定过程。
可整定过程的实现,PID算法必须要在MCU上完整的体现出来。
所以,在main函数里,我用一个轮子的脉冲数表示其PID的设定值(期望值)和另一个轮子的脉冲值相减,得到误差值利用PID中的比例、
积分、微分放大修正其中一个轮子的PWM值,最终使它和另一个轮子物理速度相同。我的设计思路里面,没有时间的概念,所有的时间
都用脉冲数代替了。
现在,问题来了:
①我这样的思路可行吗?(我看别人tim4146,都是用定时器做的)
②PWM_OUT+= incPIDcalc(PIDtypedef*PIDx,u16 nextpoint)和PWM_OUT= incPIDcalc(PIDtypedef*PIDx,u16 nextpoint)是不是一样的
只是他们的比例系数不同,其它的那个好些,那个容易调一些;
③因为我后期还要进行速度分等级调节,那么我再以其中的一个轮子的脉冲数为参照物,来调节另一个轮子的速度,似乎已经行不通了,
论坛里tim4146(http://www.amobbs.com/forum.php?mod=viewthread&tid=5575823)用的是TIM6_IRQHandler来处理PID值的,我
由于前期的脉冲捕获和他的方法不同,现在还可以用他的方法吗?还有如果不行的话,我怎样才能使小车两个轮子的速度进行分档呢?
我的设计思路里面,没有时间的概念,所有的时间都用脉冲数代替了。
各位大牛请帮我看看,我这样做可以吗?顺便看下我下面遇到的三个问题,我该怎么办?谢了。
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|