差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
r_c伺服电机 [2020/07/09 10:18] zili |
r_c伺服电机 [2022/04/26 13:14] (当前版本) gongyusu |
||
---|---|---|---|
行 1: | 行 1: | ||
###R/C伺服电机 | ###R/C伺服电机 | ||
+ | |||
+ | [[RC_servos|R/C伺服电机]] | ||
+ | |||
[[https://www.fpga4fun.com/RCServos.html|R/C Servos]]\\ | [[https://www.fpga4fun.com/RCServos.html|R/C Servos]]\\ | ||
\\ | \\ | ||
- | FPGA适用于控制R / C伺服。\\ | + | FPGA适用于控制R / C伺服电机。\\ |
+ | \\ | ||
####什么是遥控伺服器? | ####什么是遥控伺服器? | ||
+ | \\ | ||
R / C伺服(“遥控伺服电机”)由一个电机,一些电子设备和一组装在一个小盒子中的齿轮组成。单轴从伺服器出来。您可以通过向伺服器发送脉冲来精确控制轴的旋转角度。轴旋转角度限制为大约270度(它不能旋转一整圈,而只能旋转3/4圈)。\\ | R / C伺服(“遥控伺服电机”)由一个电机,一些电子设备和一组装在一个小盒子中的齿轮组成。单轴从伺服器出来。您可以通过向伺服器发送脉冲来精确控制轴的旋转角度。轴旋转角度限制为大约270度(它不能旋转一整圈,而只能旋转3/4圈)。\\ | ||
这是一个伺服器的图片(已被咬住,但已说明了我们的目的)。\\ | 这是一个伺服器的图片(已被咬住,但已说明了我们的目的)。\\ | ||
+ | {{ ::servo.jpg |}} | ||
\\ | \\ | ||
有用的信息链接包括: | 有用的信息链接包括: | ||
- | RC伺服控制 | + | * [[http://www.epanorama.net/documents/motor/rcservos.html|RC伺服控制]] |
- | RC飞机伺服系统使用指南 | + | * [[http://www-cdr.stanford.edu/dynamic/servo/|RC飞机伺服系统使用指南]] |
- | 遥控伺服器101 | + | * [[http://www.cs.wisc.edu/~bolo/shipyard/servos101.html|遥控伺服器101]] |
+ | \\ | ||
R / C Servos用于: | R / C Servos用于: | ||
- | 在遥控模型中(汽车,飞机...)。 | + | * 在遥控模型中(汽车,飞机...)。 |
- | 在机器人技术中。 | + | * 在机器人技术中。 |
- | 电气连接和PWM脉冲 | + | \\ |
- | 伺服系统有3条线: | + | |
- | 黑色:地面。 | + | |
- | 红色:电源(+ 5V)。 | + | |
- | 白色:旋转控制(使用PWM)。 | + | |
- | 白线上的PWM控制脉冲长度需要在1ms到2ms之间。 | + | |
- | 1.5ms的脉冲使轴在其旋转范围的中间旋转。 | + | |
+ | ####电气连接和PWM脉冲 | ||
+ | 伺服系统有3条线: | ||
+ | * 黑色:地面。 | ||
+ | * 红色:电源(+ 5V)。 | ||
+ | * 白色:旋转控制(使用PWM)。 | ||
+ | \\ | ||
+ | 白线上的PWM控制脉冲长度需要在1ms到2ms之间。\\ | ||
+ | 1.5ms的脉冲使轴在其旋转范围的中间旋转。\\ | ||
+ | \\ | ||
即使不需要更改角度位置,也需要定期发送新脉冲(每10到20ms),否则伺服将停止尝试保持该脉冲。\\ | 即使不需要更改角度位置,也需要定期发送新脉冲(每10到20ms),否则伺服将停止尝试保持该脉冲。\\ | ||
- | 来自FPGA的PWM脉冲 | + | \\ |
- | 让我们以8位分辨率(256步,从0到255)控制一个伺服器。这意味着我们需要产生一个1ms(0)到2ms(255)的脉冲,分辨率为1ms / 256 = 3.9µs。 | + | |
- | 分钟 | + | ####来自FPGA的PWM脉冲 |
+ | 让我们以8位分辨率(256步,从0到255)控制一个伺服器。这意味着我们需要产生一个1ms(0)到2ms(255)的脉冲,分辨率为1ms / 256 = 3.9µs。\\ | ||
+ | \\ | ||
+ | **分钟** | ||
+ | \\ | ||
使用25MHz时钟(周期为40ns),第一步是对时钟进行分频,以产生周期的“滴答声”,使其尽可能接近3.9µs。\\ | 使用25MHz时钟(周期为40ns),第一步是对时钟进行分频,以产生周期的“滴答声”,使其尽可能接近3.9µs。\\ | ||
行 50: | 行 62: | ||
每个滴答持续3.9µs,因此256个滴答持续1ms,12位计数器“ PulseCount”每16ms翻转一次。正是我们需要定期产生新的脉冲。\\ | 每个滴答持续3.9µs,因此256个滴答持续1ms,12位计数器“ PulseCount”每16ms翻转一次。正是我们需要定期产生新的脉冲。\\ | ||
- | 产生PWM脉冲 | + | \\ |
+ | **产生PWM脉冲** | ||
+ | \\ | ||
当“ PulseCount”等于0时,我们开始每个脉冲。当“ PulseCount”\\ | 当“ PulseCount”等于0时,我们开始每个脉冲。当“ PulseCount”\\ | ||
在256和511之间时,我们结束每个脉冲。这将在1ms和2ms之间产生脉冲。\\ | 在256和511之间时,我们结束每个脉冲。这将在1ms和2ms之间产生脉冲。\\ | ||
+ | \\ | ||
假设“ RCServo_position”是8位位置值(从0到255),我们在其前面连接一个“ 0001”以创建一个范围为256 ot 511的12位值。最后,我们将这12位与“ PulseCount”进行比较以产生脉冲。\\ | 假设“ RCServo_position”是8位位置值(从0到255),我们在其前面连接一个“ 0001”以创建一个范围为256 ot 511的12位值。最后,我们将这12位与“ PulseCount”进行比较以产生脉冲。\\ | ||
行 61: | 行 75: | ||
</code> | </code> | ||
- | 那就是所有人!完整的代码可以在这里找到。\\ | + | 那就是所有人!完整的代码可以在[[https://www.fpga4fun.com/files/RCServo.zip|这里]]找到。\\ |
如您所见,控制R / C伺服器所需的硬件很少,因此FPGA可以同时控制多个。\\ | 如您所见,控制R / C伺服器所需的硬件很少,因此FPGA可以同时控制多个。\\ | ||
\\ | \\ |