PWM调速与弯道策略
发布时间:2013/11/19 20:06:57 访问次数:944
PWM即脉>中宽度调制技术.是小车类机器人必用的技术,DS1706SESA主要用来调速。有关详细技术细节在教科书中或是技术手册中都有描述,本文重点在实际应用。PWM波形的产生可以用软件方法,但这要占用系统资源,而且不够灵活。ATmega48系列单片机内置了PWM波形产生功能,其实就是其3个定时器的功能扩展,这些定时器除了产生定时信号外,还可以产生多种PWM波形。
机器人在行走过程中不可能总是走直线,所以转向是设计机器人时必须考虑的功能。最简单的做法是当需要转向时,一侧电机正转,另一侧反转或停机。这实际是让机器人在原地旋转,方法简单,但其缺点也是明显的。首先,机器人的动作显得非常突兀,特别是走弯道时扭来扭去,姿态不好看,也耽误速度,搞得不好甚至会不断扭动,失去控制。用自动控制专业术语讲,叫“超调”或是“震荡”。
通过改变机器人两侧电机的PWM参数,就可以实现流畅的转向动作。一侧快一点,另一侧慢一点,可以获得非常理想的转弯半径,其轨迹为顺畅的弧度。使用硬件,即单片机定时器内置的PWM功能产生的波形就可以做到这一点,而且程序相当简单。
ATmega48系列单片机有3个定时器,都具有产生PWM波形的能力,而且可以同时在两个端口引脚输出不同频率的PWM渡形,这就为我们控制机器人的行走提供了便利。ROBOT C针对这3爱上制作个定时器提供了3组PWM波形的初始化函数和应用函数,它们是use_PWMO与MotorO(lt,rt)、use_PWMl与Motorl (It,rt)、use_PWM2与Motor2(lt,rt)。其中应用函数里的调用参数It与r1分别是左电机和右电机的PWM参数。每个定时器在设置完成后,都可以在无需系统干预的情况下,自动连续产生两个PWM信号。主要的区别在于定时器0和定时器2的定时计数器是单字节的,而定时器1的定时计数器是双字节的,因而定时器1产生的波形的调节过程更加细腻。本文中的所有实战案例均采用定时器1产生PWM波形。另外,单片机内置的PWM波形都是输出到固定引脚上的,定时器1就固定使用端口B的引脚1和引脚2。
ROBOT C开发环境同样提供了用户友好的PWM设置对话框,并自动生成所需的相关初始化函数和应用函数。点击“电机应用设置”按钮(见图10),可调出电机设置对话框(见图11)。选择直流电机、PWM1电机调速功能,然后确定,系统会自动为你插入语句。
同样,你所要做的就是将初始化函数use_PWMl()插入到圭程序模块的初始化部分。然后在程序需要时,调用函数Motorl(lt,rt)即可。It和rt分别是左、右电机的PWM参数,最终控制两侧电机的转速,达到机器人运行调速和转向的目的。
需要注意的是,你所给出的调速参数数值越大,速度越慢。这是因为你给出的参数实际是定时器的定时起始值,定时的计数是从用户设定的起始值开始计数的。比如定时器1的定时计数器是双字节的,即可计数范围是0—1023,假如你给的起始值是500,计数器就从500开始累进计数,至1 023计满后返回,再从500开始计,这时你可以得到一个几乎对称的PWM波形。假如你给出的调速参数是1000,则计数器很快计满,然后返回重新计,你得到的是一个非常窄的PWM波形,结果导致电机得到的平均电压很低,不足以维持运转,就停机了。
机器人在行走过程中不可能总是走直线,所以转向是设计机器人时必须考虑的功能。最简单的做法是当需要转向时,一侧电机正转,另一侧反转或停机。这实际是让机器人在原地旋转,方法简单,但其缺点也是明显的。首先,机器人的动作显得非常突兀,特别是走弯道时扭来扭去,姿态不好看,也耽误速度,搞得不好甚至会不断扭动,失去控制。用自动控制专业术语讲,叫“超调”或是“震荡”。
通过改变机器人两侧电机的PWM参数,就可以实现流畅的转向动作。一侧快一点,另一侧慢一点,可以获得非常理想的转弯半径,其轨迹为顺畅的弧度。使用硬件,即单片机定时器内置的PWM功能产生的波形就可以做到这一点,而且程序相当简单。
ATmega48系列单片机有3个定时器,都具有产生PWM波形的能力,而且可以同时在两个端口引脚输出不同频率的PWM渡形,这就为我们控制机器人的行走提供了便利。ROBOT C针对这3爱上制作个定时器提供了3组PWM波形的初始化函数和应用函数,它们是use_PWMO与MotorO(lt,rt)、use_PWMl与Motorl (It,rt)、use_PWM2与Motor2(lt,rt)。其中应用函数里的调用参数It与r1分别是左电机和右电机的PWM参数。每个定时器在设置完成后,都可以在无需系统干预的情况下,自动连续产生两个PWM信号。主要的区别在于定时器0和定时器2的定时计数器是单字节的,而定时器1的定时计数器是双字节的,因而定时器1产生的波形的调节过程更加细腻。本文中的所有实战案例均采用定时器1产生PWM波形。另外,单片机内置的PWM波形都是输出到固定引脚上的,定时器1就固定使用端口B的引脚1和引脚2。
ROBOT C开发环境同样提供了用户友好的PWM设置对话框,并自动生成所需的相关初始化函数和应用函数。点击“电机应用设置”按钮(见图10),可调出电机设置对话框(见图11)。选择直流电机、PWM1电机调速功能,然后确定,系统会自动为你插入语句。
同样,你所要做的就是将初始化函数use_PWMl()插入到圭程序模块的初始化部分。然后在程序需要时,调用函数Motorl(lt,rt)即可。It和rt分别是左、右电机的PWM参数,最终控制两侧电机的转速,达到机器人运行调速和转向的目的。
需要注意的是,你所给出的调速参数数值越大,速度越慢。这是因为你给出的参数实际是定时器的定时起始值,定时的计数是从用户设定的起始值开始计数的。比如定时器1的定时计数器是双字节的,即可计数范围是0—1023,假如你给的起始值是500,计数器就从500开始累进计数,至1 023计满后返回,再从500开始计,这时你可以得到一个几乎对称的PWM波形。假如你给出的调速参数是1000,则计数器很快计满,然后返回重新计,你得到的是一个非常窄的PWM波形,结果导致电机得到的平均电压很低,不足以维持运转,就停机了。
PWM即脉>中宽度调制技术.是小车类机器人必用的技术,DS1706SESA主要用来调速。有关详细技术细节在教科书中或是技术手册中都有描述,本文重点在实际应用。PWM波形的产生可以用软件方法,但这要占用系统资源,而且不够灵活。ATmega48系列单片机内置了PWM波形产生功能,其实就是其3个定时器的功能扩展,这些定时器除了产生定时信号外,还可以产生多种PWM波形。
机器人在行走过程中不可能总是走直线,所以转向是设计机器人时必须考虑的功能。最简单的做法是当需要转向时,一侧电机正转,另一侧反转或停机。这实际是让机器人在原地旋转,方法简单,但其缺点也是明显的。首先,机器人的动作显得非常突兀,特别是走弯道时扭来扭去,姿态不好看,也耽误速度,搞得不好甚至会不断扭动,失去控制。用自动控制专业术语讲,叫“超调”或是“震荡”。
通过改变机器人两侧电机的PWM参数,就可以实现流畅的转向动作。一侧快一点,另一侧慢一点,可以获得非常理想的转弯半径,其轨迹为顺畅的弧度。使用硬件,即单片机定时器内置的PWM功能产生的波形就可以做到这一点,而且程序相当简单。
ATmega48系列单片机有3个定时器,都具有产生PWM波形的能力,而且可以同时在两个端口引脚输出不同频率的PWM渡形,这就为我们控制机器人的行走提供了便利。ROBOT C针对这3爱上制作个定时器提供了3组PWM波形的初始化函数和应用函数,它们是use_PWMO与MotorO(lt,rt)、use_PWMl与Motorl (It,rt)、use_PWM2与Motor2(lt,rt)。其中应用函数里的调用参数It与r1分别是左电机和右电机的PWM参数。每个定时器在设置完成后,都可以在无需系统干预的情况下,自动连续产生两个PWM信号。主要的区别在于定时器0和定时器2的定时计数器是单字节的,而定时器1的定时计数器是双字节的,因而定时器1产生的波形的调节过程更加细腻。本文中的所有实战案例均采用定时器1产生PWM波形。另外,单片机内置的PWM波形都是输出到固定引脚上的,定时器1就固定使用端口B的引脚1和引脚2。
ROBOT C开发环境同样提供了用户友好的PWM设置对话框,并自动生成所需的相关初始化函数和应用函数。点击“电机应用设置”按钮(见图10),可调出电机设置对话框(见图11)。选择直流电机、PWM1电机调速功能,然后确定,系统会自动为你插入语句。
同样,你所要做的就是将初始化函数use_PWMl()插入到圭程序模块的初始化部分。然后在程序需要时,调用函数Motorl(lt,rt)即可。It和rt分别是左、右电机的PWM参数,最终控制两侧电机的转速,达到机器人运行调速和转向的目的。
需要注意的是,你所给出的调速参数数值越大,速度越慢。这是因为你给出的参数实际是定时器的定时起始值,定时的计数是从用户设定的起始值开始计数的。比如定时器1的定时计数器是双字节的,即可计数范围是0—1023,假如你给的起始值是500,计数器就从500开始累进计数,至1 023计满后返回,再从500开始计,这时你可以得到一个几乎对称的PWM波形。假如你给出的调速参数是1000,则计数器很快计满,然后返回重新计,你得到的是一个非常窄的PWM波形,结果导致电机得到的平均电压很低,不足以维持运转,就停机了。
机器人在行走过程中不可能总是走直线,所以转向是设计机器人时必须考虑的功能。最简单的做法是当需要转向时,一侧电机正转,另一侧反转或停机。这实际是让机器人在原地旋转,方法简单,但其缺点也是明显的。首先,机器人的动作显得非常突兀,特别是走弯道时扭来扭去,姿态不好看,也耽误速度,搞得不好甚至会不断扭动,失去控制。用自动控制专业术语讲,叫“超调”或是“震荡”。
通过改变机器人两侧电机的PWM参数,就可以实现流畅的转向动作。一侧快一点,另一侧慢一点,可以获得非常理想的转弯半径,其轨迹为顺畅的弧度。使用硬件,即单片机定时器内置的PWM功能产生的波形就可以做到这一点,而且程序相当简单。
ATmega48系列单片机有3个定时器,都具有产生PWM波形的能力,而且可以同时在两个端口引脚输出不同频率的PWM渡形,这就为我们控制机器人的行走提供了便利。ROBOT C针对这3爱上制作个定时器提供了3组PWM波形的初始化函数和应用函数,它们是use_PWMO与MotorO(lt,rt)、use_PWMl与Motorl (It,rt)、use_PWM2与Motor2(lt,rt)。其中应用函数里的调用参数It与r1分别是左电机和右电机的PWM参数。每个定时器在设置完成后,都可以在无需系统干预的情况下,自动连续产生两个PWM信号。主要的区别在于定时器0和定时器2的定时计数器是单字节的,而定时器1的定时计数器是双字节的,因而定时器1产生的波形的调节过程更加细腻。本文中的所有实战案例均采用定时器1产生PWM波形。另外,单片机内置的PWM波形都是输出到固定引脚上的,定时器1就固定使用端口B的引脚1和引脚2。
ROBOT C开发环境同样提供了用户友好的PWM设置对话框,并自动生成所需的相关初始化函数和应用函数。点击“电机应用设置”按钮(见图10),可调出电机设置对话框(见图11)。选择直流电机、PWM1电机调速功能,然后确定,系统会自动为你插入语句。
同样,你所要做的就是将初始化函数use_PWMl()插入到圭程序模块的初始化部分。然后在程序需要时,调用函数Motorl(lt,rt)即可。It和rt分别是左、右电机的PWM参数,最终控制两侧电机的转速,达到机器人运行调速和转向的目的。
需要注意的是,你所给出的调速参数数值越大,速度越慢。这是因为你给出的参数实际是定时器的定时起始值,定时的计数是从用户设定的起始值开始计数的。比如定时器1的定时计数器是双字节的,即可计数范围是0—1023,假如你给的起始值是500,计数器就从500开始累进计数,至1 023计满后返回,再从500开始计,这时你可以得到一个几乎对称的PWM波形。假如你给出的调速参数是1000,则计数器很快计满,然后返回重新计,你得到的是一个非常窄的PWM波形,结果导致电机得到的平均电压很低,不足以维持运转,就停机了。
上一篇:感器的检测通常使用两种技术
上一篇:开始DIY吧
热门点击
- 利用无线路由器将普通摄像改造成无线摄像头
- 常小数点的七段共阴极半导体数码管BS201的
- 自制经典的1875功放
- 应变灵敏度因数(gauge factor)
- 正弦波公式
- 量化和编码
- 正弦波公式的推导
- 阻抗和相角随频率的变化
- 自制电压基准法
- 七段字形译码器
推荐技术资料
- 自制经典的1875功放
- 平时我也经常逛一些音响DIY论坛,发现有很多人喜欢LM... [详细]