智能车制作

 找回密码
 注册

扫一扫,访问微社区

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

[控制类] xs128输入捕捉中断出问题了,帮帮忙啊,万分感谢!

[复制链接]

3

主题

8

帖子

0

精华

注册会员

Rank: 2

积分
61
威望
40
贡献
13
兑换币
18
注册时间
2013-7-16
在线时间
4 小时
毕业学校
山东科技大学
跳转到指定楼层
1#
发表于 2013-10-5 09:31:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
先写上我的程序
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
byte i,j;
/*****************************************
设置总线频率为32Mhz,晶振为16Mhz
*****************************************/
void SetBusClk_32M(void){
CLKSEL_PLLSEL=0;
PLLCTL_PLLON=1;
SYNR=0x41; //0xd8
REFDV=0xc0;//0x07
POSTDIV=0x00;
_asm(nop);
_asm(nop);
while(!(CRGFLG_LOCK==1));
CLKSEL_PLLSEL=1;
}
/*******************************************
pwm初始化
*******************************************/
void PWM_init(void){
PWME=0x00;
PWMCTL=0xf0;//通道01、23、45、67级联
PWMPRCLK=0x11;//总线频率2分频
PWMSCLA=2;//CLKSA=总线频率/PWMPRCLK/(2*PWMSCLA)=4MHZ
PWMSCLB=2;//CLKSB=总线频率/PWMPRCLK/(2*PWMSCLA)=4MHZ
PWMCLK=0xaa;//PWM01选择CLKSA作为时钟、PWM23选择CLKSB作为时钟、PWM45选择CLKSA、PWM67选择CLKSB
PWMPER01=1000;//周期为1000
PWMPER23=1000;//周期为1000
PWMPER45=1000;//周期为1000
PWMPER67=1000;//周期为1000
PWMDTY01=0;
PWMDTY23=0;
PWMDTY45=0;
PWMDTY67=0;
PWMPOL=0xaa;
PWMCAE=0x00;
PWME=0xaa;
}
/****************************************
PT1输入捕捉初始化
******************************************/
void IOC_init(void){
TIOS_IOS1=0;//通道1输入捕捉
TCTL4=0x04;//上升沿捕捉
TSCR2=0x05;
TIE_C1I=1; //允许输入捕捉中断
TSCR1_TEN=1;
}

/*******************************************
IO口初始化
*********************************************/
void IO_Init(void){
DDRP=0xff;
DDRA=0x00;
DDRB=0x00;//00001000
DDRE=0x00;
DDRJ_DDRJ7=0;
DDRM_DDRM0=1;
DDRM_DDRM1=1;
DDRM_DDRM2=1;
DDRM_DDRM3=1;
DDRS_DDRS0=1;
DDRS_DDRS1=1;
DDRS_DDRS2=1;
DDRS_DDRS3=1;
DDRT_DDRT0=0;
PORTB_PB3=1;
}
/************************************************
小车行进函数
************************************************/
void drive(int L,int R) //小车行速,-1000<= L <=1000,-1000<= R <=1000
{
#define L_IN1 PTS_PTS2
#define L_IN2 PTS_PTS0
#define L_IN3 PTS_PTS3
#define L_IN4 PTS_PTS1
#define R_IN1 PTM_PTM2
#define R_IN2 PTM_PTM0
#define R_IN3 PTM_PTM3
#define R_IN4 PTM_PTM1
#define L_EN1 PWMDTY01
#define L_EN2 PWMDTY23
#define R_EN1 PWMDTY67
#define R_EN2 PWMDTY45
if(L>0 && R>0)
{
L_IN1=1; //左右轮均向前转
L_IN2=0;
L_IN3=1;
L_IN4=0;
R_IN1=1;
R_IN2=0;
R_IN3=1;
R_IN4=0;
} else if(L>=0 && R<0)
{
L_IN1=1;
L_IN2=0;
L_IN3=1;
L_IN4=0;
R_IN1=0; //左轮前转,右轮后转
R_IN2=1;
R_IN3=0;
R_IN4=1;
R=-R;
} else if(L<0 && R>=0)
{
L_IN1=0;
L_IN2=1;
L_IN3=0;
L_IN4=1;
R_IN1=1; //左轮后转,右轮前转
R_IN2=0;
R_IN3=1;
R_IN4=0;
L=-L;
}
else if(L==0 && R==0){
L_IN1=0;
L_IN2=0;
L_IN3=0;
L_IN4=0;
R_IN1=0; //快速停车
R_IN2=0;
R_IN3=0;
R_IN4=0;
}
else if(L<0 &&R<0)
{
L_IN1=0;
L_IN2=1;
L_IN3=0;
L_IN4=1;
R_IN1=0; //左轮后转,右轮后转
R_IN2=1;
R_IN3=0;
R_IN4=1;
L=-L;
R=-R;
}
L_EN1=L;
L_EN2=L;
R_EN1=R;
R_EN2=R;
}
/***********************************************
延时函数
***********************************************/
void delay(unsigned int ms){ //1ms
unsigned int i,j;
for(i=0;i<ms;i++)
for(j=0;j<32000;j++);
}
/************************************************
小车避障函数
************************************************/
void bizhang1(void){
#define L0 PORTA_PA0 //左方避障
#define R0 PORTA_PA1
#define B PORTB_PB2
#define F PORTA_PA2
#define L1 PTT_PTT2
#define R1 PTT_PTT1
if(L0==0 && R0==1)//左前L0有障碍
{
drive(0,0);
while(L0==0 && R0==1)
drive(500,-500);
drive(0,0);
}
else if(L0==1 && R0==0)//右前R0有障碍
{
drive(0,0);
while(L0==1 && R0==0)
drive(-500,500);
drive(0,0);
}
else
drive(700,700);
}
void main(void) {
/* put your own code here */
SetBusClk_32M();
PWM_init();
IO_Init();
IOC_init();
EnableInterrupts;
for(;;) {
_FEED_COP(); /*feeds the dog*/
bizhang1();
} /*loop forever
please make sure that you never leave main */
}
#pragma CODE_SEG NON_BANKED
void interrupt 9 IOC1_IRQ(void){
TFLG1_C1F=1;
drive(0,0);
drive(700,-500);
delay(80);
}
#pragma CODE_SEG DEFAULT
PWM信号接在L298N电机驱动的ENA、ENB口,一共用了两块驱动板共驱动四个电机,电机为http://item.taobao.com/item.htm? ... g&id=9347686392这个淘宝店的180减速电机,PT1孔用于捕捉传感器的上升沿,开输入捕捉中断;现在程序的问题是当不给电机供电时中断没问题,但是当电机运转时传感器未产生输入捕捉中断芯片就进入中断,而且一直在运行中断程序。同样的程序在以前的130减速电机上运行没问题,难道中断还受电机影响?实在无解了,哪位大神帮帮忙啊,万分感谢!

3

主题

8

帖子

0

精华

注册会员

Rank: 2

积分
61
威望
40
贡献
13
兑换币
18
注册时间
2013-7-16
在线时间
4 小时
毕业学校
山东科技大学
2#
 楼主| 发表于 2013-10-6 17:46:52 | 只看该作者
没人知道吗?现在知道应该是电机干扰造成的,只是不知道怎么才能把干扰消除的比较小
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 06:21 , Processed in 0.079487 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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