IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 基于mini stm32 PS2遥控控制舵机,LCD屏显示 -> 正文阅读

[嵌入式]基于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);?? ? ?? ?//串口初始化为9600
?? ?LED_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);?
?? ?
?? ??? ?} ?
? ? else
?? ??? ?for(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板

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:22:20  更:2021-08-25 12:24:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:56:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码