单片机控制 舵机 参考程序

合集下载

STM32控制舵机的原理及代码

STM32控制舵机的原理及代码

STM32控制舵机的原理及代码1、舵机的⼯作原理:舵机内部的控制电路,电位计(可变电阻器)和电机均被连接到电路板上,如内部结构图的右边部分。

控制电路通过电位计可监控舵机的当前⾓度。

如果轴的位置与控制信号相符,那么电机就会关闭。

如果控制电路发现这个⾓度不正确,它就会控制马达转动,直到它达到指定的⾓度。

舵机⾓度根据制造商的不同⽽有所不同。

⽐如,⼀个180度的舵机,它可以在0度⾄180度之间运动。

由于限位装置被安装在主输出装置上,超出这个范围机械结构就不能再转动了。

舵机的输出功率与它所需要转动的距离成正⽐。

如果输出轴需要转动很长的距离,马达就会全速运转,如果它只需要短距离转动,马达就会以较慢的速度运⾏,这叫做速度⽐例控制。

2、如何让舵机转到指定⾓度:控制线⽤于传输⾓度控制信号。

这个⾓度是由控制信号脉冲的持续时间决定的,这叫做脉冲编码调制(PCM)。

舵机的控制⼀般需要⼀个20ms左右的时基脉冲,该脉冲的⾼电平部分⼀般为0.5ms-2.5ms范围,总间隔为2ms。

脉冲的宽度将决定马达转动的距离。

例如:1.5毫秒的脉冲,电机将转向90度的位置(通常称为中⽴位置,对于180°舵机来说,就是90°位置)。

如果脉冲宽度⼩于1.5毫秒,那么电机轴向朝向0度⽅向。

如果脉冲宽度⼤于1.5毫秒,轴向就朝向180度⽅向。

以180度舵机为例,对应的控制关系是这样的:0.5ms————-0度;1.0ms————45度;1.5ms————90度;2.0ms———–135度;2.5ms———–180度;3、舵机转动⾓度对应的占空⽐以及⽐较寄存器的值计算⽅法:舵机配置需要满⾜频率为50HZ,PWM占空⽐是指在⼀个周期内,信号处于⾼电平的时间占据整个信号周期的百分⽐,由于PWM周期为20ms,所以(以舵机会转动 45°为例),占空⽐就应该为1ms/20ms = 5%,所以TIM_SetCompare1的 TIMx 捕获⽐较 1 寄存器就为200-200*5% = 1904、STM32控制舵机的代码:控制舵机代码:Main.cpp#include "sys.h"#include "delay.h"#include "usart.h"#include "led.h"#include "timer.h"int main(void){u16 led0pwmval=185;//u8 dir =1;delay_init();LED_Init();TIM3_PWM_Init(199, 7199);//50hzwhile(1){led0pwmval=195;//45TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);led0pwmval=190;//45TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);led0pwmval=185;//90TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);led0pwmval=180;//135TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);led0pwmval=175;//180TIM_SetCompare2(TIM3,led0pwmval); delay_ms(800);}}Timer.h#ifndef __TIMER_H#define __TIMER_H#include "sys.h"void TIM3_PWM_Init(u16 arr , u16 psc);#endifTimer.c#include "timer.h"void TIM3_PWM_Init(u16 arr , u16 psc){GPIO_InitTypeDef GPIO_InitTypestrue;TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypestrue;TIM_OCInitTypeDef TIM_OCInitTypesture;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//使能GPIO时钟,以及TIM3时钟使能GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//复⽤GPIO_InitTypestrue.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitTypestrue.GPIO_Pin=GPIO_Pin_5;GPIO_InitTypestrue.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitTypestrue); //GPIO初始化TIM_TimeBaseInitTypestrue.TIM_Period=arr;TIM_TimeBaseInitTypestrue.TIM_Prescaler=psc;TIM_TimeBaseInitTypestrue.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitTypestrue.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInit(TIM3 ,&TIM_TimeBaseInitTypestrue); //定时器初始化TIM_OCInitTypesture.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitTypesture.TIM_OCMode=TIM_OCMode_PWM2;TIM_OCInitTypesture.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OC2Init(TIM3 ,&TIM_OCInitTypesture );//CH2通道初始化TIM_OC2PreloadConfig( TIM3 ,TIM_OCPreload_Enable);//使能预装载寄存器TIM_Cmd(TIM3,ENABLE);}。

舵机(servo motor)的控制

舵机(servo motor)的控制

舵机(servo motor)的控制基于单片机16f877a和proteus的仿真舵机是一种位置伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。

(注意:如果你控制的舵机在不停的抖动,其中一个原因就是你给的脉冲有杂波,这点很重要。

舵机是一个物理器件,它的转动需要时间的,因此,程序中占空比的值变化不能太快,不然舵机跟不上程序的响应时间。

)一、舵机的结构我们选的舵机型号是TowerPro MG995,实物如图:它有三条线棕色、红色、黄色分别是GND、 V+ 、 S(信号)。

如下图:二、舵机的单片机控制原理1、我们得先了解舵机的工作原理:控制信号由舵机的信号通道进入信号调制芯片,获得直流偏置电压。

它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。

最后,电压差的正负输出到电机驱动芯片决定电机的正反转。

当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。

它的控制要求如下图:2、由上可知舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置。

我们用pic单片机的定时器1模块产生PWM信号,得到控制电机的占空比,也就如上图的占空比信号,周期是20Ms.下面我们来看看怎样产生上图的占空比,单片机的定时器1模块最大可以产生174ms的延时,也就是可以产生最大174ms的中断。

怎样设置Timer1来产生上述占空比的中断,可以参考具体资料书。

当系统中只需要实现一个舵机的控制,采用的控制方式是改变单片机的一个定时器中断的初值,将20ms分为两次中断执行,一次短定时中断和一次长定时中断。

这样既节省了硬件电路,也减少了软件开销,控制系统工作效率和控制精度都很高。

具体的设计过程:例如想让舵机转向左极限的角度,它的正脉冲为2ms,则负脉冲为20ms-2ms=18ms,所以开始时在控制口发送高电平,然后设置定时器在2ms 后发生中断,中断发生后,在中断程序里将控制口改为低电平,并将中断时间改为18ms,再过18ms进入下一次定时中断,再将控制口改为高电平,并将定时器初值改为2ms,等待下次中断到来,如此往复实现PWM信号输出到舵机。

舵机驱动程序

舵机驱动程序

舵机驱动程序所用的舵机型号为Tower Pro Micro Servo 99 SG90,单片机型号为Atmega16。

舵机有三根引出线:VCC,GND,CONTROL。

VCC,GND为舵机的电源线,CONTROL为舵机控制信号的输入线。

控制信号为50Hz的PWM波形(矩形波),不同的脉宽(占空比)对应舵机不同的方位角。

改变脉宽即可改变舵机的方位角。

在没有过载且控制信号持续稳定的条件下,舵机的方位角严格保持不变.此控制信号适合所有类型的舵机.需要注意的是尽管也可以用延时函数来实现PWM波,但舵机运行可能不平稳,而且若PWM波的频率偏离50Hz过大,舵机会出现震颤甚至会无法启动舵机!下面给出了一特定脉宽的舵机控制信号,PB7为控制信号的输出端口。

程序中采用T/C0定时器中断的方式来产生PWM波形,信号更准确.需要说明的是,因程序脉宽调整得原理,脉宽的可能取值是离散的,只能得到一些特定位置,但对于普通的执行机构,是能够满足要求的。

//ICC—AVR application builder : 2010—9-21 10:22:14// Target : M16// Crystal: 8。

0000Mhz#include 〈iom16v。

h>#include 〈macros.h>//servo—driveunsigned int count_T=0;unsigned int angle=3;// set angle//note: change the value of angle(0~5),then you can get different angle //position of the servo//TIMER0 initialisation - prescale:64// WGM: Normal// desired value: 0.5mSec// actual value: 0.499mSec (0.2%)void timer0_init(void){TCCR0 = 0x00;//stopTCNT0 = 0xC2; //set countOCR0 = 0x00; //set compareTCCR0 = 0x03; //start timer}#pragma interrupt_handler timer0_comp_isr:20void timer0_comp_isr(void){//compare occured TCNT0=OCR0if(count_T<angle) PORTB|=(1〈<PB7);//PB7 as output port to control servo else PORTB&=~(1〈〈PB7);count_T++;count_T%=40;}//call this routine to initialize all peripherals void init_devices0(void){//stop errant interrupts until set upCLI();//disable all interruptstimer0_init();MCUCR = 0x00;GICR = 0x00;TIMSK = 0x02; //timer interrupt sourcesSEI(); //re—enable interrupts//all peripherals are now initialized}//port initialvoid port_init( ){DDRA = 0x00;DDRB = 0x10; //PB7 as output port to control servo DDRC = 0x00;DDRD = 0x00;PORTA = 0x00;PORTB = 0x00;PORTC = 0x00;PORTD = 0x00;}void main(){port_init();init_devices0( );while(1);}。

单片机控制舵机程序

单片机控制舵机程序

单片机控制舵机程序第一章:引言单片机作为一种重要的嵌入式系统开发工具,广泛应用于各个领域,舵机作为一种常用的机械驱动装置,也在各种应用中得到广泛的应用。

本论文通过设计单片机控制舵机的程序,旨在探究单片机如何通过编程实现舵机的精确控制。

第二章:舵机的基本原理舵机是一种常见的位置式伺服机构,它可以通过控制信号控制其角度位置,实现精确的运动控制。

它由直流电机、减速机构、位置检测传感器和驱动控制电路组成。

通过单片机控制舵机,可以实现根据需要精确调整舵机的位置和速度。

第三章:单片机控制舵机的设计与实现本章主要介绍如何使用单片机来控制舵机。

首先,需要选择合适的单片机和舵机。

常见的单片机有51系列、AVR、STM32等,而舵机则有舵机舵盘、舵机电机和舵机控制器等。

随后,在硬件设计上,需要连接单片机和舵机,并根据舵机的电气特性设计相应的电路保护措施。

在软件设计上,需要编写单片机的控制程序。

通过控制程序发送特定的PWM(脉宽调制)信号给舵机,从而控制舵机的角度位置和运动速度。

第四章:单片机控制舵机的应用与改进在本章中,将介绍单片机控制舵机的应用与改进。

首先,在机器人领域,单片机控制舵机可以实现机器人的运动与动作控制,从而实现更复杂的功能。

其次,在航模、智能家居等领域,单片机控制舵机也应用广泛,可以实现遥控、智能调节等功能。

最后,对现有的单片机控制舵机的程序进行改进,如优化舵机的运动曲线、增加舵机的控制精度等,可以提升系统的性能。

总结:本论文通过设计单片机控制舵机的程序,探究了单片机通过编程实现舵机的精确控制的原理和方法。

同时,介绍了舵机的基本原理和单片机控制舵机的设计与实现过程,并讨论了单片机控制舵机的应用与改进。

通过本论文的研究,可以帮助读者了解和应用单片机控制舵机的技术,为单片机在舵机控制方面的应用提供参考。

第五章:实验及结果分析在本章中,我们将介绍根据上述设计和实现的单片机控制舵机的程序的实验,并对实验结果进行分析。

舵机控制流程图演示教学

舵机控制流程图演示教学

舵机控制流程图常规舵机控制流程图1.5ms脉宽)带动电位器柄旋舵机电路方框图0.5—2.5msDC马达舵机说明1,电机经过变速(减速)后连接到电位器柄旋转2,输入脉冲宽度为0.5—2.5ms,周期为3ms—20ms(数字舵机的脉冲周期因不同的客户使用的周期不同,常用为10ms;模拟舵机周期为20ms.)3,脉冲宽度,表示电位器转动的角度不同(即舵臂角度不同) 4,电机转速为14000/分钟,减速比为250:1,要求舵角转速为0.10-0.2S/60度(此部份与电机转速有关,程序方面需注意及时扫描电位器角度而给电机改变不同供电方式),扫描不及时易出现舵臂回抖现象.5,脉冲宽度不变的情况下,能锁住电机.6,堵转4秒钟后,电机进入低压供电(或PWM少占空比)工作模式,堵转一旦去除,电机供电进入正常模式.程序其它要求(因客户要求不同,需做不同类型的舵机)1,马达供电PWM(周期或占空比可调)2,电位器角度识别精度可调(1023分,255分,511分..)3,舵转动角度可调(-90 +90度)参考电路图:VR15KR1220C4104123J1CON3VDDS11G12S23G24D25D26D17D18U1UD4606GS11G12S23G24D25D26D17D18U2UD4606GVDDVDDVSS1P3.0/SCL2SDA/P3.13VPP/P3.24ADC8/P005ADC9/P016ADC10/P027ADC11/P038ADC12/P049ADC13/P0510ADC14/P0611ADC0/P1012ADC1/P1113ADC2/P1214ADC3/P1315ADC4/P1416ADC5/P1517ADC6/P1618ADC7/P1719VDD20U3SC51P5708SN+C210uin3G1o u t2U4XC6206-33+C310USinSin3.3V3.3VR3220KR4220K A-+MG1MOTOR SERVO R21KC1104o u t1o u t2o u t3o u t4o u t1o u t2o u t3o u t4mo ter正转1111反转111111STOP STOPSTOP 电机正转电机反转不良舵机现象:1,堵转保护人为堵转电机时,约3秒后电机进入低电流(即低压,占空比少)供电方式,用以降低电机损耗而保护舵机.堵转一旦去除,电机需立即进入正常供电方式.不良现象:A,无保护功能B,堵转去除后电机不能马上进入正常状态2,马达抖动轻微外力作用舵臂时,因电位器角度有此而有细微变化(如:0.02度)下,马达转动以校正角度差.不良现象:A,马达校正时力度过大在,是出现抖动现象.(如角度差与电机供电时间或PWM没有建立关系;全压供电方式)堵转保护流程图无刷舵机控制流程图。

51单片机 舵机控制程序

51单片机 舵机控制程序

51单片机舵机控制程序题目:基于51单片机的舵机控制程序设计与实现第一章:引言1.1 研究背景51单片机是一种广泛应用于嵌入式系统中的微控制器,具有成本低、功耗低、可靠性高等优点。

而舵机是一种能够控制角度的电机装置,广泛应用于机器人、航模和自动化设备等领域。

本章旨在探讨基于51单片机的舵机控制程序设计与实现的意义和必要性。

1.2 研究目的本研究的主要目的在于设计并实现一套稳定、高效的舵机控制程序,为使用51单片机的嵌入式系统提供角度控制功能。

通过本研究,可以提高舵机控制的精度和稳定性,拓展舵机的应用领域。

第二章:51单片机舵机控制程序的设计2.1 硬件设计根据舵机的控制特点,我们需要通过PWM信号控制舵机转动的角度。

在硬件设计上,我们需要使用51单片机的定时器功能产生PWM信号,并通过IO口输出给舵机。

具体的设计方案包括选择合适的定时器、设置定时器的工作模式和频率等。

2.2 软件设计在软件设计上,我们需要通过编写51单片机的控制程序实现舵机的控制。

具体的设计流程包括:(1)初始化:设置定时器的工作模式和频率,配置IO口的输出模式。

(2)角度控制:根据舵机的角度范围和控制精度,将目标角度转换为占空比,并通过PWM信号控制舵机转动到目标角度。

(3)稳定性优化:通过对定时器周期和占空比的调整,优化舵机的稳定性,减小舵机的误差。

第三章:51单片机舵机控制程序的实现3.1 硬件搭建在实现阶段,我们需要根据硬件设计方案选购相应的硬件元件,并将其搭建成一个完整的舵机控制系统。

具体的搭建过程包括:(1)选购舵机和51单片机等硬件元件,并连接相关的信号线。

(2)按照硬件设计方案,搭建并调试舵机控制系统。

3.2 软件编写在软件实现阶段,我们需要使用51单片机的编程语言(如C语言或汇编语言)编写舵机控制程序,并通过编译和烧录等步骤将程序下载到51单片机中。

具体的编写过程包括:(1)按照软件设计方案,编写舵机控制程序的相关函数和逻辑。

舵机控制流程图

舵机控制流程图

常规舵机控制流程图1.5ms脉宽)舵机电路方框图0.5—2.5ms舵机说明1,电机经过变速(减速)后连接到电位器柄旋转2,输入脉冲宽度为0.5—2.5ms,周期为3ms—20ms(数字舵机的脉冲周期因不同的客户使用的周期不同,常用为10ms;模拟舵机周期为20ms.)3,脉冲宽度,表示电位器转动的角度不同(即舵臂角度不同) 4,电机转速为14000/分钟,减速比为250:1,要求舵角转速为0.10-0.2S/60度(此部份与电机转速有关,程序方面需注意及时扫描电位器角度而给电机改变不同供电方式),扫描不及时易出现舵臂回抖现象.5,脉冲宽度不变的情况下,能锁住电机.6,堵转4秒钟后,电机进入低压供电(或PWM少占空比)工作模式,堵转一旦去除,电机供电进入正常模式.程序其它要求(因客户要求不同,需做不同类型的舵机)1,马达供电PWM(周期或占空比可调)2,电位器角度识别精度可调(1023分,255分,511分..)3,舵转动角度可调(-90 +90度)参考电路图:VR15KR1220C4104123J1CON3VDDS11G12S23G24D25D26D17D18U1UD4606GS11G12S23G24D25D26D17D18U2UD4606GVDDVDDVSS1P3.0/SCL2SDA/P3.13VPP/P3.24ADC8/P005ADC9/P016ADC10/P027ADC11/P038ADC12/P049ADC13/P0510ADC14/P0611ADC0/P1012ADC1/P1113ADC2/P1214ADC3/P1315ADC4/P1416ADC5/P1517ADC6/P1618ADC7/P1719VDD20U3SC51P5708SN+C210uin3G1o u t2U4XC6206-33+C310USinSin3.3V3.3VR3220KR4220K A-+MG1MOTOR SERVO R21KC1104o u t1o u t2o u t3o u t4o u t1o u t2o u t3o u t4mo ter正转1111反转111111STOP STOPSTOP 电机正转电机反转舵机角度及脉冲宽度关系:不良舵机现象:1,堵转保护人为堵转电机时,约3秒后电机进入低电流(即低压,占空比少)供电方式,用以降低电机损耗而保护舵机.堵转一旦去除,电机需立即进入正常供电方式.不良现象:A,无保护功能B,堵转去除后电机不能马上进入正常状态2,马达抖动轻微外力作用舵臂时,因电位器角度有此而有细微变化(如:0.02度)下,马达转动以校正角度差.不良现象:A,马达校正时力度过大在,是出现抖动现象.(如角度差与电机供电时间或PWM没有建立关系;全压供电方式)堵转保护流程图无刷舵机控制流程图。

舵机及舵机的精确控制

舵机及舵机的精确控制

使用传统单片机控制舵机的方案也有很多,多是利用定时器和中断的方式来完成控制的,这样的方式控制1个舵机还是相当有效的,但是随着舵机数量的增加,也许控制起来就没有那么方便而且可以达到约2微秒的脉宽控制精度了。听说AVR也有控制32个舵机的试验板,不过精度能不能达到2微秒可能还是要泰克才知道了。其实测试起来很简单,你只需要将其控制信号与示波器连接,然后让试验板输出的舵机控制信号以2微秒的宽度递增。
set0 s_motor1_drv
;
按这样写下去,一路PC写7个这样的伺服也一点不紧张的,因为PWM的周期是20毫秒,而最大脉宽才2.5毫秒,7*2.5=17.5毫秒。写完了所有的脉冲后又做什么,跳回再等待下一个20毫秒有效的信号量。而20毫秒的信号量从哪里来,因为多核心,当然可以随便拿个工作频率低点的CPU来产生啦。这样一来,一颗14PIN的FPPA ,PDK80C02-SOP14就可以通过无线或者红外来精确控制7路舵机。当然你想控制40路左右的驱动都没有问题,因为我们的最大封装就有40几个IO口。
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。
还是看看具体的实物比较过瘾一点:
2. 其工作原理是:
控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机控制舵机参考程序
51 单片机的资源都差不多,这里采用STC89C52 作为控制芯片,上位机的输出控制信号,利用串口接收控制舵机。

理论上,只用一个定时器就可以产生无限多路PWM波输出,但事实上,PWM输出越多,定时器中断里面操作的语句就越多,很繁杂,单片机的运行速度会变得很慢,以致于输出PWM波周期大于一般舵机的控制周期20ms,或者频率产生误差,导致舵机的颤抖。

所以,只利用一个定时器输出PWM有一定限制,路数不能太多,如果需要控制的舵机数量太多,建议更换带有PWM输出的单片机。

下面是单片机控制三路舵机的程序。

#include
sbit duoji1=P3 ;//PWM 输出口1
sbit duoji2=P2;//PWM输出口2
sbit duoji3=P2 ;//PWM 输出口3
intt,xinhao[3],flag;//xinhao[3]是上位机传来的三个控制信号
void main()
{
EA=1;
flag=0;
for(t=0;t xinhao[t]=15;//初始化控制信号
t=0;
TMOD=0x21;//设置定时器1 的工作方式为3,用于产生波特率,//接收串口的数据,设置定时器0 的工作方式为1,//用于控制舵机的PWM 波输出TH1=0xfd;//设置串口波特率为9600
TL1=0xfd;。

相关文档
最新文档