收藏 分销(赏)

个电机转动占空比控制.doc

上传人:pc****0 文档编号:8377900 上传时间:2025-02-11 格式:DOC 页数:7 大小:37.50KB 下载积分:10 金币
下载 相关 举报
个电机转动占空比控制.doc_第1页
第1页 / 共7页
个电机转动占空比控制.doc_第2页
第2页 / 共7页


点击查看更多>>
资源描述
个电机转动占空比控制 看你的程序累.. 用PWM因当是用来控制电机的转速的, 也有用来作低速度起动用 追问 嗯 主要是控制它的速度。对了 你有没有怎么控制的资料 传给我 #include <reg51.h> #include <intrins.h> #include <math.h> #define uchar unsigned char #define uint unsigned int sbit ma1=P2^5; //电机控制位 sbit mb1=P2^4; sbit pwm1=P2^6; sbit key1=P3^0; //减速 sbit key2=P3^1; //加速 sbit key3=P3^2; //前进后退 sbit key4=P3^3; //停止 sbit key5=P3^4; //左拐 sbit key6=P3^5; //右拐 sbit ma2=P2^2; sbit mb2=P2^1; sbit pwm2=P2^3; //占空比控制位 bit flag=0,flag0=0,flag1=0,flag2=0; //电机转动控制标志位。 uchar num=0; void delay(uchar xms) //简单的延时 { uint i; uchar j; for(i=xms;i>0;i--) for(j=110;j>0;j--); } void turn_around() //电机转动占空比控制函数 { pwm1=0; pwm2=0; delay(num); pwm1=1; pwm2=1; delay(100-num); } void Rotational_mode() //电机转动模式选择 ,正转,反转,停止,开启 { if(flag0==0) { if(flag==0) //flag用来控制电机的正反转,flag=0时电机正转,否则电机反转。 { ma1=1; ma2=1; mb1=0; mb2=0; } else { ma1=0; ma2=0; mb1=1; mb2=1; } } else //电机停止控制 { ma1=0; ma2=0; mb1=0; mb2=0; } } void turn_left() //电机左转,使两个电机的占空比不同,电机就会有不同的转动模式。 { pwm1=0; pwm2=1; delay(60); pwm1=1; pwm2=0; delay(40); } void turn_right() //电机右转 { pwm1=0; pwm2=1; delay(40); pwm1=1; pwm2=0; delay(60); } void keyscan() //按键检测部分 { if(key1==0) { delay(5); if(key1==0) //key1按下后,num++,电机减速。 { while(!key1); num+=20; if(num>100) num=100; flag1=0; flag2=0; } } if(key2==0) { delay(5); if(key2==0) //key2按下后,num--,电机加速。 { while(!key2); num-=20; if(num<0) num=0; flag1=0; flag2=0; } } if(key3==0) { delay(5); if(key3==0) //key3按下后,flag的值发生改变,从而,改变电机的转动放向。 { while(!key3); flag=~flag; flag1=0; flag2=0; } } if(key4==0) { delay(5); if(key4==0) //key4按下后电机停止工作,再次按下后电机开始工作。 { while(!key4); flag0=~flag0; flag1=0; flag2=0; } } if(key5==0) { delay(5); //key5按下后电机左转。 if(key5==0) { while(!key5); flag1=1; //flag1=1,按左转模式转动。 flag2=0; } } if(key6==0) { delay(5); //key6按下后电机右转。 if(key6==0) { while(!key6); flag2=1; flag1=0; //flag2=1,按右转模式转动。然后每次按按完key5和key6后, //要保证flag1,flag2都复位为0,因此每次有键按下后, // 都有flag1,flag2为0。 } } } void main() { while(1) { keyscan(); Rotational_mode(); if(flag1==0&&flag2==0) { turn_around(); } else if(flag1==1) { turn_left(); } else if(flag2==1) { turn_right(); } } }
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服