当前位置: 首页 > news >正文

HAL STM32 SG90舵机驱动控制

HAL STM32 SG90舵机驱动控制


  • 🔖测试对象:STM32F103
  • SG90舵机
    在这里插入图片描述

🌼功能实现:通过串口指令,控制SG90舵机转动到指定角度。

在这里插入图片描述

  • ✨在实际硬件舵机驱动过程中,使用SG90普通舵机空载运转情况下,电流在180mA左右,建议采用独立供电,光依赖开发板供电来驱动,可能带不动。

  • 🌿SG90舵机驱动,PWM控制参数:50hz=20ms,定时器计数值设定值:10000,舵机转动角度与PWM占空比关系如下表:


0.5ms-------------0度; 2.5% 对应函数中占空比为2501.0ms------------45度; 5.0% 对应函数中占空比为5001.5ms------------90度; 7.5% 对应函数中占空比为7502.0ms-----------135度; 10.0% 对应函数中占空比为10002.5ms-----------180度; 12.5% 对应函数中占空比为1250

🛠STM32CubeMX配置

  • 🌿PWM频率=72000000/(143+1)/(9999+1)=50hz
    在这里插入图片描述

📘功能代码实现

  • 🌿main函数:
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM2_Init();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */htim2.Instance->CCR1 = 250; //对应舵机0角度	
//__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 250); //设置CH1->PWM脉冲宽度,同上
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); //开启PWM输出通道3,PA0 -->50Hz	HAL_UART_Receive_IT(&huart1, &rx_buf, 1); //开启串口接收中断printf("TIM2 PWM SG90 Test\r\n");/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */if(Rece_flag){Rece_flag = 0;__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,PWM_ANGLE[Rece_Data-'0']); printf("舵机转动到:%d°\r\n",SG_ANGLE[Rece_Data-'0']);GPIOC->ODR ^=LED_Pin; //翻转led//HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);//同上}}/* USER CODE END 3 */
}
  • 🌿串口接收中断:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1) {
//				HAL_UART_Transmit(&huart1, &rx_buf, 1, 1000);//串口转发数据int receivedNum = rx_buf - '0'; // 将字符转换为数字// 检查接收到的数字是否在0到4之间if (receivedNum >= 0 && receivedNum <= 4) {Rece_Data =	 rx_buf;Rece_flag = 1; }			HAL_UART_Receive_IT(&huart1, &rx_buf, 1);//再次调用串口接收中断,否则下次无法接收到数据}}
  • 🌿串口控制:0 - 4数字指令
    在这里插入图片描述

  • 📚驱动代码:
通过网盘分享的文件:STM32F1_TIM2_PWM_SG90.rar
链接: https://pan.baidu.com/s/1OHFs1YMrV1qmPvAvjc0W2w?pwd=7e2a 提取码: 7e2a
http://www.lryc.cn/news/426428.html

相关文章:

  • 【Kubernetes】k8s集群图形化管理工具之rancher
  • AI编程系列一1小时完成链家房价爬虫程序
  • 【JavaEE初阶】文件内容的读写—数据流
  • Spring Boot项目中使用Sharding-JDBC实现读写分离
  • 【网络安全】SSO登录过程实现账户接管
  • Admin.NET源码学习(3:LazyCaptcha使用浅析)
  • 在原生未启用kdump的BCLinux 8系列服务器上启用kdump及报错处理
  • Android架构组件中的MVVM
  • 走向绿色:能源新选择,未来更美好
  • 鸿蒙装饰器的介绍
  • 零基础5分钟上手亚马逊云科技核心云架构知识 - 权限管理最佳实践
  • [数据库][知识]SQL Server、MySQL 和 Oracle 的默认端口和数据库链接
  • 【Unity教程】使用 Animation Rigging实现IK制作程序化的动画
  • OBS混音器(Mixers)的重要性和配置指南
  • Ubuntu安装Anaconda3
  • 数据类型解码:INT、VARCHAR、DATETIME的深度解析与实践
  • 基于单片机的智能晾衣系统设计
  • Python实战项目:天气数据爬取+数据可视化(完整代码)
  • 知识改变命运 数据结构【链表面试题】
  • 计算机毕业设计 医院问诊系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • 掌握CSS的:any-link伪类:统一链接样式的高效方法
  • 虚幻5|角色武器装备的数据库学习(不只是用来装备武器,甚至是角色切换也很可能用到)
  • 防火墙技术与地址转换
  • C++11中的Lambda表达式
  • Unity图形系统
  • Ceph篇之利用shell脚本实现批量创建bucket桶
  • 周末总结(2024/08/17)
  • SQL高级编程:掌握自定义函数和过程的艺术
  • python监听环境内是否有声音
  • 合并两个有序链表--力扣