极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: 发源地

新人求助——用PWM控制电调,进而电机固定转速旋转。

[复制链接]
 楼主| 发表于 2014-8-23 22:48:44 | 显示全部楼层
本帖最后由 发源地 于 2014-8-24 16:35 编辑
eddiewwm 发表于 2014-8-23 18:03
"电机总是转一段时间后,休息一段时间 "?看來你的電調工作得有點奇怪,但既然已可以轉,就說明基本的控制 ...


这样的我已经试过了(从1000,1100,,,,1900,2000都不行),,我于是就这样改的
void loop()  
{  
  digitalWrite (pin, HIGH);
  delayMicroseconds(count);  
  digitalWrite (pin, LOW);
  delayMicroseconds(20000-count);  

  
  if (up ==1)
  {
    count++;
  }
  if ( count == 2000 )
  {
    count--;
  }
}
电机就转起来了,而且是一直转的,我不明白怎么回事,感觉和count==2000意思是一样的?
不过,我又遇到了一个问题,因为我还要和其他控制一起运行,例如会和舵机、传感器一起,我把其他程序加进去,其他程序里面也有延时,结果导致电机就不转了,你有什么好的建议给我吗?
我看到网上还有人说这几句程序会占用主线程,不推荐使用,我也不知道是不是?
  digitalWrite (pin, HIGH);
  delayMicroseconds(count);  
  digitalWrite (pin, LOW);
  delayMicroseconds(20000-count);  
关于多程序一起运行的问题,我看了一下,貌似有人推荐使用多线程,不知道这是不是可行的方法?希望不吝指教!
回复 支持 反对

使用道具 举报

发表于 2014-8-26 21:54:29 | 显示全部楼层
发源地 发表于 2014-8-23 22:48
这样的我已经试过了(从1000,1100,,,,1900,2000都不行),,我于是就这样改的
void loop()  
{  ...

這樣可看看壇裡資料:
http://wiki.geek-workshop.com/doku.php?id=arduino:libraries:timer
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-30 10:28:15 | 显示全部楼层
eddiewwm 发表于 2014-8-26 21:54
這樣可看看壇裡資料:
http://wiki.geek-workshop.com/doku.php?id=arduino:libraries:timer

谢谢eddiewwm大神以及其他热心帮助的人,我已经搞定了。不知道是我买的电调的原因,还是别的什么,主要是要先进行油门行程设置,然后在进行固定转速程序,不然会出一些问题,尤其是多线程时。
回复 支持 反对

使用道具 举报

发表于 2014-8-31 15:28:27 | 显示全部楼层
发源地 发表于 2014-8-23 22:48
这样的我已经试过了(从1000,1100,,,,1900,2000都不行),,我于是就这样改的
void loop()  
{  ...

步进电机的转动主要就是靠脉冲来驱动,试试用tone()试试,tone是发脉冲的,如tone(2,50)即数字脚2发频率50Hz的脉冲,本人试过,加延时不会影响到转动

  1. int K =2;     //开关
  2. int PUL = 3;  //脉冲输出
  3. int DIR = 4;  //方向信号
  4. int Hz = 100; //脉冲数

  5. void setup() {               
  6.   pinMode(K, INPUT);
  7.   pinMode(PUL, OUTPUT);   
  8.   pinMode(DIR, OUTPUT);   
  9.   Serial.begin(9600);
  10. }

  11. void loop()
  12. {
  13. if(digitalRead(K)==LOW)
  14. {
  15.   delay(5);
  16.   if(digitalRead(K)==LOW)
  17.   {
  18.     Hz+=50;              //检测到按键按下,频率+50      
  19.     Serial.println(Hz);
  20.     while(digitalRead(K)==LOW)
  21.     {
  22.     }
  23.   }
  24.   
  25. }
  26.   tone(PUL,Hz);          //向PUL发频率为Hz的脉冲
  27.   delay(1000);           //随机写的延时
  28. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2016-5-31 17:34:10 | 显示全部楼层
能发你弄好的程序来看看吗   最近我也遇到这样的问题了
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 07:28 , Processed in 0.035200 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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