OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8384|回复: 7

用51单片机定时器输出PWM控制舵机,输出的PWM有很大误差,请大神指教

[复制链接]

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2014-5-15
在线时间
8 小时
发表于 2014-12-25 20:16:01 | 显示全部楼层 |阅读模式
5金钱
[mw_shl_code=c,true]#include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit pwm=P2^0; uint pwm_val; void delayms(uint xms); //软件延时函数 void timer_set(uint value); void main() { TMOD=0X01; //定时器初始化 TH0=(65536-1000)/256; TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1; while(1) { pwm_val=500; delayms(1000); pwm_val=1500; delayms(1000); } } void timer0() interrupt 1 { static uchar i=1; TR0=0; switch(i) //两角度之间切换 { case 1: { pwm=1; timer_set(pwm_val); }break; case 2: { pwm=0; timer_set(20000-pwm_val); i=0; }break; default: break; } i++; } void timer_set(uint value) { TH0=(65536-value)/256; TL0=(65536-value)%256; TR0=1; } void delayms(uint xms) { uint i,j; for(i=xms;i>0;i--) for(j=125;j>0;j--); }[/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2014-5-15
在线时间
8 小时
 楼主| 发表于 2014-12-25 20:18:40 | 显示全部楼层
程序要实现的功能是用定时器输出20ms的PWM,然后通过每秒钟改变高电平的时间实现舵机的来回转动。但是最后输出的PWM周期竟然是22.5ms左右,而且明明是设置的高电平在0.5ms和1.5ms之间切换,结果示波器测出来的竟然是2ms和3ms,找了很久就是不知道为什么会这样。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165378
金钱
165378
注册时间
2010-12-1
在线时间
2111 小时
发表于 2014-12-25 22:10:34 | 显示全部楼层
你PWM计算公式呢?先根据公式算一下看看。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
157
金钱
157
注册时间
2014-5-15
在线时间
8 小时
 楼主| 发表于 2014-12-26 08:59:44 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
我是用的51单片机,通过定时器中断来控制PWM的脉宽和周期,公式就是给定时器赋的初值。但是结果误差很大,不知道为什么,弄了好几天。
回复

使用道具 举报

3

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
177
金钱
177
注册时间
2018-3-6
在线时间
24 小时
发表于 2018-3-6 18:38:32 | 显示全部楼层
我现在也有这种情况,请问楼主怎么解决的?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165378
金钱
165378
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-3-7 01:16:41 | 显示全部楼层
帮顶
回复

使用道具 举报

2

主题

255

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2013-6-5
在线时间
142 小时
发表于 2018-3-7 20:38:18 | 显示全部楼层
你使用定时器模拟Pwm要精确考虑定时器改变定时参数不是立刻改变定时周期的,你为什么不用硬件Pwm,或者把定时器周期固定,通过软件计数达到你的要求的比例。
回复

使用道具 举报

头像被屏蔽

1

主题

65

帖子

0

精华

禁止访问

积分
1389
金钱
1389
注册时间
2018-3-8
在线时间
146 小时
发表于 2018-3-8 16:08:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-3-13 01:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表