基于mini stm32 PS2遥控控制舵机,LCD屏显示

2024-03-07 11:08

本文主要是介绍基于mini stm32 PS2遥控控制舵机,LCD屏显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

          这是为了研究微型四旋翼无人机做的一个小测试,测试摇杆和舵机的性能,为后续控制空心杯电机做准备

实验器材

miniSTM32板,servo 9g 舵机,PS2摇杆,LCD显示屏

实物接线

ps2        stm32                        舵机                 stm32

GND      GND                         橙色信号线        PA8

+5V         3.3V                    舵机需要4.6V-6V之间电源供电,需要额外供电

VRX         PA0

VRY          PA1

SW           PA3

    舵机

   舵机需要一个频率为50hz的pwm波来控制,占空比与角度关系如下图所示

程序

主函数部分:

int main(void){ u16 pwmval;u16 adcx,adcy,adcz;int i;float temp,temp1,temp2;delay_init();             //延时函数初始化      uart_init(9600);         //串口初始化为9600LED_Init();                //  LED和PWM初始化的先后顺序非常重要TIM1_PWM_Init(7199,199);LCD_Init();          Adc_Init();    adcx=Get_Adc_Average(ADC_Channel_1,10);adcy=Get_Adc_Average(ADC_Channel_2,10);adcz=Get_Adc_Average(ADC_Channel_3,10);pwmval=(int)adcx*(7200/4096);//这里的参数不能修改,不然输出数值不变pwmval=pwmval/6;      //可以在这里修改,根据舵机的占空比来定数值pwmval+=6300;if(pwmval>=6300&&pwmval<7020){TIM_SetCompare1(TIM1,pwmval); }  elsefor(i=7020;i>6300;i--){TIM_SetCompare1(TIM1,i);LED1=!LED1;delay_ms(10);}

LCD显示部分代码

LCD_ShowxNum(156,130,adcx,4,16,0);//显示ADC的值LCD_ShowxNum(156,170,adcy,4,16,0);LCD_ShowxNum(156,210,adcz,4,16,0);temp=(float)adcx*(3.3/4096);adcx=temp;temp1=(float)adcy*(3.3/4096);adcy=temp1;temp2=(float)adcz*(3.3/4096);adcz=temp2;LCD_ShowxNum(156,150,adcx,1,16,0);//显示电压值整数部分LCD_ShowxNum(156,190,adcy,1,16,0);LCD_ShowxNum(156,230,adcz,1,16,0);temp-=adcx;temp1-=adcy;temp2-=adcz;temp*=1000;temp1*=1000;temp2*=1000;LCD_ShowxNum(172,150,temp,3,16,0X80);//读取的电压值小数部分LCD_ShowxNum(172,190,temp1,3,16,0X80);LCD_ShowxNum(172,230,temp2,3,16,0X80);

adc部分代码

//PA1 作为模拟通道输入引脚                         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);	//PA2 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);	//PA3 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;		//模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);	

u16 Get_Adc(u8 ch)   
{//设置指定ADC的规则组通道,一个序列,采样时间ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );	//ADC1,ADC通道,采样时间为239.5周期	  			    ADC_RegularChannelConfig(ADC1, ch, 2, ADC_SampleTime_239Cycles5 );ADC_RegularChannelConfig(ADC1, ch, 3, ADC_SampleTime_239Cycles5 );ADC_SoftwareStartConvCmd(ADC1, ENABLE);		//使能指定的ADC1的软件转换启动功能	while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待转换结束return ADC_GetConversionValue(ADC1);	//返回最近一次ADC1规则组的转换结果
}u16 Get_Adc_Average(u8 ch,u8 times)
{u32 temp_val=0;u8 t;for(t=0;t<times;t++){temp_val+=Get_Adc(ch);delay_ms(5);}return temp_val/times;
} 	 

实物效果

 总结:

工程文件基于stm32官方提供的ADC文件,在此基础上添加了pwm.c等文件,注意除了在hardware中添加pwm.c,还要在FWlib中添加stm32f10x.time.c文件,不然编译会报错!!!

此外,还要注意GPIO口可能有多个功能,作为PWM通道或者LED0的输出端口,这些看似不相干的模式,其实互相联系,当要输出pwm波时,就必须先初始化GPIO,否则就输出不了pwm!

ps2摇杆控制舵机,基于stm32mini板

这篇关于基于mini stm32 PS2遥控控制舵机,LCD屏显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/783297

相关文章

Python远程控制MySQL的完整指南

《Python远程控制MySQL的完整指南》MySQL是最流行的关系型数据库之一,Python通过多种方式可以与MySQL进行交互,下面小编就为大家详细介绍一下Python操作MySQL的常用方法和最... 目录1. 准备工作2. 连接mysql数据库使用mysql-connector使用PyMySQL3.

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring Security+JWT如何实现前后端分离权限控制

《SpringSecurity+JWT如何实现前后端分离权限控制》本篇将手把手教你用SpringSecurity+JWT搭建一套完整的登录认证与权限控制体系,具有很好的参考价值,希望对大家... 目录Spring Security+JWT实现前后端分离权限控制实战一、为什么要用 JWT?二、JWT 基本结构

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放