完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
void tim1_isr(void) interrupt 3 using 3//pwm波生成
{ TH1=(65536-10)/256; TL1=(65536-10)%256; a_time1++; if(a_time1>=PWM_max) //pwm时间计数 { a_time1=0; } if(word) { if(a_time1 IN1=1; //马达(前进1=1 2=0) } else { IN1=0; } } else { if(a_time1 IN1=0; //马达(呛笸1=0 2=1) } else { IN1=1; } } } 其中a_time1 |
|
相关推荐
14个回答
|
|
不会程序飘过
|
|
|
|
会程序的飘过,a_time1
|
|
|
|
|
|
|
|
哇 终于等到高手了。我是大四毕业生,毕设做的红外遥控小车,这点不太明白,希望您能指点下,哈哈。那个如果要60%的占空比,PWM_MAX为什么不是100,而是99啊?我的程序里#define PWM_max 10 ,#define PWM 3,这个值是不是太小啊?我现在还是不太理解这段语句的意思, if(a_time1 IN1=1; //马达(前进1=1 2=0) } else { IN1=0; } 我在网上查的a_time表示PWM时间计数,PWM表示高电平时间,if语句判断PWM时间计数<高电平时间有什么意义啊?如果a_time>PWM,IN1=0,小车不就停止了吗?其实这整个中断函数我就不明白是干什么的,哈哈 。问题比较多,太麻烦您了。下面是我的一些程序,word我用红字标出来了,谢谢了 void tim1_isr(void) interrupt 3 using 3 { TH1=(65536-10)/256; // TH1=(65536-100)/256; TL1=(65536-10)%256; // TL1=(65536-100)%256; a_time1++; if(a_time1>=PWM_max) //pwm时间计数 { a_time1=0; } if(word) { if(a_time1 { IN1=1; //马达(前进1=1 2=0) } else { IN1=0; } } else { if(a_time1 { IN1=0; //马达(前进1=1 2=0) } else { IN1=1; } } } /********************************马达前后、左右转******************************/ void turnforward(void) { if(one) { word=1; IN1=1; IN2=0; ENA=1; TR1=1; one=0; } } void turnbackward(void) { if(one) { word=0; IN1=0; IN2=1; ENA=1; TR1=1; one=0; } } void turnstop(void) { if(one) { TR1=0; IN1=1; //马达停止 IN2=1; IN3=1; IN4=1; ENA=0; ENB=0; one=0; } } void turnleft(void) { if(one) { IN1=1; IN2=0; ENA=1; IN3=0; //马达左转 马达左右转 IN4=1; ENB=1; DelayMs(250); ENB=0; one=0; } } void turnright(void) { if(one) { IN1=1; IN2=0; ENA=1; IN3=1; //马达左转 马达左右转 IN4=0; ENB=1; DelayMs(250); ENB=0; one=0; } } void jiasu() { if( one&&PWM<=10) { PWM++; one=0; } else { if(PWM>10) { one=0; } } } void jiansu() { if( one&&PWM>1) { PWM--; one=0; } else { if(PWM<=1) { one=0; } } } void main(void) { IN1= 1; //马达端口 前后 IN2= 1; IN3= 1; //左右 IN4= 1; ENA= 0; //马达使能端 EN_A高电平 IN_1 IN_2有效控制前后 ENB= 0; EX0init(); // Enable Global Interrupt Flag TIM0init(); TIME1init(); DelayMs(15); while(1)//主循环 { if(irok) //条件其一irok(有红外输入) 其二X(开始键按下为0) { Ircordpro(); irok=0; } if(irpro_ok)//step press key { one=1; } if((IRcord[2]== 0x18)&&(IRcord[3]==0xe7)) turnforward(); if((IRcord[2]==0x52)&&(IRcord[3]==0xad)) turnbackward(); if((IRcord[2]==0x08) &&(IRcord[3]==0xf7)) turnleft(); if((IRcord[2]==0x5a) &&(IRcord[3]==0xa5)) turnright(); if((IRcord[2]==0x1c) &&(IRcord[3]==0xe3)) turnstop(); if((IRcord[2]==0x0c) &&(IRcord[3]==0xf3)) { jiasu(); irpro_ok=0; } if((IRcord[2]==0x42) &&(IRcord[3]==0xbd)) { jiansu(); irpro_ok=0; } } } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
程序有点长,首先你要明白什么是PWM,脉宽调制。他就是输出一定占空比的脉冲来调节电机的转速。占空比越大电机转得越快。占空比是指高电平的时间占整个周期的时间比。那么在一个周期内就会有一段高电平一段低电平。你不懂的那段程序就是调制高低电平的时间。
在a_time1 还有至于为什么PWM_MAX是99而不是100.这是因为下面这条语句。
这里是>=而不是>。0~99就有一百个单位了。程序太长我没有具体看。如果还有什么不懂再上来问。 |
|
|
|
程序有点长,首先你要明白什么是PWM,脉宽调制。他就是输出一定占空比的脉冲来调节电机的转速。占空比越大电机转得越快。占空比是指高电平的时间占整个周期的时间比。那么在一个周期内就会有一段高电平一段低电平。你不懂的那段程序就是调制高低电平的时间。
在a_time1 还有至于为什么PWM_MAX是99而不是100.这是因为下面这条语句。
这里是>=而不是>。0~99就有一百个单位了。程序太长我没有具体看。如果还有什么不懂再上来问。 |
|
|
|
你哪个学校的啊,怎么现在毕设还没弄好,我的早完成任务了。现在等着被学校赶。 |
|
|
|
原来你也是大四的啊,我还以为你是哪个公司的工程师呢。我是河南科技大学的,后天就答辩了,这个pWM我一直不是很清楚,突然想起来还有这个网站,就来求助了。兄弟,你哪个学校的啊,感觉你学的真是不错啊,得多多向你学习撒。讲的很清楚太感谢了。我把思路理一理,有不懂的再来请教你撒
|
|
|
|
我南华农业大学的,我也是一个刚学飞的菜鸟,工程师还不是,打杂的。就这点水平而已。 |
|
|
|
哈哈 谦虚了 比我还是强不少的 |
|
|
|
{:12:}{:12:}{:12:}
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
726 浏览 0 评论
777 浏览 1 评论
基于瑞萨FPB-RA4E2智能床头灯项目——1编译环境搭建与点亮驱动ws2812全彩LED
680 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
1149 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
1120 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11805 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 13:44 , Processed in 0.763525 second(s), Total 66, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号