用51单片机控制舵机程序,IO口能输出PWM,但是一连上舵机控制线就只输出高电平,请问这是怎么回事?

查看: 983|回复: 3
用51单片机定时器输出PWM控制舵机,输出的PWM有很大误差,请大神指教
主题帖子精华
初级会员, 积分 155, 距离下一级还需 45 积分
在线时间8 小时
[C] 纯文本查看 复制代码#include &reg52.h&
#define uchar unsigned char
#define uint unsigned int
sbit pwm=P2^0;
void delayms(uint xms);
//软件延时函数
void timer_set(uint value);
void main()
TMOD=0X01;
//定时器初始化
TH0=()/256;
TL0=()%256;
pwm_val=500;
delayms(1000);
pwm_val=1500;
delayms(1000);
void timer0() interrupt 1
static uchar i=1;
//两角度之间切换
timer_set(pwm_val);
timer_set(20000-pwm_val);
void timer_set(uint value)
TH0=(65536-value)/256;
TL0=(65536-value)%256;
void delayms(uint xms)
for(i=i&0;i--)
for(j=125;j&0;j--);
主题帖子精华
初级会员, 积分 155, 距离下一级还需 45 积分
在线时间8 小时
程序要实现的功能是用定时器输出20ms的PWM,然后通过每秒钟改变高电平的时间实现舵机的来回转动。但是最后输出的PWM周期竟然是22.5ms左右,而且明明是设置的高电平在0.5ms和1.5ms之间切换,结果示波器测出来的竟然是2ms和3ms,找了很久就是不知道为什么会这样。。
主题帖子精华
金钱116675
在线时间887 小时
你PWM计算公式呢?先根据公式算一下看看。
我是开源电子网站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺:
微信公众平台:正点原子& &
主题帖子精华
初级会员, 积分 155, 距离下一级还需 45 积分
在线时间8 小时
回复【3楼】正点原子:
---------------------------------
我是用的51单片机,通过定时器中断来控制PWM的脉宽和周期,公式就是给定时器赋的初值。但是结果误差很大,不知道为什么,弄了好几天。
Powered by百度拇指医生
&&&普通咨询
您的网络环境存在异常,
请输入验证码
验证码输入错误,请重新输入使用51单片机输出PWM控制舵机 - CSDN博客
使用51单片机输出PWM控制舵机
SCU 的电子信息学院的某个社团会每年举办船模大赛。
因为去年的船模比赛时候懒,所以就买了成品的遥控器(天地飞6)来参赛,控制自己制作的遥控船上面的电调和舵机。最近有心情想在今年的船模比赛中自己制作遥控器,先从第一步开始吧:使用单片机来控制舵机(控制电调的原理类似)。
0x01.什么是舵机?
&&&&&&& 其实舵机就是一种伺服电机,根据要求旋转一定的角度,在我看来,知道这些就够了~~
0x02.舵机有什么用?
&&&&&&& 就拿模型来说吧,船要转弯的话,可以采用的一种方式就是改变船后面舵片的角度来改变两侧对水的阻力,以此来让船转向,这个也是舵机一词的由来。
0x03.怎么控制?
&&&&&&& PWM波,这是什么东西呢?其实就是一种方波,其频率为50Hz,周期就是20ms,在每个周期里面,高电平的占空比在0.5ms到2.5ms之间。而0.5ms代表的是0度,2.5ms代表的是180度。其他的度数可以直接按照比例换算过去*(这个有点想ARDUINO里面的map函数的意思)
0x04.如何实现PWM?
&&&&&&& 实现脉冲宽度调制波有很多种方法,很多单片机已经有“原生支持”的pwm输出引脚,用来输出pwm波形。
&&&&&&& 我采用比较土的一种方法,如下图:
就用这玩意输出了,他是STC公司生产的89C52RC型号的单片机,内核是51单片机,运用其中的定时器中断方式输出pwm波。
0x05.实现效果
&&&&&& 是用单片机的P2^7引脚输出PWM波形,使用P2^4,P2^5引脚操作独立按键来控制舵机的角度
使用KEIL 4平台,代码如下:
// 1路PWM波形输出,可以控制舵机和电调
#include&reg52.h&
//引脚位定义
sbit key1 = P2^5;
sbit key2 = P2^4;
//独立按键引脚
sbit pwm1 = P2^7;
//全局变量定义
unsigned int target =6,percent = 0;
// 头文件包含
#include&Timer.h&
#include&interrupt.h&
#include&key.h&
//函数声明
void Timer0Initial();
void initial_Timer();
void delay(unsigned int x);
void keyscan();
void main()
initial();
keyscan();
独立按键扫描
void keyscan()
if(key1 == 0)
if(key1 == 0)
if(target &= 7)
target -= 1;
while(key1 == 0)
{P1 = 0x00;}
P1 = 0xFF;
if(key2 == 0)
if(key2 == 0)
if(target &= 26)
target += 1;
while(key2 == 0)
{P1 = 0x00;}
P1 = 0xFF;
}//按键检测程序
void initial()
initial_Timer();
定时器程序
//Timer Configuration
//使用12Mhz晶振
//理论上,12Mhz晶振12分频之后
//应该是100次计数时间是100us
//通过示波器实测
//选用65次计数产生一次中断
void Timer0Initial()
} //该初值使每0.1ms产生一次中断
void initial_Timer()
//开启总中断
//允许T0中断
TMOD = 0x01; //定时器模式,T0使用工作方式1
Timer0Initial();
//装初值,0.1ms产生一次中断
//打开T0定时器
void delay(unsigned int x)
unsigned int i,j;
for(i = 0;i& ++i)
for(j = 120; j &0 ; --j)
最后,中断的程序
interrupt.h
void Timer0() interrupt 1 using 0
percent += 1;
if(percent == 200)
percent = 0;
pwm1 = 1;//拉高电平的引脚,来维持50hz的频率
if(percent == target)
Timer0Initial();
本文已收录于以下专栏:
相关文章推荐
为什么要写这篇博客、因为我在调我的51单片机wifi小车的双舵机摄像头的时候。从一开始对PWM很陌生到完全理解PWM调节并调好了两个舵机加起来花费了整整一天的时间。也看了很多的资料。这里综合一下,希望...
之前写了一个51单片机的6路舵机程序,其原理很简单,舵机需要一个约20ms的脉冲,其中高电平0.5-2.5ms,其余为低电平。这样我们可以用一个定时器,每0...
控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正...
舵机工作原理
控制电路板接受来自信号线的控制信号,控制电机转动,电机带动一系列齿轮组,减速后传动至输出舵盘。舵机的输出轴和位置反馈电位计是相连的,舵盘转动的同时,带动位置反馈电位计,电位计将输出一个电...
在动力模型中,有两样东西是最基本、最必要的,即舵机和无刷电机。舵机提供转动特定角度的功能,而无刷电机需要由电调--电子调速器驱动。
舵机又叫伺服电机,可以按照输入的指令把舵机臂转动之后停在在...
寄存器配置stm32设备
1、使能外设的时钟:APB1ENR,APB2ENR
2、配置寄存器或者说是控制寄存器。在配置stm32外设时,任何时候都要先使能该外设的时钟!而每个控制寄存器,很有可能包括了...
他的最新文章
讲师:王禹华
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)现在希望能用单片机发送PWM波(100%占空比为12V),控制一个12W,6Ω的电磁铁开关.但是由于本人非本专业的,希望
现在希望能用单片机发送PWM波(100%占空比为12V),控制一个12W,6Ω的电磁铁开关.但是由于本人非本专业的,希望达人能给一个具体的电路及原件型号.简单方案是:一个单片机,通过一个开关信号,控制输出PWM的占空比(PWM要求20KHz).该开关信号为1时,输出12V电压,电磁铁开关吸合;该开关信号为0时,输出占空比为40%的PWM波(此时电磁铁开关的电流为0.3-0.5A),电磁铁开关保持.掉电,则电磁铁释放.主要不明白的点为:1,在连接电磁铁开关时,选用的功率件型号(三极管?mos管?);2,由于电源电压为12V,所以需要一个降压电路供电单片机.(PS:本人仅学习过模拟电路、数字电路、C语言、51单片机,摸过郭天祥单片机,但没实践经验,所以学的都忘了)
PWM接个RC滤波,接个运放跟随一下就可以了,电流大的话,还要接个三极管扩展一下 查看原帖
与《现在希望能用单片机发送PWM波(100%占空比为12V),控制一个12W,6Ω的电磁铁开关.但是由于本人非本专业的,希望》相关的作业问题
转动速度不可以控制,每个脉冲宽度对应一个角度,一般品牌为高电平持续时间从0.5ms到1.5ms,脉冲周期为20ms的50Hz脉冲,futaba舵机的中心一般在1.2ms左右,每个品牌,各种型号,甚至每个批次的都有区别,使用的时候要每个都实际测下0°的位置.
频率的变化不会影响电压;但频率过大时开关损耗会加大,效率降低下面是Boost的公式:Uo/Ui=1/(1-Du);Du是占空比;随着占空比加大;输出会变大;但不会无限大,和磁环的磁导率有关
通过车上的倾斜仪和陀螺仪等传感器,检测出倾斜角度,角速度,经过单片机计算出PWM波,通过电机驱动电路控制电机变速,以达到平衡车子的目的.The equilibrium of the automobile is achieved through sensors such as the clinometer and gyr
第一个方案效率高一些,但是你用单片机可能带不动,第二个自己带了pre driver,所以对驱动要求低很多,但是high side用npn损失了不少效率.用推挽的MOSFET会好一些.
这个程序每一条语句你肯定能看懂,给你加注释没有必要,给你讲讲PWM的原理,你再对照程序看就明白了你要用51产生PWM去控制LED,首先你要确定PWM的周期T和占空比D,确定了这些以后,你可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D*T=n*t,类似的可以求出PWM低电平时间需要多
硬件上光敏器件先经过运放放大号,送ATmega128的AD通道进行转换,软件上根据AD量和条件参数来运算得出PWM,而后送到相映的IO端口.
我谈谈自己的理PWM是脉冲宽度调制波形,在单片机中一般用其定时器产生PWM,但是产生的PWM的周期却受着MCU时钟频率和定时计数寄存器位数的制约;若一个T值较大PWM波,我们不能直接产生对应波形,但可以利用T=Nt,这里的t小于定时计数器最大定时即可,利用MCU产生N个周期为t的PWM(这些PWM波具有相同的占空比,且
PWM 是脉冲宽度调制的英文首字母缩写,通常,它是一组频率固定脉冲宽度按照一定规律变化的输出方波脉冲列.PWM的输出脉冲信号,最常见的是由 载波 经 调制波 调制后的输出波形.载波 和调制波的定义,不用再说明了吧.
控制方法 采样控制理论中有一个重要结论:冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同.PWM控制技术就是以该结论为理论基础,对半导体开关器件的导通和关断进行控制,使输出端得到一系列幅值相等而宽度不相等的脉冲,用这些脉冲来代替正弦波或其他所需要的波形.按一定的规则对各脉冲的宽度进行调制,既可改变逆变电
我们发送了一些讯息,但始终没有生命体给予回复,We sent out some messages,but have never received respon我们仍在找寻能与我们沟通的生命体,我希望你就是那一个.We are still searching for a life
CPLD_PWM1直接加到推挽管不可靠,CPLD_PWM1输出的波形可能不太好,边沿可能不陡.加两级反向是为了改善波形,经施密特触发器整形后波形的边沿很陡,接近理想波形.如果波形的边沿不陡,会使2 只推挽管(是乙类,不是甲乙类)同时导通,那就烧了.好一点的逆变器有设一个死区,就不会同时导通.R515上并的2只电容是加速
第一个问题,你说的是VCC吗,如果是的话那就应该是电源不行,要换电源;如果是信号线的话一般没说呢么影响,你可以用示波器看看波形对不对,第二个问题就是的要连续输入脉冲信号第三个问题是由于第一个问题引起的,也可能是周期和占空比不对,应该是50HZ(20ms). 再问: 有人说接上电源舵机就抖一下是正常的? 再答: 这要看,
用单片机做PWM控制电加热器的加热功率请问控制思路可以这么考虑:加热功率的大小由输出脉冲的占空比决定,占空比大,则加热功率就大.而输出脉冲的的形成可采用计时方式,即利用内部的定时/计数器产生,可以设置两个定时器,一个为脉冲高电平输出的延时,另一个为低电平输出的延时或整个周期时间的延时.两个定时/计数器采用中断工作方式,
普通继电器需要加三极管驱动,固态继电器可直接驱动,固态继电器内部电路可看作一个光藕和双向可控硅的组合(不需要另加光藕进行隔离),通常情况下,将+5V连接到固态继电器的"+"端,单片机输出控制脚连接到固态继电器的"-"端,固态继电器的其中一个"~"输出端连接到220V的N(零线),另一个"~"输出端串进设备再连接到220
这个R10是为了在PWM高阻状态和低电平状态下泄放Q1的栅极电容电荷的.用以保证Q1关断可靠并改善驱动波形.
首先请了解信号的构成(信号的函数表达式).具体请查阅《信号与系统》.也可以从物理的角度去理RC,就是通过电容充放电,把方波快速变化的上升沿和下降沿弄得平滑.当平滑得趋于无穷的时候,就得到了直流信号.
你好,托福的top资料我这里有,你需要的话我可以发给你,邮箱呢? 再问: 对不起,这是我的邮箱 麻烦各位了! 再答: 同学你好,托福tpo资料给你发过去了,请查收,希望能帮到你,望采纳!
目前没有统一标准的,各个主机厂使用的不一样.最新的国家电网的快换箱标准是 80V60AH一个模块.4个串,用于电动出租车.
你说的频率,是指PWM的方波的频率,也称开关频率或载波频率.这个频率与电机转速无关,相对而言,频率越高,电流纹波越小,但是,电源的损耗越高,因此,调节频率的主要原则是电流纹波满足要求的情况下,开关频率适当低.直流电机通过调节电压改变转速,对于PWM电源而言,调节PWM的占空比就可改变输出电压的平均值,从而改变电机的电流}

我要回帖

更多关于 单片机怎么控制舵机 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信