成为订阅者(免费)

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

后退 12F675教程索引 下一页

12F675教程7:伺服控制器驱动标准伺服电机 使用串行端口命令。

您可以使用此伺服 控制器代码通过串行RS232控制伺服电机 interface.

这个伺服控制器 生成信号以控制标准伺服电机 (我使用了一个笨蛋伺服 但是您可以使用12F675微控制器使用任何伺服。你可以输入一个 文本命令进入串行端子E.g HyperTerminal以设置位置 the servo.


 
项目软件与前一个人略有不同 中断用于脉冲时序 - 这使其既可以串行服务 端口输入并生成正确定时的伺服脉冲。

跳 to 无焊 breadboard.
跳到 电路 Diagram.
跳到 软件。
跳到 A secret

序列号 command 脉冲 width 伺服电机 position
S100.<Return key> 1.0ms +45°(顺时针 rotation)
S150.<Return key> 1.5ms 零 位置
S200.<Return key> 2.0ms -45°(反对 clockwise)


注意:软件将最大值限制为 1.0ms和2.0ms,但如果需要,您可以在软件中更改此功能 to.

无焊接面包板

项目使用 与以前相同的无可焊接面包板,但增加了串行的链接 端口连接器到MAX232收发器(用于接收串行数据)和1K resistor.

伺服控制器plugplock.


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

电路原理图

伺服 控制器只需要12F675和串行的单个控制线 从PC串行端口输入行以将命令发送到电路。

同步时序源由内部4MHz时钟提供。


伺服控制器

 

12F675 pinouts

 
12F675引脚出局
其他意见:

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

伺服控制器 Software

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

伺服控制器软件 operation

定时器0中断是 以与前一个教程相同的方式使用,并再次生成20ms 伺服控制器的重复率。

准确的定时脉冲 使用计时器1中断生成。对于此项目,将启用计时器1 定时器0触发后。  

当计时器0触发时,它使定时器1中断,并在此之前 设置定时器1溢出,以便定时器1中断将发生精确 从计时器0的触发时间。

此外,当定时器0触发伺服引脚,设置为高,当计时器1触发时 伺服引脚设置为低。以这种方式,生成精确的输出脉冲 控制伺服电机。

注意:在您输入之前,此项目无效 命令 - 它确实不断地生成伺服位置信号,但这是 仅在新命令时从零位置发生变化 accepted.

伺服控制器: Timer 0 

设置 定时器0与所用的定时器0完全相同 教程6..

伺服 控制器:多任务处理

最多 伺服控制器软件的有趣部分是它正在做两个 有关的事情 - 它使用适合使用的简单多任务方法 在内存受限设备中例如12F675。

软件 一次服务两个过程:

  • 串行端口 input monitoring.
  • 伺服电机 output.

对于更多一般 关于多任务处理的信息 点击这里.

因为这不是真正的多任务系统,其中部分时间是 分配给您需要仔细决定最高的过程 在编码开始之前,优先任务和最低优先级任务是。

对于伺服控制器,很容易;伺服电机必须具有最高的 无论如何,必须保持伺服电机的优先级 任何其他过程。所以你将此任务直接放入中断服务中 routine (ISR).

串行端口读数被分配为较低的优先级任务。

允许计划操作的三个因素是:

  1. 中断 只是达到20ms(相当慢)。
  2. 序列号 端口速度为2400拟订(相当慢)。
  3. 中断 代码是最低可能的。

(1);这 事实上,中断速度很慢意味着任何其他代码都被中断 不经常,以便其他代码可以继续下面。

对于(2);串行阅读缓慢的事实意味着代码是 对中断不敏感。任何中断都会略微影响它 由于波特率的时序将是,因此这段代码必须更好地变得更好 less affected.

(3);任何发生的中断都需要尽可能少的时间。

请注意,所有这一切都是交易。作为 中断率/执行时间增加了较低的优先级任务接收 less
加工 time因此 重要的是,ISR很小,所以它 对较低优先级代码的影响最小。

有关中断的更多信息 点击这里.


//////// //// //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////// //
// 从这里开始
//
空白 main() {
U8  i,chr     ; // 一般的 purpose loop var.
U16 Count = 0; // 重启职责 - 柜台。
u32 timec = 0; // 采用 for time delays.
char op[5];

   init_ports();
   init();
   _soft_usart_init(2400);

   enable_interrupts();

   while(1) {
     check_serial_rx();
   }
}


你可以看到 伺服控制器主循环代码是微不足道的,基本上如果围绕嗖嗖声 无限的循环做到了 check_serial_rx.() 行动。这检查了吗? 输入串行数据线很低,如果启动串行接收动作。

接收和解码串行字节后
check_serial_rx.()efffs the data into the Decode_Input.() 常规。

Decode_Input.()例程占据每个数据字节 并将其插入缓冲区,当它收到返回字符时 (\ r或键盘上的ENTER键),它处理到目前为止收集的数据。  它接受的唯一命令是s<nnn>NNN必须长3位。  

string_to_num.()例程转换 三位数字进入无符号int,用于设置中断例程 the servo position.

伺服控制器:中断服务例程(ISR)

//////// //// //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////// //
空白 interrupt(void) {
无符号 val;

   //// ///////////////////////////////////////////////////////////////////////////////////
   // timer 0.
   如果 (INTCON & (1<<T0IF) ) { // T0 overflowed ?
      INTCON &= ~(1<<T0IF);   //清除Timer0溢出位。

      // fosc / 4 x(prescale) x(计数溢出)=重复速率。
      // 1US x 128 x 156 = 20ms repeat rate.
      TMR0 = 256-156+2;  //需要156但是松动TMR0松动2

      time++; //计数20ms 一般使用的时期。

      //现在设置timer1 as a 1 shot timer
      // 放 overflow for Timer 1
      val = 65535级;

      //使用这些变量 reporting debug
      st_TMR1L =  val & 0x00ff;
      st_TMR1H = (val & 0xff00)>>8;

      TMR1H = st_TMR1H; // 设置高1st,因此立即不会溢出
      TMR1L = st_TMR1L;

      st_val = val;

      //启用计时器1.- 每个定时器0中断或20ms = 1拍摄。
      PIE1   |= (1<<TMR1IE);

      GPIO  |= (1<<SERVO_BIT);   //设置伺服
   }

   //// ///////////////////////////////////////////////////////////////////////////////////
   //计时器1
   如果 (PIR1 & (1<<TMR1IF) ) {
      PIR1 &= ~(1<<TMR1IF); //清除标志。

      GPIO  &= ~(1<<SERVO_BIT);   //重置伺服
   }

   INTCON |= (1<<T0IE);   //启用计时器0。

   // note gie由Retfie设置 指令(请参阅汇编输出)。
}



章节 以上突出显示,以上显示了您的单次使用计时器1。
定时器0中断代码

  1. val设置为 送达时期溢出Timer1。
  2. 定时器1是 enabled.
  3. 伺服输出 is set high.

定时器1 interrupt code

  1. 伺服输出 is set low.
  2. 定时器1是 没有重新启用.

伺服控制器: Accuracy

这正是 the same as for 教程6..

一个秘密:控制伺服 controller

我想要 向您展示一个惊人的编程工具 - 实际上,如果您已经下载了 我包含的源代码包括使用此工具的文件。

这个工具实际上是一种编程语言,而不仅仅是任何语言 强大的GUI发电机 it goes way 超出GUI工具。你可以用它来用你想要的任何任务(在 PC) - 它比使用C要做的更容易。

它的名字是tcl (工具命令语言),它是一种自由形式语言,可让您继续使用 工作。如果我要比较C到TCL,我会说它就像比较 C编程到PIC微控制器中的汇编器。


要使用源文件中包含的脚本,您需要下载TCL 程序本身(执行TCL脚本)

http://www.tcl.tk/

顺便说一下,这种语言是免费的!

一旦安装后,只需双击Explorer中的.tcl文件。这将开放 程序创建GUI和简单按钮以与伺服通信 马达。移动滑块以控制伺服!

注意:您可以在许多环境中使用TCL 包括Windows,Linux,Mac - 以及源几乎没有更改 代码 - 它是一种多平台语言。

servo-controller.tcl脚本150代码行,是伺服的基础 电机测试仪。如果你这样做了'normal C'你必须了解一个 百万不同的事情例如模板库,内存分配,文件 指针还有更多,如果你这样做的是,它将需要1500行 code!!

以下是伺服控制器脚本的屏幕截图:

伺服控制器TCL脚本:


伺服控制器TCL脚本


它没有抛光 - just functional - 但它只花了几个小时来制作和调试。如果你想你可以 创建菜单,图形,按钮 - 所有标准的Windows内容。它也是 具有音频,对象方向,图像等的扩展

最好的所有TCL都是免费的!

它没有限制使用


注意:要创建文本框(对象 在被称为小部件的底部) 全部 您需要的是这两行代码:

   # View serial data                                          
   文本.t -width 20 -height 4                                 
   Pack .t -side底部 - 填充-Before 1 -Before .S1      
  
注意:此文本框有完整编辑 功能 - 您可以使用其他小部件添加滚动条。  

我只是发现这个惊人,你注意到了视线没有编译器 - 如果 您要更改脚本只需将其加载到文本编辑器中更改它 再次开始它 - 你赢了'必须等待代码编译的年龄 - 它 在TCL引擎内通过字节代码编译器编译。

较低的文本框显示从12F675伺服控制器回来的数据 (IP->S150)文本S150由从字符从回波的字符组成 12F675。 TCL脚本定期发送S150。

如果将顶部滑块移动到所需的角度,则输出数据已更改 您可以通过此接口控制伺服。

后退 12F675教程索引 下一页

新的! Comments

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

从12F675跳跃教程6:伺服控制器到
最佳微控制器 - 项目主页




隐私政策 | 接触 | 关于我

网站地图 | 使用条款


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.

回到顶部