本帖最后由 jinglixixi 于 2025-6-8 11:58 编辑
#申请原创#
大摆角距离检测其在硬件方面主要由:AT32M412开发板、TFT显示屏、超声波测距模块、步进电机及电机驱动功能板所构成。
5. 距离检测
为进行非接触式距离检测,这里选取的是超声波测距模块。
通常情况下,这种模块是通过计算收发超声波脉冲来换算出物体间距离的。此外,还有一种则是通过串口发送指令来读取检测距离值,其外观如图5所示,鉴于使用的方便性,就选取该检测模块来测距。
图5 超声波测距模块
图6 所用接口
在连接测距模块的情况下,通讯的波特率为9600bps,启动检测的指令为0x55,其检测效果如图7所示。
图7检测结果
在接收的4字节数据中,第二和第三字节数据是检测值,第四字节则是校验码。以返回值是FF 06 D9DE 为例,0x7C5 = 1753,即检测值为 1753mm。
在与TFT显示屏配合的情况下,实现实时距离检测与显示的程序为:
POINT_COLOR=RED;
for(i= 2;i < 180; i+=2)
{
shuanxin();
usart_data_transmit(USART2, 0X55);
c=0;
while(c < 4)
{
while(usart_flag_get(USART2, USART_RDBF_FLAG) == RESET);
buffer[c++] = usart_data_receive(USART2);
}
l=buffer[1]*256+ buffer[2];
LCD_ShowNum(40,base+8,i,3);
LCD_ShowNum(240,base+8,l,4);
POINT_COLOR=RED;
LCD_DrawLine(Xcent,base +1 , 158*cos(radians(i))+Xcent,base - 158*sin(radians(i)));
//move(); // 小角度转动处理
delay_ms(400);
POINT_COLOR=BLACK;
LCD_DrawLine(Xcent,base +1 , 158*cos(radians(i))+Xcent,base - 158*sin(radians(i)));
}
fx(1); // 复位处理
6. 步进电机转动及复位
为便于连接,步进电机与开发板的连接关系为:
MA---PB11
MB---PB12
MC---PB13
MD---PB14
图8 所用接口
图9 连接关系
在添加步进电机的情况下,实现0.7度角的微小转动函数为:
void move(int n)
{
MDL;
MAH;
delay_ms(n);
MBH;
delay_ms(n);
MAL;
delay_ms(n);
MCH;
delay_ms(n);
MBL;
delay_ms(n);
MDH;
delay_ms(n);
MCL;
delay_ms(n);
MAH;
delay_ms(n);
}
鉴于以前的模拟转动控制程序是以2度的转角为步进单位,故调用3次0.7度角步进函数即可达到约2度的步进效果,经修改实际的转动控制程序为: POINT_COLOR=RED;
for(i= 2;i < 180; i+=2)
{
shuanxin();
usart_data_transmit(USART2, 0X55);
c=0;
while(c < 4)
{
while(usart_flag_get(USART2, USART_RDBF_FLAG) == RESET);
buffer[c++] = usart_data_receive(USART2);
}
l=buffer[1]*256+ buffer[2];
LCD_ShowNum(40,base+8,i,3);
LCD_ShowNum(240,base+8,l,4);
POINT_COLOR=RED;
LCD_DrawLine(Xcent,base +1 , 158*cos(radians(i))+Xcent,base - 158*sin(radians(i)));
move();
move();
if((i%10)>0) move();
delay_ms(400);
POINT_COLOR=BLACK;
LCD_DrawLine(Xcent,base +1 , 158*cos(radians(i))+Xcent,base - 158*sin(radians(i)));
}
fx(1);
至此,整体的功能设计就基本完成了,后续的工作是对传动结构进行连接和调整。
|