打印
[STM32]

小白鸟四轴飞行器学习之路

[复制链接]
楼主: 8677343898
手机看帖
扫描二维码
随时随地手机跟帖
21
8677343898|  楼主 | 2018-2-27 07:58 | 只看该作者 回帖奖励 |倒序浏览
2018年2月27日:昨天学习内容如下
姿态结算只好硬着头皮看了。。。欧拉角、转轴-转角。。。

使用特权

评论回复
22
8677343898|  楼主 | 2018-2-28 07:09 | 只看该作者
2018年2月28日,昨天学习内容:
无奈了,算法还是不太好搞懂,尤其又加入了线性代数的知识。又没有人指导,只能像翻译英文一样,一个词一个词的查了。
欧拉角:偏航角、倾仰角、自转角。
还有个奇异点,目前还是不大理解。以前线代只学过奇异矩阵。
在书上,176页,那个角的求法不大懂,三个角度莫名其妙的就有公式来求了。

使用特权

评论回复
23
brandnew| | 2018-3-1 00:30 | 只看该作者
本帖最后由 brandnew 于 2018-3-1 00:32 编辑
8677343898 发表于 2018-2-26 07:47
2018年2月26日:
昨天看姿态算法,比较头疼。想请教大佬们,学习这个算法什么方法比较好? ...

飞控的算法,不可能短时间搞懂,楼主搞整机,感觉盘子太大,涉及的东西太多,

使用特权

评论回复
24
8677343898|  楼主 | 2018-3-1 09:03 | 只看该作者
brandnew 发表于 2018-3-1 00:30
飞控的算法,不可能短时间搞懂,楼主搞整机,感觉盘子太大,涉及的东西太多, ...

我整的毕业设计,只能硬着头皮弄懂了

使用特权

评论回复
25
8677343898|  楼主 | 2018-3-1 09:09 | 只看该作者
2018年3月1日,昨天学习内容如下:
鉴于昨天都是在网页上查找的资料,就把网页粘出来了:
关于充电器的铭牌:ask.zol.com.cn/x/1541410.html
四旋翼飞行器结构原理:
blog.csdn.net/lg1259156776/article/details/48827787#t9
四旋翼四轴飞行器和四旋翼玩具的区别:
w w w.zhihu.com/question/24673352
另外这个网站上的一些内容开阔了我眼界:
zhan.renren.com/worldofrobot?from=template&checked=true

使用特权

评论回复
26
8677343898|  楼主 | 2018-3-2 08:56 | 只看该作者
2018年3月2日,昨天学习内容如下:
PID的介绍,什么公式定义,。。各种积分微分项,还有个比例控制器,看的头大。。。。看完这一章,也没咋懂

使用特权

评论回复
27
8677343898|  楼主 | 2018-3-3 12:03 | 只看该作者
2018年3月3日,昨天的学习内容如下:
看代码,烈火四轴书上的飞控源码,估计有的看了。。。

使用特权

评论回复
28
8677343898|  楼主 | 2018-3-4 08:02 | 只看该作者
本帖最后由 8677343898 于 2018-3-4 08:19 编辑

2018年3月4日,昨天学习内容如下:
    把书上剩下的内容,一口气全看完了。说实话,没看懂。打算从头再看一遍,我就不信了,这么难搞。争取15天弄完,到3月20号吧。
飞行器:机械飞行物。
飞行器左右前后,顺转逆转操作原理。
电机,电调、 螺距、电池表示格式:2200mAh 25C 4S。等的含义。
另外有个地方没弄懂,电池容量和电流大小有什么联系没?请各位指导

使用特权

评论回复
29
8677343898|  楼主 | 2018-3-5 08:34 | 只看该作者
2018年3月5日,昨天学习内容如下:
   去耦电容定义。
上拉下拉电阻的含义:zhidao.baidu.com/question/395066311601875525.html
dzsc.com/data/2016-6-18/109978.html
blog.csdn.net/kissmonx/article/details/8002962
书上有一句话没懂:利用电阻的感性,我们采用0欧姆电阻隔离数字地和模拟地。0欧姆不是相当于导线?

使用特权

评论回复
30
8677343898|  楼主 | 2018-3-6 07:36 | 只看该作者
2018年3月6日,昨天学习内容如下:
SYSCLK 系统时钟,HCLK ,AHB总线时钟。由AHB-APB,通过设置分频,可由HCLK得到PCLK1与PCLK2时钟。PCLK1对应APB1外设,PCLK2对应APB2外设。详见中文手册第6章。
BRR、BSRR。另外发现现在看代码,有点思路了,不想以前那样一点也看不懂。就刚看到的led指示灯实验,大概流程,定义端口,使能时钟,引脚赋值,初始化引脚。

使用特权

评论回复
31
8677343898|  楼主 | 2018-3-7 07:46 | 只看该作者
2018年3月7日,昨天学习内容如下:
写LED灯明灭的代码,知道了上次写的代码的错误,只声明了函数,却没有用,对计科四年的学生来说是莫大的尴尬。此处默哀3分钟。简要步骤方便**:相应引脚时钟使能,初始化引脚,控制引脚。
另外,串口也看了一部分,有一点不理解,设置串口为接收发送模式后,为什么仅使能串口接收中断?

使用特权

评论回复
32
8677343898|  楼主 | 2018-3-8 07:53 | 只看该作者
2018年3月8日,昨天学习内容如下:
把串口和中断要用到的数据记录如下:
ORE:串口益处中断;
串口相关寄存器:
USART_SR:状态寄存器;USART_DR:数据寄存器;USART_BRR:波特率寄存器;USART_CR1:控制寄存器;
嵌套向量中断控制器(NVIC)的设置:
1.定义中断向量结构体;
2.优先级分组;
3,设定中断源;
4,中断抢占优先级;
5,响应优先级;
6,使能中断;
7,根据以上参数初始化中断寄存器。
学习这段,由简入繁,先把相关的库函数和相关寄存器记住,然后在细化。

使用特权

评论回复
33
caijie001| | 2018-3-8 08:39 | 只看该作者
看到你的努力,加油,我过段时间就也要学四轴了

使用特权

评论回复
34
8677343898|  楼主 | 2018-3-9 07:14 | 只看该作者
caijie001 发表于 2018-3-8 08:39
看到你的努力,加油,我过段时间就也要学四轴了

共勉

使用特权

评论回复
35
8677343898|  楼主 | 2018-3-9 07:20 | 只看该作者
2018年2月9日,昨天学习内容如下:
巩固前面学的知识,通过一个题目——通过串口中断功能来控制LED灯亮灭。完整代码见下面
部分代码参考的烈火狂龙大哥的课本
#include<stm32f10x.h>
#define LEDON GPIOC->BSRR = GPIO_Pin_13
#define LEDOFF GPIOC->BRR = GPIO_Pin_13

unsigned char temp=' ';
void delay(uint16_t n)
{
        uint16_t i,j;
        for(i=0; i<n;i++)
                for(j=0;j<8500;j++);
}

int main(void)
{
        void led_init();
        void uart1_init(uint32_t baud);
        void Nvic_Init(void);
        //led init
        led_init();
        uart1_init(115200);
        Nvic_Init();
        LEDON;
        while(1){
               
                delay(2000);
                if(temp)
                        USART_ITConfig(USART1,USART_IT_TXE,ENABLE);
        }
}

void led_init()
{
        GPIO_InitTypeDef GPIO_Structure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
       
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);
        GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
       
        GPIO_Structure.GPIO_Pin= GPIO_Pin_13;
        GPIO_Structure.GPIO_Speed= GPIO_Speed_50MHz;
        GPIO_Structure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOC,&GPIO_Structure);
}

void uart1_init(uint32_t baud)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
       
        GPIO_InitStructure.GPIO_Pin= GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        USART_InitStructure.USART_BaudRate = baud;
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;
        USART_InitStructure.USART_StopBits = USART_StopBits_1;
        USART_InitStructure.USART_Parity = USART_Parity_No;
        USART_InitStructure.USART_HardwareFlowControl= USART_HardwareFlowControl_None;
       
        USART_InitStructure.USART_Mode = USART_Mode_Rx |USART_Mode_Tx;
        USART_Init(USART1,&USART_InitStructure);
        ///
        USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);///////
        ////
        USART_Cmd(USART1,ENABLE);
        USART_ClearFlag(USART1,USART_FLAG_TC);
}

void Nvic_Init(void)
{
        NVIC_InitTypeDef NVIC_InitStructure;
        //NVIC_PriorityGroup
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
       
        NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 1;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);
}

void USART1_IRQHandler(void)
{
        //if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)!= RESET){USART_ReceiveData(USART1);}
       
        if(USART1->SR & USART_SR_TC)
        {
                USART1->DR = temp;
                temp=0;
                USART1->CR1 &= ~USART_CR1_TXEIE;
        }
       
        if(USART1-> SR & USART_SR_RXNE)
        {
                temp = (unsigned char)USART1->DR;
                if(temp == 'k')
                        LEDON;
                if(temp == 'g')
                        LEDOFF;
        }
}

使用特权

评论回复
36
8677343898|  楼主 | 2018-3-10 07:28 | 只看该作者
2018年3月10日,昨天学习内容如下:
STM32之 ADC。
ADC转台寄存器、控制寄存器、采样时间寄存器、规则序列寄存器、规则数据寄存器。
刚开始接触这个ADC感觉,他外表很大,表面崎岖不平,但是内部只有不多的钢架在支撑,重点还是相关函数的理解,没有抽象的难度。

使用特权

评论回复
37
8677343898|  楼主 | 2018-3-11 08:13 | 只看该作者
2018年3月11日,昨天学习内容如下:
ADC个寄存器操作步骤:
1.开启相应GPIO口,设置该GPIO口味模拟输入;
2,使能ADC1的时钟,并设置分频因子;
3,设置ADC1的工作模式;
4,设置ADC1规则序列的相关信息;
5,开启AD转换器,并校准;
6,读取ADC的值。

每次DMA传送由3个操作组成:
1,从外设数据寄存器或从当前外设/存储器地址寄存器知识的存储器地址取数据,第一次传输时的开始地址是DMA——CPARx或DMA_CMARx寄存器制定的外设基地址或存储器单元。
2,存数据到外设数据寄存器,或者昂前外设/存储器地址寄存器知识的存储器地址,第一次传输时的开始抵制是DMA_CPARx或 DMA_CMARx 寄存器制定的外设基地址或存储单元。
3,执行一次DMA_CNDTRx寄存器的递减操作,该寄存器包含未完成的操作数目。

使用特权

评论回复
38
8677343898|  楼主 | 2018-3-12 07:58 | 只看该作者
2018年3月12日,昨天学习内容如下:
时基单元:1,计数器寄存器,2预分频器寄存器,3自动装载寄存器。
计数器时钟可由下列时钟源提供:
1,内部时钟;2,外部时钟模式1;3,外部时钟模式2;4,内部触发输入。
建议学习这部分的时候,先学习RCC。

使用特权

评论回复
39
8677343898|  楼主 | 2018-3-13 06:53 | 只看该作者
2018年3月13日,昨天学习内容如下:
PWM的边沿对其模式。学这里,最好能把寄存器先了解

使用特权

评论回复
40
8677343898|  楼主 | 2018-3-14 07:01 | 只看该作者
2018年3月14日,昨天学习内容如下:
学习进度到MPU了,在整I2C。刚开始,看的有点头大。建议在温习GPIO口的介绍。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则