[STM32H5] 【NUCLEO- H563ZI 测评】+串行通信与云台控制

[复制链接]
1364|4
 楼主| jinglixixi 发表于 2023-7-31 11:37 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2023-7-31 11:39 编辑

#申请原创# @21小跑堂
云台是一种可以承载摄像头转动的调节装置,它由舵机来控制其在某一方向的转动,对于二维转动的云台,则需2个舵机来负责驱动。
由于舵机是通过PWM的占空比来调节转动的角度,为了简化PWM的处理,这里是用一个双通道的可调节型PWM功能模块来产生的输出信号。此外,该功能模块即可手动进行操控,也可通过串口来控制。为了便于以程序来控制该云台,这里是以串口的方式来控制该功能模块。
1.jpg
图1  整体构成

2.jpg
图2  PWM功能模块

PWM功能模块支持2种指令,一是频率设置指令,另一个是占空比设置指令。
以设置第一通道为50Hz频率为例,其指令为:S1F050T。其中,S1是选取第一通道进行设置,而F050则是设置频率为50Hz。
若将第二通道的占空比设置为3%,则指令为:S1D003T。其中,S2是选取第二通道进行设置,而D003则是设置占空比为3%。
为了进行测试,可通过串口助手类的工具来验证,其测试结果如图3至图5所示。
3.jpg
图3 方式指令

4.jpg
图4 控制效果1

5.jpg
图5 控制效果2

6.jpg
图6 控制效果3

7.jpg
图7 控制效果4

由图可知,数值越小则越向右转;数值越大则越向左转。
由图可知,数值越小则越向右转;数值越大则越向左转。
那么该如何用开发板来控制PWM调节功能模块呢?
这里是使用USART2来进行串口通讯,其引脚位置如图8所示。
其中: PD5为发送引脚,PD6为接收引脚。
8.jpg
图8 串口引脚

通过USB转TTL模块的处理,可将串口通信转为 USB通讯。
在直接进行PWM调节模块控制时,则可以直接将PC12接到调节模块的接收端,而将PD2接到调节模块的发送端。
控制指令是放在数组中,在发送时再实时地对指令参数进行调整。
uint8_t MLF[7]={'S','1','F','0','5','0','T'};
uint8_t MLP[7]={'S','1','D','0','0','4','T'};

发送指令的程序代码为:
HAL_UART_Transmit(&huart2,(uint8_t *)MF, 7, 5000);


实现按键中断处理的函数为:
  1. void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
  2. {
  3.   if (GPIO_Pin == BUTTON_USER_PIN)
  4.   {
  5.        UserButtonStatus = 1;
  6.   }
  7. }

实现单维度云台控制的主程序为:
  1. int main(void)
  2. {
  3.   uint8_t MLF[7]={'S','1','F','0','5','0','T'};
  4.   uint8_t MLP[7]={'S','1','D','0','0','3','T'};
  5.   uint8_t n=3;
  6.   HAL_Init();
  7.   SystemClock_Config();
  8.   MX_GPIO_Init();
  9.   MX_USART2_UART_Init();
  10.   MX_ICACHE_Init();
  11.   BSP_LED_Init(LED1);
  12.   BSP_LED_Init(LED3);
  13.   if (HAL_UART_Transmit(&huart2, (uint8_t *)MLF, 7, 5000) != HAL_OK)
  14.   {
  15.        Error_Handler();
  16.   }
  17.   while (1)
  18.   {
  19.   BSP_PB_Init(BUTTON_USER, BUTTON_MODE_EXTI);
  20.   while (UserButtonStatus == 0)
  21.   {
  22.     BSP_LED_Toggle(LED1);
  23.     HAL_Delay(100);
  24.   }
  25.   BSP_LED_Off(LED1);
  26.   MLP[4]= n/10+'0';
  27.   MLP[5]= n%10+'0';
  28.   n=(n+1)%13;
  29.   if(n==0) n=3;
  30.   UserButtonStatus = 0;
  31.   if (HAL_UART_Transmit(&huart2, (uint8_t *)MLP, 7, 5000) != HAL_OK)
  32.   {
  33.        Error_Handler();
  34.   }
  35.   HAL_Delay(100);
  36.   }
  37. }

经程序的编译及下载,其测试结果如图9所示,即每按下一次蓝色用户键,则占空比的值增大一次,直到最大值时,再返回到最小值重新开始。
9.jpg
图9 测试发送指令

为了进行二维的云台控制,需将单键的中断式相应处理修改为双键的查询式处理,令每个按键各负责一个维度的调节控制。


观海 发表于 2023-8-17 16:58 | 显示全部楼层
请问这两个维度的舵机之间的角度是有协同关系还是独立的呢
 楼主| jinglixixi 发表于 2023-8-18 08:21 | 显示全部楼层
观海 发表于 2023-8-17 16:58
请问这两个维度的舵机之间的角度是有协同关系还是独立的呢

是独立调节
tpgf 发表于 2023-8-18 13:36 | 显示全部楼层
控制向左转向右转的这个数值是指的占空比还是频率的大小呀
 楼主| jinglixixi 发表于 2023-8-19 08:35 | 显示全部楼层
tpgf 发表于 2023-8-18 13:36
控制向左转向右转的这个数值是指的占空比还是频率的大小呀

指的是占空比,频率是50hz。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

521

主题

2949

帖子

39

粉丝
快速回复 在线客服 返回列表 返回顶部