ATmega128单片机与舵机控制板通信

发布者:chuyifei最新更新时间:2018-05-29 来源: eefocus关键字:ATmega128  单片机  舵机控制板  通信 手机看文章 扫描二维码
随时随地手机看文章

ATmega128单片机通过舵机控制板,控制多路舵机动作。舵机控制板与单片机之间数据通信的方式,采用了常见的串行通信(USART)。舵机控制板具有自动识别波特率(9600,19200,38400,57600,115200,128000自动识别)的功能。

 

舵机移动指令:

指令格式:#P.... T

=舵机号,范围1-32(十进制数)

=脉冲宽度(舵机位置),范围500–2500。单位us(微秒)

\r\n = 十六进制数0x0d,0x0a(回车符),指令结束符。

例如: #8P600T1000\r\n

移动8号舵机到脉宽600us,使用时间为1000毫秒

#11P2000#30P2500T1500\r\n

移动11号舵机到脉宽2000us,移动30号舵机到脉宽2500us,使用的时间为1500毫秒,舵机移动的速度依赖于前一时刻舵机的位置决定,11号舵机和30号舵机同时到达指定位置。

下面是代码:


  1. /**************************************************** 

  2.  

  3. ----------------------------------------main.c----------------------------------- 

  4.  

  5. ****************************************************/  

  6.   

  7. #include  

  8. #include  

  9. #include"128_USART0.h"  

  10.   

  11.    

  12.   

  13. /******************************************* 

  14. 函数名称: void delay_nms(uint ms) 

  15. 功    能: 延时指定毫秒(8M晶振) 

  16. 参    数: ms--延时的毫秒数 

  17. 返 回 值: 无 

  18. /********************************************/  

  19. void delay_nms(uint ms)      

  20. {  

  21.  uint i,j;  

  22.  for( i=0;i

  23.   for(j=0;j<1141;j++);//1141是在8MHz晶振下,仿真得到的数值  

  24. }  

  25.   

  26.   

  27. /******************************************* 

  28. 函数名称: main 

  29. 功    能: 主函数 

  30. 参    数: 无 

  31. 返 回 值: 无 

  32. /********************************************/  

  33. void main(void)  

  34. {  

  35.  USART0_init();  

  36.  while(1)  

  37.  {  

  38.   USAT0_send_string("#1P1056#2P2056T2500\r\n");  

  39.   delay_nms(3000);  

  40.   USAT0_send_string("#1P1722#2P1433T2500\r\n");  

  41.   delay_nms(3000);  

  42.  }  

  43. }  

  44.   

  45. /************************************************ 

  46.  

  47. ************************END********************* 

  48.  

  49. ************************************************/  

  50.   

  51.    

  52.   

  53. /*********************************************** 

  54.  

  55. --------------------------------128_USART0.h------------------------- 

  56.  

  57. ***********************************************/  

  58.   

  59. #ifndef _128_USART0_H_  

  60. #define _128_USART0_H_  

  61. /******************数据类型宏定义******************/  

  62. #define uchar  unsigned char  

  63. #define uint   unsigned int  

  64.   

  65. #define fosc   8000000  //系统晶振  

  66. #define baud   9600     //波特率  

  67. /******************串口函数**********************/  

  68. void USART0_init(void);  

  69. void USART0_send_byte(uchar data);  

  70. uchar USART0_receive_byte(void);  

  71. void USAT0_send_string(char *str);  

  72.   

  73. #endif  

  74.   

  75.    

  76.   

  77. /************************************************ 

  78.  

  79. ************************END********************* 

  80.  

  81. ************************************************/  

  82.   

  83.    

  84.   

  85. /*********************************************** 

  86.  

  87. --------------------------------128_USART0.c------------------------- 

  88.  

  89. ***********************************************/  

  90.   

  91. #include  

  92. #include"128_USART0.h"  

  93.   

  94. /******************************************* 

  95. 函数名称: uart0_init 

  96. 功    能: 串口0的初始化 

  97. 参    数: com 

  98. 返 回 值: 无 

  99. /********************************************/  

  100. void USART0_init(void)  

  101. {  

  102.  UCSR0B=0X00;  

  103.  UCSR0A=0X00;  

  104.  UCSR0C=(1<

  105.  UBRR0L=(fosc/16/(baud+1))%256;   //波特率寄存器设定  

  106.  UBRR0H=(fosc/16/(baud+1))/256;  

  107.  UCSR0B=(1<

  108. }  

  109.   

  110. /******************************************* 

  111. 函数名称: USART0_send_byte 

  112. 功    能: 串口0发送单字节 

  113. 参    数: data--发送字符元素 

  114. 返 回 值: 无 

  115. /********************************************/  

  116. void USART0_send_byte(uchar data)  

  117. {  

  118.  while(!(UCSR0A & (1<

  119.  UDR0=data;  

  120. }  

  121.   

  122. /******************************************* 

  123. 函数名称: USART0_receive_byte 

  124. 功    能: 串口0接收单字节 

  125. 参    数: 无 

  126. 返 回 值: UDR0--接收字符元素 

  127. /********************************************/  

  128. uchar USART0_receive_byte(void)  

  129. {  

  130.  while(!(UCSR0A & (1<

  131.  return (UDR0);  

  132. }  

  133.   

  134. /******************************************* 

  135. 函数名称: USAT0_send_string 

  136. 功    能: 串口0发送字符串 

  137. 参    数: str--字符串数据 

  138. 返 回 值: 无 

  139. /********************************************/  

  140. void USAT0_send_string(char *str)  

  141. {  

  142.  while(*str)  

  143.  {  

  144.   USART0_send_byte(*str);  

  145.   str++;  

  146.  }  

  147.  USART0_send_byte(0X0A);//换行  

  148.  USART0_send_byte(0X0D);//回车  

  149. }  

  150.   

  151.    

  152.   

  153. /************************************************ 

  154.  

  155. ************************END********************* 

  156.  

  157. ************************************************/  


关键字:ATmega128  单片机  舵机控制板  通信 引用地址:ATmega128单片机与舵机控制板通信

上一篇:ICCAVR编译出现Cannot find source file X:\XXXX
下一篇: ICCAVR编译报错 !E (197): area 'bss' not large enough

推荐阅读最新更新时间:2024-03-16 16:03

74HC595与AT89C2051单片机接口的显示电路
74HC595与AT89C2051单片机接口设计的显示面板电路。P1 口的P115 、P116 、P117 用来控制LED 的显示,分别接到SLCK、SCLK和SDA 脚。三个数码管用来显示电压值的大小。在电路板上, LED3 在最左边,LED1 在最右边, 送数据时, 先送LED3 的显示码,最后送LED1 的显示码。LED 的亮度用PR1~ PR3 的阻值来控制。
[单片机]
74HC595与AT89C2051<font color='red'>单片机</font>接口的显示电路
如何在STM32单片机中加入RDP功能
沿用之前CM3核的STM32F10X系列的加入RDP功能,之后在Segger的Unsecured Chip或者Unlock STM32的Cmd无法进行去除RDP,而Unlock STM32则提示无法识别该型号。尝试了很多方法,依然无法对其进行Remove RDP,估计是型号比较新,Segger还未完全支持吧。所用 的Segger为官方最新的Release跟Beta版本V4.65d跟V4.67c/ 估计可用的方法有以下三种: 1、配置Boot区,用System bootloader启动,Boot1 = 0,Boot0=1,然后用串口ISP的A上位机对其进行去除读保护; 2、配置Boot区,用SRAM运行程序,在SRAM的主程序中
[单片机]
单片机系统多串行口设计方法
1 前 言 在以单片机为核心的测控系统中.微控制器往往需要两个或两个以上的串行口与其他主机或外设进行通讯,如何使系统具备多个串行接口,是一个具有普遍性的问题。尤其在航空航天领域,由于GPS、大气数据系统、数字罗盘、无线电高度表、甚至陀螺等航空电子设备普遍采用串行通讯方式,单片计算机系统就更需要有多个串行口以满足与外界信息交换的需要。 2 常用的多串行口设计方法 ①选用多串行口单片机 直接选用多串行口单片机作为系统的CPU,显然是最直接有效的方法。现在有许多新型CPU配备两个或两个以上串行口,如W77E58、DS80C320、MSP430F149、C8051F020单片机和数字信号处理器TMS320C30有两
[单片机]
<font color='red'>单片机</font>系统多串行口设计方法
基于单片机的链梯降速控制系统的设计
高层建筑遇险无动力循环链梯逃生装置,对居住于高层建筑的人们遇火逃生十分必要。无动力消防链梯是一种典型的变负载非线性系统,随着负载的增加,发电机绕组中的电流增加,磁场增强,转速加快,链梯的下降速度也增大。系统要求不论负载如何变化,链梯稳定下降的速度必须保持在0.4 m/s~0.5 m/s,为此,本文设计了一种基于单片机的参数自适应模糊PID控制器,根据链梯的实际响应在控制过程中自动调整、修改和完善控制规则与参数,从而使系统的控制性能不断完善,达到最佳的控制效果。 1 系统的主要硬件电路设计 控制系统的硬件主要由传感器、控制器和执行器三大部分组成。传感器作为输入部分,用于测量发电机的转速,将其转换为电信号;控制器的作用是接收传
[单片机]
基于<font color='red'>单片机</font>的链梯降速控制系统的设计
STM32串口通信(基于缓冲区)编程及遇到的问题总结
在写串口通信前阅读了STM32中文参考手册,然后满心澎湃地写代码。在这个过程中遇一些让人郁闷的事情,目前这些问题目前已经解决了(嘿嘿嘿),特此来总结一番。串口的使用步骤大概如下(51单片机、STM32、QT或VS编写PC串口上位机都是如此) 1、初始化串口参数(波特率、数据位、停止位、校验位、流控制、开启接收/发送) 2、配置串口中断 3、数据传输 那么STM32怎么使用串口呢?上面已经说了嘛,所以按照以上步骤即可。可是由于STM32的引脚是可以复用的,我们还需要设置串口通信引脚(GPIO)的工作方式,然后再设置串口参数、串口中断。 下文函数基于STM32固件库V3.5,以STM32F103RC的串口1的使
[单片机]
基于16位单片机的逆变电源系统的设计
1、引言 近来,逆变电源在各行各业的应用日益广泛。本文介绍了一种以16位单片机8XC196MC为内核的逆变电源系统的设计。8XC196MC片内集成了一个3相波形发生器WFG,这一外设装置大大简化了产生同步脉宽调制波形的控制软件和外部硬件,可构成最小单片机系统同时协调完成SPWM波形生成和整个系统的检测、保护、智能控制、通讯等功能。 2、 电源系统的基本原理 该电源由蓄电池输入24V直流电,然后通过桥式逆变电路逆变成SPWM波形,经低通滤波器得到正弦波输出。SPWM波形由8XC196MC的3相波形发生器WFG产生,可输出所需电压和频率的正弦波。 3、 系统硬件设计 该逆变电源系统可实现调频、调压功能。通过A/D转换,自动反
[应用]
基于AT90S8515单片机的瞬变信号捕获与存储器
  当代科学研究的许多领域中,常会遇到如何捕捉单次瞬变信号的问题。对于单脉冲信号捕获、周期信号频谱分析等高速数据采集系统,通常都采用DMA技术实现。不论是由PC机内的DMA控制器芯片实现,还是由单片机结合DMA技术实现,其系统结构都比较复杂;若采用通用DSP芯片开发该类仪器仪表,造价过高。故此,研制电路简单、实用廉价的高速数据采集系统是很必要的。本瞬变信号捕获与存储器正是基于以上因素而设计的,它是由AT90S8515单片机直接控制TLC5510高速A/D实现高速数据采集,采样速率高达8MHz,具有如下功能:   ·可捕获各种单次脉冲,最小脉宽可达1微秒。   ·可将捕获信号通过X轴、Y轴输出,在CRT上显示出来。   ·能实
[单片机]
如何使用8051微控制器和蓝牙模块构建一个Android手机控制的机器人
在这个项目中,我们将使用8051微控制器和蓝牙模块构建一个Android手机控制的机器人。该机器人是使用直流电机设计的,直流电机的方向将由从安卓应用程序收到的命令控制。机器人的状态被发送回安卓应用程序。该项目还将帮助HC-05蓝牙模块与8051微控制器的接口. 所需组件: 8051 微控制器 (AT89S52) HC-05 蓝牙模块 L293D 电机驱动器 机器人底盘 直流电机 (2) 轮子 (2) 脚轮 跳线 蓝牙终端安卓应用 电路图: 8051 微控制器: 8051微控制器是一种8位微控制器,具有128字节的片上RAM,4K字节的片上ROM,两个定时器,一个串行端口和四个8位端口。8052微控制器是8051微控制
[单片机]
如何使用8051<font color='red'>微控制器</font>和蓝牙模块构建一个Android手机控制的机器人
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved