ESC32

调试新到的ESC32,这个32位mcu为核心的电调,

拿到电调需要先进行一些焊接,通常卖家会有介绍,我说一下电源部分.另一个我搞晕的地方是FTDI(其实就是一个TTL串口).稍微再说一下调试吧.

电源跳线:
电源跳线位于左下角,3个点,左边是电池输入,右边是5V输入,中间是3.3V稳压管的输入脚.这就清楚了,另外这个电压也是供给MOS管的驱动电压,因为是N管,当然电源越高越好,LR7843支持±20V的输入电压.我用4S供电,满电也就16.5,于是我直接3点焊一起.这时+5V就等于电池电压!
FTDI连接上位机软件WIN7:
开始我怎样连都不行,原来有一些地方是要注意的.
1.如果按上面的电源接法,那么+5V就不要接了,因为按照电压很高.
2.除了+5V还需要接3条线,分别是GND,TX,RX…这个接法不用说了吧,就是G接G,TX接RX,RX接TX…(当然是接到你的TTL串口模块上啦)
3.进入设备管理器,看一下串口号,如果串口号大于6的话改小一点,我试过2和5都是可以的.但是16是不行的额,搞了很久.
4.用右键管理员模式启功qgroundcontrol_aq-Win32-1.2.1.然后,然后就发挥你的英文水平吧,很简单的.
5.找到Main Widget再选AutoQuad,在出来的窗口(应该叫选项卡),找Esc32 Settings…
6.左边找到你的COM口号,ESC32硬件上电,看到灯闪,然后点击Connect,过2秒右边会出现参数,如果没有说明你的连接或者上述出问题了,重新检查看看吧.
7.如果真的没有,用串口工具吧,波特率是230400,我没有按错,是230400.它就是那么高的.连好串口重新上电,会出来版本.出来就好办了.
8.接第7条,发送help换行.你会看到菜单,哈哈我就叫它"菜单"…

调试,重点吧,哈哈::
有两个情况,就是QGC能连上和不能连上,连上好办,看:
1.设置磁极数Motor poles,自己数你的马达线圈,或者根据厂家的资料.和设置电机进角,下面有说明.
2.设置ESC32 Mode模式,一般为RPM(定速),或者thrust(推力)这两个模式都是闭环的,需要校正电流等等,不推荐使用open Loop(开环控制),主要是浪费了这个好电调,哈哈,你非用也行.如果要用推力模式,需要买个称,自己称出每增加1000转后的推力单位是克.
3.设置好ESC32 的输入模式,我是PPM输入.然后点Write config写入配置
开始校正:
4.进行上面设定后就可以校正了.点左边的arm(成功的话电机会叫一声),没听到的不要进行下面的步骤了.
5.再点start,电机会转起来,不转的也是不要进行下面的步骤了.
6.把电机停下来,点stop就可以了.
7.电机start calibration开始校正.里面有两项都要做,一个是转速和电压,另一个是电流.[校正这两步后就可以使用RPM模式了]
8.!!!校正是要装桨的,所以一定要注意安全!!!不要用手,你可能按不住的!!!
9.校正完后点Write config写入配置.完成,试试吧

补充说一下:
Switch frequenz开关频率,这个用来设置电机的PWM频率.默认20K的话效果很好,好盈电调的频率4K~8K,中特威电调是
可选的8K或16K,贴上中特威的说明书:
9.工作频率:8kHz/16kHz;8kHz—为2极马达设置的工作频率,比如內转子;16kHz–为2个以上极的马达设置的工作频率,比如外转子;虽然工作频率16kHz能给我们的固定翼或直升机提供劲暴的动力,但由于16kHz所产生的较高RF噪音,所以默认设置为8kHz.
显然,中特威并不推荐使用高频率.

我的理解:
磁极数越多频率越低.
转速越高频率越低.
功率越高频率越低.

1、没有统一的标准,其实PWM的频率和你的电机感抗和你需要的速度响应时间有很大的关系。一般的电机用14K就足够了。
当然自需要简单的调速可以随便选。 如果电机转速比较高,感抗比较小,可以使用比较高的频率。一般最好不要超过20K , 因为一般IGBT最高20K的开关频率。 而MOS 的开关频率比较高,, 但是过高的F 需要专用的驱动电路,不然MOS工作在放大区的时间比较长。
如果电机转速比较低,感抗比较大, 而且又是在做伺服,, 那开关频率就需要低一点。
2、对于电机应用,功率越大,PWM频率越低,最低有500Hz或者1KHz的,在兆瓦级的应用中。
普通中小功率的,5K到20K常见,功率越低,电压等级越低,你所能使用的PWM频率越高。因为低压的MOSFET开关频率可以做到很高,
而高压的IGBT却很难***开关。普通的马达,10K到20K,都没问题。我们做KW级主变频器,开关频率10K。

油门行程校正
其实就是设置油门行程的范围,PWM LO Value和 PWM HI Value之间输入你的PWM行程范围,就是油门最大和最小值.
然后,PWM LO Value和 PWM min Start之间设置解锁的PWM范围,当PWM在这个范围就可以解锁了.

追加一个图片说说我的解锁值,我是用APM2.52的,这个设置可以解锁APM的时候同时解锁电调,APM上锁的时候电调disarm(灯闪)

进角:
对于不同的电机需要使用不同的进角,可以通过ADVANCE修改,范围是0~30.也引用中特威的说明书.(我买过一只中特威的电调,这里只是引用一下,不要想歪了)
5.马达进角设置:自动/低/高
低(7-22度)–为大多数的內转子马达设置
高(22-30度)–为6个或更多极性外转子的马达设置
大多数情况下,为了提高效率,我们建议对2极马达使用低进角设置(一般的内转子),6极和6极以上(一般的外转子)马达使用高进角。对于较高的速度,可以设定高进角。
备注:修改马达的进角设置后,请先在地面上运行您的马达

thrust推力模式
要使用推力模式必须设置THR1和THR2,这两个值QGC是不会帮你自动设置的,这个与桨有关,与电机并没有太大关系.
这两个值的计算需要用到称,电子称或机械称都可以,只要精度够高就行.像下面那个图片中的推力测试平台就很好.
ok,开始测试数据,用地面站设置你的电机到1000转,2000RPM~~最大转速,然后记录每个转速下的推力是多少克.
这是APC1238桨的测试结果:
转速/rpm 推力/g
0 0
2000 100
3000 235
3500 335
4000 465
4500 610
5000 780
5500 985
6000 1215
然后你需要做曲线拟合,有个网站很不错,提供了在线计算曲线系数,并且计算完提供一份详细PDF文档给下载.
方法如下:
您可以使用任何数学软件,用下面的测量数据点的方程
Thrust (推力) =RPM* TH1TERM + RPM^2* TH2TERM

我用网上的曲线拟合工具http://zunzun.com, 指令使用zunzun.com:
选择“2DFunctions - >Polynominal”
选择“Quadratic 2D y= a + bX + cX2”
选择“Text data editor”,清除里面的内容,并输入您的数据点
选择“Hold Coefficients Constant”,并进入一个0“a”
CLICK“Submit”,等待
找到“Y data vs. X data with model”,从“Data Graphs”,以检查您的结果
找到“Coefficients”,从“Coefficients And Text Reports”
您将获得:
A =0.0000000000000000E+00=
B =-4.5544961899685120E-02(这是你的TH1TERM ESC32)
C =4.0853611908380645E-05(这是您TH2TERM ESC32)

要进行验证,你可以测量油门与推力,并绘制它。它应该是完全线性的。
油门和推力的曲线图.

推力测试平台.

硬件:
目前国内除了官方的有下面2个版本:

上图这个是ze泽的版本,左3=电源选择,右2=boot,下6=IIC和PWM.左3上是VB,下是+5V.
下6的123是IIC,4是pwm,5是+5V,6是gnd

这个是六的版本,有QQ群号,这个是最接近官方的版本,我的说明也是按照这个来写的.

最后附上我自己编译的固件.
修改解锁后LED慢闪.
上电鸣叫一曲爱丽丝.
修改电机停转时的延时时间,响应跟迅速.
支持servo模式.CLI测试OK.
支持开环,闭环转速,闭环推力模式
支持正反转(未测试)

基于5528版本修改.
esc32_yuri.hex
esc32_yuri.hex (128.66 KB, 下载次数: 237)

还有地面站软件.本来想搬过来29MB太大了,还是你们自己下吧.
qgroundcontrol_aq-Win32-1.3.RC2.1.zip
http://autoquad***/software-downloads/?did=73

/* This file is part of AutoQuad ESC32. AutoQuad ESC32 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. AutoQuad ESC32 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with AutoQuad ESC32. If not, see . Copyright © 2011, 2012 Bill Nesbitt */ /* * pwm.c文件.此文件有2个功能,2个功能分别使用,不能同时使用 * 1、pwm in输入模式,pwm输入中断里,调用runNewInput函数 * 2、one wire通讯协议,pwm输入中断里,调用owEdgeDetect函数,来输入新的数据,调用owReset函数来复位1wire通讯 * */ #include "pwm.h" #include "timer.h" #include "run.h" #include "main.h" #include "ow.h" #include "stm32f10x_gpio.h" #include "stm32f10x_tim.h" #include "misc.h" static int16_t pwmMinPeriod; //timer1 ch1 pwm 输入最小周期 static int16_t pwmMaxPeriod; //timer1 ch1 pwm 输入最大周期 int16_t pwmMinValue; //timer1 ch2 pwm 输入最小周期 static int16_t pwmMaxValue; //timer1 ch2 pwm 输入最大周期 int16_t pwmLoValue; int16_t pwmHiValue; int16_t pwmMinStart; volatile uint32_t pwmValidMicros; //关闭输入捕获比较中断 1和2 void pwmIsrAllOff(void) { PWM_TIM->DIER &= (uint16_t)~(TIM_IT_CC1 | TIM_IT_CC2);//关闭中断 } //开启输入捕获比较中断 1和2 void pwmIsrAllOn(void) { PWM_TIM->CCR1; PWM_TIM->CCR2; PWM_TIM->DIER |= (TIM_IT_CC1 | TIM_IT_CC2);//允许捕获比较 1 2中断 } //开启捕获比较2中断 void pwmIsrRunOn(void) { uint16_t dier = PWM_TIM->DIER; dier &= (uint16_t)~(TIM_IT_CC1 | TIM_IT_CC2); dier |= TIM_IT_CC2;//允许捕获/比较2中断 PWM_TIM->CCR1; PWM_TIM->CCR2; PWM_TIM->DIER = dier; } //timer 1 void pwmInit(void) { GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; TIM_ICInitTypeDef TIM_ICInitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; pwmSetConstants(); // TIM1 channel 1 pin (PA.08) configuration GPIO_InitStructure.GPIO_Pin = PWM_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(PWM_PORT, &GPIO;_InitStructure); // Enable the TIM1 global Interrupt NVIC_InitStructure.NVIC_IRQChannel = PWM_IRQ; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC;_InitStructure); TIM_TimeBaseStructInit(&TIM;_TimeBaseStructure); TIM_TimeBaseStructure.TIM_Prescaler = (PWM_CLK_DIVISOR-1); TIM_TimeBaseStructure.TIM_Period = 0xffff; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(PWM_TIM, &TIM;_TimeBaseStructure); TIM_ICInitStructure.TIM_Channel = PWM_CHANNEL; TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising; TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI; TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1; TIM_ICInitStructure.TIM_ICFilter = 0x0; TIM_PWMIConfig(PWM_TIM, &TIM;_ICInitStructure); // Select the TIM Input Trigger: TI1FP1 // 滤波后的定时器输入1(TI1FP1) TIM_SelectInputTrigger(PWM_TIM, TIM_TS_TI1FP1); // Select the slave Mode: Reset Mode TIM_SelectSlaveMode(PWM_TIM, TIM_SlaveMode_Reset);//复位模式 // Enable the Master/Slave Mode TIM_SelectMasterSlaveMode(PWM_TIM, TIM_MasterSlaveMode_Enable); // TIM enable counter TIM_Cmd(PWM_TIM, ENABLE); pwmIsrAllOn(); } //timer1 TIM1_CC_IRQHandler中断 void PWM_IRQ_HANDLER(void) { uint16_t pwmValue; uint16_t periodValue; uint8_t edge; edge = !(PWM_TIM->SR & TIM_IT_CC2); periodValue = PWM_TIM->CCR1; //IO 输入PA8 周期 pwmValue = PWM_TIM->CCR2; //IO 输入(但是没有看到配置了使用哪个IO做为输入了) 脉宽长度 // look for good RC PWM input if (inputMode == ESC_INPUT_PWM && //PWM输入模式 periodValue >= pwmMinPeriod && periodValue = pwmMinValue && pwmValue <= pwmMaxValue //脉宽长度 ) { if (edge == 0) { pwmValidMicros = timerMicros; runNewInput(pwmValue); //PWM正确.输入 } } } void pwmSetConstants(void) { float rpmScale = p[PWM_RPM_SCALE]; pwmMinPeriod = p[PWM_MIN_PERIOD] = (int)p[PWM_MIN_PERIOD];//PWM最小周期 timer1 ch1 pwmMaxPeriod = p[PWM_MAX_PERIOD] = (int)p[PWM_MAX_PERIOD];//PWM最大周期 timer1 ch1 pwmMinValue = p[PWM_MIN_VALUE] = (int)p[PWM_MIN_VALUE]; //PWM最小周期 timer1 ch2 pwmMaxValue = p[PWM_MAX_VALUE] = (int)p[PWM_MAX_VALUE]; //PWM最大周期 timer1 ch2 pwmLoValue = p[PWM_LO_VALUE] = (int)p[PWM_LO_VALUE]; pwmHiValue = p[PWM_HI_VALUE] = (int)p[PWM_HI_VALUE]; pwmMinStart = p[PWM_MIN_START] = (int)p[PWM_MIN_START]; if (rpmScale PWM_RPM_SCALE_MAX) rpmScale = PWM_RPM_SCALE_MAX; p[PWM_RPM_SCALE] = rpmScale; } ESC32开源电调 源码与原理图,此源码采用RTT操作系统,CAN PWM操作方式 ,本人已用PWM方式成功驱动起来,CAN 暂且还没做测试。 此资料是 啊嘉 开源出来的,好资料不敢独享,稍加整理放到这与大家共享。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值