找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 9157|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

arduino串口輸出PWM波控制電機(jī)轉(zhuǎn)速

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:226748 發(fā)表于 2017-8-10 21:30 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
通過(guò)串口輸出PWM信號(hào),也就是脈沖寬度調(diào)制。改變占空比,可以近似輸出不同的電壓,從而對(duì)電機(jī)進(jìn)行調(diào)速。

所有資料51hei提供下載:
串口_調(diào)_PWM.rar (4.84 KB, 下載次數(shù): 54)

arduino源程序如下:
  1. // 串口管理單元


  2. // Alita 2016-10-13 嘗試簡(jiǎn)單的數(shù)值命令--實(shí)用版
  3. // Alita 2016-10-15 v2:支持負(fù)數(shù)
  4. int GetCMD()
  5. {
  6.    // Read serial input:
  7.   while (Serial.available() > 0)
  8.   {
  9.     // 讀取一個(gè)字符
  10.     int inChar = Serial.read();
  11.     // Alita 2016-10-15 負(fù)數(shù)符號(hào)判定
  12.     if(inChar == 45 and inString.length() == 0)
  13.     {
  14.         // 負(fù)號(hào)條件必須出現(xiàn)在字符串的開(kāi)頭(當(dāng)前先這樣處理)
  15.         inString += (char)inChar;
  16.       }
  17.     // 判定是不是數(shù)值字符(0~9)
  18.     // [注意]該判定方法組會(huì)導(dǎo)致只提取字符串中的所有數(shù)字并將其構(gòu)成一個(gè)數(shù)字字符序列
  19.     if (isDigit(inChar)) {
  20.       // 添加到字符串中(byte轉(zhuǎn)換為char類型)
  21.       inString += (char)inChar;
  22.     }
  23.     // 換行符表示結(jié)束--也可以使用特殊字符但是需要小心處理
  24.     if (inChar == '\n')
  25.     {
  26.       // 有效性判定
  27.       if(inString.length() <=0)
  28.       {
  29.           // 無(wú)效數(shù)據(jù)
  30.           return 0;
  31.         }
  32.       // 將字符轉(zhuǎn)換為數(shù)值
  33.       int intCMD = inString.toInt();
  34.       if(intCMD == -10)
  35.       {
  36.         Serial.println("right");
  37.         }
  38.       Serial.println(intCMD);
  39.       // 清空輸入
  40.       inString = "";

  41.       // 反饋結(jié)果
  42.       return intCMD;
  43.     }
  44.   }

  45.   // 無(wú)效結(jié)果
  46.   return 0;
  47. }
  48. //對(duì)串口接受到的數(shù)據(jù)進(jìn)行有效性判定
  49. void  Test_SerialPort_CMD1()
  50. {
  51.   int intCMDValue = 0;
  52.   intCMDValue = GetCMD();
  53.   if(intCMDValue < -255 or intCMDValue > 255)
  54.   {
  55.       // 無(wú)效命令
  56.       Serial.println("[Error]Err Speed CMD,Range exception ,not between[0,255]");
  57.       return;
  58.     }
  59.     else if(intCMDValue == 0)
  60.     {
  61.        return;
  62.     }
  63.     else
  64.     {
  65.       analogWrite(13, intCMDValue);
  66.     }
  67.    
  68. }
復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:429183 發(fā)表于 2018-12-8 13:47 | 只看該作者
下載看看好像合用
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表