|
我还是在研究里用树莓派来做无刷云台,目前还在做电机驱动部分,打算用树莓派I2c与PCA9685来进行通讯,控制PCA9685(可生成16路,12位精度 0~4095,最高1526HZ的PWM波)生成PWM波送到DRV8313来驱动无刷电机。然后控制方法还是借鉴老外的方法,建立正弦表数组,数组长度360,通过查表生成三路pwm波,三路PWM的占空比在正弦表里相差120°。但是实际进行测试的时候,有三个问题,一个是电机转动的不匀速,二是电机发热非常严重。三是噪音很大,而且除了一个频率不变的噪声之外(这个应该是由于PWM自身的频率太低造成,已经打算将PCA9685更换为Arduino),还会周期的有其他噪音。我利用示波器看了看生成的pwm波型。发现在每个周期里,在每项的每一个周期波形中同一个时间内都会有个跳变,不知道什么引起的,估计这个就是那个周期性噪音和转动不匀速的原因吧?通过这种方式控制电机来做无刷自稳云台是否可行?请各位前辈帮忙分析一下,谢谢。
程序只粘了设置PWM的部分
while(delyTime)
{
OFFLA=pwmSin[CurrentStepA]&0b000011111111;
OFFHA=pwmSin[CurrentStepA]>>8;
OFFLB=pwmSin[CurrentStepB]&0b000011111111;
OFFHB=pwmSin[CurrentStepB]>>8;
OFFLC=pwmSin[CurrentStepC]&0b000011111111;
OFFHC=pwmSin[CurrentStepC]>>8;
wiringPiI2CWriteReg8(fd,20,OFFLA);
wiringPiI2CWriteReg8(fd,21,OFFHA);
wiringPiI2CWriteReg8(fd,24,OFFLB);
wiringPiI2CWriteReg8(fd,25,OFFHB);
wiringPiI2CWriteReg8(fd,28,OFFLC);
wiringPiI2CWriteReg8(fd,29,OFFHC);
CurrentStepA = CurrentStepA + increment;
if(CurrentStepA > sineArraySize) CurrentStepA = 0;
if(CurrentStepA<0) CurrentStepA =sineArraySize;
CurrentStepB = CurrentStepB + increment;
if(CurrentStepB > sineArraySize) CurrentStepB = 0;
if(CurrentStepB<0) CurrentStepB =sineArraySize;
CurrentStepC = CurrentStepC + increment;
if(CurrentStepC > sineArraySize) CurrentStepC = 0;
if(CurrentStepC<0) CurrentStepC =sineArraySize;
delay(delyTime);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|