[问题] 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