Robofun 機器人論壇
標題:
伺服馬達抽蓄
[打印本頁]
作者:
w72321
時間:
2016-10-5 17:33
標題:
伺服馬達抽蓄
本帖最後由 w72321 於 2016-10-10 20:43 編輯
請問一下各位大神!!
目前是設定當藍芽接通讀取後
伺服馬達角度會隨著發送過來的資訊改變角度
可是我收到資訊後伺服馬達會快速抽蓄
然後藍芽就斷線了!
等重新連接!當連接完成又開始抽蓄!然後又斷線了
一直重複
我是用HC-05
是否有什ㄇ要注意的呢?
我有確認馬達沒有問題!是正常的!
有問題的部分出現在 //轉向 之後的語法
希望大神們可以幫忙解惑
DC馬達部分沒有問題可驅動
以下是語法
--------------------------------------------------------------------------------------------
#include <Servo.h>
#include <SoftwareSerial.h>
#define LR_PWM 6 //伺服馬達 第6腳位
Servo LR_Servo; //定義伺服馬達 名稱為LR
//TB6612FNG Dual Motor Driver 電機驅動模組,後輪馬達
int STBY = 4; //standby
int PWMA = 9; //Speed control
int AIN1 = 7; //Direction
int AIN2 = 8; //Direction
int LED = 12;
void setup()
{
pinMode(STBY, OUTPUT);
pinMode(PWMA, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
Serial.begin(19200);//設定與藍芽通訊的鮑率
LR_Servo.attach(LR_PWM);//伺服馬達 第6腳位
LR_Servo.write(90);//伺服馬達 起始角度
}
bool ledToggle = false;
bool lastSerialn = false;
void loop() {
if (Serial.available() > 0) //判斷是否有接收到藍牙訊息
{
// read the data
char PosX;
char PosY;
bool Serialn = false;
// read X
while (Serial.available()) {
char c = Serial.read();
if (c == '@') {
break;
} else {
PosX = c;
}
}
// read Y
while (Serial.available()) {
char c = Serial.read();
if (c == '#') {
break;
} else {
PosY = c;
}
}
//Z Botton
while (Serial.available()) {
char c = Serial.read();
if (c == '$') {
break;
} else {
Serialn = c == '0'; // true
}
}
while (Serial.available()) {
char c = Serial.read();
if (c == '\n') {
break;
}
}
//LED控制-----沒問題
if (Serialn != lastSerialn) {
if (Serialn)
ledToggle = !ledToggle;
}
lastSerialn = Serialn;
if (ledToggle)
digitalWrite(LED, HIGH);
else
digitalWrite(LED, LOW);
//前後控制-------沒問題
char X = PosX ;
//前進
if (X == 'Q')//若接受到字元'Q'
{
move(1, 100, 1); //motor 1, 速度100, 正轉
} else if (X == 'W')//若接受到字元'W'
{
move(1, 180, 1); //motor 1, 速度180, 正轉
} else if (X == 'E')//若接受到字元'E'
{
move(1, 255, 1); //motor 1, 速度255, 正轉
}
//後退
else if (X == 'A')//若接受到字元'A'
{
move(1, 100, 0); //motor 1, 速度100, 反轉
} else if (X == 'S')//若接受到字元'S'
{
move(1, 180, 0); //motor 1, 速度180, 反轉
} else if (X == 'D')//若接受到字元'D'
{
move(1, 255, 0); //motor 1, 速度255, 反轉
} else {
stop();//車不動
}
//轉向
char Y = PosY ;
int angleY = 90;
if (Y == 'L') {
angleY = angleY - 15; //若接受到字元'L'時,車左轉
} else if (Y == 'R') {
angleY = angleY + 15; //若接受到字元'R'時,右轉
} else {
angleY = angleY ; //車置中
}
LR_Servo.write(angleY);//伺服馬達 起始角度
delay(30); //延遲0.1秒
}
}
void move(int motor, int speed, int direction) {
//以一個確定的速度和方向移動電機
//電機: 0代表B 1代表A
//速度: 0關閉電機, 255開啟最快速度
//方向: 0正轉, 1反轉
digitalWrite(STBY, HIGH); //關閉standby
boolean inPin1 = LOW;
boolean inPin2 = HIGH;
if (direction == 1) {
inPin1 = HIGH;
inPin2 = LOW;
}
if (direction == 0) {
inPin1 = LOW;
inPin2 = HIGH;
}
if (motor == 1) {
digitalWrite(AIN1, inPin1);
digitalWrite(AIN2, inPin2);
analogWrite(PWMA, speed);
}
}
void stop() {
//開啟standby
digitalWrite(STBY, LOW);
}
作者:
croma
時間:
2016-10-5 22:48
我沒有使用過這個系統所以只能建議把 轉向 或 速度 先註解掉一個測試看看~ 可能有衝突
作者:
超新手
時間:
2016-10-6 09:07
有外接電源嗎?
可以先把伺服馬達拿掉, 看看還會不會斷線
如果會, 不是電源不夠力, 就伺服馬達壞掉
可以寫程式單獨測伺服馬達看看有有問題
作者:
w72321
時間:
2016-10-6 14:12
croma 大
註解掉的方式有試過!!所以應該不是衝突的問題!
當時只留下轉向的語法!其餘都註解!還是抽蓄!所以應該可以釐清
超新手大
電源的部分也釐清過了!!OK的
只有單獨的伺服馬達語法也試過了 運行OK
有人說是PWM 輸出和 serial 共用 timer 中斷,而 serial 比較優先,所以接收到資料就會影響 PWM 的輸出。
有解決的辦法ㄇ??
作者:
croma
時間:
2016-10-6 17:42
回覆
4#
w72321
1. 檢查接腳 是不是不小心共用了同一個腳位
2. 檢查是否共用了同一個計時器~ 有的話錯開
3. 調整中斷優先權
4. 檢查是否在接收的中斷做了發送的動作(我幹過這種蠢事)
作者:
britender
時間:
2016-10-8 11:36
如果我沒有記錯的話.....
void setup()
{
pinMode(STBY, OUTPUT);
pinMode(PWMA, OUTPUT); <~拿掉這行
pinMode(AIN1, OUTPUT);
pinMode(AIN2, OUTPUT);
Serial.begin(19200);//設定與藍芽通訊的鮑率
LR_Servo.attach(LR_PWM);//伺服馬達 第9腳位
LR_Servo.write(90);//伺服馬達 起始角度
}
好像是這行衝突到吧
作者:
w72321
時間:
2016-10-10 20:46
抱歉樓上的大大!!
我貼上去的語法好像有寫錯~現在已更正了~
只是註解部分寫錯~實際上繳為沒有衝突~
LR_Servo.attach(LR_PWM);//伺服馬達 第9腳位 <==應該是註解第6腳位
pinMode(PWMA, OUTPUT); <==注視速度部分使用的腳位!應該是沒有問題的~~AC馬達正常驅動!
所以我找不出原因!! ><
謝謝熱心幫我找問題!!可能我真的太笨了!
作者:
超新手
時間:
2016-10-11 11:44
我有照你的方式接並測試,
並不會宥伺服馬達抽蓄的問題
基本上, 程式再有什麼問題
並不至於會造成"藍芽斷線"
(我所認知的斷線, 應該是藍芽模組的led是常亮, 後來變閃爍)
如果不是 app 自己斷線, 就是硬體有問題
所以我才會建議先拔掉一些東西來測, 看看是那出問題
作者:
w72321
時間:
2016-10-13 12:13
OK~~謝謝超新手!!
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2