前言
这是一篇基于STM32F429的保姆级入门的用CubeMAX配置生成并编写的控制舵机SG90的教程
一、SG90舵机
常见的SG90舵机
SG90引出三条线,分别是控制线(橙色),VCC(红色),GND(黑色),用杜邦线依次连接在开发板上即可
SG90舵机要求工作在频率为50HZ——周期为20ms的PWM波,且对应信号的高低电平在0.5ms - 2.5ms之间,对应的舵机转动角度如下表所示(当然也可以按照这个线性的对应关系去达到转动自己想要的角度,如想要转动60°,则高电平脉宽为大概为1.2ms,具体能不能转到特定的角度还和舵机的精度有关)
二、CubeMax配置
1.选型(这里用实验的开发板为正点原子的F429阿波罗)
2.配置时钟树
选择外部晶振
这里还有一种方法是选择HSE,PLLCLK后,在HCLK里填入180,直接回车,软件可以自动帮你配好。
3.PWM相关定时器配置
本例采用定时器3的通道四产生PWM波,通过查阅芯片资料可知对应的PIN脚为PB1,则舵机的控制线应和板子上的PB1引脚相连
这里解释一下分频数和计数值的意义
通过查阅STM32的资料和前文所配的时钟树可知TIM3的时钟来源是 APB1 = 90Mhz
则我们需要产生20Hz的PWM波,则预分频的系数为 Prescaler = 90-1,自动重装载值 Counter Period = 20000-1,此时定时器产生的频率为 90Mhz/90/20000 = 20Hz。 当然这个值也可以自己设置,只要满足产生的频率为20Hz即可
最后配置一下初始值
初始值占空比 1000/20000 ,由此前舵机图可知初始程序舵机会转动45°
4.生成代码
最后点击GENERATE CODE代码即生成完成
三、代码编写
代码编写也十分简单,只需要只main函数中开启PWM波
总结
用CubeMax配置STM32程序非常简单和方便,是开发的利器
关键字:STM32 PWM配置
引用地址:
STM32 Cubemax(一)——PWM配置及控制SG90舵机
推荐阅读最新更新时间:2024-11-13 03:45
基于STM32的四旋翼飞行器的控制系统
四旋翼飞机是一种具有6个自由度和4个控制输入的无人机,可垂直起降、悬停、向前飞行、侧向飞行和向后飞行。四个旋翼可相互抵消反扭力矩,无需特殊的反扭矩桨。广泛应用于无人侦察、森林防火、灾害监测、城市巡逻等领域。飞行控制系统是四旋翼飞行器的核心部分,其性能决定了整个系统的性能。近年来,小型四旋翼无人机的自主飞行控制引起了研究人员的广泛关注。随着计算机技术和电子技术的发展,我国小型飞行器的研发逐渐升温,许多公司已形成产业。例如,大疆公司已经实现了四轴飞行器等多轴飞机的商业应用。国内的研究主要集中在三个方面:姿态控制、传感器技术的发展、新材料的应用和电池技术的研究。 本文以ARMCortex-M3架构的STM32C8T6作为飞行器控制处
[单片机]
STM32学习笔记2——GPIO点灯
学会了建立建立工程,接下来一定是迫不及待的想用自己的开发板大显身手了吧。别急,慢慢来。在C语言学习时,你最先编译的一定是那条永恒经典的代码,对,就是Hello World——简单、明了,而且能直观的看见现象。在STM32上也有一个简单、明了,而且能直观的看见现象的程序——点灯。这就是我们现在的hello world,让我们从他开始学习吧!!! 学习 点灯我们要用到的就是控制我们需要的I/O口,所以,让我们先来看一下STM32F的GPIO端口。在STM32F0系列微控制器的每个GPIO端口有:两个32位配置寄存器(GPIOx_OTYPER和GPIOx_MODER)、两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR)、
[单片机]
STM32启动文件解析
当前的嵌入式应用程序开发过程里,并且C语言成为了绝大部分场合的最佳选择。如此一来main函数似乎成为了理所当然的起点——因为C程序往往从main函数开始执行。但一个经常会被忽略的问题是:微控制器(单片机)上电后,是如何寻找到并执行main函数的呢?很显然微控制器无法从硬件上定位main函数的入口地址,因为使用C语言作为开发语言后,变量/函数的地址便由编译器在编译时自行分配,这样一来main函数的入口地址在微控制器的内部存储空间中不再是绝对不变的。相信读者都可以回答这个问题,答案也许大同小异,但肯定都有个关键词,叫“启动文件”,用英文单词来描述是“Bootloader”。 无论性能高下,结构简繁,价格贵贱,每一种微控制器(处理器)都
[单片机]
STM32端口输入输出模式配置
STM32的IO口模式配置 根据数据手册提供的信息,stm32的io口一共有八种模式,他们分别是: 四种输入模式 上拉输入: 通过内部的上拉电阻将一个不确定的信号通过一个电阻拉到高电平。 下拉输入: 把电压拉到GND。与上拉原理相似。 浮空输入: 引脚内部什么都不接,处于浮空模式下,电平状态是不确定的。外部信号输入什么,IO口就是什么状态。 模拟输入: 接收到的是连续的模拟信号,一般用于AD转换。 四种输出模式 推挽输出: 可以输出高低电平,连接数字器件。在stm32中推挽电路由两个MOS管组成:输出高电平时P-MOS管导通,引脚联通VDD(3.3v)。输出低电平时N-MOS导通,引脚联通GND。**该方式既提高电路的负
[单片机]
STM32开发笔记68: keil中使用ST-Link不能成功下载的真实原因
单片机型号:STM32F091RCT6 在STM32开发笔记67: 在keil中使用ST-Link不能成功下载的解决方法提到解决keil中使用ST-Link不能成功下载的一种方法,经仔细分析其实原因还在于程序上。 不能成功下载的程序中,包含如下程序,: CInit::CInit(uint8_t mode) { //底层初始化 HAL_Init(); //GPIO时钟使能 __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENAB
[单片机]
STM32 USB DFU设备固件升级 工程讲解
说到STM32 USB的UDF,其实就是我们常说的IAP(In Application Programming)在应用编程。IAP有很多方法,我之前就用过串口IAP,网络IAP。而这里我们使用的是USB IAP,就是通过USB更新代码。所以这里有必要线了解IAP。 IAP是In Application Programming的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。 通常在用户需要实现IAP功能时,即用户程序运行中作自身的更新操作,需要在设计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,
[单片机]
stm32 用dac输出正弦波
前段时间师兄拜托写一个单片机代码,由于之前没整过,在这记录一下。也希望可以帮助到正在学这个的朋友们.stm32F4并不支持自动生成正弦波,事先在正弦波上找500个点存在一个数组里,然后当每一个时钟到来的时候,dac就会输出电压值。 void sin_Generation(void) {u16 n;for(n=0;n tableSize;n++) {sinTable = (sin(2*PI*n/tableSize)+1)*2047;} 经过线性转换后,数字输入会转换为 0 到 VREF+ 之间的输出电压。各 DAC 通道引脚的模拟输出电压通过以下公式确定: DACoutput =Vref*dor/4095
[单片机]
[nrf52832][nrf52840][nrf52810][nrf52820][bsp_pwm] PWM配置和使用
PWM—脉宽调制 PWM模块可以在GPIO上产生脉宽调制信号。 该模块实现了一个上行或上下计数器,具有四个PWM通道,驱动分配的gpio。 三个PWM模块可以提供多达12个PWM通道与单独的频率控制组多达4个通道。 此外,内置的解码器和EasyDMA功能可以在没有CPU干预的情况下操纵PWM占空比。 任意占空比序列可从数据RAM中读取,并可链接以实现循环缓冲或重复进入复杂循环。 这里列出了一个PWM模块的主要特点: 固定的PWM基频与可编程时钟分频器 多达四个PWM通道,各自的极性和占空比值 沿PWM通道或中心对齐的脉冲 Data RAM中定义的多个占空比阵列(序列) 通过EasyDMA从内存直接自动和无故障更新占空比值
[单片机]