基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)

这篇具有很好参考价值的文章主要介绍了基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述:

本项目基于 正点原子精英(stm32f103zet6) 控制小舵机 模拟 二轴机器人逆运动学控制。

目录

概述:

1. 我的问题总结

2.stm32控制部分 与机械部分

2.1 对于二轴机器人设计

2.2 stm32 输出 pwm

2.3 舵机控制

3.正运动学

3.1 D-H建模下对姿态的描述

4.逆运动学

4.1 几何解法

4.2 代数解法

4.3 多重解下的选择方式

5.线性运动的展示


1. 我的问题总结

        1. 舵机的运动范围有限仅仅为(0°-180°)。

        2. 定时器给舵机的PWM为整数 (即TIMX->CRR需要是整数)导致机械臂走直线容易是锯齿          状。

        3. 如何在多重解下选择(知道原理,不知道如何操作)

2.stm32控制部分 与机械部分

基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)

2.1 对于二轴机器人设计

        为了便于计算和验证让 l1和l2均等于100mm 让二轴机械臂绕Z轴主动建立坐标系。

基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)

2.2 stm32 输出 pwm

我用了TIM3的OC2和OC3通道输出两种PWM输出。

//arr:自动重装值
//psc:时钟预分频数
void TIM3_PWM_Init(u16 arr,u16 psc){  
	
	GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;
	TIM_OCInitTypeDef  TIM_OC3InitStructure;


	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);	//使能定时器3时钟
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB  | RCC_APB2Periph_AFIO, ENABLE);  //使能GPIOB和AFIO复用功能模块时钟
	
	GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射  TIM3_CH2->PB5	TIM3_CH3->PB0  
	

   //设置该引脚为复用输出功能,输出TIM3 CH2的PWM脉冲波形	GPIOB.5
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO

	//设置该引脚为复用输出功能,输出TIM3 CH1的PWM脉冲波形	GPIOB.0
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //TIM_CH1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIO
	
	
	
   //初始化TIM3
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); 
	

	
	
	
	//初始化TIM3 Channel2 PWM模式	 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
 	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
	TIM_OC2Init(TIM3, &TIM_OCInitStructure);  //根据T指定的参数初始化外设TIM3 OC2
    
    //初始化TIM3 Channel3 PWM模式
    TIM_OC3InitStructure.TIM_OCMode = TIM_OCMode_PWM1; //定时器模式:TIM脉冲宽度调制模式1
 	TIM_OC3InitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	TIM_OC3InitStructure.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性:TIM输出比较极性高
	TIM_OC3Init(TIM3, &TIM_OC3InitStructure);  //根据T指定的参数初始化外设TIM3 OC1


	TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
	TIM_OC3PreloadConfig(TIM2, TIM_OCPreload_Enable);  //使能TIM3在CCR2上的预装载寄存器
	
	TIM_Cmd(TIM3, ENABLE);  //使能TIM3

}

TIM_SetCompare3(TIM3,500); 
TIM_SetCompare2(TIM3,500);

则可以控制TM3通道3和通道2的的PWM输出。

2.3 舵机控制

因为部分重映射了所以PWM输出的是OC2 ~ PB5  OC3 ~ PB0

void Servos_Setang(u8 servos, uint16_t ang){
	
		if(ang < 0)	ang = 0;
		if(ang > 180)	ang = 180;
		if(servos == 1){
			TIM_SetCompare3(TIM3,500 + 14*ang); 
		}
		else if(servos == 2){
			TIM_SetCompare2(TIM3,500 + 14*ang); 
		}

}

3.正运动学

3.1 D-H建模下对姿态的描述

普通的姿态描述:

基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)

 在变换矩阵下通过4个值分别建立连杆n-1与n之间的关系:

1. 绕Xn-1轴转αn-1角

2. 沿Xn-1轴移动an-1

3. 绕 Zn 轴旋转本θn角

4. 沿 Zn 轴移动dn

带入以下公式:

基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)

将得到的位姿矩阵从下往上相乘即为末端位姿 

例如 0T3 = 0T1*1T2*2T3

4.逆运动学

机器人逆运动学:又称机器人运动学方程的逆解或间接位置求解,指给定机器人抹点执行器的位置和姿态,求解可到达给定位置和姿态的各关节的角度值。

4.1 几何解法

基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)

4.2 代数解法

基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)

4.3 多重解下的选择方式

基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)

如何选择离当前状态更近

更快

更节能的解 

基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)

 如何可以选择性避开障碍的解

5.线性运动的展示

轨迹成直线(细分可看出成锯齿状带优化)

直线运动视频

        文章来源地址https://www.toymoban.com/news/detail-419592.html

到了这里,关于基于STM32F103控制舵机 仿真 简单二轴机器人逆运动学(20220615完成 正在处理三轴)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103C8T6(HAL库)驱动舵机

    常见的舵机分为360°和180°两种,本次对180°舵机进行驱动,舵机驱动需要通过PWM信号进行驱动。本文通过定时器中的PWM信号设定使得SG90舵机进行不同角度的转动。 对于舵机的驱动,需要20ms的脉冲,高电平时间在0.5ms-2.5ms区间即可控制舵机在0-180°角度进行转动。常见角度对应

    2024年02月05日
    浏览(45)
  • 【基于STM32F103C8T6的智能风扇控制】

    本次分享的是基于STM32F103的智能风扇的制作,相关的硬件和部分源码可看下面哦,需要成品的可私(创作不易,拒绝白嫖) 喜欢就给小殷一个关注和点赞吧 演示视频链接 1、按键模式下通过按键进行风扇档数改变一共设置为4档 2、自动模式下根据环境温度而改变温度的转速和

    2024年02月12日
    浏览(88)
  • STM32F103C8T6智能小车舵机超声波避障

    目录 一、定时器 计数和定时器中断  输出比较(PWM) 二、 舵机 三、超声波测距 四、主函数 总结 推荐的STM32学习链接:  [6-1] TIM定时中断_哔哩哔哩_bilibili [6-1] TIM定时中断是STM32入门教程-2022持续更新中的第13集视频,该合集共计29集,视频收藏或关注UP主,及时了解更多相关视

    2024年02月15日
    浏览(47)
  • 摇杆按键+SG90 实现舵机云台(STM32F103C8T6)

    STM32F103C8T6最小系统板*1 SG90舵机(180°)*2 摇杆按键*1 舵机支架*1 面包板*1(非必须) 杜邦线若干 类似这种的支架,不过需要自己裁切嵌入的部分 代码很简单,主要使用ADC双通道读取两个电位器的值(实际上就是电压),通过获取到的值的范围来确定上下左右,从而来改变两

    2024年02月14日
    浏览(55)
  • STM32F103 点亮LED闪烁与仿真

    今天给大家分享一下STM32 流水灯简单的仿真吧,我感觉这个提供有用的,但是自己也是第一次使用,主要是感觉曲线很高级。在PWM中查看脉宽很有用。 code: led.c #include \\\"led.h\\\" #include \\\"delay.h\\\" /* GPIO的控制寄存器的配置 1、配置输出引脚 2、打开对应的输出的寄存器的时钟 3、配置

    2024年02月16日
    浏览(44)
  • 基于STM32f103c8t6的简单红外巡迹避障小车制作

    (1)电源 电源模块选用的是18650锂电池(充电器及电池底座)、3.3v稳压模块。 (2)车模 淘宝最常见的智能车底。 (3)电机 买的智能车带有四个电机,选用L298N电机驱动板对电机进行驱动。 (4)巡迹及避障 巡迹选用四路红外模块实现,避障选用超声波模块HC-SR04实现。 (

    2023年04月15日
    浏览(45)
  • 基于STM32F103C8T6的端口重映射及定时器输出PWM控制

    #一、端口重映射原理及部分/完全重映射 #二、端口重映射的配置 #三、PWM控制 ##1、通用定时器输出PWM ##2、PWM的工作原理 ##3、PWM的内部运作机制 ##4、PWM的模式 ##5、自动加载的预载寄存器 #四、定时器输出PWM结构体及库函数的配置 #五、项目硬件 #六、项目代码 一、端口重映射

    2024年02月13日
    浏览(52)
  • 使用Proteus 8.9仿真STM32F103流水灯实验

    STM32流水灯程序非常简单,在我的实验中使用GPIOC的引脚连接流水灯。主要程序如下: LED初始化:led.h  led.c test.c文件,main主函数:  工程目录如下,记得包含头文件。工程链接在文末。  编译生成.hex文件即可,接下来绘制仿真电路。 打开Proteus 点击新建工程。 我将工程保存

    2024年02月04日
    浏览(73)
  • 单相逆变电路实战!(基于STM32F103C8T6的单相逆变电路,PID控制输出额定电压)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 我建了一个群,分享我个人做项目的经历和资源,纯个人爱好,一切免费,看自己空闲时间答疑,有想法的可以加QQ群280730348 本篇文章是对单相逆变电路进行实战演练的一次项目,主要实现功能为: 直

    2023年04月08日
    浏览(74)
  • Proteus仿真stm32f103r6输出PWM/正弦波

    Proteus仿真stm32f103r6输出PWM/正弦波  

    2024年01月23日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包