[問題] Arduino 2-Wire與PWM衝突?

作者: tommycc (system fail)   2018-08-30 12:12:16
這標題下的可能不是很好還請見諒
我近日遇到一個神奇的問題,在Arduino Mega2560
我目前使用MPU6050獲取姿態資料(2-wire,I2C)
用於控制馬達,由於Arduino預設的PWM resolution只有8bits
所以我採用自己寫的PWM設定如下:
void pwm_init()
{
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
TCCR4A = _BV(COM4A1) | _BV(COM4B1) // non-inverting PWM
| _BV(WGM41); // mode 10: PWM, Phase Correct,
//TOP=ICR4
TCCR4B = _BV(WGM43) | _BV(CS40); // no prescaling
ICR4 = 26666; //300Hz TOP counter value
OCR4A = 100;
OCR4B = 100;
TCCR1A = _BV(COM1B1) | _BV(COM1C1) // non-inverting PWM
| _BV(WGM11); // mode 10: PWM, Phase Correct,
// TOP=ICR1
TCCR1B = _BV(WGM13) | _BV(CS10); // no prescaling
ICR1 = 26666;
OCR1C = 100;
OCR1B = 100;
TIMSK1 = 0;
TIMSK4 = 0;
}
這段程式碼單獨測試都沒有問題,而MPU6050的程式碼單獨測試也沒有問題
MPU6050採用I2Cdevlib的library,程式碼類似:
https://reurl.cc/g7l9L (官方sample code)
讀取資料部份全部搬入ISR中
只要兩者一合併(單單pwm_init()搬入setup()中),MPU6050大約跑個30秒就crash,但是
只要移除pwm_init(),就可以跑十幾分鐘都不是問題。
我有讀過ATmega640/V-1280/V-1281/V-2560/V-2561/V 這份datasheet,裡頭I2C (2-wire)
是跟PWM無關的(clock source等都無關)。
想請問各位大大有什麼可能的原因會造成類情形呢?
任何可能性都可以提出來,我會盡量去試試debug。
作者: tommycc (system fail)   2018-08-30 16:42:00
我後來發現應該是硬體問體,PWM出去的裝置會讓電流電壓不穩
作者: oscar60111 (還得努力學習)   2018-09-03 22:13:00
請問你是直接用arduino的IO打PWM"直接"去推馬達嗎?
作者: tommycc (system fail)   2018-09-03 22:32:00
pwm過電子變數器再推馬達
作者: oscar60111 (還得努力學習)   2018-09-04 21:43:00
是否可以提供個接線圖讓其他人幫你看看 另外想問電變跟arduino的電源怎麼來的?

Links booklink

Contact Us: admin [ a t ] ucptt.com