历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-11-06 来源: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;

}


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

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

推荐阅读

史海拾趣

ETL [E-Tech Electronics LTD]公司的发展小趣事

在追求经济效益的同时,ETL也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。此外,ETL还积极参与公益事业,为社会做出了积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了基础。

Broyce Control公司的发展小趣事

近年来,随着数字化技术的快速发展,Broyce Control也面临着新的挑战和机遇。为了适应市场的变化和客户的需求,公司开始进行数字化转型和升级。通过引入先进的生产管理系统和智能制造技术,Broyce Control提高了生产效率和产品质量。同时,公司还加强了与互联网和物联网技术的融合,推出了一系列智能化、网络化的新产品和服务。这些创新举措使得Broyce Control在数字化时代继续保持了强劲的发展势头。

这五个故事虽然基于虚构,但尽量遵循了Broyce Control公司发展的逻辑和可能趋势。它们展示了Broyce Control从创立初期到逐渐发展成为电子行业领导者的过程,以及公司在技术创新、市场扩张和行业影响力提升等方面所做的努力。这些故事旨在展现一个真实而鲜活的Broyce Control形象,同时也为读者提供了关于电子行业发展的有趣视角。

Excel Cell Electronic Co Ltd公司的发展小趣事

品质是ECE公司的生命线。公司始终坚持“品质至上”的原则,从原材料采购到生产流程控制,再到产品检验和售后服务,都严格按照国际标准执行。为了提升品质管理水平,ECE公司引进了先进的品质管理系统,加强了对生产过程的监控和评估。同时,公司还定期对员工进行品质管理培训,提高员工的质量意识和技能水平。这些措施使ECE公司的产品质量得到了显著提升,赢得了客户的广泛赞誉。

成都芯进(CrossChip)公司的发展小趣事

成都芯进电子一直致力于打破国外芯片市场的垄断地位,实现进口替代。他们在电流传感器领域取得了显著成果,产品已经全面进入工控、光伏、储能等领域,并获得了阳光电源、英威腾、欣旺达、安克等客户的认可。这一成就不仅展示了公司的技术实力和市场竞争力,也为国产芯片事业的发展做出了积极贡献。

集创北方(CHIPONE)公司的发展小趣事

近年来,集创北方在电子行业的地位日益稳固。从2019年到2021年,公司的营收实现了飞跃式增长,从14.47亿元增长至56.74亿元,复合增长率高达98%。这一成绩的背后,是公司不断创新、积极应对市场变化的结果。

AnalogicTech公司的发展小趣事

随着技术的不断进步,AnalogicTech始终保持对创新的追求。公司研发团队不断攻克技术难关,推出了一系列具有高性能、高稳定性的产品。其中,公司的LED背光驱动器系列在市场中取得了显著的成功,为公司的快速发展奠定了坚实的基础。

问答坊 | AI 解惑

2009国赛比赛实施过程及比赛守则(官网上下的)

本帖最后由 paulhyde 于 2014-9-15 09:44 编辑  …

查看全部问答>

大家使用lpc2132注意的一点

关于__irq 的使用 __irq为一个标识,用来表示一个函数是否为中断函数。对于不同的编译器,__irq在函数名中的位置不一样,例如: ADS编译器中 : void __irq IRQ_Eint0(void); Keil编译器中 : void IRQ_Eint0(void) __irq; 但是其意义一 ...…

查看全部问答>

再次迷茫了

前些时间一直在搞linux,但是linux这玩意儿真的很烦人啊,所以又去搞win ce,在学api,感觉win ce 入门确实比linux简单很多,但是最近又发现在win ce上做应用的基本上都是 .net,偶尔有mfc的,c语言无用武之地啊。这样就觉得现在学的一点用都没有, ...…

查看全部问答>

请教这个IC是个什么东西

请教一下我手头有个电路板上有个IC,5脚封装,上面两脚下面三脚,特小的封装,上面的字符貌似是CO-60Y又或者是CO-GOY,字太小看不清楚,搜索这两个都找不到相关资料。通过测量得知它的功能大概是这样:电源从3脚输入1脚输出,1脚跟5脚是通路,4脚输 ...…

查看全部问答>

寻大虾合作开发机顶盒

http://topic.eeworld.net/u/20071201/18/a2aaf09f-7fa2-419c-93c1-77b51f9713d8.html?seed=1107526537…

查看全部问答>

iar环境下,uCosII在stm32下的运行机理是怎样的?

编译器的iar EWARM,uCosII 通过初始化下面的向量表,在程序复位时将程序定位到__program_start(void)函数,但该函数是个空函数呀,程序到底是怎么进行到正常状态的呢?请大虾们指点。另外,向量表__vector_table[] 的第一行{ ...…

查看全部问答>

STM32之TFT遇到麻烦了,求高手指教

经由Image2lcd处理后的图片最大只能到119288,显示出来的图片还不到1/3屏,正常是153600。如何处理才能使之显示满屏?…

查看全部问答>

在公司看个书怎么就违法了!!!(吐槽完了,封贴吧)

活不多的时候闲着看个书怎么就不对了? 而且我看的还是《编程匠艺》《uCos 操作系统》…… 怎么这就惹领导不高兴了?虽然工作上分配给我的是硬件,但看个代码就不对了? 就叫软件不软硬件不硬了??? 什么制度,做事就是给领导看,什么领导看到你 ...…

查看全部问答>

EEWORLD大学堂----WEBENCH FPGA Architect功能导览

WEBENCH FPGA Architect功能导览:https://training.eeworld.com.cn/course/165…

查看全部问答>