本帖最后由 qixiyi 于 2013-11-30 12:40 编辑  
 
滑条电机调速控制系统   一、原理概述  
      电机在各行各业发挥着重要的作用,而电机转速是电机重要的性能指标之一,因而控制电机的转速,使它满足人们的各种需要,显得尤为重要;随着技术的发展,PWM调速已经成为电机调速的成熟方式。 脉宽调制(PWM)是一种对模拟信号电平进行数字编码的方法,它不仅容易由软件来实现,而且从处理器到被控制信号都是数字形式无需数模转化,加上PWM对噪声的抵抗能力强,使得PWM成为目前电机调速的主要方法。  
二、PSOC4系统结构图  
 
 
                                                                          原理图 
 
 
 
                                                                        引脚配置 
 
三、功能介绍及实现步骤  
       本文实现基于PSOC4开发套件+L298模块组成系统对直流电机进行调速,通过串口返回PWM占空比,进而了解电机空载的大致转速。        具体的实现步骤为: 
 
        (1)    打开原理图设计界面,添加PWM模块(TCPWM mode)    双击进入属性配置        禁止中断和所有输入信号,设置period 值为65535, compare 值为1。这将产生一个0%占空比的PWM。点击Apply 或者OK 以保存设置。 
 
       (2)    添加UART模块(SCB mode)       双击进入属性配置         SCB配置为UART标准模式,波特率9600,数据格式8N1。 
 
         (3)    添加PORT引脚(Digital Output Pin) 
 
         (4)    添加Timer模块(v2.50)         双击进入属性配置         本文配置Timer定时周期为1s,每间隔1s都会进入一次中断(发送PWM占空比)。         Resolution(分辨率)参数用于定义定时器的位宽。可根据最大计数值255、65535、16777215和4294967295,分别将此值设置为8、16、24或32。         Period(周期)参数用于定义计数器的周期。定时器组件的最大计数值(或翻转点)等于Period减去1。Period减去1是加载到周期寄存器中的初始值。软件可随时使用Timer_WritePeriod() API更改周期寄存器。要使用此API获取等同的结果,必须将定制器中的周期值减去1用作为此函数中的参数。        Trigger Mode(触发模式)参数用于配置触发输入的实现。        Enable Mode (使能模式)参数用于配置定时器的使能条件。        Run Mode(运行模式)参数用于将定时器组件配置为连续运行模式或单次触发模式。        Interrupt(中断) 参数用于配置初始中断源。当发生以下所选的一个或多个事件时,会生成中断。软件可随时重新配置此模式;此参数用于定义初始配置。 
 
        (5)    添加中断模块(v1.70)   
 
 
      本文选择使用上升沿中断。       InterruptType(中断类型)       该参数具有以下三个可能的值:       RISING_EDGE(上升沿) — 在源信号的上升沿上触发中断。       LEVEL(电平) — 选择通过DSI 以电平敏感类型连接至中断的源。       DERIVED(派生) — 这是默认设置。中断组件连接到固定功能块(I2C、USB、CAN 等)时,它会检查“int_signal”的驱动,然后根据所连接的对象派生出相应的中断类型。此自动分配是根据器件的数据手册中的信息进行的。 
 
       (6)    添加CapSense模块(v1.11)         双击进入属性配置    
 
             
   
 
           
   
        
           
   
     
          
        (7)  在引脚配置界面中,选择对应引脚。  
 
四、程序解析 
 
 int main() {     /* Enable global interrupts */    CyGlobalIntEnable;    isr_StartEx(InterruptHandler);  
    /* Start PWM UART Timer and CapSense components */     UART_1_Start();    Timer_1_Start();    MOTOR_CONTROL_Start();    CapSense_CSD_Start();  
    /* Initialize baselines */     CapSense_CSD_InitializeAllBaselines(); 
    while(1u)     {         /* Update all baselines */        CapSense_CSD_UpdateEnabledBaselines(); 
        /* Startscanning all enabled sensors */      CapSense_CSD_ScanEnabledWidgets(); 
        /* Wait for scanning to complete */        while(CapSense_CSD_IsBusy()!= 0); 
       /* Display CapSense state using LEDs */        CapSense_DisplayState();     } } 
voidCapSense_DisplayState(void) {     /* Find Slider Position */     curPos =CapSense_CSD_GetCentroidPos(CapSense_CSD_LINEARSLIDER0__LS);     
    /* Reset position */     if(curPos == 0xFFFFu)     {         curPos =0u;     } 
    /* Move bargraph */     if (curPos != oldPos)     {         oldPos =curPos;         /* Display Slider bargraph */         if (curPos != 0u)         {            MOTOR_CONTROL_WriteCompare((uint32)curPos << SLIDER_POS_TO_COMPARE_SHIFT);             duty =(((uint32)curPos << SLIDER_POS_TO_COMPARE_SHIFT)*100)/65536;         }             } } 
 
 五、演示效果图         
  
   串口调试助手接收到的信息,PWM的占空比,从而大致了解电机的空载转速。   
 
  
  
  视频请看:
   
 |