[AT32M412] 【AT-START-M412测评】+大摆角距离检测 (1)

[复制链接]
 楼主| jinglixixi 发表于 2025-6-6 14:52 | 显示全部楼层 |阅读模式
本帖最后由 jinglixixi 于 2025-6-6 19:08 编辑

#申请原创#

1. 工作原理
大摆角测距处理的工作原理是通过步进电机来拖动超声波测距模块来测定指定方向的空间距离,由于步进电机的精准定位性能,故可有效地达到控制要求。
对于所选用的步进电机来说,其一个节拍可运动0.7度。
而对于所选用的超声波测距模块来讲,其检测范围是20~400cm。
在进行大摆角测距的制作中,是通过TFT显示屏作为人机交互界面,见图1所示。并以表盘的形式来展示工作状态,其界面形式如2所示。

a682e45d3a238be92e628a1a47f6c1c3
图1 显示屏连接

be3610d8fdf4762a72ee60208eaf2b6a
图2 表盘效果

2. 表盘绘制
在制作表盘效果时要对绘制圆形的函数加以修改,以适应制作的需要。
在通常情况下下,为加速处理的速度,要绘制圆是采用八分法来实现。
为此,这里就将其改为一个可绘制8段弧线的函数,其内容为:
  1. void Draw_Circle_k(unsigned int x0,unsigned int y0,char r,char m)
  2. {
  3. int a,b;
  4. int di;
  5. a=0;b=r;
  6. di=3-(r<<1);
  7. while(a<=b)
  8. {
  9. if(m==3) LCD_DrawPoint(x0-b,y0-a);
  10. if(m==0)LCD_DrawPoint(x0+b,y0-a);
  11. if(m==1)LCD_DrawPoint(x0-a,y0+b);
  12. if(m==2)LCD_DrawPoint(x0-a,y0-b);
  13. if(m==4)LCD_DrawPoint(x0+b,y0+a);
  14. if(m==5)LCD_DrawPoint(x0+a,y0-b);
  15. if(m==6)LCD_DrawPoint(x0+a,y0+b);
  16. if(m==7)LCD_DrawPoint(x0-b,y0+a);
  17. a++;
  18. if(di<0)di +=4*a+6;
  19. else
  20. {
  21. di+=10+4*(a-b);
  22. b--;
  23. }
  24. }
  25. }

至于要绘制那段弧,则是通过参数m来确定。
绘制基线和弧线的程序为:
  1. LCD_DrawLine(0, base+1, 319, base+1);
  2. Draw_Circle_k(Xcent,base+1,70,2);
  3. Draw_Circle_k(Xcent,base+1,70,3);
  4. Draw_Circle_k(Xcent,base+1,70,0);
  5. Draw_Circle_k(Xcent,base+1,70,5);
  6. Draw_Circle_k(Xcent,base+1,140,2);
  7. Draw_Circle_k(Xcent,base+1,140,3);
  8. Draw_Circle_k(Xcent,base+1,140,0);
  9. Draw_Circle_k(Xcent,base+1,140,5);
  10. Draw_Circle_k(Xcent,base+1,216,2);
  11. Draw_Circle_k(Xcent,base+1,216,5);

其中,所涉及的参数如下:
Ymax = 239;
Xmax = 319;
Xcent = Xmax / 2;
base = 218;

3. 刻度与指针的绘制
在刻度与指针的制作中,涉及绘制直线绘制函数,其内容为:
  1. void LCD_DrawLine(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2)
  2. {
  3. unsigned int t;
  4. int xerr=0,yerr=0,delta_x,delta_y,distance;
  5. int incx,incy,uRow,uCol;
  6. delta_x=x2-x1;
  7. delta_y=y2-y1;
  8. uRow=x1;
  9. uCol=y1;
  10. if(delta_x>0)incx=1;
  11. else if(delta_x==0) incx=0;
  12. else {incx=-1;delta_x=-delta_x;}
  13. if(delta_y>0)incy=1;
  14. else if(delta_y==0)incy=0;
  15. else{incy=-1;delta_y=-delta_y;}
  16. if( delta_x>delta_y)distance=delta_x;
  17. else distance=delta_y;
  18. for(t=0;t<=distance+1;t++ )
  19. {
  20. LCD_DrawPoint(uRow,uCol);
  21. xerr+=delta_x ;
  22. yerr+=delta_y ;
  23. if(xerr>distance)
  24. {
  25. xerr-=distance;
  26. uRow+=incx;
  27. }
  28. if(yerr>distance)
  29. {
  30. yerr-=distance;
  31. uCol+=incy;
  32. }
  33. }
  34. }

若将直线绘制函数与三角函数相配合就可以快速地实现刻度和指针的绘制,其程序内容为:
  1. for(i= 46;i < 136; i+=2)
  2. {
  3. if (i % 10 == 0)
  4. {
  5. LCD_DrawLine(200*cos(radians(i))+Xcent,base - 200*sin(radians(i)) , 215*cos(radians(i))+Xcent,base - 215*sin(radians(i)));
  6. }
  7. else
  8. {
  9. LCD_DrawLine(210*cos(radians(i))+Xcent,base - 210*sin(radians(i)) , 215*cos(radians(i))+Xcent,base - 215*sin(radians(i)));
  10. }
  11. }
  12. POINT_COLOR=RED;
  13. LCD_DrawLine(Xcent, 40, Xcent, base+1);

4. 模拟效果
在未使用步进电机的情况下,可以模拟的方式来制作探测指针的扫描摆动效果。
此外,通过随机函数的使用还可以模拟超声波的检测效果。
实现模拟效果的程序如下:
  1. POINT_COLOR=RED;
  2. for(i= 2;i < 180; i+=2)
  3. {
  4. shuanxin();
  5. LCD_ShowNum(40,base+8,i,3);
  6. j=1+(int)(450.0*rand()/(RAND_MAX+1.0));
  7. LCD_ShowNum(240,base+8,j,3);
  8. POINT_COLOR=RED;
  9. LCD_DrawLine(Xcent,base +1 , 158*cos(radians(i))+Xcent,base - 158*sin(radians(i)));
  10. delay_ms(400);
  11. POINT_COLOR=BLACK;
  12. LCD_DrawLine(Xcent,base +1 , 158*cos(radians(i))+Xcent,base - 158*sin(radians(i)));
  13. }

经程序的测试,其实现的模拟效果如图3和图4所示。

edfcf3f191ed4dc2e9bd648c05d4addb
图3 模拟效果1

411ac7fa1730352520e5506a96d03e26
图4 模拟效果2

模拟效果演示:




星辰相随 发表于 2025-7-18 11:48 | 显示全部楼层
这个界面做的很有感觉啊,楼主用的是什么UI框架?
 楼主| jinglixixi 发表于 2025-7-19 00:37 | 显示全部楼层
星辰相随 发表于 2025-7-18 11:48
这个界面做的很有感觉啊,楼主用的是什么UI框架?

嘿嘿,只是用代码码的。
穷得响叮当侠 发表于 2025-7-22 08:28 | 显示全部楼层
这个AT-START-M412的大摆角测距处理原理和实现方法都很有创意,步进电机和超声波测距模块的结合使用,提供了精准的定位和测量。
魔法森林精灵 发表于 2025-7-22 15:10 | 显示全部楼层
这个AT-START-M412的测评很详细,特别是步进电机和超声波测距模块的配合使用,确实可以提高测距的精确度。
快乐制造机 发表于 2025-7-22 17:32 | 显示全部楼层
这个AT-START-M412测评看起来很专业,步进电机和超声波测距模块的结合使用,确实能够提高测距的精确度。
迷雾隐者 发表于 2025-7-22 21:50 | 显示全部楼层
这个AT-START-M412的测评很详细,特别是步进电机和超声波测距模块的结合使用,感觉技术含量很高。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

518

主题

2933

帖子

39

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