极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 15408|回复: 6

用码盘给直流小电机测速问题求助

[复制链接]
发表于 2015-8-18 14:01:32 | 显示全部楼层 |阅读模式
小白一个,折腾了堆代码,运行后返回的数值永远是0,求助{:soso_e136:} {:soso_e136:}


#include <MsTimer2.h>
//volatile int state = HIGH;
int u = 13;//定义U型测速端口
int CW1=8;//连接电机1转向端口到数字接口8
int CW2=9;
int PWM=11; //连接电机1调速端口到数字接口11  
int wheel = 0; //记录U型测速模块的次数
  wheel++;
//state=!state;
}
float velocity(int n)
{
  float vel =n/20;
  return vel;
}

void flash()
{
  int l;
  l=wheel;
  vel=velocity(l);
  Serial.print(vel);
  Serial.print("r/s");
  Serial.print("\n");
  wheel = 0;
}

void setup ()
{
  Serial.begin(9600);
  attachInterrupt(0,Count, RISING);
  pinMode(CW1,OUTPUT);
  pinMode(CW2,OUTPUT);
  pinMode(PWM,OUTPUT);
  pinMode(u,INPUT);
  MsTimer2::set(1000, flash);        // 中断设置函数,每 1s 进入一次中断
  MsTimer2::start();
}

void loop()
{
  digitalWrite(PWM,200);
  digitalWrite(CW1,HIGH);//电机1正转
  digitalWrite(CW2,LOW);
}



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-8-18 15:35:41 | 显示全部楼层
wheel只有在初始化中出现,int wheel=0 因此打印为0,wheel++在loop外只会动作一次,不会累加的,应该放在loop内吧。
回复 支持 反对

使用道具 举报

发表于 2015-8-18 16:15:07 | 显示全部楼层
怎麼找不到你的 Count function 的?
回复 支持 反对

使用道具 举报

发表于 2015-8-18 16:20:23 | 显示全部楼层
好像少了一行, wheel++ 之前, 應該是 void Count { , 對嗎?

如果是的話, 還要看看你的接線, 是否接到 D2 上?
回复 支持 反对

使用道具 举报

发表于 2015-8-19 08:12:13 | 显示全部楼层
之前做过用电机编码器结合PID算法控制电机转速,电机编码器线数10线,一开始也用1S周期的作为PID转速采样的输入,结果电机的转速就像SIN函数曲线,懂的。后来改为脉冲宽度采集,用脉冲宽度反推时间,采样周期明显缩短。控制精度提高。
回复 支持 反对

使用道具 举报

发表于 2015-8-19 08:13:13 | 显示全部楼层
Arduino能力有限,如果做好电机控制建议用STM32或者DSP。
回复 支持 反对

使用道具 举报

发表于 2015-8-19 12:15:24 | 显示全部楼层
Super169 发表于 2015-8-18 16:15
怎麼找不到你的 Count function 的?

没看到中断处理函数啊。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-8 00:34 , Processed in 0.054532 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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