完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
一、实验内容:
1.完成智能小车的组装;2.为组装好的小车进行系统录入,并确认板子焊接完好,无断线;3.通过小车的电路图,并利用keil uVision5和STM32Cube MX等软件对小车的各个模块进行编写程序;4.应用微控制器的端口、外部中断、定时器等基本模块对小车实现基本控制;5.通过控制按键来实现小车上灯光的闪烁控制;6.结合电源板、电机驱动板来控制电机的转动,实现小车的行进;7.加上红外线传感器,来实现小车的测距,加上蜂鸣器实现小车的报警;8.加上摄像头和舵机,来实现摄像头的360度旋转;9.实现小车与PC机的串口通信;10. 对小车加上WiFi模块可以连接手机APP,通过控制手机APP来实现小车的基本功能:前进、后退、转弯、红外线测距。 二、实验过程介绍 1.硬件准备: 将小车组装好,检查各模块焊接无误:电源模块、单片机模块、红外线传感器模块、电机模块。 2.系统的总电路图: (1) 芯片模块: (2) 电源模块: (3) 电机模块: (4) 蜂鸣器模块: (5) 超声波模块: 3.分模块功能: (1)小车灯模块: 1>通过按键来控制小车的灯的颜色变换。 ·相关实验步骤截图: 2>通过按键来控制小车的灯的闪烁及亮度(即添加中断)。 ·原理图: ·相关实验步骤截图: 3>通过按键来控制小车的灯实现呼吸灯效果。 ·原理图: ·相关实验步骤截图: ·实验代码思路: 1)启动定时器:HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3); 2)设置CMP的值: for(i=0;i<=100;i++){ __HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_3,i); HAL_Delay(50); } (2)电机模块: 通过控制电机的转动来实现小车的行进。 ·原理图: ·相关实验步骤截图: ·实验代码思路: 1)设置制动(即刹车): void car_init(void){ HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1); //left __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0); HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_4); //right __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0); } 2)设置速度: void car_front(int speed){ __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,speed); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,speed);} 3)设置前进: void car_front(int speed){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,speed); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,speed);} 4)设置后退: `void car_back(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_SET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_RESET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,30); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,30);} 5)设置左转: void car_turn_left(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,30);} 6)设置右转: void car_turn_right(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,30); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0);} 7)设置停止: void car_stop(void){ HAL_GPIO_WritePin(GPIOA,GPIO_PIN_2,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET); //input2==0 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET); //input1==1 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_9,GPIO_PIN_SET); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,0); __HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_4,0);} 8)调用函数 car_init(); while (1) { car_stop(); HAL_Delay(5000); car_front(30); HAL_Delay(5000); car_front(90); HAL_Delay(5000); car_back(); HAL_Delay(5000); car_turn_left(); HAL_Delay(5000); car_turn_right(); HAL_Delay(5000); } (3)舵机模块: 通过加入摄像头和舵机实现摄像头的360度旋转。 ·相关实验步骤截图: ·实验代码思路: 1)启动定时器: HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1); 2)设置CMP: for(i=5;i<=25;i++) { __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,i); HAL_Delay(1000); } for(i=25;i>=5;i–) { __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_1,i); HAL_Delay(1000); } (4)通信模块: 实现的功能:pc发送消息给STM32,STM32返回数据 ·实验原理图: ·相关实验步骤截图: ·实验代码思路: 1)uint8_t rx_data[6]; 2)使能接收:HAL_UART_Receive_IT(&huart1,rx_data,6); //表示每收6个字节才产生中断 3)串口中断函数: void HAL_UART_RxCpltCallback(UART_HandleTypeDef huart) //产生中断后,使数据保存 4)发送函数: HAL_UART_Transmit_IT(&huart1,(uint8_t)“I love me too!”,strlen(“I love me too!”)); 5)重新接收使用: HAL_UART_Receive_IT(&huart1,rx_data,6); (5)蜂鸣器模块: 实现的功能:利用红外线传感器实现当出现“悬崖”时实现蜂鸣器响。 ·相关实验步骤截图: ·实验代码思路: 1)先启动定时器 HAL_TIM_Base_Start_IT(&htim2); 2)写中断函数 (6)超声波模块: 实现的功能:连接超声波传感器并且在PC上接收数据。 ·实验原理图: ·相关实验步骤截图: ·实验代码思路: 1)拉低PC3,并关灯 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET); 2)拉高PC3,并启动定时器 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET); HAL_TIM_Base_Start_IT(&htim2); 3)实现定时器中断 void HAL_TIM_PeroidElapsedCallback(TIM_HandleTypeDef *htim2) { } 4)在中断中进行判断: 5)设置标志位 4.整体设计: (1)手机APP界面: (2)整体实现的功能、思路及步骤: ·功能: 通过手机APP控制小车,实现小车的前进、后退、左转、右转。并且利用超声波检测到障碍物时小车自动停止。 ·思路: ·步骤: (3)实验主要代码: 5.实验中遇到的问题及解决方法: 实验中小车APP控制时按键不太灵验,而且经常出现按键抖动,而且连接线有时候经常出现问题,影响实验的进度。在控制小车时,手机上的控制位刚开始不太准确,经过调整后确定为第三位为控制位而进行实验成功。 |
|
|
|
只有小组成员才能发言,加入小组>>
795 浏览 0 评论
1154 浏览 1 评论
2530 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2713 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1075浏览 3评论
195浏览 2评论
461浏览 2评论
374浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 13:33 , Processed in 1.629667 second(s), Total 47, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号