网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月07日漏签0天
arduino吧 关注:75,589贴子:230,767
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 2回复贴,共1页
<<返回arduino吧
>0< 加载中...

帮看一下直流无刷电机驱动程序

  • 只看楼主
  • 收藏

  • 回复
  • 琳郡主prince
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*前进 按下发出 ONA 松开ONF
后退:按下发出 ONB 松开ONF
左转:按下发出 ONC 松开ONF
右转:按下发出 OND 松开ONF
停止:按下发出 ONE 松开ONF
蓝牙程序功能是按下对应的按键执行操,松开按键就停止
*/
char getstr;
int gear= 50;
int cel=100;
int left_val=0;
int right_val=0;#define left_VSP 2 //PWM调速
#define left_XI 3 //方向控制;低电平正传电机使能端;SW2=ON,低电平有效
#define left_FG 4 //速度脉冲
#define left_DIR 5 //方向控制;低电平正传
#define left_ALM A0 //警告输出,高电平故障#define right_VSP 6 //PWM调速
#define right_XI 7 //方向控制;低电平正传电机使能端;SW2=ON,低电平有效
#define right_FG 8 //速度脉冲
#define right_DIR 9 //方向控制;低电平正传
#define right_ALM A1 //警告输出,高电平故障void setup()
{
//初始化电机驱动IO为输出方式
Serial.begin(9600);
pinMode(left_VSP,OUTPUT);
pinMode(left_XI,OUTPUT);
pinMode(left_FG,OUTPUT);
pinMode(left_DIR,OUTPUT);pinMode(right_VSP,OUTPUT);
pinMode(right_XI,OUTPUT);
pinMode(right_FG,OUTPUT);
pinMode(right_DIR,OUTPUT);
}
void run() // 前进
{ digitalWrite(left_DIR,LOW);
digitalWrite(right_DIR,HIGH);
digitalWrite(left_FG,HIGH);
analogWrite(left_FG,cel);
digitalWrite(right_FG,HIGH);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_FG,LOW);
analogWrite(left_FG,cel);
digitalWrite(right_FG,LOW);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_XI,HIGH);
analogWrite(left_VSP,gear);
digitalWrite(right_XI,HIGH);
analogWrite(right_VSP,gear);
delay(10);
}void back() // 后退
{ digitalWrite(left_DIR,HIGH);
digitalWrite(right_DIR,LOW);
digitalWrite(left_FG,HIGH);
analogWrite(left_FG,cel);
digitalWrite(right_FG,HIGH);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_FG,LOW);
analogWrite(left_FG,cel);
digitalWrite(right_FG,LOW);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_XI,HIGH);
analogWrite(left_VSP,gear);
digitalWrite(right_XI,HIGH);
analogWrite(right_VSP,gear);
delay(10);
}void brake() //刹车,停车
{ digitalWrite(left_XI,LOW);
delay(10);
digitalWrite(right_XI,LOW);
delay(10);}void empty() //空
{ digitalWrite(left_XI,HIGH);
delay(10);
digitalWrite(right_XI,HIGH);
delay(10);}void left() // 左转
{ digitalWrite(left_DIR,HIGH);
digitalWrite(right_DIR,HIGH);
digitalWrite(left_FG,HIGH);
analogWrite(left_FG,cel);
digitalWrite(right_FG,HIGH);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_FG,LOW);
analogWrite(left_FG,cel);
digitalWrite(right_FG,LOW);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_XI,HIGH);
analogWrite(left_VSP,gear);
digitalWrite(right_XI,HIGH);
analogWrite(right_VSP,gear);
delay(10);
}void right() // 右转
{ digitalWrite(left_DIR,LOW);
digitalWrite(right_DIR,LOW);
digitalWrite(left_FG,HIGH);
analogWrite(left_FG,cel);
digitalWrite(right_FG,HIGH);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_FG,LOW);
analogWrite(left_FG,cel);
digitalWrite(right_FG,LOW);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_XI,HIGH);
analogWrite(left_VSP,gear);
digitalWrite(right_XI,HIGH);
analogWrite(right_VSP,gear);
delay(10);
}void spin_left() // S左转
{
digitalWrite(right_DIR,HIGH);
digitalWrite(right_FG,HIGH);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(right_FG,LOW);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_XI,LOW);
analogWrite(left_VSP,gear);
digitalWrite(right_XI,HIGH);
analogWrite(right_VSP,gear);
delay(10);
}void left_back() // 左后转
{
digitalWrite(left_DIR,HIGH);
digitalWrite(left_FG,HIGH);
analogWrite(left_FG,cel);
delay(200);
digitalWrite(left_FG,LOW);
analogWrite(left_FG,cel);
delay(200);
digitalWrite(left_XI,HIGH);
analogWrite(left_VSP,gear);
digitalWrite(right_XI,LOW);
analogWrite(right_VSP,gear);
delay(10);
}
void spin_right() // S右转
{
digitalWrite(left_DIR,LOW);
digitalWrite(left_FG,HIGH);
analogWrite(left_FG,cel);
delay(200);
digitalWrite(left_FG,LOW);
analogWrite(left_FG,cel);
delay(200);
digitalWrite(left_XI,HIGH);
analogWrite(left_VSP,gear);
digitalWrite(right_XI,LOW);
analogWrite(right_VSP,gear);
delay(10);
}void right_back() // 右后转
{
digitalWrite(right_DIR,LOW);
digitalWrite(right_FG,HIGH);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(right_FG,LOW);
analogWrite(right_FG,cel);
delay(200);
digitalWrite(left_XI,LOW);
analogWrite(left_VSP,gear);
digitalWrite(right_XI,HIGH);
analogWrite(right_VSP,gear);
delay(10);
}void accelerate()//加速
{
cel=cel+10;
brake();
}void decelerate()//减速
{
cel=cel-10;
brake();
}void loop()
{
left_val= analogRead(left_ALM);
right_val= analogRead(right_ALM);
if(left_val>=0)
{ if(left_val>=0)
{
getstr=Serial.read(); //
delay(10);//传输延迟时间
if(getstr=='A')
{
run();
}
else if(getstr=='B')
{
back();
}
else if(getstr=='C')
{
left();
}
else if(getstr=='D')
{
right();
}
else if(getstr=='E')
{
spin_left();
}
else if(getstr=='F')
{
spin_right();
}
else if(getstr=='G')
{
empty();
}
else if(getstr=='H')
{
accelerate();
}
else if(getstr=='I')
{
decelerate();
}
else if(getstr=='K')
{
left_back();
}
else if(getstr=='L')
{
right_back();
}
else if(getstr=='Z')
{
brake();
}
}
}
}


  • 琳郡主prince
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

这个PWM调速和速度脉冲两个是一个东西么?还是我的理解有问题,PWM是PWM,速度脉冲是速度脉冲


2026-01-07 11:28:16
广告
不感兴趣
开通SVIP免广告
  • 琳郡主prince
  • 默默无闻
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

这个delay之前都比较好懂,可这个left_fg 怎么一会儿low,一会儿high。但是它的值都是赋予的cel的值啊。 后面这个left_vsp值赋予gear的值=50,是什么意思,PWM占空比是多少啊,我人蒙了。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 2回复贴,共1页
<<返回arduino吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示