2005电子设计大赛国赛题编程思路

本文详细解析了2005年国赛题F407的编程思路,涵盖坐标设定、定点到达、画圆及循迹等功能。介绍了通过按键控制目标坐标设定,利用步进电机实现精准移动,并采用超声波传感器进行位置校正,展示了如何结合硬件资源完成复杂任务。
摘要由CSDN通过智能技术生成

2005国赛题F407编程思路:

1.实现功能:

a.实现坐标的设定

b.实现设定定点之后可以到达该点

c.设定圆心坐标以及半径后可以实现画圆

d.物体当前坐标实时显示在LCD上

e.能够沿着黑线进行跑动

 

2.编程初步思路:

a.设定两个变量:Set_X,Set_Y.分别由按键KEY0与KRY1实现。

KEY0:  短按   Set_X+1       长按       Set_X连加

KEY1:  短按   Set_Y+1       长按       Set_Y连加

确定键:KEY2      短按确定      

启动键:KEY2      长按启动

分为三种模式:

#1:到达定点模式

#2:画圆模式

#3:循迹模式

三种模式的切换键由KEY_UP来决定,初始界面即为到达定点模式,切换键的状态定义为一个变量:CHANGE_MODE

 

 

 

 Switch(CHANGE_MODE)

Case 0:  显示到定点模式

Case 1:  显示画圆模式

Case 2:  显示循迹模式

If(CHANGE_MODE==3)  CHANGE_MODE=0;

KEY_UP按下一次,CHANGE_MODE++;

 

按键用到的IO口:

PA0

WK_UP

Y

1,按键KEY_UP
2,可以做待机唤醒脚(WKUP)

只要KEY_UP不按下,该IO完全独立

PE2

KEY2

Y

接按键KEY2

只要KEY2不按下,该IO完全独立

PE3

KEY1

Y

接按键KEY1

只要KEY1不按下,该IO完全独立

PE4

KEY0

Y

接按键KEY0

只要KEY0不按下,该IO完全独立

按键检测用到的定时器;定时器7

按键检测初始化函数:void KEYscan_init(void);

里面包含了一个定时器初始化。

 

设定的数值需要用TFTLCD显示,除了LCD初始化函数之外,设定显示函数为void LCD_Display(void);

得把这个模块添加进去程序。

TFTLCD用到的IO口:

 

PB0

T_SCK

Y

PB1

T_PEN

Y

PB2

BOOT1

N

PB15

LCD_BL

Y

PC13

T_CS

Y

PD0

FSMC_D2

N

PD1

FSMC_D3

N

PD2

SDIO_CMD

N

PD3

ETH_RESET

N

PD4

FSMC_NOE

N

PD5

FSMC_NWE

N

PD6

DCMI_SCL

Y

PD7

DCMI_SDA

Y

PD8

FSMC_D13

N

PD9

FSMC_D14

N

PD10

FSMC_D15

N

PD11

FSMC_A16

N

PD12

FSMC_A17

N

PD13

FSMC_A18

N

PD14

FSMC_D0

N

PD15

FSMC_D1

N

PE7

FSMC_D4

N

PE8

FSMC_D5

N

PE9

FSMC_D6

N

PE10

FSMC_D7

N

PE11

FSMC_D8

N

PE12

FSMC_D9

N

PE13

FSMC_D10

N

PE14

FSMC_D11

N

PE15

FSMC_D12

N

PF11

T_MOSI

Y

 

 

TFTLCD显示需要用到的定时器:定时器7

 

b.将物体置于原点位置,让它能够先向上或者向下,然后向左还是向右进行移动,理想情况下到达定点后,便用超声波的测量值与它进行比对,这个时候就直接利用与实际位置到滑轮的距离以及目标点到滑轮的距离来进行调整,进行反馈控制。

首先便要驱动电机,使得电机能够正转,反转,停止。分别用以下的函数来实现:

Void MOTOR_zhengzhuan(void);

Void MOTOR_fanzhuan(void);

Void MOTOR_stop(void);

 

控制两个步进电机需要八路PWM输出,全部集成到MOTOR.c中去输出,

定时器的初始化也放入其中,需要用到两个定时器。

用到的两个定时器:TIM3  TIM4

用到的八个IO口:

PC6

TIM3_CH1

TIM8_CH1

PC7

TIM3_CH2

TIM8_CH2

PC8

TIM3_CH3

TIM8_CH3

PC9

MCO2

TIM3_CH4

 

PC6

TIM3_CH1

TIM8_CH1

PC7

TIM3_CH2

TIM8_CH2

PC8

TIM3_CH3

TIM8_CH3

PC9

MCO2

TIM3_CH4

 

在刚开始走直线到达目标点的时候,从原点出发,应该是不需要用到当前坐标点的数值:extern u8: CURRENT_X,CURRENT_Y;

两个都应该设置为全局变量。

 

在控制两个电机的时候,一个步进单位,它的一个脚步为1.8度,线所绕动的距离为 float  MOTOR_bujin=0.028cm

出发点物体坐标与左边滑轮之间的距离为DISTANCE_CLEFT

出发点物体坐标与右边滑轮之间的距离为DICTANCE_CRIGHT

设定坐标点与左边滑轮之间的距离为DISTANCE_SLEFT

设定坐标点与右边滑轮之间的距离为DISTANCE_SRIGHT

单位全部记为CM

 

设定一个变量为CHAZHI_LEFT=DISTANCE_SLEFT-DISTANCE_CLEFT

设定一个变量为CHAZHI_RIGHT=DISTANCE_SRIGHT-DICTANCE_CRIGHT

CHAZHI_LEFT除以0.028,即为左边电机收到的节拍数目。

CHAZHI_RIGHT除以0.028,即为右边点击收到的节拍数目。

 

然后将这些节拍分配给两个电机,达到相应的节拍后,停止,重复相同的操作,直到分配给两个电机的节拍再次用光。

 

每次给予两边的节拍用完后,用超声波来进行误差判断,当误差达到2CM以内后,停止。

 

超声波模块的设置:

CURRENT_X=左侧超声波得到的数值减去??

CURRENT_Y=下方超声波得到的数值减去??

 

c.画圆

通过键盘输入它的圆心坐标数值,(SET_Xyuan,SET_Yyuan)

通过计算出n_yuan个已知坐标点,用b的方案一个个的进行画圆。

其中用到四个坐标点会用到超声波来让它这四个点的精度提升。

可以设置一个变量:为画圆时候的基本角度,将360除以n_yuan便是等于它了,利用画圆公式:

第一个坐标点:()

下一个坐标点:()

画一个点,n_yuan--,等于0时候,便画完了。

转载于:https://www.cnblogs.com/The-forest/p/7229318.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值