基于STC8H1K28的BH60的角度读写模块

举报
tsinghuazhuoqing 发表于 2021/12/26 00:51:47 2021/12/26
【摘要】 ■ 简介 在博文 BH60绝对位置编码器测试 中介绍了对BH60,通过其MODBUS(485)读取相应绝对角度的方式。为了便于为了进行高精度角度实验,制作基于STC8H1K28的BH60角度读取模块...

■ 简介


在博文 BH60绝对位置编码器测试 中介绍了对BH60,通过其MODBUS(485)读取相应绝对角度的方式。为了便于为了进行高精度角度实验,制作基于STC8H1K28的BH60角度读取模块。并使其可以通过 串口ISPHUB 通过命令统一进行读取。

 

01模块设计


1.实验电路设计1


2.接口定义

除了上面的四芯ISP接口之外,下面的6芯接口定义为:

管脚 1 2 3 4 5 6
功能 VCC GND A+ B- CLEAR INIT

3.单片机软件2

  • 工作OSC:35MHz, UART1:460800bps

▲ 初始化后的电路板

▲ 初始化后的电路板

□ 拷贝BH60文件: 将BH60.H,BH60.C拷贝到当前的工作目录下并添加到工程中去。
□ 修改STC8H文件:增加UART2gsng ; 将UART2的波特率定时器2的时间常数修改为:0xFE38
□ 在BH60中增加对于485的DIR管脚定义与控制: 在BH60中增加DIR_PIN的定义。

#define DIR_PIN                 1, 2

  
 
  • 1

□ 测试BH60读取功能: 读取正常。

□ 增加BH60的一些功能: 增加BH60Clear的功能。通过测试,将清零(红线)线设置为VCC超过100ms,可以将BH60的内部计数清零。

4.单片机接口命令

if(strcmp("hello",                (char *)STD_ARG[0]) == 0)
    printf("%s is ready !\r\n", VERSION_STRING);

else IFARG0("bh60clear") {
    ON(CLEAR_PIN);
    WaitTime(100);
    OFF(CLEAR_PIN);
} else IFARG0("bh60read") {
    printf("%ld\r\n", BH60ReadNumber());
    
} else IFARG0("bh60readb") {
    lnNumber = (unsigned long)BH60ReadNumber();
    SendChar((unsigned char)(lnNumber >> 24));
    SendChar((unsigned char)(lnNumber >> 16));
    SendChar((unsigned char)(lnNumber >> 8));
    SendChar((unsigned char)(lnNumber));
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

 

02测试ISPHUB的读取功能


1.增加相应命令

使用在 ISPHUBALL 中的STC8H1K28的下载板3的STC8H1K28工程文件增加对BH60读取的相关程序。

在ISPHUBALL工程的serialtxt增加了如下的命令。

if(strcmp("hello",                (char *)STD_ARG[0]) == 0)
    printf("%s is ready !\r\n", VERSION_STRING);

else IFARG0("adt") {
    ADT7410ReadT(nDim);
    printf("%5.3f ", nDim[0] / 128.0);
    printf("%5.3f ", nDim[1] / 128.0);
    printf("%5.3f ", nDim[2] / 128.0);
    printf("%5.3f\r\n", nDim[3] / 128.0);
} else IFARG0("readhctl") {
    printf("%d\r\n", HCTL2020Read());
} else IFARG0("bh60read") {
    printf("%ld\r\n", BH60ReadNumber());        
} else IFARG0("bh60clear") {
    BH60Clear();
} else IFARG0("pulse") {
    sscanf(SDA(1), "%d", &nNumber);
    ULC2003Pulse(nNumber);
}

else printf("Error command : %s !\r\n", STD_ARG[0]);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

2.测试实验

使用 STC8K28步进电机OC触发器 模块驱动步进电机带动BH60旋转。设置驱动器的拨码开关处于OFF,OFF,OFF,OFF,即40000步/周。

读取对应的角度:
▲ 在步进电机带动下BH60读取的旋转角度

▲ 在步进电机带动下BH60读取的旋转角度

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2020-07-15
#
# Note:
#============================================================
from headm import *
from tsmodule.tsstm32       import *
stm32cmd('bh60clear')
time.sleep(.5)
angle = []
for i in range(100):
    stm32cmd('pulse 100')
    time.sleep(.1)
    stm32cmd('CLEAR')
    stm32cmd('bh60read')
    time.sleep(.1)
    value = stm32memo(1)[0]
    printf(value)
    angle.append(value)
tspsave('angle', angle=angle)
plt.plot(angle)
plt.xlabel("Steps")
plt.ylabel("Angle")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

 

※ 结论


设计的BH60角度读取模块工作符合前期设计的要求。


  1. 实验模块AD工程文件:AD\Test\2020\Tools\BH60ReadSTC8H1K28.SchDoc ↩︎

  2. 单片机C51工程文件:C51\STC\Test\2020\Tools\BH60ReadSTC8H1K28\BH60ReadSTC8H1K28.uvproj ↩︎

  3. ISPALL单片机STC8H1K28的工程文件:C51\STC\Test\2020\Tools\ISPHUBALLSELSTC8H1K28\ISPHUBALLSELSTC8H1K28.uvproj ↩︎

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/107360742

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。