智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 8172|回复: 18
打印 上一主题 下一主题

[编程类] 求教有关PWM控制舵机的程序

  [复制链接]

1

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
213
威望
177
贡献
30
兑换币
0
注册时间
2010-3-3
在线时间
3 小时
跳转到指定楼层
#
发表于 2010-4-6 10:58:46 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
1贡献
这个是我从一本教科书上找来的程序,想拿来试下用PWM控制舵机
但是不懂为什么没有波形输出
因为是新手,悬赏不是很多。。。。
程序如下
  1. #include <hidef.h>     
  2. #include <mc9s12dg128.h>     
  3. #pragma LINK_INFO DERIVATIVE "mc9s12dg128b"


  4. #define BUS_FREQ    32000000                    //总线频率
  5. #define PWM_PRCLK   0x22                        //CH_A=CH_B=BUS_FREQ/4            
  6. #define CH_A_FREQ   8000000                     //时钟A频率
  7. #define CH_B_FREQ   8000000                     //时钟B频率
  8. #define CH_SA_FREQ  1000000                     //时钟SA频率
  9. #define CH_SB_FREQ  1000000                     //时钟SB频率
  10. #define CH_SA_DIV   (CH_A_FREQ/(CH_SA_FREQ*2))  //CH_SA_DIV=4
  11. #define CH_SB_DIV   (CH_B_FREQ/(CH_SB_FREQ*2))  //CH_SB_DIV=4
  12. #define STEER_FREQ  100                         //舵机频率100Hz


  13. void Pwm_init(void) {
  14.   PWMPRCLK=PWM_PRCLK;
  15.   PWMSCLA=CH_SA_DIV;
  16.   PWMSCLB=CH_SB_DIV;
  17.   PWMCTL_CON45=1;、                            //组合PWM45
  18.   PWMCTL_CON67=1;
  19.   PWMCTL_CON23=1;
  20.   
  21.   PWMCLK_PCLK5=1;                              //PWM5使用SA
  22.   PWMCLK_PCLK3=1;
  23.   PWMCLK_PCLK7=1;
  24.   
  25.   PWMPER45=(CH_SA_FREQ/STEER_FREQ);      
  26.   PWMPER23=(CH_SB_FREQ/MOTOR_FREQ);
  27.   PWMPER67=(CH_SB_FREQ/MOTOR_FREQ);
  28.   PWMPOL_PPOL5=1;                               //写PWM45的周期寄存器
  29.   PWMPOL_PPOL3=0;
  30.   PWMPOL_PPOL7=0;
  31.   PWMCAE=0x00;
  32.   PWME_PWME5=1;                                  //左对齐
  33. }

  34. void Motor_back(uint duty) {
  35.   PWMDTY45=duty;
  36. }
  37. void delay(unsigned int delay_time) {
  38.   unsigned int loop_i,loop_j;
  39.   for(loop_i=0;loop_i<delay_time;loop_i++)
  40.     for(loop_j=0;loop_j<500;loop_j++)
  41.     _FEED_COP();
  42. }

  43. void main(void) {
  44.   
  45.   Pwm_init();
  46.   Motor_back(9250);
  47.   delay(2000);
  48.   for(;;){
  49.     Motor_back(9500);
  50.     delay(2000);
  51.     Motor_back(9000);
  52.     delay(2000);
  53.   }
  54. }
复制代码

8

主题

19

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
374
威望
208
贡献
82
兑换币
113
注册时间
2013-3-22
在线时间
42 小时
18#
发表于 2013-4-6 17:41:28 | 只看该作者
cyyan 发表于 2010-4-22 21:11
试试这个
void main(void) {
  /* put your own code here */

亲···能注释下么?
回复

使用道具 举报

2

主题

19

帖子

0

精华

注册会员

Rank: 2

积分
172
威望
112
贡献
16
兑换币
70
注册时间
2013-3-5
在线时间
22 小时
17#
发表于 2013-4-6 15:10:58 | 只看该作者
xuexi
回复

使用道具 举报

0

主题

13

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
威望
210
贡献
46
兑换币
0
注册时间
2012-2-21
在线时间
19 小时
毕业学校
湖南科技大学
16#
发表于 2012-2-26 19:35:02 | 只看该作者
没有波形。。。
回复

使用道具 举报

7

主题

94

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
479
威望
283
贡献
122
兑换币
0
注册时间
2011-10-19
在线时间
37 小时
15#
发表于 2011-11-22 21:28:33 | 只看该作者
那我也先收藏一下
回复

使用道具 举报

2

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
271
威望
178
贡献
49
兑换币
0
注册时间
2011-9-15
在线时间
22 小时
14#
发表于 2011-9-27 15:19:56 | 只看该作者
求高手了!
回复

使用道具 举报

0

主题

3

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
229
威望
191
贡献
34
兑换币
12
注册时间
2010-4-9
在线时间
2 小时
13#
发表于 2010-5-9 12:48:52 | 只看该作者
回复

使用道具 举报

1

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
威望
247
贡献
22
兑换币
0
注册时间
2010-3-9
在线时间
3 小时
12#
发表于 2010-4-23 22:37:05 | 只看该作者
谢谢分享
回复

使用道具 举报

1

主题

30

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
威望
247
贡献
22
兑换币
0
注册时间
2010-3-9
在线时间
3 小时
11#
发表于 2010-4-23 22:36:46 | 只看该作者
谢谢分享
回复

使用道具 举报

17

主题

71

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2531
QQ
威望
347
贡献
2122
兑换币
0
注册时间
2010-1-16
在线时间
31 小时
10#
发表于 2010-4-22 21:25:28 | 只看该作者
试试我编的这个:
//-------------------------------------------
//功能说明:MC9S12XS128--PWM 例程
//使用说明:实现通道3(PP3)输出频率为50Hz,占空比为2%至14%之间循环变化
//-------------------------------------------
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include <MC9S12XS128.h>     /* derivative information */
#define uint unsigned int
#define uchar unsigned char
uchar PWMDTY_NUM=13;      //PWM通道周期寄存器
//-----时钟初始化程序------//
void PLL_Init(void)
{
  REFDV=1; //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
  SYNR=2; //锁相环时钟=2*16*(2+1)/(1+1)=48MHz
  while(!(CRGFLG & 0x08));
  CLKSEL=0x80; //选定锁相环时钟
}
//--------------------------------
void Delay(void) {
  unsigned int i,j;
  for(i=0;i<50;i++)
    for(j=0;j<3388;j++);
}
//------------------------------
void MCU_Init(void)
{
  DDRB=0x00;
  DDRP=0x08;
  PUCR_PUPBE=1;
}
//-------PWM初始化程序--------//
static void PWM_Init(void)
{
// PWME_PWME3=0;
  PWMPRCLK=0x55;//0010 0010 A=B=24M/32=750K 时钟预分频寄存器设置
  PWMSCLA=5;    //SA=A/2/5=75K
  PWMSCLB=50;   //SB=B/2/50=7.5K
  PWMCLK_PCLK3=1;//PWM3---SB
  PWMPOL_PPOL3=1;//Duty=High Time
  PWMCAE_CAE3=0;//Left-aligned
  PWMCTL=0x00;  //no concatenation
  PWMPER3=150;   //Frequency=SB/150=50
  PWMDTY3=13;    //Duty cycle=8.6%
  PWME_PWME3=0; //Disable PWM
}
//--------PWM占空比改变函数---------//
//---K每改变1,占空比就改变0.7%
void Change_dutycycle(uchar k)
{
  PWME_PWME3=1;
  PWMDTY3=k;
//  PWM_Init();
}
//-------------------------------------------------
void main(void) {
  /* put your own code here */
  PLL_Init();
  PWM_Init();
  MCU_Init();
//  EnableInterrupts;
   PWMDTY_NUM=13;
  for(;;) {
   
  
         PWMDTY_NUM++;
        if(PWMDTY_NUM>23){
          PWMDTY_NUM=2;
          Delay();
        }
        
        Change_dutycycle(PWMDTY_NUM);

//   _FEED_COP(); /*feeds  the dog*/
  } /* loop forever */
  /* please make sure that you never leave main */
}
回复

使用道具 举报

2

主题

10

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
威望
202
贡献
35
兑换币
0
注册时间
2010-4-22
在线时间
2 小时
9#
发表于 2010-4-22 21:11:13 | 只看该作者
试试这个
void main(void) {
  /* put your own code here */
   PWME=0X00;//
   PWMCTL=0X00;
   PWMPRCLK=0X66;
   PWMCLK=0XFF;
   PWMSCLA=0X0D;
   PWMSCLB=0X0D;
   PWMPOL=0XFF;
   PWMCAE=0X00;
   PWMPER0=0X09;
   PWMDTY0=0X05;
   PWME=0X01;
        EnableInterrupts;


  for(;;) {
    _FEED_COP(); /* feeds the dog */
  } /* loop forever */
  /* please make sure that you never leave main */
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 13:43 , Processed in 0.056243 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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