Arduino 直流电机转速控制系统

通过增量式编码器来测量电机的转速,常规的单片机的程序架构是通过定时器来实现精确的时间定时,并利用外部中断来实现对脉冲数目的计数,然后计算出一定时间内脉冲的数目,从而得到转速数值并输出。
直流电机是Arduino机器人制作中的主要动力来源,但是由于电机的参数一致性有所差别,即使是相同型号的电机在相同电压下的转速都不完全相同,而且在带负载或负载不同的情况下,更加会导致电机转速发生变化,这就会导致制作的Arduino轮式机器人不能实现直线行走,因为这是一个开环控制,没有任何反馈信号返回。如果给直流电机加上编码器作为反馈器件,也就可以测量得到电机的当前转速,如果将其与设定值计算差值,并通过PID算法计算得到新的控制信号,从而可以动态的测量和控制电机的转速,形成一个闭环控制系统。
2.1测量转速方法 测量转速方法有3种,分别为测频法(M法)、 测周法(T法)及混合法(M/T法)。 测频法是在一定时间内,通过测量旋转引起的单位时间内的脉冲数,实现对旋转轴转速测量的一种方法,适用于高、中转速的测量。该法本质上属于定时测角法,为提高测量的准确度,有时采用多标记或开齿的方法,其不确定度主要取决于时间测量和计数量化。

测周法是在转速脉冲的间隔内,用时钟脉冲来测量转速的一种方法,适合于低转速测量。该法实际上就是定角测量法,即用时标填充的方法来测量相当于某一旋转角度的时间间隔。在高、中转速时,可采用多周期平均来提高测量准确度,其不确定度主要取决于时间测量、计数量化及触发的不确定度。 混合法是在测频法的基础上,吸取测周法的优点汇集而成的一种转速测量方法。它是在转速传感器输出脉冲启动定时脉冲的同时,计取传感器输出脉冲个数和时钟脉冲个数,而当到达测量时间时,先停止对传感器输出脉冲的计数,在下一个定时脉冲启动之前再停止时钟脉冲的计数。因此,该种方法可在较宽的范围内使用。

此处,我们选择测频法来测量转速,其工作原理为:当被测信号在特定时间段T内的周期个数为N时,则被测信号的频率f=N/T。 ###2.2转速测量程序设计 利用TimerOne定时器库来实现定时,通过外部中断对电机编码器输出的脉冲进行计数,计数值除以定时时间即为一定时间内的转速。实现1秒内转速测量的程序如程序代码2所示。

#include <TimerOne.h>
long counter_val[2] = {
  0,0};  //定义数组,用于存放外部中断计数值
byte CurCnt = 0;    //定义当前计数器标志,用于判断当前正在计数的数组
int j=0;        //定义定时器中断标志,用于判断是否发生中断
void setup() {
  delay(2
要通过PID控制将两个直流电机的转速保持一致,可以按照以下步骤进行操作: 1. 硬件准备:首先,需要使用Arduino开发板来控制电机。接下来,连接电机驱动模块到Arduino的数字输出引脚。确保电机与模块正确连接,并准备好供电。 2. 编写代码:使用Arduino的编程语言,在IDE中编写代码。首先,定义PID算法所需的参数,例如目标转速、PID系数等。然后,使用PID库函数来实现PID控制算法,并将电机的实际转速反馈给算法。 3. 设置PID参数:根据具体情况,通过调试和实验来确定合适的PID参数。PID参数包括比例项P、积分项I和微分项D,可以通过试验不断调整这些参数来实现较好的控制效果。 4. 实时反馈:利用编程语言和传感器来实时测量电机的转速,并将转速的反馈值送回PID控制算法。通过与目标转速进行比较,算法将调整电机输出的控制信号。 5. 输出控制信号:根据PID控制算法的输出,将控制信号传递给电机驱动模块,以调整电机的输出电流,从而控制电机的转速。 6. 调试和优化:根据实际运行效果来调试和优化PID参数和算法。通过不断调整参数,观察电机转速的变化情况,以实现两个电机的转速保持一致。 综上所述,通过在Arduino上编写PID控制算法,并将电机的转速实时反馈给控制系统,可以实现对两个直流电机的转速进行精确控制,使其保持一致。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值