本帖最后由 jinglixixi 于 2025-6-9 17:20 编辑
#申请原创#
前面介绍了基于步进电机的大摆角距离检测,但它只能完成单轴摆动的距离检测,要实现双轴摆动的距离检测在安装结构上会更为复杂些。
为此,可使用有双轴摆动结构的舵机组件来实现,见图10所示。
图10 双轴舵机云台
为控制舵机的摆动,需要为其提供相应的PWM调节脉冲,从简化设计的角度出发,可选取双路PWM调节模块来解决该问题,该模块的功能结构如图11所示。
图11 双路PWM调节模块
该功能模块具有手动和串口这2种控制模式,在使用中为便于程序控制,是通过串口指令来进行控制处理。
在使用串口控制的模式下,其串口工作的波特率为9600bps。
通过串口可设置模块的工作频率及占空比。
设置工作频率的格式如图12所示,设置占空比的格式如图13所示。
图12 设置频率的格式
图13 设置占空比的格式
以PWM调节模块控制双轴舵机云台的信号传递关系如图14所示。
图14 信号传递关系
对于舵机来说,所用的型号为SG90,转动范围为180度,其转动角度与时间的关系如图15所示。
图15 转角与时间关系
在使用过程中,需经计算和实际测试,将占空比设置在2%~13%之间时,即可产生0度~180度之间的12个角度状态。
经测试可知,占空比的数值越小则越向右转,数值越大则越向左转。占空比的数值越小则越向上转,数值越大则越向下转。
图16 控制效果1
图17 控制效果2
图18 控制效果3
图19 控制效果4
在控制时,首先要将PWM1和PWM2的脉冲频率设置为50Hz,相应的指令为“S1F050”和“S2F050”,然后再设置PWM1和PWM2的占空比,其指令形式为“S1D007”和“S2D007”,即可将舵机调整到指定的状态。
在控制云台转动和超声波测距的情况下,需要USART1和USART2一起配合工作,其中USART1控制云台转动,USART2控制超声波测距。
图20 连接与测试
为此,实现控制功能的关键程序为:
uint8_t MLF[7]={'S','1','F','0','5','0','T'};
uint8_t MLP[7]={'S','1','D','0','0','2','T'};
uart_print_init(9600); // USART1
delay_ms(1500);
// 设置脉冲频率
//S1F050T
MLF[1]='1';
while(c<7)
{
while(usart_flag_get(USART1, USART_TDBE_FLAG) == RESET);
usart_data_transmit(USART1, (uint16_t) MLF[c]);
c++;
}
delay_ms(300);
c=0;
MLF[1]='2';
while(c<7)
{
while(usart_flag_get(USART1, USART_TDBE_FLAG) == RESET);
usart_data_transmit(USART1, (uint16_t) MLF[c]);
c++;
}
delay_ms(300);
// 云台进入初识状态
//S1D003T
c=0;
MLP[1]='1';
u=7
loop:
MLP[4]=u/10+'0';
MLP[5]=u%10+'0';
while(c<7)
{
while(usart_flag_get(USART1, USART_TDBE_FLAG) == RESET);
usart_data_transmit(USART1, (uint16_t) MLP[c]);
c++;
}
delay_ms(300);
//S2D003T
c=0;
MLP[1]='2';
MLP[5]='2';
while(c<7)
{
while(usart_flag_get(USART1, USART_TDBE_FLAG) == RESET);
usart_data_transmit(USART1, (uint16_t) MLP[c]);
c++;
}
delay_ms(500);
for(j=2;j<14;j++)
{
shuanxin();
//S1D00xT
MLP[1]='2';
MLP[4]=j/10+'0';
MLP[5]=j%10+'0';
delay_ms(20);
至此,整体的设计功能就完成了,相较于单轴的距离检测,其检测的范围要更加宽泛。
演示效果:
|