成为订阅者(免费)

加入29,000名其他订阅者以获得用户销售折扣和 其他免费资源。
:
:
大学教师'担心 - 您的邮件地址完全是 安全的。我保证使用它 只要 到 send you MicroZine.

后退 12F675教程索引 下一页

12F675教程6:用PIC驾驶标准伺服电机。

伺服 电机驱动程序教程。 本教程使用 12f675微控制器驱动伺服。微控制器产生 信号控制标准伺服 使用计时器0. interrupts (我用了 一个futaba伺服)。它没有做任何聪明的事情只是设置伺服位置 以一秒间隔预定义位置。



计时器0中断 creates the 20ms 使用内部时钟和预分频器的伺服更新时基完成准确 设置中断重复速率。

令人惊讶的伺服 绝对简单控制所有努力工作是为你完成的(在 伺服本身的内部)。您需要做的就是生成脉冲信号 每20ms重复(约)。

跳 to 无焊接面包板。
跳到 电路原理图。
跳到 软件。

您需要生成一个正确时间的脉冲,因为这决定了伺服's 位置。脉冲高信号持续时间为1.5ms设置伺服电机 位置到中心或零度。

脉冲 width 伺服电机 position
1.0ms +45°(顺时针 rotation)
1.5ms 零 位置
2.0ms -45°(反对 clockwise)


注意:这些是可接受的正常设置 大多数伺服电机和该软件都能够在这些范围之外走出,但是 您必须检查您的伺服电源是否有能力。如果伺服击中 结束停止然后它不起作用,并且将绘制更大的电流 伺服最终将损坏自身。

无焊接面包板

电路使用与以前相同的插件,但大部分 未使用组件 - 您真正需要的是ICSP连接和 伺服连接,电源和去耦电容。 LM35DZ,LED和 MAX232CPC未使用。如果你有它们已经让他们留下了他们 be used later.



伺服电机插件


了解用于创建的工具 this diagram.

电路原理图

伺服仅是 需要来自12F675的单个控制线和准确的计时源 这里由12F675中的内部4MHz时钟提供。


伺服电机驱动器电路图


12F675 pinouts

 
12F675引脚出局
其他意见:

pic12F675 PIC微控制器微控制器 pic 12F675微控制器

软件

源代码文件 :
获取文件 软件项目文件和C源代码 点击这里.

伺服电机软件 operation

伺服位置 在主程序中以第二间隔改为不同的位置。 只是让你知道你在序列中的归零位置(1.5ms 输出)保持完整两秒钟,而其他其他是一秒钟 updates.

伺服电机: Timer 0 interrupt

获得20ms 重复速率计时器0以规则间隔生成中断。定时器0是 从内部振荡器驱动(在这种情况下)。这进一步分裂, 在图片中,截至4(FOSC / 4)。所以计时器0的基本时钟(和 预分频器)得到1MHz。  

伺服电机: Timer 0 prescaler

预例是 在看门狗定时器和计时器0之间共享,稍微奇怪的函数 您将其用于定时器0.选择零预分频器值(PS2..0 AS所有 零)和预分频器使用定时器0您将通过两个预扇窗操作进行分割 而不是预期的1:1 prescale!所以实际预分频器值略有 与您可能期望的不同 - 仔细查看数据表将排序 this out.  

注意:以一种方式,奇数预分频器值是 有用的,因为使用最大设置1:256,您可以获得更长的计时器 溢出I.E.更轻松的延迟。

根据option_reg设置,您可以将预分频器设置为任何设置 1:2至1:256(见芯片数据表)。所有预例确实是分裂的 输入频率通过固定比率。  

例如,对于4MHz内部时钟速率,计时器0的输入为1MHz (fosc / 4),如果将ps2..0(在选项reg)设置为1:32那么输入 定时器0的频率为31.25kHz。  

伺服电机: Timer 0 overflow

中断 从定时器0在溢出时生成。当定时器通过时 值255到0。因此,对于前一个示例,将生成中断 在31.25khz / 256 = 122hz(8.2ms的时间)

注意:256个分母是因为 计时器0仅在256计数后溢出,因为它是8位 timer.

伺服电机: Timer 0 timing

生成 20ms更新速率您可以在确切定时设置定时器0以中断 通过仔细使用预分频器并使用强制负载,您需要的间隔 在中断例程本身。

前面的示例显示了如何获得8.2ms的中断率并获得 您需要的20ms必须更长,因此选择预分频器比例为1:128 给出以下中断时间

1 /(1MHz / 128/256)= 32.768ms

显然这比你需要的时间长,但你可以通过改变来削减它 溢出点。为此,您需要频率输入的时段 Timer 0 which is:

1 /(1MHz / 128)= 128us

这是定时器0中的每个计数的时间段。

256 * 128US = 32.768ms

因此,通过操纵溢出点,您可以设置整体中断时段。  所需的伺服电机周期为20ms。一些计算:

20ms / 128us = 156.25(最接近的整数值是 156)

这是生成中断之后所需的计数数。 要使用IT计时器0,它以下列方式加载:

TMR0 = 256-156 + 2; //需要156但定时器0 looses 2 at load.

所以 ISR中的定时器0中的实际值是102。

从这一点开始,每128us都被定时器0计算,它将溢出 156计数(或20ms)后

156 * 128US = 20ms大约。 (19.968ms)

注意:您还可以找到此值 使用的试验和错误 pic定时器0计算器. 

伺服电机:脉冲输出

以上 中断调用例程DO_SERVO()所以伺服电机每20ms更新一次。  do_servo()代码如下所示。

//////// //////////////////////////////////////////////////////////////////////////// //////////////////////
//脉冲出伺服 motor
空白 do_servo(void)org 60 {
无符号 短的 i;

   //调整输出到 零输入604US(全顺序透明)。
   //每位都是 worth 7us.
   //为中间 128 o / p = 1.5ms的位置
   // 255给予 2.39ms.

   GPIO  = (1<<SERVO_PIN);   // 放
   delay_us(604);

   //使用模拟器调整 to 7us
   for(i=0;i<servoVal;i++) {
       ;
   }
   GPIO  &= ~(1<<SERVO_PIN);   // 重启
}


注意此代码是 使用模拟器调整,并在for循环中显示7us迭代时间 每个伺服迭代都值7us。几个计算 mind:

脉冲 width 价值 役   伺服电机 position  
1.0ms 57 +45°(顺时针 rotation)
1.5ms 128 零 位置
2.0ms 199 -45°(反对 clockwise)


该代码从604us到239ms的脉冲(高)输出,值范围 从0到255. 128将零点设置为1.5ms

注意:您可能需要限制范围 如上所述的值,以上代码可让您控制伺服伺服的标称值 ±45º范围。在main()中,值设置为60和190
±45º范围。普通的 Servos可以进入完整的范围,但仍需要限制。

伺服电机: Accuracy

12F675的内部振荡器仅为1%准确 位置只需1%即可。使用晶体振荡器会改善 这以使用更多引脚的成本(或使用不同的设备 一起)。在实践中,准确性不是太重要,因为伺服伺服物质是 无论如何都没有准确。它是明显的,在哪里设置零位置 因此,添加代码以将偏移存储到EEPROM中将在那里有所帮助。

后退 12F675教程索引 下一页

新的! Comments

让你说到你刚刚阅读的东西!留下下面的框中的评论。

从12F675跳跃 Tutorial 6 : Timer 0 伺服电机 to
最佳微控制器 - 项目主页




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


ezoic.报告此广告

访问我们的Facebook页面:

   点击这里



最近的文章

  1. 如何使用ADS1115

    使用ADS1115精度16位ADC进行教程进行低功耗。

    阅读更多

  2. arduino.模拟输出...易模拟输出生成

    arduino.模拟输出:如何创建最精确的PWM模拟输出以及如何创建模拟PWM正弦波。

    阅读更多

  3. 数号和等效的快速宏。加快代码!

    了解DigitalWrite()的工作原理......现在使用17倍宏宏!

    阅读更多

  4. TCS230颜色传感芯片:如何运作以及如何使用它。

    如何使用TCS230(/ TCS3200)彩色检测器芯片并轻松将其添加到您的任何项目中。

    阅读更多

  5. 如何使用ADXL345进行运动感测等。

    使用ADXL345 Acellerometer,您可以检测到16G!您还可以了解如何使用它来点击检测等。

    阅读更多

  6. HMC5883L 3轴数字MAGENTOMTER如何运作

    HMC5883L - 如何制作数字罗盘,了解HMC5883L和QMC5883L之间的差异以及它们是否兼容。

    阅读更多



读者 Comments

"I wanted to thank
你这么好
对于所有信息
你已经提供了
你的网站's

高超极好的."

- 逃亡Potthath.

"This site really is
最好的和我最喜欢的。
我发现这里有很多很有用
项目和提示。"

- 米兰

Bursach.<at>gmail.com<

"Awesome site,
非常,非常容易和好
导航!"


-
镭_tr.<at>
wolf359.cjb.net.


学习微控制器

"Interested in
微控制器?"

注册
免费7天指南:

自由 GUIDE : CLICK HERE


"I am a newbie to PIC
我想说
 how great your
网站一直在为我。"


- 戴夫

de_scott.<at>bellsouth.net

"Your site is a great
和完美的工作。
恭喜。"


- SURESH.

IntegratedInfosys.<at>
Yahoo.com.

"I couldn't find the correct
要定义的词语
你的网页。

非常有用,揭开,
诚实明确。

非常感谢
你的时间和作品。
问候。"


- Anon.

回到顶部