历史上的今天

今天是:2024年11月06日(星期三)

2019年11月06日 | 单片机全场定位系统程序

发布者:sky0001 来源: 51hei关键字:单片机  全场定位系统  码盘 手机看文章 扫描二维码
随时随地手机看文章

接线说明:
//左编码器
PD3   INT1
PB0   PCINT0

//右编码器
PD2   INT0
PC3   PCINT11


/***********************************************************

*   函数库说明:差分定位数值计算函数库                     *

*   版本:      v1.00beta                                  *

*   作者:      王卓然                                     *

*   创建日期:  2008年3月29日                              *

* -------------------------------------------------------- *

*  [支 持 库]                                              *

*   支持库名称:                                           *

*   需要版本:                                             *

*   支持库说明:                                           *

* -------------------------------------------------------- *

*  [版本更新]                                              *

*   修改:                                                 *

*   修改日期:                                             *

*   版本:                                                 *

* -------------------------------------------------------- *

*  [版本历史]                                              *

* -------------------------------------------------------- *

*  [使用说明]                                              *

***********************************************************/


/********************

* 头 文 件 配 置 区 *

********************/

# include "RD_MacroAndConst.h"

# include "DL_Config.h"

# include "RD_UseDLocate_LIB.h"

# include "PF_Config.h"

# include "Math.h"


/********************

*   系 统 宏 定 义  *

********************/


/*------------------*

*   常 数 宏 定 义  *

*------------------*/


//轮子直径

#ifndef WHEEL_D_L

    #error No define WHEEL_D_L!

#endif

#ifndef WHEEL_D_R

    #error No define WHEEL_D_R!

#endif


//轮间距

#ifndef D_BTW_WHEEL

    #error No define D_BTW_WHEEL

#endif


//每圈线精度

#ifndef N_L

    #error No define N_L

#endif

#ifndef N_R

    #error No define N_R

#endif


//码盘倍频数

#ifndef MULTIPLE

    #error No define MULTIPLE

#endif


//计数器 到 弧长

# define K_L    ((PI * (WHEEL_D_L)) / ((MULTIPLE) * (N_L)))

# define K_R    ((PI * (WHEEL_D_R)) / ((MULTIPLE) * (N_R)))





/*------------------*

*   动 作 宏 定 义  *

*------------------*/


/********************

*  自定义类型声明区 *

********************/


/********************

*  模块结构体定义区 *

********************/


/********************

*   函 数 声 明 区  *

********************/

float Get_Absolute_Angle(void);

float fMod(float fNumberA,float fNumberB);

BOOL PROC_Difference_Locate(void);


/********************

*   模块函数声明区  *

********************/


/********************

*   模块变量声明区  *

********************/


/********************

*   全局变量声明区  *

********************/

float g_fLastAngle = 0.0;

float g_fX = 0.0;

float g_fY = 0.0;


/********************

*  全局变量声引用区 *

********************/

extern BOOL g_bRunFlagB;


/***********************************************************

*   函数说明:获取当前绝对角度函数                         *

*   输入:    无                                           *

*   输出:    角度值                                       *

*   调用函数:无                                           *

***********************************************************/

float Get_Absolute_Angle(void)

{

    return 

        (

            (float)g_lCounterR * (float)K_R 

             - (float)g_lCounterL * (float)K_L

         ) * (1.0 / (float)D_BTW_WHEEL);

}


/***********************************************************

*   函数说明:获取当前相对角度函数                         *

*   输入:    左编码器微分量,右编码器微分量               *

*   输出:    角度值(弧度)                               *

*   调用函数:无                                           *

***********************************************************/

float Get_Relative_Angle(INT32 lDCL,INT32 lDCR)

{

    if (lDCL == lDCR)

    {

        return 0.0;

    }

    

    return 

        (

            (float)lDCR * (float)K_R 

             - (float)lDCL * (float)K_L

         ) * (1.0 / (float)D_BTW_WHEEL);

}




/***********************************************************

*   函数说明:差分定位计算函数                             *

*   输入:    无                                           *

*   输出:    FALSE                                        *

*   调用函数:无                                           *

***********************************************************/

BOOL PROC_Difference_Locate(void)

{

    static INT32 s_lLastCounterL = 0;

    static INT32 s_lLastCounterR = 0;

    

    if ((g_lCounterLImage - s_lLastCounterL)

         == (g_lCounterRImage - s_lLastCounterR))

    {

        INT16 nDeltaCounterL = (INT16)((INT32)g_lCounterLImage - (INT32)s_lLastCounterL);

        float fR = ((float)nDeltaCounterL * (float)K_L);

        

        g_fX += fR * cos(g_fLastAngle);

        g_fY += fR * sin(g_fLastAngle);

    }

    else

    {

        float fDeltaAngle,fAbsoluteAngle;

        //计算角度微元

        {

            float fTempAngle = Get_Relative_Angle

                            (

                                g_lCounterLImage,

                                g_lCounterRImage

                            );

            fDeltaAngle = (fTempAngle - g_fLastAngle);

            fAbsoluteAngle = fDeltaAngle * 0.5 + g_fLastAngle;

    

            g_fLastAngle = fTempAngle;

        }

        //计算位置微元

        {

            INT16 nDeltaCounterL = (INT16)((INT32)g_lCounterLImage - (INT32)s_lLastCounterL);

            float fR = (((float)nDeltaCounterL * (float)K_L) * (1.0 / fDeltaAngle) 

                + (float)D_BTW_WHEEL * 0.5);


            fR = 2.0 * fR * sin(fDeltaAngle * 0.5);             //fR->l

        

            g_fX += fR * cos(fAbsoluteAngle);

            g_fY += fR * sin(fAbsoluteAngle);

        }

    }

    

    //数据更新

    s_lLastCounterL = g_lCounterLImage;

    s_lLastCounterR = g_lCounterRImage;

    g_bRunFlagB = TRUE;

    

    return FALSE;

}


/***********************************************************

*   函数说明:实数求模函数                                 *

[1] [2]
关键字:单片机  全场定位系统  码盘 引用地址:单片机全场定位系统程序

上一篇:ATmega128单片机音节显示仿真与源码
下一篇:单片机控制电力柜用操控状态仪表程序

推荐阅读

在德克萨斯州农工大学读书时, Dakotah、Alexis 和Vince 就已经是美国国家航空航天局(NASA)的团队成员, 负责对此项任务展开相关研究。 Dakotah说:“我一直对太空抱有浓厚的兴趣。你忍不住想知道那里有什么我们所不知道的东西,以及将要发生的事情。而加入这场探索发现之旅会令人激动万分。” 该学生团队及其学院和当地一家太空商业公司合作,为一个...
据外媒报道,半导体制造商罗姆(ROHM)宣布开发了BA8290xYxxx-C-Series系列接地检测比较器。该系列比较器具有出色的抗电磁干扰(抗噪声)性能,适用于汽车系统中的传感器应用,如ECU和动力系统。(图片来源:罗姆官网)计算机化的新进展和大量电子设备的增加,使电动汽车和配备ADAS汽车的噪音不断增加。然而,在开发阶段,难以单独评估电路板和系统的噪音...
  11月5日,上海电气格尔木美满闵行32MW/64MWh储能电站投运仪式在青海省格尔木市举行。作为国内首个投运的商业化运行独立储能电站,该项目成功打通“源网荷储”及“风光水火储”两个一体化通道。   该项目为上海电气与新能源场站业主共同投资收益的“共享”储能新模式,由上海电气电站工程新能源公司总包,上海电气国轩新能源科技有限公司提供磷酸...
10月底,苏州熹联光芯微电子科技有限公司(以下简称“熹联光芯”)正式完成对德国斯科雅有限公司(以下简称:Sicoya)股权并购,成为其100%控股母公司。自2020年8月底签署并购协议,至2021年10月底获得德国政府批准并完成股权交割,历时约14个月。Sicoya成立于2015年1月,是德国一家硅光技术企业。主要业务为研发、制造和销售硅光芯片、光电芯片、光电器件...

史海拾趣

问答坊 | AI 解惑

手机闪光灯为电源管理带来新的需求

照相等功能在手机中的出现和不断深入,对电源管理提出了更严峻的挑战,因为这些新增功能基本上都属于“能量饥渴型”应用。例如,消费者希望照相手机能拍摄更高分辨率的图片,并能在室内或昏暗环境光条件下进行拍摄。这些需求迫使手机设计师开始考虑 ...…

查看全部问答∨

财富500强猎头公司急招以下岗位!

RF 工程师(工作地点 深圳龙岗) 要求:(本科以上学历 3人) 1.精通RF電路設計與分析,熟練掌握天線設計實際經驗及低噪音放大器線路設計,有車廠實際經驗者優先。 2. 熟練使用ADS、MWO、ANSOFT、IE3D等RF仿真軟體(ANSOFT、IE3D必須得懂。 3. 有 ...…

查看全部问答∨

freescale coldfire中文编程参考手册

这是飞思卡尔公司著名的COLDFIRE系列处理器的编程参考手册,coldfire的中文资料不多,这里转过来希望对更多人有用。此参考手册,包括指令集描述 coldfire内核架构 寻址模式等 …

查看全部问答∨

一般电子设计的问题

本帖最后由 paulhyde 于 2014-9-15 09:01 编辑 1.电阻电容的封装形式如何选择,有没有什么原则?比如,同样是104的电容有0603、0805的封装,同样是10uF电容有3216,0805,3528等封装形式,选择哪种封装形式比较合适呢? 2.有时候两个芯片的引脚(如芯片A的 ...…

查看全部问答∨

cximage在WINCE5下出现部署错误

在把cximage600_ce全部编译通过后,运行demo_ce,出现部署错误,具体如下: 1>------ 已启动部署: 项目: zlib, 配置: Debug CE50CHS (ARMV4I) ------ 1>未指定的错误 1> 2>------ 已启动部署: 项目: tiff, 配置: Debug CE50CHS (ARMV4I ...…

查看全部问答∨

USB 摄像头驱动中图像格式除了 NTSC还有别的吗?

我正在学习WINDOWS驱动开发, 看到DDK自带的例子中给了那个虚拟 摄像头驱动用得是NTSC的格式,  想问一下,现在使用的摄像头都是数字的, 还是使用这种图像格式吗? 是不是直接有RGB格式。…

查看全部问答∨

802.1d协议相关问题

请问哪位兄台了解802.1d协议,知道802.1d标签和优先级的。我在网上查802.1d优先级和标签都查不到,不知道这个标签是不是和802.1q标签一样,加在报文的头部。…

查看全部问答∨

通讯开发

通讯开发需要哪些知识和技能。请各位大侠帮帮忙,还是刚入门 呵呵…

查看全部问答∨

嵌入式电池安全信息监控器

求:嵌入式电池安全信息监控器 原理.基于UCLINUX…

查看全部问答∨

请问一下各位前辈,考取IDETCO这个嵌入式技术认证有意义吗?

小弟在嵌入式(ARM)方面初入行,现在主要负责做WinCE方面的底层驱动以及应用程序开发~~想增强一下自己的底子,所以想考取一个嵌入式方面的认证,各位有什么好提议吗?谢谢~~~…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多往期活动

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved