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

看板ASM (組合語言)作者 (system fail)時間6年前 (2018/08/30 12:12), 編輯推噓2(204)
留言6則, 2人參與, 6年前最新討論串1/1
這標題下的可能不是很好還請見諒 我近日遇到一個神奇的問題,在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。 -- There are no two words in the English language more harmful than “good job”. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.199.160 ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1535602351.A.473.html

08/30 16:42, 6年前 , 1F
我後來發現應該是硬體問體,PWM出去的裝置會讓電流電壓
08/30 16:42, 1F

08/30 16:42, 6年前 , 2F
不穩
08/30 16:42, 2F

09/03 22:13, 6年前 , 3F
請問你是直接用arduino的IO打PWM"直接"去推馬達嗎?
09/03 22:13, 3F

09/03 22:32, 6年前 , 4F
pwm過電子變數器再推馬達
09/03 22:32, 4F

09/04 21:43, 6年前 , 5F
是否可以提供個接線圖讓其他人幫你看看 另外想問電變
09/04 21:43, 5F

09/04 21:44, 6年前 , 6F
跟arduino的電源怎麼來的?
09/04 21:44, 6F
文章代碼(AID): #1RXswlHp (ASM)
文章代碼(AID): #1RXswlHp (ASM)