新闻  |   论坛  |   博客  |   在线研讨会
基于JN5121小板子的电机转数测量小系统
0750long | 2009-05-08 18:57:28    阅读:1922   发布文章

基于JN5121小板子的电机转数测量小系统

 

        昨天搞好的一个小系统,今天再改了下程序,在我的相册里面有相关的几张图片,晒晒!

       我原本是在学Jennic,搞到定时\计数器,顺便做的一个小系统,程序很简单。

/****************************************************************************
 *
 * 程序名称:测量电机转速
 * 程序编写:唐爱明
 * 编写日期:20090428
 * 程序备注:直流电机+20孔编码盘
                         通过串口调试助手显示:115200-8-N-1
 ****************************************************************************/

/****************************************************************************/
//头文件
/****************************************************************************/
#include <jendefs.h>
#include <AppHardwareApi.h>//硬件
#include<AppQueueApi.h>//堆栈
#include"..\..\Chip\Common\Include\Printf.h"//串口

/****************************************************************************/
//全局变量
/****************************************************************************/
PRIVATE uint32 number = 0;//声明全局变量并赋初值

/****************************************************************************/
//函数声明
/****************************************************************************/
PRIVATE void vTimerConfig(void);//定时器设置
PRIVATE void vTimer0ISR(uint32 u32DeviceId,uint32 u32ItemBitmap);//定时器0执行函数

/****************************************************************************
//冷启动
 ****************************************************************************/
PUBLIC void AppColdStart(void)
{

    (void)u32AppApiInit(NULL,NULL,NULL,NULL,NULL,NULL);//初始化协议栈
    (void)u32AHI_Init();//初始化外设
    vUART_printInit();//串口初始化
    vTimerConfig();//定时计数器设置
    while(1)
    {}
}

/****************************************************************************
//热启动
 ****************************************************************************/
PUBLIC void AppWarmStart(void)
{
    AppColdStart();
}

/****************************************************************************/
//定时器设置
/****************************************************************************/
PRIVATE void vTimerConfig(void)
{
    //设置定时器0记数
    vAHI_TimerEnable(E_AHI_TIMER_0,//定时器0
                                0x00,
                                FALSE,
                                TRUE,
                                FALSE);
    vAHI_TimerClockSelect(E_AHI_TIMER_0,//定时器0
                                        TRUE,
                                        FALSE);
    vAHI_TimerStartSingleShot(E_AHI_TIMER_0,//定时器0
                                                0x0000,// 空值
                                                0x0064);//首次记录脉冲个数,100个,即5转

    vAHI_Timer0RegisterCallback(vTimer0ISR);//注册定时器0的中断
}

/****************************************************************************/
//定时函数
/****************************************************************************/
PRIVATE void vTimer0ISR(uint32 u32DeviceId,uint32 u32ItemBitmap)
{
    number++;
    vAHI_TickTimerIntPendClr();
    vAHI_TimerStartSingleShot(E_AHI_TIMER_0,//定时器0
                                            0x0000,//空值
                                            0x0014);//记录脉冲个数,记20个脉冲中断1次,即一转一个中断
    vPrintf("电机转数 = %d\n\r",number+5);//显示脉冲个数,实际值应该加上首次的10个脉冲
}

/****************************************************************************/
/***        END OF FILE                                                   ***/
/****************************************************************************/

       

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客