180度和270度舵机的使用(佛科院——深夜学习)

本文介绍了舵机的基本概念及其如何通过PWM信号进行控制。重点解释了180°舵机的工作原理,即通过改变高电平的持续时间来调整舵机的角度,并提供了具体的控制代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、什么是舵机?

二、伺服控制

1.了解PWM信号:

2.输出占空比不同的PWM信号控制舵机角度:

4.参考代码 :


一、什么是舵机?

可以简单理解为可通过改变输脉冲信号的不同占空比来得到不同转动角度的电机

二、伺服控制

1.了解PWM信号:

(3条消息) 对PWM简单理解(佛科院——深夜学习)_佛科院深夜学习的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/weixin_63568691/article/details/128158552?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167004976516800213089850%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167004976516800213089850&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-128158552-null-null.142^v67^control,201^v3^add_ask,213^v2^t3_control1&utm_term=%E5%AF%B9pwm%E7%AE%80%E5%8D%95%E7%90%86%E8%A7%A3&spm=1018.2226.3001.4187

2.输出占空比不同的PWM信号控制舵机角度:

对于180度和270度舵机来说都是一种占空比对应一个角度,角度分别从0°到180°或270°

  1. 180°舵机:高电平变化范围:t = 0.5ms——>t = 2.5ms,变化最小间隔:0.5ms
  2. 270°舵机,高电平变化范围:t = 0.5ms——>t = 2.5ms,变化最小间隔:0.1ms

3.舵机需要了解的参数:

  1. 额定电压:小于额定电压会使舵机无法工作,大于额定电压可能会使电机出现抖动,甚至会烧坏电机
  2. 高电平变化范围及其变化最小间隔

4.参考代码 :

#include <reg52.h>
#include <intrins.h>
sbit PWM = P3^7;  //设定PWM输出的I/O端口
sbit KEY_OPEN = P2^0;
sbit KEY_CLOSE = P2^1;
sbit led = P2^7;
unsigned char count = 0;
unsigned char timer1 ;
/*
对于180°舵机
t = 0.5ms——————-舵机会转动 0 ° 
t = 1.0ms——————-舵机会转动 45°
t = 1.5ms——————-舵机会转动 90°
t = 2.0ms——————-舵机会转动 135°
t = 2.5ms——————-舵机会转动180
*/

 
/*定时器T0初始化*/
void Timer0_Init()           
{

    TMOD = 0x01; //定时器T0设置成方式1
 
    TH0 = 0xff;   //定时常数 0.1ms 晶振为11.0592MHz
    TL0 = 0xa4;
 
    ET0 = 1;      
    TR0 = 1; 
	  EA=1; 
	}
	
/*T0中断初始化*/
void Time0_Init() interrupt 1 
{
	TR0 = 0; 
	TH0 = 0xff; // 0.1ms
	TL0 = 0xa4;
	
	if(count <= timer1) //5==0° 15==90°
	{ 
		PWM = 1; 
	}
	else 
	{ 
		PWM = 0; 
	}
	count++;
	if(count >= 200)    //T = 20ms清零
	{ 
		count = 0; 
	}
	TR0 = 1; //开启T0
}
void main()
{
	Timer0_Init();
	while(1)
	{
		if(!KEY_OPEN)
		{
			if(!KEY_OPEN)
			{	
				timer1 =5;//舵机恢复到0°的位置
		    count=0;//让定时器重新计数
			}
			while(!KEY_OPEN)led=0;
			led=1;
		}
    if(!KEY_CLOSE)
		{
			if(!KEY_CLOSE)
			{	
				timer1 =10;//舵机恢复到0°的位置
		    count=0;//让定时器重新计数
			}
			while(!KEY_CLOSE)led=0;
			led=1;
		}
	}
}

好的,以下是一个基本的舵机控制程序,适用于STM32 F1系列单片机: ```c #include "stm32f10x.h" #define SERVO_MIN_PULSE 500 // 舵机最小脉宽 #define SERVO_MAX_PULSE 2500 // 舵机最大脉宽 #define SERVO_MIN_ANGLE 0 // 舵机最小角 #define SERVO_MAX_ANGLE 270 // 舵机最大角 #define SERVO_PWM_PERIOD 20000 // PWM周期为20ms void delay_us(uint32_t us) { uint32_t delay = us * (SystemCoreClock / 1000000); while(delay--); } void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); } } void servo_init() { // 使能TIM2时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 定时器配置 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period = SERVO_PWM_PERIOD - 1; // PWM周期 TIM_TimeBaseStructure.TIM_Prescaler = SystemCoreClock / 1000000 - 1; // 预分频 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); // 输出比较配置 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = SERVO_MIN_PULSE; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM2, &TIM_OCInitStructure); // 使能定时器 TIM_Cmd(TIM2, ENABLE); } void servo_set_angle(int angle) { if (angle < SERVO_MIN_ANGLE) { angle = SERVO_MIN_ANGLE; } else if (angle > SERVO_MAX_ANGLE) { angle = SERVO_MAX_ANGLE; } int pulse = SERVO_MIN_PULSE + (SERVO_MAX_PULSE - SERVO_MIN_PULSE) * angle / SERVO_MAX_ANGLE; TIM_SetCompare1(TIM2, pulse); delay_us(1000); // 等待舵机转到指定角 } int main(void) { servo_init(); while(1) { // 控制舵机从0270 for (int i = 0; i <= SERVO_MAX_ANGLE; i += 10) { servo_set_angle(i); } // 控制舵机270到0 for (int i = SERVO_MAX_ANGLE; i >= 0; i -= 10) { servo_set_angle(i); } } } ``` 在这个程序中,我们使用了STM32 F1系列单片机的TIM2定时器来控制舵机的脉宽。通过修改输出比较的脉宽,可以控制舵机的角。在舵机转动的过程中,我们需要等待一段时间,让舵机转到指定的角,否则舵机会失去控制
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值