Arduino Uno 驱动无刷电调
本帖最后由 希岩 于 2020-5-28 13:06 编辑Arduino提供了PWM驱动库,但很难调整PWM频率。手头有有个无刷电机和一个电调,如何驱动电调呢?
可以看下面的连接http://www.rationmcu.com/lpc1114/1126.html
重要的是下面这些话: 电源线接电源,3个插孔接入三相电机的线,油门信号线共2条,黑色的是信号的GND,白色的就是信号线。商用的油门信号线,是采用PWM的的驱动方式,也就是说,我们随便找个单片机就可以给电调信号从而控制无刷电机运转了。我们现在拿到的这个好盈电调最大支持621Hz的PWM信号,下面的实验中,我们用500Hz的信号。速度是由PWM中高电平的时间决定的,一般从0.5~2.5ms。下面的实验中,我们用0.7ms作为最低速,1.9ms作为最高速,用单片机产生0.7ms到1.9ms之间的PWM信号,就可以把电机从0调到最大转速。
我们需要一个650HZ以下的PWM,占空比在0.5ms-2.5ms.采用ATmega328P的16位定时器1,定时器0用于delay函数了,不要轻易动。设置0.6ms为油门低,2.2ms为油门高对电调进行标定后就可以使用了,非常方便。这里我们的PWM频率只有大约250Hz,在允许范围内。
然后就可以上电测试了,连接在9或者10端口,再用一个放电倍率大的锂电池供电,就能驱动我们的无刷电机了。在试验中,我用示波器对脉宽进行了观测。控制器是Arduino Uno SMD edition。实验结果如图所示。
大家可以试一下,有问题可以问我哈。
//功能:无刷电调驱动
//作者:凌晨七點半 @Copyright
//日期:2017.12.19
//PWM频率:243HZ
//注意:delay()用的定时器0,定时器1是十六位定时器
#define UPTIME 550//2.2ms
#define DOTIME 150 //0.6ms
//------------------------------------------------------------
//初始化PWM,定时器1
//RFPWM=log(TOP + 1)/log(2)
void Init_PWM1(void)
{ //比较匹配时清零OC1A/OC1B, OC1A/OC1B 在TOP 时置位
TCCR1A|= (1<<COM1A1)|(1<<COM1B1)|(1<<WGM11)|(1<<WGM10); //page117
//快速PWM,预分频器64分频,page118 为4.1ms,243HZ
TCCR1B= (1<<WGM12)|(1<<CS11)|(1<<CS10);
OCR1A = UPTIME; //1.9ms
OCR1B = UPTIME; //1.9ms
}
//---------------------
void setup()
{int i;
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
Init_PWM1();
//标定过程,可以不要
//***********标定过程************
delay(2000); //3s内标定0.6ms和2.2ms
OCR1A=DOTIME ;
OCR1B=DOTIME;
delay(1000);
OCR1A=DOTIME;
OCR1B=DOTIME;
//************标定结束**********
for(i=0;i<400;i++)
{
OCR1A=DOTIME+i;
OCR1B=DOTIME+i;
delay(10);
}
OCR1A=300;
OCR1B=300; //0.6ms代表油门最低,2.2ms代表最高
}
//----------------------------
void loop()
{
} 您好,请问帖子中拍的照片的下方还连接有什么板子吗?能否拍一张完整的,谢谢啦!:lol 大概知道了,应该是一个电源+一个电调:lol happyer 发表于 2017-12-20 14:56
大概知道了,应该是一个电源+一个电调
哦,不好意思没拍全,就是一个锂电池和一个航模电机电调:D 感谢!:lol happyer 发表于 2017-12-22 19:56
感谢!
非常感谢!:lol 谢谢:$:$:$:$:$ 感谢分享,请教这样就可以利用arduino实现电机的正反转了么? 能不能测试到正反转之间的时间差?能否做个视频教程分享啊:lol 解释下代码和操作流程感谢 请问一下,你知道如何控制电调,让电机反转吗?
页:
[1]