作者tommycc (system fail)
看板ASM
标题[问题] Arduino 2-Wire与PWM冲突?
时间Thu Aug 30 12:12:16 2018
这标题下的可能不是很好还请见谅
我近日遇到一个神奇的问题,在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://webptt.com/cn.aspx?n=bbs/ASM/M.1535602351.A.473.html
1F:→ tommycc: 我後来发现应该是硬体问体,PWM出去的装置会让电流电压 08/30 16:42
2F:→ tommycc: 不稳 08/30 16:42
3F:推 oscar60111: 请问你是直接用arduino的IO打PWM"直接"去推马达吗? 09/03 22:13
4F:→ tommycc: pwm过电子变数器再推马达 09/03 22:32
5F:推 oscar60111: 是否可以提供个接线图让其他人帮你看看 另外想问电变 09/04 21:43
6F:→ oscar60111: 跟arduino的电源怎麽来的? 09/04 21:44