精华内容
下载资源
问答
  • 四轴飞控

    2015-07-25 12:22:28
    接触四轴飞行棋林林总总下来也将近半年时间了,期间使用APM做了一个四轴,玩了一段时间,对于APM的源代码也做了一些了解和学习,自己也写了一个飞控,虽然做的不好,但是还是可以勉强进行飞行了,下面把这个飞空代码...

    接触四轴飞行棋林林总总下来也将近半年时间了,期间使用APM做了一个四轴,玩了一段时间,对于APM的源代码也做了一些了解和学习,自己也写了一个飞控,虽然做的不好,但是还是可以勉强进行飞行了,下面把这个飞空代码编写流程做个梳理。
    四周飞控主要也就是两个方面,姿态结算和电机控制。姿态结算正确,经过PID运算之后可以使用STM32很简单的调制出四路PWM波,送到电调去控制电机的转速。
    姿态结算:
    机体坐标系,惯性坐标系,两者之间的转化有姿态转移矩阵使用,两者时间可以进行自由的转化。
    首先就是使用加速度计的数据去初始化四元数,至于四元数的概念也不是很清楚,查阅大量文献之后还是没有什么结果,四元数在适应过程中一定要进行初始化,然后通过陀螺仪的数据去进行姿态更新,其中解算微分方程的方法使用毕卡算法,还可以使用龙格库塔方法,最后就可以根据陀螺仪的数据去实时的更新机体的姿态数据,但是由于陀螺仪精度,零飘等因素的影响,使用陀螺仪得到的四元数需要转化为欧拉角的形式,这个角度会和角速度计得到的角度信息进互补滤波,互补滤波其实就是对一个因素进行低通滤波,对另一个因素进行高通滤波,有点类似于加权平均的意思。最后就可以得到飞行器的实时姿态信息了。这样整个的姿态结算流程算是结束了。
    电机控制:
    四轴飞行器最终实现六个自由度依靠改变四个电机的转速,改变转速的方式就是给予电子调速器不同的高电平时间,这样就可以调节转速。调速算法我使用串级PID的形式,角度环作为外环,角速度环作为内环,整个系统的输入就是遥控器的输入,捕获PWM波可以直接使用定时器的功能,需要注意的就是一定要把输入量和反馈量放在一个数量级上,具体的实现方式时把输入除以某个数值,也可以把反馈的角度信息放大到与输入量一个数量级上。
    剩下的就是无止境的PID参数调试,注意调试方法,很快就可以得到一个满意的结果。
    给出一个串级PID的实现代码:
    void pid_calculate(void)
    {
    float angle_error;
    float angle_neihuan_error;
    float angle_error_sum;
    float angle_neihuan_error_sum;
    float waihuan_p_value;
    float waihuan_i_value;
    float waihuan_d_value;
    float neihuan_p_value;
    float neihuan_i_value;
    float neihuan_d_value;
    float neihuan_p_output;
    float neihuan_i_output;
    float neihuan_d_value;

    angle_error=expect_value-feedback_value;
    angle_error_sun+=angle_error;
     waihuan_p_output=angle_error*waihaun_p_value;
    

    waihuan_i_output=angle_error_sum*waihuan_i_value;
    waihuan_d_output=(angle_error-angle_last_error)*waihuan_d_value;

    waihuan_output=waihuan_p_output+waihuan_i_output+waihuan_d_output;

    angle_neihuan_error=waihuan_output-gyio.x;
    angle_neihuan_error_sum+=angle_neihuan_error;
    neihuan_p_output=angle_neihuan_error*neihuan_p_value;
    neihuan_i_output=angle_neihuan_error_sum*neihuan_i_value;
    neihuan_d_output=(angle_error-angle_error_last)waihuan_d_value;
    angle_error_last=angle_error;
    angle_neihuan_error_last=angle_neihuan_error;

    return neihuan_p_output+neihuan_i_output+neihuan_d_output;
    }
    代码时现敲的,主要时为了说明思想,有很多细小的错误!有时间再改吧,这回出去吃饭!!

    展开全文
  • 四轴飞控程序

    2017-03-20 22:10:29
    四轴飞控程序 四轴程序 玩物励志四轴程序 迷你四轴代码
  • QCopter四轴飞控

    2017-08-19 11:43:32
    QCopter四轴飞控,定高
  • 四轴飞控源代码

    2016-02-27 21:33:10
    四轴飞控源代码
  • 四轴飞控硬件原理图

    2015-11-04 15:20:11
    完整的四轴飞控原理图,stm32作为主控芯片,另外还包括气压计、指南针、MPU6050
  • 四轴飞控stm32f4原理图PCB 包括用到的各种3d封装
  • 四轴飞控源码 四元素算法 直接可用

    热门讨论 2013-05-19 22:43:40
    四轴飞控源码 四元素算法 直接可以使用的 CPU: STM32F103CB2.4G: NRF24L01电子罗盘:HMC5883陀螺仪+加速度计:MPU-6050 固定的传感器通讯格式为:0X88+0XA1+0X1D+ACC XYZ+GYRO XYZ +MAG XYZ +ANGLE ROLL PITCH YAW +...
  • 开源四轴飞控

    2017-04-13 11:38:36
    不错的开源飞控
  • 迷你四轴DIY,附带飞控源代码,包括软硬件教程制作,内容及其丰富,在制作四轴的过程中体验飞行的快乐,亲测可用。高效PID算法,串级PID控制。
  • 四轴飞控源码

    热门讨论 2013-05-19 22:46:54
    PID算法程序 基于四轴飞行器 CPU: STM32F103CB2.4G: NRF24L01电子罗盘:HMC5883陀螺仪+加速度计:MPU-6050 固定的传感器通讯格式为:0X88+0XA1+0X1D+ACC XYZ+GYRO XYZ +MAG XYZ +ANGLE ROLL PITCH YAW + cyc_time +0x...
  • STM32四轴飞控程序

    2019-07-23 21:19:12
    编译,下载,运行,连接飞控串口和FTDI串口,串口波特率500K,上位机打开高级收码,在上位机飞控状态标签可以看到变化的传感器数据,3D显示可以跟随roll和pitch的变化而变化,因为没有写yaw的上传,所以yaw保持零度......
  • 基于STM32F103C8T6开发板+GY521加速度计模块制作的有刷四轴飞控,成本不到20元,效果很不错

    前言

    前几天制作了无刷四轴飞控板(STM32F103C8T6开发板+GY521制作NAZE32飞控板详细图文教程),效果还不错,在此基础上加了MOS驱动电路,把这个飞控装在了空心杯小四轴上,成功把它救活。现把制作过程记录如下。

    1.材料清单

    CH340串口下载模块1个(2.5元)

    STM32F103C8T6黑色开发板1个(11.5元,也可以使用蓝色板)

    GY-521加速度计模块1个(3.8元)

    IRLML2502TRPBF N沟道MOSFET贴片4个

    肖特基二极管2个

    ss8050三极管2个

    470Ω电阻4个,1k电阻1个,10k电阻5个

    还有线材、插针若干,以上这些材料大部分可以一站式购齐的,其中一些耗材简直电子爱好者必备,可以适当多买点。

    2.焊接飞控板

    飞控板原理图如下,要焊接的引脚不多,只是注意一下走线,按照自己的意愿来就可以了。

    有三种接收机模式可以选择:SBUS(三根线)、PPM(三根线)、PWM(每个通道都要接线-8根线)。

    4个空心杯电机的正负极有讲究,对角线上的接法相同(转向相同)。不装桨的情况下轻触转轴判断转向,如果和软件中转向不同,则需要对调电机的正负接线。

    MOS管建议用大电流的,笔者一开始用的AO3400最大电流只有2.8A,带不动电机很容易烧,后来换了IRLML2502TRPBF最大电流4.2A很给力!

    飞控板接线 

     

    四个空心杯的MOS驱动板正面(只有一个按键大小)

    背面(元件较密集,焊接好后先量一下是否有短路,10k电阻用了贴片的) 

    装到飞机里面的效果 

    3.烧写Betaflight固件

    将STM32F103C8T6开发板上的两个boot引脚如下设置为Bootloader模式:

    b0-->b+

    b1-->b-

    蓝色板的短接帽接法如下图:

    将飞控板与CH340串口下载器连接,接线关系如下:

    GND-GND;

    V3--3V3;

    A9(RX)--RXD;

    A10(TX)--TXD

    如果连接不上电脑,可以尝试把RX/TX对调一下,也可以另接一个5V电源到飞控板上(防止串口下载器供电不足)。

    下载Betaflight_NAZE固件:https://github.com/betaflight/betaflight/releases/tag/v3.2.5

    笔者也将文件上传到百度网盘了

    链接:https://pan.baidu.com/s/1tEI8hrCcxtwFa4gWNcR5PQ 
    提取码:71cn


       打开Betaflight Configurator调参软件(可移步百度网盘下载);

    链接:https://pan.baidu.com/s/1tEI8hrCcxtwFa4gWNcR5PQ 
    提取码:71cn

    选择串口下载器对应的COM口,点击更新固件;

    如果你的电脑无法识别串口,需要安装CH340驱动,商家会赠资料,或者找网上教程。

    打开无重启序列选项 (因为我们已经设置为Bootloader模式了),点击从本地电脑加载固件,选择刚才下载的hex文件;

      点击烧写固件;

    开始烧写; 

     烧写成功!再点一次更新固件退出这个页面。

    这个时候要把boot0引脚帽更换一下了,接法如下:

    b0-->b-

    b1-->b-

    蓝色板接线如下图:

     进入下一步设置betaflight参数。

    4.软件调试

     打开Betaflight Configurator调参软件,选择串口下载器对应的COM口,点击连接;

    将四轴水平放置,在设置界面里点击 校准加速度计,这时可以上下左右翻转四轴,康康加速度计和图中显示是否一样;

     端口界面,打开UART2串行数字接收机,因为我们要用其作为SBUS接收机输入(若用PPM接收机也要打开,但PWM接收机就不用打开了);

    配置界面里,混控模型选择默认即可,也可根据自己的电机布置选择其他类型,只要符合自己四轴的转向;

    电调协议为BRUSHED,用来驱动空心杯;

    打开MOTOR_STOP,防止启动时发生意外;

    陀螺仪更新频率不能超过2kHz;

    接收机选择串行数字接收机,协议选择SBUS;

     动力&电池界面,我们没有在飞控板上焊接测电压电路,选择无电压计;

     默认的PID参数不稳定,笔者经过试飞,调试好的PID参数如下:

    Rate参数可以根据自己的情况调节,deg/s越大,摇杆的角度反馈越大(飞行时摇杆拨动一点,飞机就会倾转很大角度); 

     用杜邦线连接SBUS接收机,打开遥控器拨动摇杆,可以看到软件中对应通道变化,大小变化不一致时需要调节遥控器的通道正反。摇杆低位阈值要设置的比油门最小值大一些,否则无法解锁;

     设置解锁通道和自稳开关,对于新手来说一定要打开自稳开关,否则飞机很难控制; 

    点击 添加范围,拨动遥控器上的任何一个扭子开关,可以看到软件中的标志位变化,拖动滑块至对应的开关区域即可;

    不装螺旋桨的情况下,打开我已了解风险,上电拖动滑块,对应通道的电机即可旋转。用手轻触电机侧面,判断电机转向是否与软件中相同;

    CLI命令行里面,可以设置命令设置、查看飞控参数 ,比如输入resource回车会显示所有引脚使用情况;输入set回车会显示参数设置;get beeper回车会显示所有与beeper相关的命令,更多可以参考https://github.com/betaflight/betaflight

    这里我们把led 1引脚改一下,因为STM32F103C8T6黑色开发板上已经提供了一个led位于PB12,蓝色板改为PC13;

    resource LED 1 B12

    输入以上命令,回车,再输入save回车保存设置; 

     所有设置已经完成了,现在可以装桨试飞啦~~~

    5.试飞效果

    飞行视频已上传B站

    [DIY] 制作有刷四轴飞控刷Betaflight固件,改造空心杯小四轴

    试飞时最好找块松软的草地,一定要打开自稳模式!

    相关资料下载

    链接:https://pan.baidu.com/s/1tEI8hrCcxtwFa4gWNcR5PQ 
    提取码:71cn

    参考链接

    https://www.jianshu.com/p/e5c6d30dec51

    展开全文
  • 前几天制作了无刷四轴飞控板(STM32F103C8T6开发板+GY521制作NAZE32飞控板详细图文教程),效果还不错,在此基础上加了MOS驱动电路,把这个飞控装在了空心杯小四轴上,成功把它救活。现把制作过程记录如下。1.材料清单...

    前几天制作了无刷四轴飞控板(STM32F103C8T6开发板+GY521制作NAZE32飞控板详细图文教程),效果还不错,在此基础上加了MOS驱动电路,把这个飞控装在了空心杯小四轴上,成功把它救活。现把制作过程记录如下。

    1.材料清单

    CH340串口下载模块1个(2.5元)

    STM32F103C8T6黑色开发板1个(11.5元,也可以使用蓝色板)

    GY-521加速度计模块1个(3.8元)

    IRLML2502TRPBF N沟道MOSFET贴片4个

    肖特基二极管2个

    ss8050三极管2个

    470Ω电阻4个,1k电阻1个,10k电阻5个

    还有线材、插针若干,以上这些材料大部分可以一站式购齐的,其中一些耗材简直电子爱好者必备,可以适当多买点。

    2.焊接飞控板

    飞控板原理图如下,要焊接的引脚不多,只是注意一下走线,按照自己的意愿来就可以了。

    有三种接收机模式可以选择:SBUS(三根线)、PPM(三根线)、PWM(每个通道都要接线-8根线)。

    4个空心杯电机的正负极有讲究,对角线上的接法相同(转向相同)。不装桨的情况下轻触转轴判断转向,如果和软件中转向不同,则需要对调电机的正负接线。

    MOS管建议用大电流的,笔者一开始用的AO3400最大电流只有2.8A,带不动电机很容易烧,后来换了IRLML2502TRPBF最大电流4.2A很给力!

    7c12d5b3ddf1591f176d43b37ab96152.png

    飞控板接线

    a6967b9b6f269cdfb6bb7115f80de1e4.png

    四个空心杯的MOS驱动板正面(只有一个按键大小)

    604b4f43f707e0a34a5df8b166ecf3da.png

    背面(元件较密集,焊接好后先量一下是否有短路,10k电阻用了贴片的)

    929c357f78a26b3a4459a6f7681c191d.png

    装到飞机里面的效果

    8b094d5fe5480126b2b4776f0555420a.png

    3.烧写Betaflight固件

    将STM32F103C8T6开发板上的两个boot引脚如下设置为Bootloader模式:
    b0—>b+
    b1—>b-
    蓝色板的短接帽接法如下图:

    712ae599ed8226de14a5210ac41cd65b.png

    将飞控板与CH340串口下载器连接,接线关系如下:
    GND-GND;
    V3—3V3;
    A9(RX)—RXD;
    A10(TX)—TXD
    如果连接不上电脑,可以尝试把RX/TX对调一下,也可以另接一个5V电源到飞控板上(防止串口下载器供电不足)。

    下载Betaflight_NAZE固件:https://github.com/betaflight/betaflight/releases/tag/v3.2.5

    笔者也将文件上传到百度网盘了

    链接:

    https://pan.baidu.com/s/1tEI8hrCcxtwFa4gWNcR5PQ
    提取码:71cn

    20a0fea253acde15d74fc48646f4b025.png

    打开Betaflight Configurator调参软件(可移步百度网盘下载);

    链接:

    https://pan.baidu.com/s/1tEI8hrCcxtwFa4gWNcR5PQ
    提取码:71cn

    选择串口下载器对应的COM口,点击更新固件;

    如果你的电脑无法识别串口,需要安装CH340驱动,商家会赠资料,或者找网上教程。

    d3d8ceeaa0f47922c46f34ee2eaa0f12.png

    打开无重启序列选项 (因为我们已经设置为Bootloader模式了),点击从本地电脑加载固件,选择刚才下载的hex文件;

    c22c7ef902a96064c3e062e3afe5b8c6.png

    点击烧写固件;

    4e3a25e5d6f031a6bce6884129401e3e.png

    开始烧写;

    112d59d9851bc2b7753e4d7af5ced9c5.png

    烧写成功!再点一次更新固件退出这个页面。

    133395008e99762251948959df24ec5f.png

    这个时候要把boot0引脚帽更换一下了,接法如下:
    b0—>b-
    b1—>b-
    蓝色板接线如下图:

    70515664d219fab3dd0a3faf84c2f8ca.png

    进入下一步设置betaflight参数...

    d5fda9f891b3040c50cd8925e6ab1a34.gif


    点击“阅读原文”,阅读完整内容!

    往期 · 推荐

     树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

     树莓派4B-WiringPi库的安装和使用 (C和Python版)

    arduino项目:发光逗趣口罩

     基于NanoPi neo的网络音箱制作

    展开全文
  • 四轴飞控系列-电机PWM控制驱动 硬件原理 四轴通过定时器PWM来控制MOS管开关,从而控制电机的开关,通过调整其占空比来控制电机的转速,其原理图如下 软件部分 1.STM32定时器 2.常见寄存器 TIMx_CNT:脉冲...

    四轴飞控系列-电机PWM控制驱动


    四轴

    硬件原理

    四轴通过定时器PWM来控制MOS管开关,从而控制电机的开关,通过调整其占空比来控制电机的转速,其原理图如下

    image


    软件部分

    1.STM32定时器

    定时器

    2.常见寄存器

    TIMx_CNT:脉冲计数器
    TIMx_ARR:重载寄存器(保存定时器的溢出值)
    TIMx_CCR:捕获/比较寄存器

    3.基本定时器工作原理

    工作时,脉冲计数器TIMx_CNT由时钟触发进行计数,当TIMx_CNT的计数值X等于重载寄存器 TIMx_ARR 中保存的数值N时,产生溢出事件,可触发中断或 DMA 请求。然后 TIMx_CNT 的值重新被置为 0,重新向上计数。

    时钟源TIMx_CLK经过PSC预分频器输入至脉冲计数器TIMx_CNT,基本定时器只能工作在向上计数模式,在重载寄存器 TIMx_ARR 中保存的是定时器的溢出值。

    4.PWM输出过程

    若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR被配置为N,即TIMx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当 TIMx_CNT的数值 X 大于 N 时,会重置TIMx_CNT 数值为 0 并重新计数。

    而在 TIMx_CNT 计数的同时,TIMx_CNT 的计数值 X 会与比较寄存器 TIMx_CCR 预先存储的数值 A 进行比较。当脉冲计数器 TIMx_CNT 的数值 X 小于比较寄存器TIMx_CCR 的值 A 时,输出高电平(或低电平);相反地,当脉冲计数器的数值 X 大于或等于比较寄存器的值 A 时,输出低电平(或高电平)。

    如此循环,得到的输出脉冲周期就为重载寄存器 TIMx_ARR 存储的数值(N+1)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器 TIMx_CCR 的值 A 乘以触发脉冲的时钟周期,即输出 PWM 的占空比为 A/(N+1)

    PWM 输出模式,图中为重载寄存器 TIMx_ARR 被配置为 N=8,向上计数 ;比较寄存器 TIMx_CCR 的值被设置为 4、8、大于 8、等于 0 时的输出时序图。图中OCxREF 即为 GPIO 引脚的输出时序、CCxIF 为触发中断的时序。

    PWM输出

    代码分析

    moto.c

    /**
      *----------------------------------------------------------------------------*
      * @file    moto.c
      * @author  Jerry.XL
      * @version V1.0
      * @date    2016-07-24
      * @brief   MOTO驱动
      *----------------------------------------------------------------------------*
      * @attention
      *		| PA0--MOTO1 | PA2--MOTO2 |
      *		| PB3--MOTO3 | PB4--MOTO4 |
      *
      *----------------------------------------------------------------------------*
      */
      
    #include "moto.h"   
     
    int16_t MOTO1_PWM = 0;
    int16_t MOTO2_PWM = 0;
    int16_t MOTO3_PWM = 0;
    int16_t MOTO4_PWM = 0;
    /**----------------------------------------------------------------------------*
      *	  函 数 名: MotorPwmFlash
      *	  功能说明: 更新四路PWM值
      *	  形    参:MOTO1_PWM,MOTO2_PWM,MOTO3_PWM,MOTO4_PWM
      *	  返 回 值: 无
      *----------------------------------------------------------------------------*
      *	  备	注:
      *			四路PWM由定时器2输出,输入范围0-999
    ***----------------------------------------------------------------------------*/
    void MotorPwmFlash(int16_t MOTO1_PWM,int16_t MOTO2_PWM,int16_t MOTO3_PWM,int16_t MOTO4_PWM)
    {	
    	/* 限定输入不能小于0,大于999 */
         if(MOTO1_PWM>=Moto_PwmMax)	MOTO1_PWM = Moto_PwmMax;
         if(MOTO2_PWM>=Moto_PwmMax)	MOTO2_PWM = Moto_PwmMax;
         if(MOTO3_PWM>=Moto_PwmMax)	MOTO3_PWM = Moto_PwmMax;
         if(MOTO4_PWM>=Moto_PwmMax)	MOTO4_PWM = Moto_PwmMax;
         if(MOTO1_PWM<=0)	MOTO1_PWM = 0;
         if(MOTO2_PWM<=0)	MOTO2_PWM = 0;
         if(MOTO3_PWM<=0)	MOTO3_PWM = 0;
         if(MOTO4_PWM<=0)	MOTO4_PWM = 0;
    
        /* 修改CCR寄存器,调整PWM占空比 */
        TIM2->CCR1 = MOTO1_PWM;		
        TIM2->CCR2 = MOTO2_PWM;
        TIM2->CCR3 = MOTO3_PWM;
        TIM2->CCR4 = MOTO4_PWM;        //对定时器寄存器赋值
    }
    
    /**----------------------------------------------------------------------------*
      *	  函 数 名: MotorInit
      *	  功能说明: 输出PWM的定时器2初始化
      *	  形    参:无
      *	  返 回 值: 无
      *----------------------------------------------------------------------------*
      *	  备	注:
      *			调用该函数,即初始化定时器2为PWM输出模式
    ***----------------------------------------------------------------------------*/
    void MotorInit(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure;
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
    	
        uint16_t PrescalerValue = 0;    //控制电机PWM频率(预分频系数)
            
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //打开外设A的时钟和复用时钟
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 ,ENABLE);  //打开定时器2时钟  
         
        // 设置GPIO功能,设置PA0|1|2|3为推挽输出
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
          
        // 复位定时器。
        TIM_DeInit(TIM2);
        
        // 配置计时器。
        PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) +1;
        
    	/* 实际周期计算方法 */
        // T=TIM_Prescaler*TIM_Period/TIMx_CLK
    
    	TIM_TimeBaseStructure.TIM_Period = 999;		            //计数上线(定时周期)	
        TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;	//定时器的预分频值
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;	
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
        
        TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);
        
        
        // 配置TIM2为PWM输出模式
        TIM_OCStructInit(&TIM_OCInitStructure);
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = 0;    //0
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        
        TIM_OC1Init(TIM2,&TIM_OCInitStructure);
        TIM_OC2Init(TIM2,&TIM_OCInitStructure);
        TIM_OC3Init(TIM2,&TIM_OCInitStructure);
        TIM_OC4Init(TIM2,&TIM_OCInitStructure);
        
        TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
        TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
        TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);
        TIM_OC4PreloadConfig(TIM2, TIM_OCPreload_Enable);
        
        // 启动计时器。
        TIM_Cmd(TIM2,ENABLE);
    }
    
    /*********************************************END OF FILE**********************/
    

    moto.h

    #ifndef __MOTO_H
    #define	__MOTO_H
    
    #include "stm32f10x.h"
    
    #include "moto.h" 
    
    #define Moto_PwmMax 999
    void MotorInit(void);
    void MotorPwmFlash(int16_t MOTO1_PWM,int16_t MOTO2_PWM,int16_t MOTO3_PWM,int16_t MOTO4_PWM);
    
    #endif /* __MOTO_H */
    

    转载于:https://my.oschina.net/FutureCloud/blog/760845

    展开全文
  • 四轴飞控系列-电机PWM控制 硬件原理 四轴通过定时器PWM来控制MOS管开关,从而控制电机的开关,通过调整其占空比来控制电机的转速,其原理图如下 软件部分 1.STM32定时器 2.常见寄存器 TIMx_CNT:脉冲计数器...
  • 四轴飞控板.rar

    2019-06-01 10:44:27
    基于STM32F103的一款小四轴PCB设计,包含基本的陀螺仪以及NRF2401等
  • 匿名四轴飞控程序标志位说明 标志位太多了,我想把它们都理一下,可能理不全,我尽量。 typedef struct { //基本状态/传感器 u8 start_ok; u8 sensor_imu_ok; u8 motionless; //无人机是否动检测标志 u8 power_...
  • 让开发板飞——四轴飞控开发项目

    千次阅读 2015-09-19 23:14:17
    I have a dream that one ...现在的四轴飞控很多,开源的也不少,但大多数都是只能运行在专用的硬件平台上。因此希望用市售成品模块+普通开发板实现一个飞控系统;另一方面,现在的飞控更多是从传统的航模角度出发,很
  • MWC四轴飞控 调试交流

    千次阅读 2012-10-11 14:08:15
    最近四轴飞控的种类逐渐多起来了,MK、KK、XA、GAUI、Lotus、MWC等等,其中最平民化,易上手的数KK;高性能,稳定,可升级,性价比高的是MK,品牌的、贵族品质自然是XA、GAUI,Lotus等了,MWC则是最近在国外流行的一...
  • 四轴飞控板电路图 PCB图 原理图说明: 1、主控MCU采用MSP430F5438A; 2、采用25MHZ外部晶振; 3、加速度计和陀螺仪采用MPU6050; 4、磁力计采用HMC5883L; 5、添加了四个LED灯,两个按键和一个蜂鸣器; 6、集成了CP...
  • 四轴飞控pid simulink仿真

    千次阅读 2020-07-07 23:09:27
    最近想自己用stm32搞一个四轴飞行器的飞控,现在进展比较缓慢,主要受制于想做一个wifi无线透传的视频实时传递。用了一个新的模块,调起来难度比我想象的大不少。今天调试单片机又出现了内存管理失败。有点烦。。 ...
  • 使用simulink搭建了pid控制器,simscape multibody搭建了可视模型同时可进行各个机械机构之间的相互作用力仿真。simscape electrical搭建电机模型。控制效果不错。应对阶跃输入较差。如,从0到5 需要输入一个从0到5...
  • 该方案采用新唐M45x系列Cortex-M4 MCU四轴飞控板方案 遥控器采用新唐N79E814 , 并且配合南方硅谷2.4GRF做无线遥控 新唐M452特色: 新唐M452框图: M452四轴飞行器演示视频 电路城语:此资料为卖家免费分享,不提供技术...
  • 使用Arduino环境开发可GPS悬停的四轴飞控

    千次阅读 多人点赞 2018-10-22 21:11:03
    使用Arduino IDE开发,基于stm32芯片的四轴。 这个四轴带GPS悬停和数传功能。这样将来与树莓派结合做一些智能化操作会更加方便,可以作为本博客自动跟随机器人的进阶内容。 在学习这款教程前最好先学习一下Arduino...
  • 这是IAR工程,用于freescale k60 mcu。PID部分借鉴了apm开源飞控,姿态解算使用了dmp,遥控器部分是解码pwm信号。工程中也有互补滤波的全套代码,只是没有使用。代码写得很乱,仅供参考。
  • 学习stm32f3discovery有一段时间了,感觉可以尝试一下飞控的开发,制定以下简要计划开展,即便不成功也能学到不少东西 1、usart驱动开发,用户和上位机通讯等 2、pwm输入开发,用于接收遥控信号 3、传感器数据...
  • 让开发板飞——四轴飞控原理

    千次阅读 2015-10-25 21:31:09
    四轴飞行器的控制软件通常由几部分组成。为便于后续研究,整理如下: 传感器驱动层 这一层的主要任务是读取各传感器的数据。四轴上用的通常是MEMS传感器,与传统认知有很多不同 陀螺仪:传统机械陀螺仪输出...
  • 大四轴飞控源程序,基于stm32f103rct6+l3g4200d+adxl345,硬件I2C读取模式,该程序已能飞行,效果还行。
  • 飞控的作用  我们知道多轴利用不稳定的空气力学来飞行,所以须要利用计算机(飞控)才能达到稳定飞行。... 拿大四来说,遥控器通过无线电发出指令,接收机接收到后,飞控通过解析出有用信号,也就是指令,然
  • 网盘之前弄正点原子的无人机时就有这样的想法了,因为我看正点的无人机结合光流飞得挺稳的,比那些大四稳多了,我之前就想着能不能直接装在大四一样,只不过是之前直接控制电机,现在通过电调,也就是电机驱动...

空空如也

空空如也

1 2 3 4 5 ... 18
收藏数 358
精华内容 143
关键字:

四轴飞控