智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 14274|回复: 68
打印 上一主题 下一主题

不看会后悔的(pwm------舵机)

  [复制链接]

68

主题

1086

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
4578

活跃会员奖章优秀会员奖章论坛元老奖章论坛骨干奖章在线王奖章

QQ
威望
2515
贡献
1213
兑换币
1382
注册时间
2012-9-19
在线时间
425 小时
跳转到指定楼层
#
发表于 2012-12-10 00:01:29 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
                                 
   总是潜水,现在为大家服务一下吧,希望能对一些人有帮助!!! 以前没有深入关注过pwm,自以为是比较了解的,可是直到前几天,才发现我对pwm不是很了解,01、23、45、67级联后,起作用的均是高一级的口(就是1、3、5、7),当时写程序时没有注意,以为级联后就万事大吉啦,谁知道并不好使,一个很小的细节没有注意,导致了程序的崩溃。弄了好几天,郁闷死了。亲先给你们附上一段程序吧,看看有错没有,总线频率为40MHZ。

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define ZK1 PWMDTY1     //电机占空比
#define ZK5 PWMDTY5
#define ZK3 PWMDTY3   //舵机占空比

void Steer_Init(void)
{
    PWME_PWME3 = 0;      //先禁止各通道输出
    PWMCTL_CON23 = 1;    //两两级联成16位PWM
    PWMPRCLK_PCKB = 2;  //预分频系数为B 4,总线频率,即10MHZ
    PWMSCLB = 2;  //SB_CLK = B_CLK / (2*2) ==2.5MHz
    PWMCLK_PCLK3 = 1;   //通道选  clock SB做时钟源
                                             
    PWMCNT3=0;  //23计数器清零
    PWMCAE_CAE3=0;    //选择输出模式为左对齐输出模式   
    PWMPOL_PPOL3=1;    //先输出高电平,计数到DTY时,反转电平
   
    PWMPER23=50000; // 20ms ;50Hz
    PWMDTY23=0;
    PWME_PWME3 = 1;      
}

void main(void)
{
   PLL_Init_40M();
   Steer_Init();
   IO_Init();
   Motor_Init();
   ZK3=5000;  //舵机摆正
   ZK1=100;
   ZK5=0;
}

当然啦,其他的程序都是没有错误的,都很好使的,亲们你们发现有什么不对了吗???
如果发现了,恭喜你,你真的很厉害,是一个有心人。如果没有发现的话,也不要紧的,
下面再给你们附上另外的一段程序,仔细看好了啊,亲。

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#define ZK1 PWMDTY01     //电机占空比
#define ZK5 PWMDTY45
#define ZK3 PWMDTY23   //舵机占空比

void Steer_Init(void)
{
    PWME_PWME3 = 0;      //先禁止各通道输出
    PWMCTL_CON23 = 1;    //两两级联成16位PWM
    PWMPRCLK_PCKB = 2;  //预分频系数为B 4,总线频率,即10MHZ
    PWMSCLB = 2;  //SB_CLK = B_CLK / (2*2) ==2.5MHz
    PWMCLK_PCLK3 = 1;   //通道选  clock SB做时钟源
                                             
    PWMCNT3=0;  //23计数器清零
    PWMCAE_CAE3=0;    //选择输出模式为左对齐输出模式   
    PWMPOL_PPOL3=1;    //先输出高电平,计数到DTY时,反转电平
   
    PWMPER23=50000; // 20ms ;50Hz
    PWMDTY23=0;
    PWME_PWME3 = 1;      
}

void main(void)
{
   PLL_Init_40M();
   Steer_Init();
   IO_Init();
   Motor_Init();
   ZK3=5000;  //舵机摆正
   ZK1=100;
   ZK5=0;
}

亲们发现两段程序有什么不同的吗???亲,不要告诉我说他们没有一点区别,完全一样,用你的火眼金睛再仔细的看一遍吧!!!他们是有区别的,而且就是这么小小的区别,让我们队的车子楞是跑不起来,可是害苦我了啊!!!我整整发了近三天的时间才找到的这不算问题的问题啊,哎!!!现在我是真的深有体会,无论什么事都是马虎不得的,不然会吃大亏的啊,尤其是做比赛的童鞋们,真的是伤不起啊!!!



#define ZK1 PWMDTY1     //电机占空比
#define ZK5 PWMDTY5
#define ZK3 PWMDTY3   //舵机占空比

#define ZK1 PWMDTY01     //电机占空比
#define ZK5 PWMDTY45
#define ZK3 PWMDTY23   //舵机占空比
现在发现了吧,上面的是 PWMDTY1, PWMDTY5, PWMDTY3
下面的是  PWMDTY01, PWMDTY45, PWMDTY23,

就是这些让我郁闷死了,若这样写(PWMDTY3),虽然23级联了,但是单片机还是认为他们并不级联,任然是8位的(注:8位最大值只能是255),而不是我们想象的16位(注:最大值是65535),为此我亲自做了实验,这样写(PWMDTY3),写入数值小于等于255的时候可以,运行时软件没有出现warning,写256就不行了,软件就出现warning,原来以为出现warning,没有错误就行,但是事实却不是如此,我当时写的是(ZK3=5000),舵机就是要么往一个方向摆、要么就是出现各种不正常的问题,但是当我把(PWMDTY3)改成(PWMDTY23)时,苦逼了啊,一切都没有问题了(我当时控制的是舵机),舵机在正常不过了,一切都好了,我当时就笑了,这是什么玩意啊,我多么宝贵的几天的时间啊,哎,童鞋们,就写到这吧,我的能力有限,剩下的还得靠你们自己去摸索。那些还在为舵机不
能正常工作而发愁的童鞋们,你们看一看,是不是与我一样不小心啊,希望对你们能有一些帮助。有什么不对的,请指出来,谢谢。







评分

1

查看全部评分

3

主题

74

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1420
威望
677
贡献
419
兑换币
447
注册时间
2013-10-30
在线时间
162 小时
68#
发表于 2014-4-11 02:06:47 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

7

主题

55

帖子

0

精华

高级会员

Rank: 4

积分
622
威望
326
贡献
166
兑换币
199
注册时间
2014-3-3
在线时间
65 小时
67#
发表于 2014-4-9 21:05:59 | 只看该作者
受益了,谢谢
回复 支持 反对

使用道具 举报

0

主题

106

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1031
威望
494
贡献
311
兑换币
335
注册时间
2013-9-3
在线时间
113 小时
66#
发表于 2014-4-5 16:13:00 | 只看该作者
牛皮  哈哈哈哈  看看 学习学习
回复 支持 反对

使用道具 举报

0

主题

106

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1031
威望
494
贡献
311
兑换币
335
注册时间
2013-9-3
在线时间
113 小时
65#
发表于 2014-4-5 16:11:03 | 只看该作者
牛皮  哈哈哈哈  看看 学习学习
回复 支持 反对

使用道具 举报

54

主题

837

帖子

0

精华

跨届大侠

Rank: 10Rank: 10Rank: 10

积分
7499
威望
5069
贡献
1876
兑换币
1028
注册时间
2014-1-5
在线时间
277 小时
64#
发表于 2014-4-4 21:58:59 | 只看该作者
顶楼主!虽然没看懂  但是先学着  
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
148
威望
86
贡献
40
兑换币
43
注册时间
2014-2-27
在线时间
11 小时
毕业学校
菏泽学院
63#
发表于 2014-3-27 20:27:48 | 只看该作者
不孬
回复 支持 反对

使用道具 举报

7

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
329
威望
192
贡献
83
兑换币
104
注册时间
2013-1-26
在线时间
27 小时
毕业学校
在校生
62#
发表于 2014-3-19 15:16:17 | 只看该作者
000
回复 支持 反对

使用道具 举报

7

主题

70

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
威望
510
贡献
283
兑换币
315
注册时间
2014-3-11
在线时间
231 小时
61#
发表于 2014-3-17 20:48:07 | 只看该作者
PWMPER23=50000; // 20ms ;50Hz
    PWMDTY23=0;
这个 啥情况啊!!!意思是占空比为0吗?
舵机不动吗?

回复 支持 反对

使用道具 举报

5

主题

33

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
402
威望
213
贡献
125
兑换币
120
注册时间
2013-12-17
在线时间
32 小时
60#
发表于 2014-3-17 12:29:53 | 只看该作者
回复 支持 反对

使用道具 举报

3

主题

27

帖子

0

精华

高级会员

Rank: 4

积分
525
威望
281
贡献
130
兑换币
172
注册时间
2014-2-26
在线时间
57 小时
59#
发表于 2014-3-15 15:32:40 | 只看该作者
谢谢分享了
回复 支持 反对

使用道具 举报

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

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-11-6 23:33 , Processed in 0.104878 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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