打印
[DemoCode下载]

以nuedu nuc240控制伺服馬達

[复制链接]
3081|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
a_ziliu|  楼主 | 2015-1-20 22:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用平台:NUC240 nuedu board+basic01
說明:
选用SG90 伺服马达模块. 分别有红橙棕三种颜色的线, 红线接至5V, 棕线接至地, 橙线为PWM 1的输入.
PWM输入信号周期为20ms(50Hz), 脉冲宽度为1ms 到 2ms. 对应于脉冲宽度, 轴转角为 -45°到+45°, 向左转为正, 向右转为负.

利用板子上面的可變電阻,讀取adc值,去控制馬達轉的角度
專案路徑:\NUC230_240BSP_CMSIS_V3.00.001 - servo motor\SampleCode\NuEdu\Smpl_Basic01_SERVO_MOTOR
NUC230_240BSP_CMSIS_V3.00.001 - servo motor.zip (563.65 KB)
沙发
gaoyang9992006| | 2015-1-20 22:54 | 只看该作者
/**************************************************************************//**
* @file     main.c
* @version  V1.00
* $Revision: 1 $
* $Date: 14/05/21 3:57p $
* @brief    NUC200 Series I2S Controller Sample Code
*
* @note
* Copyright (C) 2011 Nuvoton Technology Corp. All rights reserved.
*
******************************************************************************/
#include <stdio.h>
#include "NUC230_240.h"
#include "NuEdu-Basic01.h"



void Initial_Servo(void)
{  

    /* Set PA12~PA14 multi-function pins for PWMA Channel0~2  */
    SYS->GPA_MFP = SYS_GPA_MFP_PA12_PWM0 ;
    SYS->ALT_MFP1 = SYS_ALT_MFP1_PA12_PWM0 ;
          CLK_EnableModuleClock(PWM01_MODULE);
            /* Select PWM module clock source */
    CLK_SetModuleClock(PWM01_MODULE, CLK_CLKSEL1_PWM01_S_HXT, 0);
            /* Select PWM module clock source */
    CLK_SetModuleClock(PWM01_MODULE, CLK_CLKSEL1_PWM01_S_HXT, 0);
   PWM_ConfigOutputChannel(PWMA, PWM_CH0, 50, 50);
         PWM_EnableOutput(PWMA, 0x01);
          // Start
    PWM_Start(PWMA, 0x01);
}

/*---------------------------------------------------------------------------------------------------------*/
/*  MAIN function                                                                                          */
/*---------------------------------------------------------------------------------------------------------*/
int main (void)
{
unsigned int temp;
        SYS_Init();
//min 2999
//max 5999
//Open ADC Device
        Open_ADC_Knob();
        Initial_Servo();
        while(1)
        {
                        //Get Volume Knob Data
                temp = Get_ADC_Knob();                                        //Volume Range: 0 ~ 4095               
                temp=temp * (3000) / 4096;
                PWMA->CMR0=2999+temp;
                //PWM_ConfigOutputChannel(PWMA, PWM_CH0, 50, temp);               
        }
}

使用特权

评论回复
板凳
gaoyang9992006| | 2015-1-20 22:56 | 只看该作者
这种把所需库函数,和user code 放一起,挺好,不用担心别人没有库。

使用特权

评论回复
地板
mintspring| | 2015-1-20 23:02 | 只看该作者
void Initial_Servo(void)
{  

    /* Set PA12~PA14 multi-function pins for PWMA Channel0~2  */
    SYS->GPA_MFP = SYS_GPA_MFP_PA12_PWM0 ;
    SYS->ALT_MFP1 = SYS_ALT_MFP1_PA12_PWM0 ;
          CLK_EnableModuleClock(PWM01_MODULE);
            /* Select PWM module clock source */
    CLK_SetModuleClock(PWM01_MODULE, CLK_CLKSEL1_PWM01_S_HXT, 0);
            /* Select PWM module clock source */
    CLK_SetModuleClock(PWM01_MODULE, CLK_CLKSEL1_PWM01_S_HXT, 0);
   PWM_ConfigOutputChannel(PWMA, PWM_CH0, 50, 50);
         PWM_EnableOutput(PWMA, 0x01);
          // Start
    PWM_Start(PWMA, 0x01);
}
这初始化代码是自己写?

使用特权

评论回复
5
598330983| | 2015-1-20 23:10 | 只看该作者
               temp=temp * (3000) / 4096;
                PWMA->CMR0=2999+temp;
                //PWM_ConfigOutputChannel(PWMA, PWM_CH0, 50, temp);   
这几句封装到一个函数就看着好多了。

使用特权

评论回复
6
zxf0168| | 2015-1-21 09:54 | 只看该作者
mintspring 发表于 2015-1-20 23:02
void Initial_Servo(void)
{  

maosibushi

使用特权

评论回复
7
mintspring| | 2015-1-22 19:26 | 只看该作者
zxf0168 发表于 2015-1-21 09:54
maosibushi

官方也写的看着有点乱。

使用特权

评论回复
8
gxliu08| | 2015-1-22 20:17 | 只看该作者
这个有参考价值

使用特权

评论回复
9
zxf0168| | 2015-1-23 09:49 | 只看该作者
mintspring 发表于 2015-1-22 19:26
官方也写的看着有点乱。

恩,有点乱

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

295

帖子

6

粉丝