STM32驱动舵机
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
STM32驱动舵机
STM32驱动舵机
1 2 3 4 软件环境安装 硬件连接方法
舵机的控制方法
STM32驱动舵机实例
2/45
1 MDK集成开发环境
安装程序来源:
1.1首先安装J-Link驱动
开发软件\Setup_JLinkARM_V468,双击要安装的 “Setup_JLinkARM_V468.exe”, 安装过程全选“next”直到安装成功, 将JLINK插接到电脑的USB口,即可在我的电脑\管理\ 设备管理器\通用串行总线控制器中看到一个J-Link driver。
26 /45
3 舵机的控制方法
3.3 舵机控制
舵机的控制一般需要一个20ms左右的时基脉冲,该脉 冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制 脉冲部分。 以180度角度伺服为例,那么对应的控制关系: 0.5ms----------- 0度 1.0ms----------- 45度 1.5ms----------- 90度 2.0ms-----------135度 2.5ms-----------180度。
USER/main.c USER/stm32f10x_it.c USER/pwm.c
30 /45
12.4 STM32驱动舵机实例
4.2 配置工程环境 本定时器PWM输出实验中用到GPIO、RCC、TIM外设,没 有使用中断,所以先把以下库文件添加到工程 stm32f10x_gpio.c、stm32f10x_rcc.c、stm32f10x_tim.c。 新建pwm.c及文件,并在 stm32f10x_conf.h 中把使用到 的ST库的头文件注释去掉。
33 /45
12.4 STM32驱动舵机实例
4.4 定时器初始化 pwm.c中函数TIM_PWM_Init() 配置TIM: void TIM_PWM_Init (u16 arr,u16 psc) { //定义初始化结构体
GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // 使能定时器时钟TIM3/TIM4/TIM5 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 | RCC_APB1Periph_TIM5, ENABLE); //使能GPIOA/GPIOB外设时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
27 /45
3 舵机的控制方法
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲 的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲 部分。 以180度角度伺服为例,那么对应的控制关系:
28 /45
3 舵机的控制方法
小型舵机的工作电压一般为4.8V或6V,转速也不是很快, 一般为0.22/60度或0.18/60度,所以假如更改角度控制脉冲 的宽度太快时,舵机可能反应不过来。如果需要更快速的 反应,就需要更高的转速。 舵机上有三根线,分别为VCC、GND、信号线,不需要另 外接驱动模块,直接用单片机的管脚控制,控制信号一般 要求周期为20ms的PWM信号。 如果要更为精确的控制舵机(转动角度差<=1度),则需 要控制输出PWM信号的占空比, 例如:可以把0~180分为1024份(可以任取,决定于定时器 的时钟频率),范围为0.5ms~2.5ms 则可以得到0.09度/us,因此可以由 PWM=0.5+N/0.09(N是 角度)控制舵机转动0~180度间的任意角度。
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.2舵机线连接
s+-
s+-
s+/45
2 硬件连接方法
2.2舵机线连接
多功能支架 短U支架 长U支架 L型支架 大脚板 U型梁 杯士轴承 6个 2个 4个 8个 2个 1个 6个
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 选择安装目录C:\keil,点击 Next。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 在用户名中填入名字(可随便写或者空格),在邮件地 址那里填入邮件地址(可随便写或者可空格),点击 Next。
1 MDK集成开发环境
1.2 安装MDK
破解MDK 安装完MDK开发环境后,在编译程序的时候会有40K 的代码限制 开发软件\MDK 找到KEIL_Lic.exe。
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 点击KEIL_Lic.exe,在 弹出的界面中的CID选 项框中填入MDK的CID。
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击Finish,安装完成。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击Finish,安装完成。
/45
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 正在安装,请耐心等待。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击Finish,安装完成。
/45
/45
1 MDK集成开发环境
1.3 编译、下载
Translate:编译修改过的文件,只检查语法错误, 不链接库也不生成可执行文件 Build:编译修改过的工程,检查语法、链接动态库 文件、生成可执行文件 Rebuild:重新编译整个工程的所有文件,耗时较长 Load:程序下载
/45
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 然后点击Generate按钮,复 制产生的CID Code
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK MDK环境菜单栏File\License Managemant,把刚刚 在注册机复制到的CID Code粘贴到New License ID Code (LIC):框中,然后点击
3 舵机的控制方法
3.1 什么是舵机
舵机是一种位置(角度)伺服的驱动器,适用于需要角 度不断变化并可以保持的控制系统。舵机是一种俗称, 其实是一种伺服马达。
25 /45
3 舵机的控制方法
3.2 舵机工作原理
控制信号由接收机的通道进入信号调制芯片,获得直流偏 置电压。 内部有一个基准电路,产生周期为20ms,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较, 获得电压差输出。 电压差的正负输出到电机驱动芯片决定电机的正反转。当 电机转速一定时,通过级联减速齿轮带动电位器旋转,使 得电压差为0,电机停止转动。
库文件 :
startup/start_stm32f10x_hd.s CMSIS/core_cm3.c CMSIS/system_stm32f10x.c FWlib/stm32f10x_gpio.c FWlib/stm32f10x_rcc.c FWlib/stm32f10x_tim.c
用户文件:
29 /45
4 STM32驱动舵机实例
4.1 实验描述及工程文件清单 实验描述:通用定时器TIM2、 TIM3 、TIM4产生6路PWM舵机控制信号。 硬件连接:TIM3_CH1-4: PA6/PA7/PB0/PB1 (控制板P11-13)
TIM4_CH1-4: PB6-9 TIM5_CH1-4: PA.0-3 (控制板P4、5、6、14) (控制板P7、8、9、15)
34 /45
12.4 STM32驱动舵机实例
4.4 定时器初始化 pwm.c中函数TIM_PWM_Init() 配置TIM: void TIM_PWM_Init (u16 arr,u16 psc) { //初始化GPIO
32 /45
12.4 STM32驱动舵机实例
4.3 main文件
调用用户函数 TIM_PWM_Init() 把 TIM初始化成50Hz的 PWM输出模式。 While循环中根据角 度改变相应定时器通 道的占空比,产生舵 机控制信号,驱动舵 机转动到相应的角度。
for(angle=180;angle>=1;angle--) { SetJointAngle(4, angle); SetJointAngle(5, angle); SetJointAngle(6, angle); SetJointAngle(7, angle); SetJointAngle(8, angle); SetJointAngle(9, angle); SetJointAngle(10, angle); SetJointAngle(11, angle); SetJointAngle(12, angle); SetJointAngle(13, angle); SetJointAngle(14, angle); SetJointAngle(15, angle); Delay(0x000FFFF); } } }
31 /45
12.4 STM32驱动舵机实例
4.3 main文件
#include "stm32f10x.h" int main(void) 调用用户函数 { //delay_init(); //延时函数初始化 TIM_PWM_Init() 把 int angle; TIM初始化成50Hz的 TIM_PWM_Init(9999,143); PWM输出模式。 //不分频,PWM 频率=72*10^6/(9999+1)/(143+1)=50Hz While循环中根据角 while(1) {//调节占空比pwmval1/(9999+1) 度改变相应定时器通 for(angle = 1; angle<=180; angle++) 道的占空比,产生舵 { 机控制信号,驱动舵 SetJointAngle(4, angle); SetJointAngle(5, angle); 机转动到相应的角度。 SetJointAngle(6, angle); SetJointAngle(7, angle); SetJointAngle(8, angle); SetJointAngle(9, angle); SetJointAngle(10, angle); SetJointAngle(11, angle); SetJointAngle(12, angle); SetJointAngle(13, angle); SetJointAngle(14, angle); SetJointAngle(15, angle); Delay(0x000FFFF); }
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 以管理员身份运行“Keil uVision4”,在MDK开发环 境中的菜单栏File\License Managemant 中获取到CID
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 在Target下拉框中选择ARM
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击 Next。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 把勾勾上,点击 Next。
/45
1 MDK集成开发环境
STM32驱动舵机
1 2 3 4 软件环境安装 硬件连接方法
舵机的控制方法
STM32驱动舵机实例
2/45
1 MDK集成开发环境
安装程序来源:
1.1首先安装J-Link驱动
开发软件\Setup_JLinkARM_V468,双击要安装的 “Setup_JLinkARM_V468.exe”, 安装过程全选“next”直到安装成功, 将JLINK插接到电脑的USB口,即可在我的电脑\管理\ 设备管理器\通用串行总线控制器中看到一个J-Link driver。
26 /45
3 舵机的控制方法
3.3 舵机控制
舵机的控制一般需要一个20ms左右的时基脉冲,该脉 冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制 脉冲部分。 以180度角度伺服为例,那么对应的控制关系: 0.5ms----------- 0度 1.0ms----------- 45度 1.5ms----------- 90度 2.0ms-----------135度 2.5ms-----------180度。
USER/main.c USER/stm32f10x_it.c USER/pwm.c
30 /45
12.4 STM32驱动舵机实例
4.2 配置工程环境 本定时器PWM输出实验中用到GPIO、RCC、TIM外设,没 有使用中断,所以先把以下库文件添加到工程 stm32f10x_gpio.c、stm32f10x_rcc.c、stm32f10x_tim.c。 新建pwm.c及文件,并在 stm32f10x_conf.h 中把使用到 的ST库的头文件注释去掉。
33 /45
12.4 STM32驱动舵机实例
4.4 定时器初始化 pwm.c中函数TIM_PWM_Init() 配置TIM: void TIM_PWM_Init (u16 arr,u16 psc) { //定义初始化结构体
GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // 使能定时器时钟TIM3/TIM4/TIM5 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM4 | RCC_APB1Periph_TIM5, ENABLE); //使能GPIOA/GPIOB外设时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
27 /45
3 舵机的控制方法
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲 的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲 部分。 以180度角度伺服为例,那么对应的控制关系:
28 /45
3 舵机的控制方法
小型舵机的工作电压一般为4.8V或6V,转速也不是很快, 一般为0.22/60度或0.18/60度,所以假如更改角度控制脉冲 的宽度太快时,舵机可能反应不过来。如果需要更快速的 反应,就需要更高的转速。 舵机上有三根线,分别为VCC、GND、信号线,不需要另 外接驱动模块,直接用单片机的管脚控制,控制信号一般 要求周期为20ms的PWM信号。 如果要更为精确的控制舵机(转动角度差<=1度),则需 要控制输出PWM信号的占空比, 例如:可以把0~180分为1024份(可以任取,决定于定时器 的时钟频率),范围为0.5ms~2.5ms 则可以得到0.09度/us,因此可以由 PWM=0.5+N/0.09(N是 角度)控制舵机转动0~180度间的任意角度。
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.1电源及下载线连接
/45
2 硬件连接方法
2.2舵机线连接
s+-
s+-
s+/45
2 硬件连接方法
2.2舵机线连接
多功能支架 短U支架 长U支架 L型支架 大脚板 U型梁 杯士轴承 6个 2个 4个 8个 2个 1个 6个
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 选择安装目录C:\keil,点击 Next。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 在用户名中填入名字(可随便写或者空格),在邮件地 址那里填入邮件地址(可随便写或者可空格),点击 Next。
1 MDK集成开发环境
1.2 安装MDK
破解MDK 安装完MDK开发环境后,在编译程序的时候会有40K 的代码限制 开发软件\MDK 找到KEIL_Lic.exe。
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 点击KEIL_Lic.exe,在 弹出的界面中的CID选 项框中填入MDK的CID。
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击Finish,安装完成。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击Finish,安装完成。
/45
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 正在安装,请耐心等待。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击Finish,安装完成。
/45
/45
1 MDK集成开发环境
1.3 编译、下载
Translate:编译修改过的文件,只检查语法错误, 不链接库也不生成可执行文件 Build:编译修改过的工程,检查语法、链接动态库 文件、生成可执行文件 Rebuild:重新编译整个工程的所有文件,耗时较长 Load:程序下载
/45
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 然后点击Generate按钮,复 制产生的CID Code
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK MDK环境菜单栏File\License Managemant,把刚刚 在注册机复制到的CID Code粘贴到New License ID Code (LIC):框中,然后点击
3 舵机的控制方法
3.1 什么是舵机
舵机是一种位置(角度)伺服的驱动器,适用于需要角 度不断变化并可以保持的控制系统。舵机是一种俗称, 其实是一种伺服马达。
25 /45
3 舵机的控制方法
3.2 舵机工作原理
控制信号由接收机的通道进入信号调制芯片,获得直流偏 置电压。 内部有一个基准电路,产生周期为20ms,宽度为1.5ms 的基准信号,将获得的直流偏置电压与电位器的电压比较, 获得电压差输出。 电压差的正负输出到电机驱动芯片决定电机的正反转。当 电机转速一定时,通过级联减速齿轮带动电位器旋转,使 得电压差为0,电机停止转动。
库文件 :
startup/start_stm32f10x_hd.s CMSIS/core_cm3.c CMSIS/system_stm32f10x.c FWlib/stm32f10x_gpio.c FWlib/stm32f10x_rcc.c FWlib/stm32f10x_tim.c
用户文件:
29 /45
4 STM32驱动舵机实例
4.1 实验描述及工程文件清单 实验描述:通用定时器TIM2、 TIM3 、TIM4产生6路PWM舵机控制信号。 硬件连接:TIM3_CH1-4: PA6/PA7/PB0/PB1 (控制板P11-13)
TIM4_CH1-4: PB6-9 TIM5_CH1-4: PA.0-3 (控制板P4、5、6、14) (控制板P7、8、9、15)
34 /45
12.4 STM32驱动舵机实例
4.4 定时器初始化 pwm.c中函数TIM_PWM_Init() 配置TIM: void TIM_PWM_Init (u16 arr,u16 psc) { //初始化GPIO
32 /45
12.4 STM32驱动舵机实例
4.3 main文件
调用用户函数 TIM_PWM_Init() 把 TIM初始化成50Hz的 PWM输出模式。 While循环中根据角 度改变相应定时器通 道的占空比,产生舵 机控制信号,驱动舵 机转动到相应的角度。
for(angle=180;angle>=1;angle--) { SetJointAngle(4, angle); SetJointAngle(5, angle); SetJointAngle(6, angle); SetJointAngle(7, angle); SetJointAngle(8, angle); SetJointAngle(9, angle); SetJointAngle(10, angle); SetJointAngle(11, angle); SetJointAngle(12, angle); SetJointAngle(13, angle); SetJointAngle(14, angle); SetJointAngle(15, angle); Delay(0x000FFFF); } } }
31 /45
12.4 STM32驱动舵机实例
4.3 main文件
#include "stm32f10x.h" int main(void) 调用用户函数 { //delay_init(); //延时函数初始化 TIM_PWM_Init() 把 int angle; TIM初始化成50Hz的 TIM_PWM_Init(9999,143); PWM输出模式。 //不分频,PWM 频率=72*10^6/(9999+1)/(143+1)=50Hz While循环中根据角 while(1) {//调节占空比pwmval1/(9999+1) 度改变相应定时器通 for(angle = 1; angle<=180; angle++) 道的占空比,产生舵 { 机控制信号,驱动舵 SetJointAngle(4, angle); SetJointAngle(5, angle); 机转动到相应的角度。 SetJointAngle(6, angle); SetJointAngle(7, angle); SetJointAngle(8, angle); SetJointAngle(9, angle); SetJointAngle(10, angle); SetJointAngle(11, angle); SetJointAngle(12, angle); SetJointAngle(13, angle); SetJointAngle(14, angle); SetJointAngle(15, angle); Delay(0x000FFFF); }
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 以管理员身份运行“Keil uVision4”,在MDK开发环 境中的菜单栏File\License Managemant 中获取到CID
/45
1 MDK集成开发环境
1.2 安装MDK
破解MDK 在Target下拉框中选择ARM
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 点击 Next。
/45
1 MDK集成开发环境
1.2 安装MDK
05-开发软件\2-MDK 运行“MDK472_a.exe”, 把勾勾上,点击 Next。
/45
1 MDK集成开发环境