更多塔克创新资讯欢迎登陆【塔克社区 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/

 

    X-CTR100控制器配套的X-Assistant串口调试助手的控制功能,实现与X-CTR100控制器的交互控制,控制LED灯的亮灭和舵机旋转角度。通过本教程可以学习上位机控制逻辑和串口通信协议相关知识。

    

原理介绍

    X-CTR100控制器配套X-Assistant串口调试助手软件。为方便PC与X-CTR100交互,增加控制功能,实现上下左右四个方向键和两个滑块交互,软件界面如下图所示。

    控制协议如下所示,基于帧编码方式实现,具有帧头、帧校验内容。软件帮助也具有协议内容介绍。

    - 协议内容:0xAA + 0x55 + 帧长度 + 帧编码 + 按键 + 滑块1 + 滑块2 + 校验和

    - 帧长度:固定值 0x08

    - 帧编码:固定值0x11

    - 按键:无按键 - 0x00,上 - 0x01,下 - 0x02,左 - 0x04,右 - 0x08

    - 滑块1:数值范围0~0xFF

    - 滑块2:数值范围0~0xFF

    - 校验和:前面7位数据累加和的低8位

    根据上述帧协议说明,列举帧范例:上按键 - 按下,滑块1 - 80,滑块2 - 80,帧数据"AA 55 11 01 50 50 B9"。帧协议可以通过将X-CTR100控制器的串口收发连接在一起进行测试,测试步骤如下。

    步骤一:将SW-UP调节到OFF侧,X-CTR100处理器无供电。通过杜邦线连接LA(UART1)接口的TX和RX。连接COM到调试电脑,此时CH340G USB转串口芯片通过电脑USB供电。

    

    步骤二:打开X-Assistant软件,并打开对应串口,并设置接收显示为"16进制"。

    步骤三:按下、抬起按钮观察数据变化,按下和抬起对应两个动作。滑动滑块观察帧数据,滑块滑动即可产生连续帧数据,实现实时的滑块位置反应。

    

    X-Assistant的按钮控制可实现类似智能小车前进,后退,左转,右转控制,按钮按下执行相应的动作,按钮抬起小车停止。滑块控制可实现类似舵机控制,滑块滑动到什么位置,舵机指向什么位置,后面会说明通过滑块控制舵机示例。X-Assistant控制功能虽然简单,可以实现基本的机器人和智能小车控制,作品进行功能调试阶段比较方便。

例程设计

    本例程实现X-Assistant软件控制功能对X-CTR100进行控制。上下按钮控制红绿LED灯,"上"按钮控制绿灯,"下"按钮控制红灯,按钮按下灯点亮,按钮抬起灯熄灭。滑块控制2个舵机转动。

    硬件说明

    本例程需要如下硬件资源:

  • 串口UART1
  • 红绿LED灯
  • 扩展接口RA、RB
  • 小功率舵机,如SG90

    两个舵机分别连接在RA、RB两个接口上,使用TIM1的通道1和通道2进行舵机控制,注意舵机接插件正反,参考下图所示。

    

    软件说明

    本例程软件通过串口接收中断实现数据接收,并在中断中完成协议帧解析。中断程序通过flag标志向主程序传递解析结果,并打印接收到的帧数据。主程序根据解析结果,进行相应控制。

    串口中断函数代码如下所示。

中断服务程序

void USART1_IRQHandler(void)     

{

    u8 Res;

    

    if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾)

    {

 

        Res =USART_ReceiveData(USART1);    

        

        if(USART1_RX_CON < 3) //接收帧头 + 长度

        {

            if(USART1_RX_CON == 0)

            {

                if(Res == 0xAA)

                {

                    USART1_RX_CON = 1;            

                }

                else

                {

                    

                }

            }else if(USART1_RX_CON == 1)

            {

                if(Res == 0x55)

                {

                    USART1_RX_CON = 2;            

                }

                else

                {

                    USART1_RX_CON = 0;                        

                }                

            }

            else

            {

                USART1_RX_LEN = ( Res-1 );

                USART1_RX_CON = 3;

                USART1_RX_CHECKSUM = 0xFF + Res;    //0xFF 为 AA 55 校验和

            }

        }

        else //接收数据

        {

            if(USART1_RX_CON < USART1_RX_LEN)

            {

                USART1_RX_BUF[USART1_RX_CON] = Res;

                USART1_RX_CON++;

                USART1_RX_CHECKSUM = USART1_RX_CHECKSUM + Res;                    

            }

            {

                if( Res == USART1_RX_CHECKSUM ) //校验正确

                {    

                    //标记接收完成

                    flag = 1;

                    

                    printf("RX:AA 55 08 %x %x %x %x \r\n", USART1_RX_BUF[3], USART1_RX_BUF[4], USART1_RX_BUF[5], USART1_RX_BUF[6]);

                }    

                else //数据错误

                {

                    printf("AERR\r\n");                    

                }

 

                //接收完成,恢复初始状态

                USART1_RX_CON = 0;

                USART1_RX_LEN = 0;

            }

        }

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

    }

}

    主程序代码如下。

int main(void)

{    

    //X-CTR100初始化

    AX_Init(115200);

    printf("***X-Assistant 控制功能例程***\r\n\r\n");

 

    //舵机AB接口初始化

    AX_SERVO_TIM2_AB_Init();     

    

    //设置UART1接收中断

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2    

    NVIC_Config();

    

    while (1)

    {    

if(flag)

        {

            //上按键控制绿灯,按下亮,抬起灭

            if(USART1_RX_BUF[4] & 0x01)

                AX_LEDG_On();

            else

                AX_LEDG_Off();

            

            //下按键控制红灯,按下亮,抬起灭

            if(USART1_RX_BUF[4] & 0x02)

                AX_LEDR_On();

            else

                AX_LEDR_Off();

            

控制舵机,不连接舵机对程序无影响

            AX_SERVO_TIM2_A_SetAngle(200 + USART1_RX_BUF[5]*5); //舵机A控制

 

控制舵机,不连接舵机对程序无影响

AX_SERVO_TIM2_B_SetAngle(200 + USART1_RX_BUF[6]*5); //舵机B控制

            

            flag = 0;

        }

        

        AX_Delayms(10);

    }

}

    本例程应用X-API函数,关于X-API函数的说明,请参考《X-CTR100开发指南》。

    实现效果

    上下按钮实现LED灯控制,拖动滑块进行舵机控制。解析的控制帧如下图所示。

    

玩转X-CTR100 | X-Assistant串口助手控制功能的更多相关文章

  1. 玩转X-CTR100 | STM32F4 l X-Assistant串口助手控制功能

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      X-CTR100控制器配套的X-Assis ...

  2. 谢欣伦 - OpenDev原创例程 - 串口助手Comm Assist

    前一段时间,一位博友发邮件给我.他跟我讲说没太看懂<化繁为简系列原创教程 - 通信专题 - 串口类CxComm的使用>,请我做一个DEMO工程给他.我抽了一天时间编写并上传了一个DEMO工 ...

  3. python3 Serial 串口助手的接收读取数据

    其实网上已经有许多python语言书写的串口,但大部分都是python2写的,没有找到一个合适的python编写的串口助手,只能自己来写一个串口助手,由于我只需要串口能够接收读取数据就可以了,故而这个 ...

  4. 34.QT-制作串口助手(并动态检测在线串口,附带源码)

    qextserialport-1.2rc库下载链接: http://www.pudn.com/Download/item/id/2298532.html 1.添加源码到工程 将qextserialpo ...

  5. Qt小项目之串口助手控制LED

    Qt小项目之串口助手控制LED 前言 最近刚学了一点Qt开发上位机,尝试着做个小软件练练手.查找了很多资料,做了一个简单的串口助手,可以实现串口基本发送和接收功能,支持中文显示,还可以控制STM32开 ...

  6. 用 PYQT5 和 QT Dseingner 写的串口助手

    最近公司做项目需要写串口助手,于是从网上找教程着手写了一下,基本的功能可以实现了,但是想要一个表盘的功能一直没有找到教程,有些遗憾.大神们会的话给指导指导  谢谢啦 ! 下边有源码的连接,欢迎大家下载 ...

  7. python串口助手

    最近项目中要使用模拟数据源通过向外发送数据,以前都是用C#编写,最近在研究python,所以就用python写了一个串口助手,方便以后的测试. 在电脑上通过虚拟串口助手产生两个虚拟串口,运行编写的串口 ...

  8. 通过编写串口助手工具学习MFC过程--(十一)弹出模态型对话框

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

  9. 通过编写串口助手工具学习MFC过程——(十)UpdateData()用法和编辑框的赋值、取值

    通过编写串口助手工具学习MFC过程 因为以前也做过几次MFC的编程,每次都是项目完成时,MFC基本操作清楚了,但是过好长时间不再接触MFC的项目,再次做MFC的项目时,又要从头开始熟悉.这次通过做一个 ...

随机推荐

  1. Linux环境下一些有用但不常见的命令

    Linux环境下一些有用但不常见的命令 1.获取显卡硬件信息 lspci -vnn | grep VGA -A 12 (若是n卡,则用glxinfo) 2.执行*.sh文件 常见的执行*.sh文件当属 ...

  2. 【maven】maven打包deploy时候报错:Connect to repo.maven.apache.org:443

    使用maven打包报错如下: [ERROR] Plugin org.springframework.boot:spring-boot-maven-plugin:1.5.4.RELEASE or one ...

  3. caffe深度学习网络(.prototxt)在线可视化工具:Netscope Editor

    http://ethereon.github.io/netscope/#/editor 网址:http://ethereon.github.io/netscope/#/editor 将.prototx ...

  4. C# 实现简单的 Heap 堆(二叉堆)

    如题,C#  实现简单的二叉堆的 Push() 和 Pop(), 如有不足欢迎指正. 另外,在C#中使用 Heap 的相似功能可以考虑使用:Priority Queues,SortedDictiona ...

  5. POJ 2506 Tiling(递推+大整数加法)

    http://poj.org/problem?id=2506 题意: 思路:递推.a[i]=a[i-1]+2*a[i-2]. 计算的时候是大整数加法.错了好久,忘记考虑1了...晕倒. #includ ...

  6. UVa 1149 装箱

    https://vjudge.net/problem/UVA-1149 题意:给定N个物品的重量和背包的容量,同时要求每个背包最多装两个物品.求至少需要的背包数. 思路:很简单的贪心.每次将最轻的和最 ...

  7. 非[无]root权限 服务器 下安装perl以及perl模块

    转载自http://www.zilhua.com 在本博客中,所有的软件安装都在服务器上,且无root权限.理论上适合所有的用户. 我的安装目录 cd /home/zilhua/software 1. ...

  8. Linux——系统开关机指令简单学习笔记

    关机: 命令名称:shutdown 命令所在路径:/usr/sbin/shutdown 执行权限:root 语法:shutdown 功能描述:关机 范例:# shutdown -h now 重启: 命 ...

  9. get-post区别

    原文链接:http://www.techweb.com.cn/network/system/2016-10-11/2407736.shtml GET和POST是HTTP请求的两种基本方法,要说它们的区 ...

  10. spring boot打jar包发布

    artifactId 是即将打包的包的名称 version 是即将打包的版本号 packaging 是即将打包的格式,这里讲的是jar包 终端输入命令: mvn clean install 然后在ta ...