这是一款用于化学实验室样品上样器的机械臂。设置有肘关节、肩关节以及上下移动关节。
▲ 双轴机械臂结构
肘关节和肩关节运动驱动电机使用的是 42HS48EIS闭环步进电机 , 该电机的 转动角度使用高精度角度传感器 进行测量过。两个关节的步进电机的外部接口是一致的,只是输出在肩关节所使用得到功率(输出扭矩)大一些,体积长。
□ 说明:关于42HS48EIS闭环特性在下面博文中进行了验证: 双轴机械臂调试:步进电机42HS348E,BH32角度传感器,MCU:STC8H1K28
▲ 角度传感器、步进电机
角度传感器使用了 BH38绝对位置14bit角度传感器 ,使用MODBUS RS485协议读取角度。采用该角度传感器是为了形成两个关节运动的角度闭环。
(1) 设计要求
(2) 设计参考
步进电机驱动接口可以参照: STC8K28步进电机ULC2003触发器 中的方案。实际控制输出信号包括有三个:PUL,DIR,MF(步进电机释放)
BH38的485总结接口参照 BH38旋转编码器初步测试 中的接口。对于两路的RS485的输入,则通过 肖特基二极管1N5819 (40V,1A,Vf=0.34V)组成与门之后发送到单片机的RXD。
▲ 使用二极管与门合成两路RS485输入到单片机
(1) 原理图设计
(2) PCB设计
PIN | 符号 | 功能 |
---|---|---|
1 | +5V | 工作电源 |
2 | GND | 电源地 |
A | RS485 | A+ |
B | RS485 | B- |
5 | CLR | 清楚传感器角度(+5V) |
6 | INIT | 设置(+5V) |
PIN | 符号 | 功能 |
---|---|---|
1 | +5V | 上拉电源 |
2 | PUL | 脉冲输出 |
3 | DIR | 方向控制 |
4 | ENA | 使能控制 |
(1) 设置UART2波特率
在35MHz时钟频率下, UART2输出19200的波特率设置。 T 2 = 0 x F E 38 T_2 = 0xFE38 T2=0xFE38。
测量TXD2发送0x55波形,可以确定输出的波特率为19200bps。
▲ 测量TXD2发送波形
(2) 测试IO
测试其它IO的功能。
(1) 拷贝生成BH60文件模块
将在博文基于STC8H1K28的BH60的角度读写模块对应的BH60头文件和C语言文件拷贝到当前工程文件中。
(2) 对BH60进行修改
(1) 传感器接口
按照BH38绝对位置14bit角度传感器中对于BH38传感器的接口定义来制作传感器的接头。这与本电路板的接口定义是一样的。
(2) 角度读写实验
将两个端口的CLEARx_PIN, PROGRAMx_PIN都初始化为0。分别测试PANG1,PANG2上的对于传感器的读取功能。
注意: BH60Init(1):其中的地址使用缺省的1。
▲ 第一通道RS485的DIR(蓝色)与接收到RI(青色)信号
注意:在上述波形中,返回的RI波形低电平大于1.5V,实际上STC8H1K28无法接收到这个波形。通过更换MAX487芯片之后,接收到的波形低电平接近0V,此时STC8H1K28才能够正常接收到返回的数据。
通过改造BH60ReadNumber(ucChannel),可以分别读取两个角度传感器的角度。
//----------------------------------------------------------------------
if(++nShowCount >= 500) {
nShowCount = 0;
printf("%ld %ld\r\n", BH60ReadNumber(0), BH60ReadNumber(1));
}
▲ 分别使用BH60,BH38进行双通道读取实验
通过验证,可以正确的读取两个通道的角度。
(3) 读取角度的时间
读取两个通道的角度所需要的时间:20mS。
如果没有连接角度传感器:读取两个通道的角度所需要的时间14ms。
因此,平均读取一个通道的角度,所需要的时间:没有安装角度传感器时需要7ms,安装角度传感器的时候需要10ms。
//----------------------------------------------------------------------
if(++nShowCount >= 500) {
nShowCount = 0;
g_ucTime0MS = 0;
BH60ReadNumber(0);
BH60ReadNumber(1);
nShowCount = g_ucTime0MS;
printf("%ld %ld, %d\r\n", BH60ReadNumber(0), BH60ReadNumber(1), nShowCount);
}
★ 注意:电机的供电电压需要大于15V。可以选择16~24V的电压。
将原来的主循环中的WaitTime(1)修改成Delay(100),主循环的周期变为:Tp=0.0358ms。如果形成脉冲,则可以形成的频率为: f p = 1 2 ⋅ T p = 13.85 k H z f_p = {1 \over {2 \cdot T_p }} = 13.85kHz fp=2⋅Tp1=13.85kHz
下图是设置Delay(50)情况下的旋转情况。
下面给出了串口命令。其中
else IFARG0("angle") {
printf("%ld %ld\r\n", BH60ReadNumber(0), BH60ReadNumber(1));
} else IFARG0("step1") {
sscanf(SDA(1), "%ld", &g_lnPulse1Number);
if(g_lnPulse1Number > 0) {
ON(DIR1_PIN);
} else {
g_lnPulse1Number = -g_lnPulse1Number;
OFF(DIR1_PIN);
}
} else IFARG0("step2") {
sscanf(SDA(1), "%ld", &g_lnPulse2Number);
if(g_lnPulse2Number > 0) {
ON(DIR2_PIN);
} else {
g_lnPulse2Number = -g_lnPulse2Number;
OFF(DIR2_PIN);
}
} else IFARG0("step12") {
sscanf(SDA(1), "%ld", &g_lnPulse1Number);
sscanf(SDA(2), "%2ld", &g_lnPulse2Number);
if(g_lnPulse1Number > 0) {
ON(DIR1_PIN);
} else {
g_lnPulse1Number = -g_lnPulse1Number;
OFF(DIR1_PIN);
}
if(g_lnPulse2Number > 0) {
ON(DIR2_PIN);
} else {
g_lnPulse2Number = -g_lnPulse2Number;
OFF(DIR2_PIN);
}
制作了基于STC8H1K28单片机的双轴机械臂的控制板。并给出的基于ASCII串口命令的调试方式。使用基于WiFi调试模块,可以方便进行远程下载程序和调试参数。
AD设计工程文件:AD\XQWF\2020\机械臂\CNT2AXESSTC8H.SchDoc * ↩︎
C51工程文件:C51\STC\Project\XQWF\2020\STC8H2AXES\STC8H2AXES.uvproj ↩︎