1.基于STM32C8T6的四旋翼无人机的飞控制作----理论准备1,前言,模电数电,C语言

前言四旋翼感觉是大学里面最难diy的项目之一,其涉及的理论知识和要求的实践能力相当高,智能车光立方等等东西和它无法对比,所以做之前一定要有足够的毅力和能力和时间,如果是大一的小白建议先看看,大二大三在来尝试动手。楼主在大一即将结束时的这个时候动手接触无人机,学习各种控制原理,各种程序,各种模块很长时间,甚至连电调都要自己做了,但是迫于自己的能力和见识有限,努力了好几个月,终于在比赛前的一个月放弃了整个项目,有个人能力不够的原因,毕竟当时刚上大二,而且接触单片机才几个月,现在想来当时真是初生牛犊不怕虎,更多的是队友不够给力,五个人的团队只有一个人干活,不能说管理不力,毕竟每个人有自己的追求,你不能要求每个队友像你一样痴迷这一行。

需要准备的设备:

1.stm32c8t6单片机

2.无人机骨架

3.无刷电机+电调

4.航模电池(别的不行)

5.遥控器+遥控器接收机

6.mpu6050

7.12864LCD

8.人+时间+恒心

 

需要学习的知识方向(楼主将挨个介绍每种知识)

1.模电数电

2.C语言

3.stm32单片机的使用

4.四旋翼姿态控制理论

5.所用传感器的原理及使用

6.电路板的绘制(AD软件的使用)

7.电路板的焊接(包括芯片焊接)

 

1.模电数电

模电数电虽然说难,但是是做电子、单片机的人不能绕开的环节,再难也要硬着头皮学下去,最起码将需要的关键知识学到。本文只简单介绍做无人机所需的知识。

(1)首先需要了解mos管的使用和电机驱动电路,因为如果自己做电调的话需要研究人家的电调的原理,一般的电调都是两进三出,直流电进去,出来的是三相的交流电,就是通过单片机控制mos管的通断实现的,数目应该不一样,我差点就做了,使用的是6个mos管的,具体原理当然还得自己去查,本文只是笼统介绍应该如何去做一个无人机,回头再写一篇专门介绍电机驱动的文章。

(2)其次需要了解稳压电路的制作,因为电池电压是11.7V以上,但是单片机需要的是3.3V的电压,其他的传感器也都是需要5V的电压,所以需要降压芯片来降压,稳压芯片有两种,线性稳压和开关稳压,具体差别可以自己去查,我用的最多的是lm2940。

(3)最后需要单独了解单片机外围电路,尤其是调试电路,需要的LCD、蓝牙、iic、按键、蜂鸣器、拨码开关等调试工具的电路,有这些东西在以后的调试过程中会带来很大的方便,甚至可能将调试时间减半,作用就是将单片机里面的数据可视化,或者在不改变程序的情况下修改单片机内部的数据,以使无人机表现出不同的特性

2.C语言

      C语言不多说,很多语言都和C语言能挂上某种关系,是必须要学的

      在单片机中,其实需要的C语言知识不多,学到结构体就够了,关键是if,for,while等常见的语法的用法,用熟了就行,还有就是数组的用法,楼主用的很多都是if,虽然这样写不好,但是在某些情况下开发时间较快。

      在单片机编程中,要学习各种类型的函数的编写,各种数据类型和所占存储空间等特点,学习一下局部变量和全局变量

  

 

 

 

  • 21
    点赞
  • 130
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,以下是基于STM32C8T6和MQ-2烟雾传感器的代码: ```c #include "stm32f10x.h" #include "stdio.h" #define USARTz USART1 #define BAUD_RATE 9600 void USART_Config(void) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = BAUD_RATE; 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_Tx | USART_Mode_Rx; USART_Init(USARTz, &USART_InitStructure); USART_Cmd(USARTz, ENABLE); } void USART_PutChar(char c) { while (USART_GetFlagStatus(USARTz, USART_FLAG_TXE) == RESET); USART_SendData(USARTz, c); } void USART_PutString(char *s) { while (*s) { USART_PutChar(*s++); } } void ADC_Config(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode = DISABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 1; ADC_Init(ADC1, &ADC_InitStructure); ADC_Cmd(ADC1, ENABLE); ADC_ResetCalibration(ADC1); while(ADC_GetResetCalibrationStatus(ADC1)); ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1)); } int main(void) { ADC_Config(); USART_Config(); while (1) { ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); uint16_t value = ADC_GetConversionValue(ADC1); char buffer[100]; sprintf(buffer, "Smoke value: %d\n", value); USART_PutString(buffer); delay_ms(1000); } } void delay_ms(uint32_t ms) { ms *= 1000; while (ms--) { __NOP(); } } ``` 请注意,在这个示例代码中,我使用了USART1和PA9 / PA10引脚作为串口通信的接口。您需要根据您的实际硬件配置对代码进行一些调整。 此外,这个示例代码仅仅是一个简单的演示程序,只有烟雾传感器的输出值会被读取并通过串口发送。如果您需要更复杂的功能,例如根据烟雾传感器的输出值控制其他设备或执行其他操作,您需要进行更多的编程工作。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值