智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2887|回复: 1
打印 上一主题 下一主题

关于单片机同时控制电机和舵机的问题

[复制链接]

3

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
88
威望
147
贡献
31
兑换币
0
注册时间
2011-11-16
在线时间
3 小时
跳转到指定楼层
1#
发表于 2011-12-8 20:59:20 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
pwm2通道和0通道控制电机的,pwm7通道控制舵机的,为什么电机转的时候我让舵机转电机就停了呢?请问我的问题出在哪儿啊?
程序代码:
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include<mc9s12xs128.h>
int speed=40,k0flag=0;
int shu[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
void BUS_CLK_Init() {
   CLKSEL = 0X00;
   PLLCTL_PLLON=1;
   SYNR   = 1;
   REFDV  = 1;
   POSTDIV= 0X00;
   while(!(CRGFLG_LOCK==1));
   CLKSEL_PLLSEL = 1;  //总线时钟为16Mhz
}

void PWM02_Speed_Init() {
  DDRP=0xff;                                                                           
  PTP =0xff;      //PP0,PP0输出高电平使能两个2104
  PWME_PWME0   = 0;
  PWME_PWME2   = 0;
  PWME_PWME7   = 0;
  
  PWMCTL_CON67 = 1;//67通道级联
  
  PWMPRCLK     = 0X00;//CLKA 不分频 CLKB BU分频
  PWMCLK_PCLK0 = 1;//通道0选择CLKSa
  PWMCLK_PCLK2 = 1;//通道2选择CLKSB
  PWMCLK_PCLK7 = 1;//通道7选择CLKSB
  PWMSCLA      = 0X08;
  PWMSCLB      = 0X08;//对CLKA B 进行16分频   1MHz
  PWMPOL_PPOL0 = 0;  //先输出gao电平 技术到DTY时 电平反转
  PWMPOL_PPOL2 = 0;  //先输出低电平 技术到DTY时 电平反转
  
  PWMPOL_PPOL7 = 1;  //先输出低电平 技术到DTY时 电平反
  
  PWMCAE_CAE0  = 0;
  PWMCAE_CAE2  = 0;
  PWMCAE_CAE7  = 0;
  
  PWMPER0      = 200; // 频率1k
  PWMDTY0      = 0;  //高电平时间为1.45ms
  //PWMPER2      = 200; //周期20ms  频率50hz
  //PWMDTY2      = 50;  //高电平时间为1.45ms
  
   PWMPER67     = 20000; //周期20ms  频率50hz
  PWMDTY67     = 1350;  //高电平时间为1.45ms数变大    2300--400之间   810  --2300
  
  
  PWME_PWME0   = 1;    //通道0开
  PWME_PWME7   = 1;    //通道7开
  //PWME_PWME2   =1;
}
void delay(int z)
{
int x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
void key()   //按键函数
{
    if((PTM&0x01)==0 && k0flag==1)
    {
       speed=speed+10;
       if (speed>200) speed=50;
       PWMDTY0=speed;
       k0flag=0;
    }
    if((PTM&0x02)==0 && k0flag==1)
    {
      
       PWMDTY0=0;
       PWMDTY67= 1350;
       speed=40;
       k0flag=0;
    }
    if((PTM&0x04)==0 && k0flag==1)
    {
       PWMDTY67     = 900;      
       k0flag=0;
    }
    if((PTM&0x08)==0 && k0flag==1)
    {
      
       PWMDTY67     = 1800;
      
       k0flag=0;
    }
   
   
    if(PTM==0x0f)
    {
      
      k0flag=1;
    }
}
void main(void)
{
  
  
  BUS_CLK_Init();
  PWM02_Speed_Init();
  DDRB=0XFF;
  for(;;)
  {
    //_FEED_COP();
   
    key();
   
    PTP_PTP1=0TP_PTP3=0;
    PORTB=shu[PWMDTY0/10/10];
    PTP_PTP1=1;
   
    key();
   
    PTP_PTP1=0;PTP_PTP3=0;
    PORTB=shu[PWMDTY0/10%10];
    PTP_PTP3=1;
   
  }
  
}

还有就是为什么我的程序不稳定呢,有时候一开机电机并不受按键控制,怎么也不转
希望高手赐教!!感激不尽!!

3

主题

10

帖子

0

精华

高级会员

Rank: 4

积分
583
威望
350
贡献
93
兑换币
19
注册时间
2011-11-20
在线时间
70 小时
2#
发表于 2011-12-21 12:52:45 | 只看该作者
按键用中断试试
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-29 19:51 , Processed in 0.057172 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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